pax_global_header00006660000000000000000000000064145102306070014510gustar00rootroot0000000000000052 comment=d5935ca3b7f3d2f738b0810a49858d17480d6a58 coqprime-8.18/000077500000000000000000000000001451023060700132675ustar00rootroot00000000000000coqprime-8.18/.gitattributes000066400000000000000000000000401451023060700161540ustar00rootroot00000000000000* text=auto *.sh text eol=lf coqprime-8.18/.github/000077500000000000000000000000001451023060700146275ustar00rootroot00000000000000coqprime-8.18/.github/dependabot.yml000066400000000000000000000003741451023060700174630ustar00rootroot00000000000000# Set update schedule for GitHub Actions version: 2 updates: - package-ecosystem: "github-actions" directory: "/" schedule: # Check for updates to GitHub Actions every weekday interval: "daily" labels: - "dependencies" coqprime-8.18/.github/workflows/000077500000000000000000000000001451023060700166645ustar00rootroot00000000000000coqprime-8.18/.github/workflows/build.yml000066400000000000000000000010131451023060700205010ustar00rootroot00000000000000name: CI on: push: pull_request: workflow_dispatch: jobs: build: runs-on: ubuntu-latest strategy: matrix: coq_version: ['8.14', '8.15', '8.16','dev'] ocaml_version: ['default'] fail-fast: false # don't stop jobs if one fails steps: - uses: actions/checkout@v4 - uses: coq-community/docker-coq-action@v1 with: opam_file: 'coq-coqprime.opam' coq_version: ${{ matrix.coq_version }} ocaml_version: ${{ matrix.ocaml_version }} coqprime-8.18/.gitignore000066400000000000000000000005251451023060700152610ustar00rootroot00000000000000*.d *.vo *.vos *.vok *.glob *.aux *.v.timing .coq-native/ .csdp.cache .lia.cache .nia.cache .nlia.cache .nra.cache /Makefile.conf /Makefile.coq.conf /Makefile.coq /.coq-version *~ gencertif/autom4te.cache gencertif/aclocal.m4 gencertif/config.log gencertif/config.status gencertif/configure gencertif/Makefile src/Coqprime/num/Int63Compat.v coqprime-8.18/LICENSE000066400000000000000000000574751451023060700143160ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS coqprime-8.18/Makefile000066400000000000000000000004351451023060700147310ustar00rootroot00000000000000ifeq "$(COQBIN)" "" COQBIN=$(dir $(shell which coqtop))/ endif %: Makefile.coq Makefile.coq: _CoqProject $(COQBIN)coq_makefile -f _CoqProject -o Makefile.coq tests: all @$(MAKE) -C tests -s clean @$(MAKE) -C tests -s all -include Makefile.coq include Makefile.coq.local-late coqprime-8.18/Makefile.coq.local-late000066400000000000000000000050701451023060700175260ustar00rootroot00000000000000# We only want to inlcude this file once; in older versions of Coq it # gets included only in Makefile, while in newer versions it is also # included in Makefile.coq at the bottom ifndef MAKEFILE_COQ_LOCAL_LATE MAKEFILE_COQ_LOCAL_LATE:=yes # The list of files that depend on the version of Coq COMPATIBILITY_FILES := \ src/Coqprime/num/Int63Compat.v \ # # The file holding the version of Coq this project was last built with, locally COQ_VERSION_FILE := .coq-version # The version of Coq this project was last built with, locally COQ_EXTENDED_VERSION_OLD := $(shell cat $(COQ_VERSION_FILE) 2>/dev/null) # Parse the version of Coq # If we only care about supporting newer versions of Coq, we might # want to copy Makefile.coq and use # $(shell $(COQC) --print-version | cut -d " " -f 1) # instead of this $(firstword $(subst ...)) construct COQ_VERSION_PREFIX := The Coq Proof Assistant, version COQ_VERSION := $(firstword $(subst $(COQ_VERSION_PREFIX),,$(shell $(COQBIN)coqc --version 2>/dev/null))) COQ_EXTENDED_VERSION := $(shell (true | $(COQBIN)coqtop 2>/dev/null; $(COQBIN)coqc --version 2>/dev/null)) # Set up EXPECTED_EXT based on supported versions ifneq (,$(filter 8.11%,$(COQ_VERSION))) EXPECTED_EXT:=.v811 else ifneq (,$(filter 8.12%,$(COQ_VERSION))) EXPECTED_EXT:=.v812 else ifneq (,$(filter 8.13%,$(COQ_VERSION))) EXPECTED_EXT:=.v813 else ifneq (,$(filter 8.14%,$(COQ_VERSION))) EXPECTED_EXT:=.v814 else ifneq (,$(filter 8.15%,$(COQ_VERSION))) EXPECTED_EXT:=.v815 else EXPECTED_EXT:=.v816 endif endif endif endif endif # For ease of changing versions of Coq, invalidate the various build # outputs when the version of Coq changes .merlin: $(COQ_VERSION_FILE) $(VOFILES) $(CMOFILES) $(CMXFILES) $(OFILES) $(CMAFILES) $(CMIFILES) $(CMXSFILES): $(COQ_VERSION_FILE) # Copy the compatibility files when either the version changes or the # underlying contents changes $(COMPATIBILITY_FILES) : % : %$(EXPECTED_EXT) $(COQ_VERSION_FILE) $(SHOW)'CP $@{$(EXPECTED_EXT),}' $(HIDE)cp $< $@ # ensure that the compat files exist before we call coqdep $(ALLDFILES): $(COMPATIBILITY_FILES) $(COQ_VERSION_FILE) _CoqProject # The version file is generated and should be removed by clean clean:: rm -f $(COQ_VERSION_FILE) # If the version of Coq does not match the version the project was # last built with locally (or the version file does not exist), then # we record the version info ifneq ($(COQ_EXTENDED_VERSION),$(COQ_EXTENDED_VERSION_OLD)) $(COQ_VERSION_FILE): $(SHOW)'echo $$COQ_VERSION_INFO ($(COQ_VERSION)) > $@' $(HIDE)echo "$(COQ_EXTENDED_VERSION)" > $@ .PHONY: $(COQ_VERSION_FILE) endif endif coqprime-8.18/README.md000066400000000000000000000157661451023060700145650ustar00rootroot00000000000000[![Build Status](https://github.com/thery/coqprime/actions/workflows/build.yml/badge.svg?branch=master)](https://github.com/thery/coqprime/actions/workflows/build.yml) # coqprime CoqPrime is a library built on top of the Coq proof system to certify primality using Pocklington certificate and Elliptic Curve Certificate. It is a nice illustration of what we can do with safe computation inside a prover. The library consists of 4 main parts: * A library of facts from number theory: the goal was to prove the theorems relative to Pocklington certificate. The library includes some very nice theorems like Lagrange theorem, Euler-Fermat theorem. A note about some of the primality tests is available [here](https://hal.inria.fr/hal-03601611) * A library for elliptic curves * An efficient library to perform modular arithmetic: using the standard representation of integers in Coq was not sufficient to tackle large prime numbers so we have developed our own modular arithmetic based on tree-like structures. The library includes comparison, successor, predecessor, complement, addition, subtraction, multiplication, square, division, square root, gcd, power and modulo. * A C program ```pocklington``` that generates Pocklington certificates (this program is based on [ECM](https://gitlab.inria.fr/zimmerma/ecm)). An ocaml program ```o2v``` that turns a certificate generated by [primo](https://www.ellipsa.eu) into Coq files. These programs are in [gencertif](./gencertif). Here are the benchmarks for some Mersenne numbers | # | n | digits | years | discoverer | checking time | | ---:| ------:| -------:| ------:| ----------------------------:| --------------:| | 17 | 2281 | 687 | 1952 | Robinson | < 1s | | 18 | 3217 | 969 | 1957 | Riesel | < 1s | | 19 | 4253 | 1281 | 1961 | Hurwitz | 2s | | 20 | 4423 | 1332 | 1961 | Hurwitz | 2s | | 21 | 9689 | 2917 | 1963 | Gillies | 10s | | 22 | 9941 | 2993 | 1963 | Gillies | 10s | | 23 | 11213 | 3376 | 1963 | Gillies | 13s | | 24 | 19937 | 6002 | 1971 | Tuckerman | 1m00s | | 25 | 21701 | 6533 | 1978 | Noll & Nickel | 1m20s | | 26 | 23209 | 6987 | 1979 | Noll & Nickel | 1m30s | | 27 | 44497 | 13395 | 1979 | Nelson & Slowinski | 8m00s | | 28 | 86243 | 25962 | 1982 | David Slowinski | 45m20s | | 29 | 110503 | 33265 | 1988 | Walter Colquitt & Luke Welsh | 1h22m20s | | 30 | 132049 | 39751 | 1983 | David Slowinski | 2h11m43s | | 31 | 216091 | 65050 | 1985 | David Slowinski | 8h27m25s | If you have a number you really want to be sure that it is prime :smile: what should you do? If your number has less than 100 decimal digits: - Download and compile the library - Generate the certificate for your prime number. For example for 1234567891, the command ```pocklington 1234567891``` generates the file ``` From Coqprime Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma myPrime : prime 1234567891. Proof. apply (Pocklington_refl (Pock_certif 1234567891 2 ((3607, 1)::(2,1)::nil) 12426) ((Proof_certif 3607 prime3607) :: (Proof_certif 2 prime2) :: nil)). native_cast_no_check (refl_equal true). Qed. ```` If your number has more than 100 decimal digits - Download and compile the library - Configure ```primo``` to generate Coq-friendly certificates : - Set the flag ```Elliptic curve tests only```in the ```SetUp``` tab. - Add in the configuration file ```primo.ini``` (this file is generated after the first invocation of primo), the lines ``` [Undocumented] SHB=FALSE LTM=32 ``` - Use ```primo``` to generate a cerficiate file.out. Here is a certificate for 1234567890123456789012353. ``` PRIMO - Primality Certificate] Version=4.3.1 - LX64 WebSite=http://www.ellipsa.eu/ Format=4 ID=B40A002B26D66 Created=Jan-16-2020 12:34:07 PM TestCount=3 Status=Candidate certified prime [Comments] Certificate for 1234567890123456789012353 [Running Times (Wall-Clock)] 1stPhase=0.06s 2ndPhase=0.02s Total=0.08s [Running Times (Processes)] 1stPhase=0.06s 2ndPhase=0.02s Total=0.08s [Candidate] File=/home/thery/soft/newprimo/work/nn.in N=$1056E0F36A6443DE2DF81 HexadecimalSize=21 DecimalSize=25 BinarySize=81 [1] S=$14 W=$1675F8F1ACE A=$2 B=0 T=$3 [2] S=$96C7B0CC0 W=$6CFE1D714A A=0 B=$7 T=$1 [3] S=$60FD0 W=$225406 A=0 B=$2 T=$1 [Signature] 1=$0326D77C06A10B7170DAB6DAEC0D12B7F744F88BBC7F34D5 2=$773B9CD197CA741F91B93381877FBF23E7CDCF49BFE7EF5C ``` - Use the command ```o2v``` to generate the file ```file.v```. The file for 1234567890123456789012353 is the following. ``` From Coqprime Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma my_prime0: prime 61728394506095664626953-> prime 1234567890123456789012353. Proof. intro H. apply (Pocklington_refl (Ell_certif 1234567890123456789012353 20 ((61728394506095664626953,1)::nil) 2178 0 99 1089) ((Proof_certif _ H) :: nil)). native_cast_no_check (refl_equal true). Time Qed. Lemma my_prime1: prime 1525110266389-> prime 61728394506095664626953. Proof. intro H. apply (Pocklington_refl (Ell_certif 61728394506095664626953 40474709184 ((1525110266389,1)::nil) 0 3584 8 64) ((Proof_certif _ H) :: nil)). native_cast_no_check (refl_equal true). Time Qed. Lemma my_prime2: prime 3839029-> prime 1525110266389. Proof. intro H. apply (Pocklington_refl (Ell_certif 1525110266389 397264 ((3839029,1)::nil) 0 54 3 9) ((Proof_certif _ H) :: nil)). native_cast_no_check (refl_equal true). Time Qed. Lemma my_prime3 : prime 3839029. Proof. apply (Pocklington_refl (Pock_certif 3839029 2 ((319919, 1)::(2,2)::nil) 1) ((Pock_certif 319919 13 ((103, 1)::(2,1)::nil) 316) :: (Proof_certif 103 prime103) :: (Proof_certif 2 prime2) :: nil)). native_cast_no_check (refl_equal true). Qed. Lemma my_prime: prime 1234567890123456789012353. Proof. exact (my_prime0 (my_prime1 (my_prime2 my_prime3))). Qed. ``` - Compile the file with coqc Proving the primality of a number of about 1200 decimal digits takes about 9 hours but can be easy parallelized using the ```-split``` command of ```o2v``` (for example, it takes 15m on a 20-core machime). If you are too lazy to install the Coq system, or have no spare cpu-time, you can put your prime number in an issue, we will do the job for you. ## How to install it You can download the source and use `make`. There is also some `opam` packages : `coq-coqprime` for the library and `coq-coqprime-generator` for the certificate generator `pocklington` coqprime-8.18/_CoqProject000066400000000000000000000024301451023060700154210ustar00rootroot00000000000000-R src/Coqprime Coqprime src/Coqprime/Tactic/Tactic.v src/Coqprime/N/NatAux.v src/Coqprime/N/ChineseRem.v src/Coqprime/List/Iterator.v src/Coqprime/List/ListAux.v src/Coqprime/List/Permutation.v src/Coqprime/List/UList.v src/Coqprime/List/ZProgression.v src/Coqprime/Z/Pmod.v src/Coqprime/Z/ZCAux.v src/Coqprime/Z/Zmod.v src/Coqprime/Z/Ppow.v src/Coqprime/Z/ZCmisc.v src/Coqprime/Z/ZSum.v src/Coqprime/PrimalityTest/Cyclic.v src/Coqprime/PrimalityTest/EGroup.v src/Coqprime/PrimalityTest/Euler.v src/Coqprime/PrimalityTest/FGroup.v src/Coqprime/PrimalityTest/IGroup.v src/Coqprime/PrimalityTest/Lagrange.v src/Coqprime/PrimalityTest/LucasLehmer.v src/Coqprime/PrimalityTest/Pepin.v src/Coqprime/PrimalityTest/PGroup.v src/Coqprime/PrimalityTest/PocklingtonCertificat.v src/Coqprime/PrimalityTest/Pocklington.v src/Coqprime/PrimalityTest/Proth.v src/Coqprime/PrimalityTest/Root.v src/Coqprime/PrimalityTest/Zp.v src/Coqprime/elliptic/GZnZ.v src/Coqprime/elliptic/SMain.v src/Coqprime/elliptic/ZEll.v src/Coqprime/num/Bits.v src/Coqprime/num/Int63Compat.v src/Coqprime/num/Lucas.v src/Coqprime/num/NEll.v src/Coqprime/num/MEll.v src/Coqprime/num/Mod_op.v src/Coqprime/num/Pock.v src/Coqprime/num/montgomery.v src/Coqprime/num/W.v src/Coqprime/examples/BasePrimes.v src/Coqprime/examples/PocklingtonRefl.v coqprime-8.18/coq-coqprime.opam000066400000000000000000000006621451023060700165500ustar00rootroot00000000000000opam-version: "2.0" maintainer: "thery@sophia.inria.fr" homepage: "https://github.com/thery/coqprime" bug-reports: "https://github.com/thery/coqprime/issues" dev-repo: "git+https://github.com/thery/coqprime.git" license: "LGPL-2.1-only" authors: ["Laurent Théry"] build: [ [make "-j%{jobs}%"] ] install: [ [make "install"] ] depends: [ "ocaml" "coq" {>= "8.14~"} "coq-bignums" ] synopsis: "Certifying prime numbers in Coq" coqprime-8.18/coqprime-generator.opam000066400000000000000000000032271451023060700177540ustar00rootroot00000000000000opam-version: "2.0" maintainer: "thery@sophia.inria.fr" homepage: "https://github.com/thery/coqprime" bug-reports: "https://github.com/thery/coqprime/issues" dev-repo: "git+https://github.com/thery/coqprime.git" license: "LGPL-2.1-only" authors: ["Laurent Théry"] build: [ # cd to a subfolder in opam is tricky, so just move gencertif to the root folder [ "find" "gencertif" "-type" "f" "-exec" "mv" "{}" "." ";" ] [ "autoreconf" "-i" "-s" ] [ "./configure" "--prefix" prefix # Optiosn for finding opam local gmp-ecm "CPPFLAGS=-I%{prefix}%/include" "LDFLAGS=-L%{lib}%" # Options for homebrew on Intel silicon (overwriting the above) "CPPFLAGS=-I%{prefix}%/include -I/opt/local/include" { os-distribution = "macports" & os = "macos" } "LDFLAGS=-L%{lib}% -L/opt/local/lib" { os-distribution = "macports" & os = "macos" } # Options for homebrew on Apple silicon (overwriting the above) "CPPFLAGS=-I%{prefix}%/include -I/opt/homebrew/include" { os-distribution = "homebrew" & os = "macos" & arch = "arm64"} "LDFLAGS=-L%{lib}% -L/opt/homebrew/lib" { os-distribution = "homebrew" & os = "macos" & arch = "arm64"} # Options for Windows cygwin "--build=%{arch}%-pc-cygwin" { os = "win32" & os-distribution = "cygwinports" } "--host=%{arch}%-w64-mingw32" { os = "win32" & os-distribution = "cygwinports" } "--target=%{arch}%-w64-mingw32" { os = "win32" & os-distribution = "cygwinports" } ] [ make "-j" "%{jobs}%" ] ] install: [ [make "install"] ] depends: [ "ocaml" "num" "conf-gmp" "gmp-ecm" ] synopsis: "Certificate generator for prime numbers in Coq" url { src: "git+https://github.com/thery/coqprime.git#master" } coqprime-8.18/gencertif/000077500000000000000000000000001451023060700152355ustar00rootroot00000000000000coqprime-8.18/gencertif/Makefile.in000066400000000000000000000012601451023060700173010ustar00rootroot00000000000000CFIRSTPRIMES=certif.c factorize.c firstprimes.c OFIRSTPRIMES=$(CFIRSTPRIMES:.c=.o) CPOCK=certif.c factorize.c pocklington.c OPOCK=$(CPOCK:.c=.o) prefix=@prefix@ exec_prefix=@exec_prefix@ all: pock first o2v pock: $(OPOCK) @CC@ @CPPFLAGS@ @LDFLAGS@ @CFLAGS@ -o pocklington $(OPOCK) @LIBS@ first: $(OFIRSTPRIMES) @CC@ @CPPFLAGS@ @LDFLAGS@ @CFLAGS@ -o firstprimes $(OFIRSTPRIMES) @LIBS@ clean: rm -f *~ *.o *.cmo *.cmi pocklington firstprimes o2v .SUFFIXES: .c .o .c.o: @CC@ @CPPFLAGS@ @CFLAGS@ -I$(GMPDIR) -I$(ECMDIR) -Wall -pedantic -c $< o2v: parser.ml ocamlc -o o2v nums.cma str.cma parser.ml install: pocklington firstprimes o2v cp pocklington firstprimes o2v @bindir@ coqprime-8.18/gencertif/README.md000066400000000000000000000046201451023060700165160ustar00rootroot00000000000000 # pocklington command `pocklington [-v] [-o file] numspec` options are: - `-v` : verbose mode - `-o file` : set the output in file "file" - `numspec`: * directly a prime number. * `-next num`: generate certificate for the next prime number following `num`. * `-size s` : generate certificate for a prime number with a least `s` digits (in base 10). * `-proth k n` : generate certificate for the Proth number : k*2^n + 1. * `-lucas n` : generate certificate for the Mersenne number 2^n - 1 using Lucas test (more efficient). * `-mersenne n` : generate certificate for the Mersenne number 2^n - 1 using Pocklington, * `-dec file` : generate certificate for the number given in file, the file should also contain a partial factorization of the predecessor. An example of such file for the prime 7237005577332262213973186563042994240857116359379907606001950938285454250989 is the following. Its factors are 2 × 2 × 3 × 11 × 198211423230930754013084525763697 × 276602624281642239937218680557139826668747. In the `dec` file you need to give a big enough partial decomposition containing all the 2. For example the following one line is enough ``` 7237005577332262213973186563042994240857116359379907606001950938285454250989276602624281642239937218680557139826668747 2 2 ``` # o2v command `o2v [-split] [-n name] [-o file] file.out` options are: - `-split` : generate one file per certificate - `-o file` : set the output in file "file" - `-n name` : set the name of the final theorem "name" # BUILD / INSTALL : The certificate generator is included in Coq Platform, which also contains opam files for the certificate generator and its dependencies. So installing Coq Platform might be the easiest way to install this. Otherwise please install dependencies: ``` gmp (version 6.2.1 or later) gmp-ecm (version 7.0 or later) ``` Please note that the gmp-ecm package provided by MacPorts is too old. After installing the dependencies, these commands should work: ``` cd gencertif autoreconf -i -s ./configure --prefix CPPFLAGS=-I% LDFLAGS=-L make -j 4 make install ``` The `CPPFLAGS` and `LDFLAGS` options to configure are only required if the headers/library for gmp and gmp-ecm are not in the default system include / library path. This is e.g. the case for macOS MacPorts. coqprime-8.18/gencertif/certif.c000066400000000000000000000337011451023060700166610ustar00rootroot00000000000000/* (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) */ #include #include #include #include #include "gmp.h" #include "certif.h" #define ALLOCSIZE 20 int flag_verbose = 0; void my_set_verbose () { flag_verbose = 1; } pock_certif_t pock_init (mpz_t N) { pock_certif_t res; res = (pock_certif_t)malloc(sizeof(__pock_struct)); res->_N = malloc(sizeof(mpz_t)); mpz_init_set (res->_N, N); res->_F1 = malloc(sizeof(mpz_t)); mpz_init_set_ui (res->_F1, 1); res->_R1 = malloc(sizeof(mpz_t)); mpz_init_set (res->_R1, N); mpz_sub_ui (res->_R1, res->_R1, 1); res->_sqrt = malloc(sizeof(mpz_t)); mpz_init_set_ui (res->_sqrt, 1); res->_a = 0; res->_pow2 = 0; res->_allocated = ALLOCSIZE; res->_used = 0; res->_dec = (mpz_ptr *)malloc(sizeof(mpz_ptr) * ALLOCSIZE); return res; } void realloc_dec (pock_certif_t c) { mpz_ptr *ndec; mpz_ptr *odec; int i, alloc,used; used = c->_used; alloc = 2 * c->_allocated; odec = c->_dec; ndec = (mpz_ptr *)malloc(sizeof(mpz_ptr) * alloc); for(i=0; i_allocated = alloc; c->_dec = ndec; return; } void dec_add_ui (pock_certif_t c, unsigned long int ui) { mpz_ptr mpz_ui; int i,j, used; mpz_ptr * p; if (ui == 2) { c->_pow2 ++; mpz_mul_ui(c->_F1, c->_F1, 2); mpz_tdiv_q_ui(c->_R1, c->_R1, 2); return; } used = c->_used; /* realloc if necessary */ if (c->_allocated <= used) realloc_dec(c); /* Add ui in the dec, smaller elements first */ p = c->_dec; i = 0; while( (i < used) && (mpz_cmp_ui (p[i], ui) <= 0)) i++; for(j = used - 1; i <= j; j --) p[j+1]=p[j]; mpz_ui = malloc(sizeof(mpz_t)); mpz_init_set_ui(mpz_ui, ui); p[i] = mpz_ui; c->_used = used+1; /* Update the value of F1 and R1 */ mpz_mul_ui(c->_F1, c->_F1, ui); mpz_tdiv_q_ui(c->_R1, c->_R1, ui); return; } void dec_add_mpz (pock_certif_t c, mpz_t n) { mpz_ptr new_n; int i,j, used; mpz_ptr * p; if (mpz_cmp_ui(n, 2) == 0) { c->_pow2 ++; mpz_mul_ui(c->_F1, c->_F1, 2); mpz_tdiv_q_ui(c->_R1, c->_R1, 2); return; } used = c->_used; /* realloc if necessary */ if (c->_allocated <= used) realloc_dec(c); /* Add n in the dec, smaller elements first */ p = c->_dec; i = 0; while( (i < used) && (mpz_cmp (p[i], n) <= 0)) i++; for(j = used - 1; i <= j; j --) p[j+1]=p[j]; new_n = malloc(sizeof(mpz_t)); mpz_init_set(new_n, n); p[i] = new_n; c->_used = used+1; /* Update the value of F1 and R1 */ mpz_mul(c->_F1, c->_F1, n); mpz_tdiv_q(c->_R1, c->_R1, n); return; } int check_mpz(mpz_t N, mpz_t F1, mpz_t R1) { mpz_t r,sum; int res; mpz_init (r); mpz_init_set (sum, F1); /* sum = F1 */ mpz_mul_ui (sum, sum, 2); /* sum = 2 * F1 */ mpz_mod (r, R1, sum); /* r = R1 mod (2 * F1) */ mpz_add (sum, sum, r); /* sum = 2*F1 + r */ mpz_add_ui (sum, sum, 1); /* sum = 2*F1 + r + 1 */ mpz_mul (sum, sum, F1); /* sum = 2*F1^2 + (r+1)*F1 */ mpz_add (sum, sum, r); /* sum = 2*F1^2 + (r+1)*F1 + r */ mpz_mul (sum, sum, F1); /* sum = 2*F1^3 + (r+1)*F1^2 + r*F1 */ mpz_add_ui (sum, sum, 1); /* sum = 2*F1^3 + (r+1)*F1^2 + r*F1 + 1 */ /* = (F1+1)(2F1^2+(r-1)F1 + 1 */ res = mpz_cmp (N, sum) <= 0; mpz_clear(r); mpz_clear(sum); return res; } int check_pock (pock_certif_t c) { return (check_mpz (c->_N, c->_F1, c->_R1)); } void simplify_certif(pock_certif_t c) { mpz_t N, F1, R1, pi; int used, i, j; mpz_ptr * ptr; mpz_init(pi); mpz_init_set(N,c->_N); mpz_init_set(F1,c->_F1); mpz_init_set(R1,c->_R1); used = c->_used; i = used - 1; ptr = c->_dec; while (i >= 0){ mpz_set (pi, ptr[i]); mpz_tdiv_q (F1, F1, pi); mpz_mul (R1, R1, pi); if (check_mpz (N, F1, R1)) { mpz_set(c->_F1, F1); mpz_set(c->_R1, R1); for(j = i + 1; j < used ; j++) ptr[j-1] = ptr[j]; used--; c->_used = used; } else { mpz_set (F1, c->_F1); mpz_set (R1, c->_R1); while(i > 0 && (mpz_cmp(ptr[i-1], ptr[i]) == 0)) i--; } i--; } mpz_clear (N); mpz_clear (F1); mpz_clear (R1); return; } void simplify_small_certif(pock_certif_t c) { mpz_t N, F1, R1, pi; int used, j; mpz_ptr * ptr; mpz_init(pi); mpz_init_set(N,c->_N); mpz_init_set(F1,c->_F1); mpz_init_set(R1,c->_R1); used = c->_used; ptr = c->_dec; while (0 _F1, F1); mpz_set(c->_R1, R1); for(j = 1; j < used ; j++) ptr[j-1] = ptr[j]; used--; c->_used = used; } else break; } mpz_clear (N); mpz_clear (F1); mpz_clear (R1); simplify_certif(c); return; } int is_witness(unsigned long int a, pock_certif_t c) { int i, size, res; mpz_t N, N1, exp, aux, mpza; mpz_ptr * ptr; /* if (flag_verbose) printf("is witness a = %lu ",a); */ mpz_init(exp); mpz_init(aux); mpz_init (N1); mpz_init_set (N, c->_N); mpz_init_set_ui (mpza, a); mpz_sub_ui (N1, N, 1); mpz_powm (aux, mpza, N1, N); if (mpz_cmp_ui (aux, 1) != 0) { mpz_clear(exp); mpz_clear(aux); mpz_clear(N); mpz_clear(N1); mpz_clear(mpza); return 0; } ptr = c->_dec; size = c->_used; res = 1; if (c->_pow2 > 0) { mpz_tdiv_q_ui(exp, N1, 2); mpz_powm (aux, mpza, exp, N); mpz_sub_ui(aux, aux, 1); mpz_gcd (aux, aux, N); if (mpz_cmp_ui(aux, 1) != 0) res = 0; } i = 0; while (i < size && res) { if (flag_verbose) { mpz_out_str (stdout, 10,ptr[i]); printf(" "); } mpz_tdiv_q(exp, N1, ptr[i]); mpz_powm (aux, mpza, exp, N); mpz_sub_ui(aux, aux, 1); mpz_gcd (aux, aux, N); if (mpz_cmp_ui(aux, 1) != 0) res = 0; while ((i < size - 1) && (mpz_cmp (ptr[i], ptr[i+1]) == 0)) i++; i++; } mpz_clear(exp); mpz_clear(aux); mpz_clear(N); mpz_clear(N1); mpz_clear(mpza); if (flag_verbose) printf("\n"); return res; } void set_witness(pock_certif_t c) { unsigned long int a = 2; while (!is_witness(a,c)) a++; c->_a = a; return; } void set_sqrt(pock_certif_t c) { mpz_t s; mpz_t r; mpz_t aux; mpz_init (s); mpz_init (r); mpz_init_set (aux, c->_F1); mpz_mul_ui(aux, aux, 2); mpz_tdiv_qr (s, r, c->_R1, aux); if (mpz_cmp_ui (s, 0) != 0) { mpz_mul(r, r, r); mpz_mul_ui(s, s, 8); mpz_sub(aux, r, s); if (mpz_cmp_ui (aux, 0) > 0) mpz_sqrt(c->_sqrt, aux); } mpz_clear (s); mpz_clear (r); mpz_clear (aux); return; } void finalize_pock(pock_certif_t c) { simplify_certif(c); set_witness(c); set_sqrt(c); return; } /**********************************************/ /* Pre certificate */ /**********************************************/ char* mk_name(mpz_t t) { char *str; char *res; int size; size = mpz_sizeinbase (t, 10) + 2; res = (char *) malloc (size + 7); strcpy(res, "prime"); str = (char *) malloc (size); str = mpz_get_str (str, 10, t); strcat(res, str); free (str); return res; } pre_certif_t mk_proof_certif(mpz_t N) { proof_certif_t proof; pre_certif_t pre; proof = (proof_certif_t)malloc(sizeof(__proof_struct)); proof->_N = malloc(sizeof(mpz_t)); mpz_init_set (proof->_N, N); proof->_lemma = (char *)mk_name(N); pre = (pre_certif_t)malloc(sizeof(__pre_struct)); pre->_kind = 0; pre->_certif._proof = proof; return pre; } pre_certif_t mk_lucas_certif(mpz_t N, unsigned long int n) { lucas_certif_t lucas; pre_certif_t pre; lucas = (lucas_certif_t)malloc(sizeof(__lucas_struct)); lucas->_N = malloc(sizeof(mpz_t)); mpz_init_set (lucas->_N, N); lucas->_n = n; pre = (pre_certif_t)malloc(sizeof(__pre_struct)); pre->_kind = 2; pre->_certif._lucas = lucas; return pre; } pre_certif_t mk_pock_certif(pock_certif_t c) { pre_certif_t pre; pre = (pre_certif_t)malloc(sizeof(__pre_struct)); pre->_kind = 1; pre->_certif._pock = c; return pre; } mpz_ptr get_N (pre_certif_t pre) { switch (pre->_kind) { case 0 : return (pre->_certif._proof->_N); case 1 : return (pre->_certif._pock->_N); case 2 : return (pre->_certif._lucas->_N); default : exit (1); } } /**********************************************/ /* Certificate */ /**********************************************/ certif_t init_certif() { certif_t res; res = malloc(sizeof(__certif_struct)); res->_allocated = ALLOCSIZE; res->_used = 0; res->_list = (pre_certif_t *)malloc(sizeof(pre_certif_t)*ALLOCSIZE); return res; } void realloc_list(certif_t lc) { int i, size; pre_certif_t * nlist, * olist; size = lc->_allocated; olist = lc->_list; nlist = (pre_certif_t *)malloc(sizeof(pre_certif_t)*2*size); for(i = 0; i < size; i++) nlist[i] = olist[i]; lc->_allocated = 2*size; lc->_list = nlist; return; } int _2_is_in (certif_t lc) { if (lc->_used == 0) return 0; return (mpz_cmp_ui(get_N(lc->_list[0]), 2) == 0); } int is_in (mpz_t t, certif_t lc) { pre_certif_t * ptr; int i, test; ptr = lc->_list; for(i = lc->_used - 1; i >= 0; i--) { test = mpz_cmp(t, get_N(ptr[i])); if (test == 0) return 1; if (test > 0) break; } return 0; } void add_pre(pre_certif_t pre, certif_t lc) { int i, j, used; mpz_ptr N; pre_certif_t * ptr; if (lc->_used == lc->_allocated) realloc_list(lc); i = 0; ptr = lc->_list; N = get_N(pre); used = lc->_used; while(i < used && mpz_cmp(get_N(ptr[i]), N) <= 0 ) i++; for (j = used-1;j >= i; j--) ptr[j+1] = ptr[j]; ptr[i] = pre; lc->_used = used + 1; return; } /**********************************************/ /* I/O on file */ /**********************************************/ void print_pock_certif(FILE *out, pock_certif_t c) { int i, pow, size; mpz_ptr *p; mpz_t last; size = c->_used; p = c->_dec; fprintf(out, "(Pock_certif "); mpz_out_str (out, 10, c->_N); fprintf(out, " %lu ", c->_a); fprintf(out, "("); if (size > 0) { mpz_init_set(last,p[size-1]); pow = 1; for(i = size - 2; i >= 0; i--) { if (mpz_cmp(last,p[i]) == 0) pow++; else { fprintf(out,"("); mpz_out_str (out, 10, last); fprintf(out,", %i)::", pow); mpz_set(last,p[i]); pow = 1; } } fprintf(out,"("); mpz_out_str (out, 10, last); fprintf(out,", %i)::", pow); } fprintf(out,"(2,%i)::nil) ", c->_pow2); mpz_out_str (out, 10, c->_sqrt); fprintf(out,")"); } void print_pre_certif(FILE *out, pre_certif_t pre) { mpz_ptr N; N = get_N(pre); switch (pre->_kind) { case 0 : fprintf(out, "(Proof_certif ");mpz_out_str (out, 10, N); fprintf(out, " %s)", pre->_certif._proof->_lemma); break; case 1: print_pock_certif(out, pre->_certif._pock); break; case 2: fprintf(out, "(Lucas_certif ");mpz_out_str (out, 10, N); fprintf(out, " %lu)", pre->_certif._lucas->_n); default : break; } return; } void print_lc(FILE *out, certif_t lc) { int i,size; pre_certif_t *p; size = lc->_used; p = lc->_list; fprintf(out, " ("); for(i=size-1; i >= 0; i--) { print_pre_certif(out, p[i]); fprintf(out, " ::\n "); } fprintf(out, " nil)"); } void print_lemma(FILE *out, char *name, pre_certif_t p, certif_t lc) { fprintf(out, "Lemma %s", name); fprintf(out, " : prime ");mpz_out_str (out, 10, get_N(p)); fprintf(out, ".\n"); fprintf(out, "Proof.\n"); fprintf(out, " apply (Pocklington_refl\n "); print_pre_certif(out, p); fprintf(out, "\n "); print_lc(out, lc); fprintf(out, ").\n"); fprintf(out," native_cast_no_check (refl_equal true).\n"); fprintf(out,"Qed.\n\n"); } void print_prelude(FILE *out) { fprintf(out,"From Coqprime Require Import List.\n"); fprintf(out,"From Coqprime Require Import ZArith.\n"); fprintf(out,"From Coqprime Require Import ZAux.\n\n"); fprintf(out,"From Coqprime Require Import PocklingtonCertificat.\n\n"); fprintf(out,"Open Local Scope positive_scope.\n\n"); /* fprintf(out,"Set Virtual Machine.\n"); */ } void print_file(char *filename, char *name, pre_certif_t p, certif_t lc) { FILE * out; out = fopen(filename,"w+"); fprintf(out, "From Coqprime Require Import PocklingtonRefl.\n\n"); /* fprintf(out,"Set Virtual Machine.\n"); */ fprintf(out,"Local Open Scope positive_scope.\n\n"); print_lemma(out, name, p, lc); fclose(out); return; } pock_certif_t read_file(char * filename, certif_t lc) { FILE * in; pock_certif_t c; mpz_t n, q, r; int i; in = fopen(filename, "r"); if (in == NULL) { fprintf(stdout,"Invalid file name\n"); fflush(stdout); exit(2); } mpz_init(n); mpz_init(q); mpz_init(r); mpz_inp_str(n,in,10); c = pock_init(n); mpz_set(q, n); mpz_sub_ui (q, q, 1); while(fgetc(in) != EOF){ if (mpz_inp_str(n,in,10)){ mpz_out_str (stdout, 10, n); fprintf(stdout, "\n"); mpz_tdiv_qr(q, r, q, n); if (mpz_cmp_ui (r, 0) != 0) { mpz_out_str (stdout, 10, n); fprintf(stdout, " is not a divisor\n"); fflush(stdout); exit(1); } if (!mpz_probab_prime_p (n, 3)) { mpz_out_str (stdout, 10, n); fprintf(stdout, " is not prime \n"); fflush(stdout); exit(1); } dec_add_mpz(c, n); i = getc(in); if (i=='*') add_pre(mk_proof_certif(n),lc); else ungetc(i, in); } else { break; fprintf(stdout,"\nSyntax error\n"); fflush(stdout); exit(1); } } if (!check_pock(c)) { fprintf(stdout, "Decomposition to small \n"); fflush(stdout); exit (1); } fclose(in); return c; } coqprime-8.18/gencertif/certif.h000066400000000000000000000075421451023060700166720ustar00rootroot00000000000000/* (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) */ #include #include "gmp.h" #ifndef __CERTIF_H__ extern int flag_verbose; void my_set_verbose(); /**********************************************/ /* Pocklington certificate */ /**********************************************/ typedef struct { mpz_ptr _N; /* the prime number to prove */ mpz_ptr _F1; /* product of the pseudo factorization */ mpz_ptr _R1; /* R1 = (N - 1)/F1 */ unsigned long int _a; /* the witness */ mpz_ptr _sqrt; /* The sqrt root needed by the certif ... */ int _pow2; /* Number of power of 2 in F1 */ int _allocated; /* allocated size in words of _dec */ int _used; /* used words in _dec */ mpz_ptr *_dec; /* pseudo factorization of N-1 */ /* increasing first */ /* F1 = 2^pow2 * PROD dec */ } __pock_struct; typedef __pock_struct *pock_certif_t; pock_certif_t pock_init (mpz_t N); void dec_add_ui (pock_certif_t c, unsigned long int ui); void dec_add_mpz (pock_certif_t c, mpz_t n); int check_pock (pock_certif_t c); void finalize_pock(pock_certif_t c); /**********************************************/ /* Proof certificate */ /**********************************************/ typedef struct { mpz_ptr _N; /* The prime number to prove */ char *_lemma; /* The name of the lemma */ } __proof_struct; typedef __proof_struct *proof_certif_t; /**********************************************/ /* Lucas certificate */ /**********************************************/ typedef struct { mpz_ptr _N; /* The prime number to prove */ unsigned long int _n; /* N = 2^n - 1 */ } __lucas_struct; typedef __lucas_struct *lucas_certif_t; /**********************************************/ /* Pre certificate */ /**********************************************/ typedef struct { int _kind; /* kind of certificate: */ /* 0 : proof; 1 : pock_cerif; 2: lucas_certif */ union { pock_certif_t _pock; proof_certif_t _proof; lucas_certif_t _lucas; } _certif; } __pre_struct; typedef __pre_struct *pre_certif_t; pre_certif_t mk_proof_certif(mpz_t N); pre_certif_t mk_pock_certif(pock_certif_t c); pre_certif_t mk_lucas_certif(mpz_t N, unsigned long int n); /**********************************************/ /* Certificate */ /**********************************************/ typedef struct { int _allocated; int _used; pre_certif_t *_list; } __certif_struct; typedef __certif_struct *certif_t; void set_proof_limit (unsigned int max); certif_t init_certif(); int _2_is_in (certif_t lc); int is_in (mpz_t t, certif_t lc); void add_pre(pre_certif_t, certif_t lc); void print_pock_certif(FILE *out, pock_certif_t c); void print_file(char *filename, char *name, pre_certif_t c, certif_t lc); pock_certif_t read_file(char * filename, certif_t lc); void print_lemma(FILE *out, char* name, pre_certif_t p, certif_t lc); void print_prelude(FILE *out); #define __CERTIF_H__ #endif /* __CERTIF_H__ */ coqprime-8.18/gencertif/configure.ac000066400000000000000000000021231451023060700175210ustar00rootroot00000000000000# USAGE NOTES # OS specific include and library paths can be given on the configure command line with e.g. # ./configure CPPFLAGS=-I/opt/local/include LDFLAGS=-L/opt/local/lib # We can't use automakes pkg-config interface because ecm usually doesn't have a pkgconfig gile. # Initialize autoconf(name, version, bugreports) AC_INIT([CoqPrime], [8.14], [https://github.com/thery/coqprime/issues]) # Find C compiler AC_PROG_CC # Check for libraries using the C compiler for checks AC_LANG(C) # GCC requires -lm for math functions like "log", other compilers don't. # So check for -lm but don't throw an error if it is not there. AC_CHECK_LIB(m, log) # Check for the GNU multiple precision arithmetic library. # Use th emethod recommended here: https://gmplib.org/manual/Autoconf AC_CHECK_LIB(gmp, __gmpz_init, , AC_MSG_ERROR([Unable to find library 'gmp'])) # Check for the availablitiy of the Elliptic Curve Method library from # https://gitlab.inria.fr/zimmerma/ecm AC_CHECK_LIB(ecm, ecm_init, , AC_MSG_ERROR([Unable to find library 'gmp-ecm'])) # Write make file AC_CONFIG_FILES([Makefile]) AC_OUTPUT coqprime-8.18/gencertif/factorize.c000066400000000000000000000363211451023060700173740ustar00rootroot00000000000000/* (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) */ #include #include #include #include "certif.h" #include "ecm.h" #include "gmp.h" #if defined(__STDC__) || defined(__cplusplus) || defined(_AIX) || \ defined(__DECC) || (defined(__mips) && defined(_SYSTYPE_SVR4)) || \ defined(_MSC_VER) || defined(_WIN32) #define __ECM_HAVE_TOKEN_PASTE 1 #else #define __ECM_HAVE_TOKEN_PASTE 0 #endif #ifndef __ECM #if __ECM_HAVE_TOKEN_PASTE #define __ECM(x) __ecm_##x #else #define __ECM(x) __ecm_ /**/ x #endif #endif #define pp1_random_seed __ECM(pp1_random_seed) void pp1_random_seed(mpz_t, mpz_t, gmp_randstate_t); #define pm1_random_seed __ECM(pm1_random_seed) void pm1_random_seed(mpz_t, mpz_t, gmp_randstate_t); #define get_random_ul __ECM(get_random_ul) unsigned long get_random_ul(void); static unsigned add[] = {4, 2, 4, 2, 4, 6, 2, 6}; void factor_using_division(mpz_t t, pock_certif_t c) { mpz_t q, r; unsigned long int f; int ai; unsigned *addv = add; unsigned int failures; unsigned int limit; /* Set the trial division limit according the size of n. */ limit = mpz_sizeinbase(t, 2); if (limit > 1000) limit = 1000 * 1000; else limit = limit * limit; if (flag_verbose) { printf("[using trivial division (%u)] ", limit); fflush(stdout); } mpz_init(q); mpz_init(r); f = mpz_scan1(t, 0); mpz_div_2exp(t, t, f); while (f) { if (flag_verbose) { printf("2 "); fflush(stdout); } dec_add_ui(c, 2); f--; } for (;;) { mpz_tdiv_qr_ui(q, r, t, 3); if (mpz_cmp_ui(r, 0) != 0) break; mpz_set(t, q); if (flag_verbose) { printf("3 "); fflush(stdout); } dec_add_ui(c, 3); } for (;;) { mpz_tdiv_qr_ui(q, r, t, 5); if (mpz_cmp_ui(r, 0) != 0) break; mpz_set(t, q); if (flag_verbose) { printf("5 "); fflush(stdout); } dec_add_ui(c, 5); } failures = 0; f = 7; ai = 0; while (mpz_cmp_ui(t, 1) != 0) { mpz_tdiv_qr_ui(q, r, t, f); if (mpz_cmp_ui(r, 0) != 0) { f += addv[ai]; if (mpz_cmp_ui(q, f) < 0) break; ai = (ai + 1) & 7; failures++; if (failures > limit) break; } else { mpz_swap(t, q); if (flag_verbose) { printf("%lu ", f); fflush(stdout); } dec_add_ui(c, f); failures = 0; } } if (flag_verbose) fprintf(stdout, "\n"); mpz_clear(q); mpz_clear(r); return; } void out_factor(mpz_t f, pock_certif_t c) { mpz_out_str(stdout, 10, f); fprintf(stdout, " (%lu digits, F1 %lu digits) \n", mpz_sizeinbase(f, 10), mpz_sizeinbase(c->_F1, 10)); fflush(stdout); return; } int factor_using_pollard_rho(mpz_t n, int a_int, unsigned long p, pock_certif_t pc) { mpz_t x, x1, y, P; mpz_t a; mpz_t g; mpz_t t1, t2; int k, l, c, i, res; if (flag_verbose) { printf("[pollard-rho (%d)] ", a_int); fflush(stdout); } mpz_init(g); mpz_init(t1); mpz_init(t2); mpz_init_set_si(a, a_int); mpz_init_set_si(y, 2); mpz_init_set_si(x, 2); mpz_init_set_si(x1, 2); k = 1; l = 1; mpz_init_set_ui(P, 1); c = 0; res = 0; while (!res) { S2: if (p != 0) { mpz_powm_ui(x, x, p, n); mpz_add(x, x, a); } else { mpz_mul(x, x, x); mpz_add(x, x, a); mpz_mod(x, x, n); } mpz_sub(t1, x1, x); mpz_mul(t2, P, t1); mpz_mod(P, t2, n); c++; if (c == 20) { c = 0; mpz_gcd(g, P, n); if (mpz_cmp_ui(g, 1) != 0) goto S4; mpz_set(y, x); } /*S3: */ k--; if (k > 0) goto S2; mpz_gcd(g, P, n); if (mpz_cmp_ui(g, 1) != 0) goto S4; mpz_set(x1, x); k = l; l = 2 * l; for (i = 0; i < k; i++) { if (p != 0) { mpz_powm_ui(x, x, p, n); mpz_add(x, x, a); } else { mpz_mul(x, x, x); mpz_add(x, x, a); mpz_mod(x, x, n); } } mpz_set(y, x); c = 0; goto S2; S4: do { if (p != 0) { mpz_powm_ui(y, y, p, n); mpz_add(y, y, a); } else { mpz_mul(y, y, y); mpz_add(y, y, a); mpz_mod(y, y, n); } mpz_sub(t1, x1, y); mpz_gcd(g, t1, n); } while (mpz_cmp_ui(g, 1) == 0); if (!mpz_probab_prime_p(g, 3)) { do { mp_limb_t a_limb; mpn_random(&a_limb, (mp_size_t)1); a_int = (int)a_limb; } while (a_int == -2 || a_int == 0); if (flag_verbose) { printf("[composite factor--restarting pollard-rho] "); fflush(stdout); } res = factor_using_pollard_rho(g, a_int, p, pc); break; } else { dec_add_mpz(pc, g); if (flag_verbose) out_factor(g, pc); res = check_pock(pc); if (res) break; } mpz_div(n, n, g); mpz_mod(x, x, n); mpz_mod(x1, x1, n); mpz_mod(y, y, n); if (mpz_probab_prime_p(n, 3)) { dec_add_mpz(pc, n); if (flag_verbose) out_factor(n, pc); res = check_pock(pc); break; } } mpz_clear(g); mpz_clear(P); mpz_clear(t2); mpz_clear(t1); mpz_clear(a); mpz_clear(x1); mpz_clear(x); mpz_clear(y); return res; } static double B1_table[] = {11000, 50000, 250000, 1000000, 3000000, 11000000, 43000000, 110000000, 260000000, 850000000}; static int it_table[] = {107, 261, 513, 1071, 2753, 5208, 8704, 20479, 47888, 78923}; static int size_table[] = {20, 25, 30, 35, 40, 45, 50, 55, 60, 65}; int ecm_factorize(mpz_t n, pock_certif_t c); int my_ecm_factor(mpz_t n, pock_certif_t c, double B1, int iterate) { int iterate1 = iterate; iterate = 1; int i, res, found; mpz_t f; gmp_randstate_t randstate; ecm_params params; mpz_init(f); ecm_init(params); if (flag_verbose) params->verbose = 1; gmp_randinit_default(randstate); gmp_randseed_ui(randstate, get_random_ul()); params->B1done = 0; if (B1 > 11000) { /* mpz_set_si (params->B2min, -1); */ params->S = ECM_DEFAULT_S; mpz_set_si(params->B2, ECM_DEFAULT_B2); /* params->B2 = B1 * 10; */ } res = 0; i = 0; iterate += 5; while (i < iterate && !res && mpz_cmp_ui(n, 1) != 0) { if (i == 0) { /* start with pm1 */ if (flag_verbose) { printf("using pm1 with B1 = %1.0f ", B1); fflush(stdout); } params->method = ECM_PM1; pm1_random_seed(params->x, n, randstate); found = ecm_factor(f, n, B1, params); if (found) { mpz_tdiv_q(n, n, f); if (mpz_probab_prime_p(f, 3)) { dec_add_mpz(c, f); if (flag_verbose) out_factor(f, c); res = check_pock(c); } else { if (flag_verbose) { fprintf(stdout, "composite factor "); mpz_out_str(stdout, 10, f); fprintf(stdout, "(%lu digits)\n", mpz_sizeinbase(f, 10)); fflush(stdout); } if (B1 == 11000) res = factor_using_pollard_rho(f, 1, 0, c); else res = ecm_factorize(f, c); } if (!res && mpz_cmp_ui(n, 1) != 0 && mpz_probab_prime_p(n, 3)) { dec_add_mpz(c, n); if (flag_verbose) out_factor(n, c); mpz_tdiv_q(n, n, n); res = check_pock(c); } } else i++; if (flag_verbose) printf("\n"); } else if (0 < i && i <= 3) { /* do 3 time pp1 */ params->method = ECM_PP1; mpz_set_ui(params->x, 0); if (flag_verbose && i == 1) { printf("using pp1 with B1 = %1.0f ", B1); fflush(stdout); } pp1_random_seed(params->x, n, randstate); params->B1done = 0; found = ecm_factor(f, n, B1, params); if (found) { mpz_tdiv_q(n, n, f); if (mpz_probab_prime_p(f, 3)) { dec_add_mpz(c, f); if (flag_verbose) out_factor(f, c); res = check_pock(c); } else { if (flag_verbose) { fprintf(stdout, "composite factor "); mpz_out_str(stdout, 10, f); fprintf(stdout, "(%lu digits)\n", mpz_sizeinbase(f, 10)); fflush(stdout); } if (B1 == 11000) res = factor_using_pollard_rho(f, 1, 0, c); else res = ecm_factorize(f, c); } if (!res && mpz_cmp_ui(n, 1) != 0 && mpz_probab_prime_p(n, 3)) { dec_add_mpz(c, n); if (flag_verbose) out_factor(n, c); mpz_tdiv_q(n, n, n); res = check_pock(c); } i = 0; /* restarting to factorize */ } else i++; if (flag_verbose && i == 3) printf("\n"); } else { /* continue with ecm */ params->method = ECM_ECM; mpz_set_ui(params->x, 0); if (flag_verbose && i == 4) { printf("using ecm with B1 = %1.0f ", B1); fflush(stdout); } mpz_set_ui (params->sigma, 0); /* mpz_urandomb (params->sigma, randstate, 32); mpz_add_ui (params->sigma, params->sigma, 6); */ params->B1done = 0; params->k = iterate1; found = ecm_factor(f, n, B1, params); if (found > 0) { /* found a factor */ mpz_tdiv_q(n, n, f); if (mpz_probab_prime_p(f, 3)) { dec_add_mpz(c, f); if (flag_verbose) out_factor(f, c); res = check_pock(c); } else { if (flag_verbose) { fprintf(stdout, "composite factor "); mpz_out_str(stdout, 10, f); fprintf(stdout, "(%lu digits)\n", mpz_sizeinbase(f, 10)); fflush(stdout); } if (B1 == 11000) res = factor_using_pollard_rho(f, 1, 0, c); else res = ecm_factorize(f, c); } if (!res && mpz_cmp_ui(n, 1) != 0 && mpz_probab_prime_p(n, 3)) { dec_add_mpz(c, n); if (flag_verbose) out_factor(n, c); mpz_tdiv_q(n, n, n); res = check_pock(c); } i = 0; /* restarting to factorize */ } else i++; } } if (flag_verbose) printf("\n"); ecm_clear(params); mpz_clear(f); return res; } int ecm_factorize(mpz_t n, pock_certif_t c) { int iB1, res = 0; mpz_t n1; mpz_init(n1); /*res = my_ecm_factor(n, c, B1_table[0], 4); if (!res) res = my_ecm_factor(n, c, B1_table[1], 4); if (!res) res = my_ecm_factor(n, c, B1_table[2], 4); if (!res) res = my_ecm_factor(n, c, B1_table[3], 3); if (!res) res = my_ecm_factor(n, c, B1_table[4], 2); */ for (iB1 = 0; !res && iB1 < 10 && mpz_cmp_ui(n, 1) != 0; iB1++) { if (flag_verbose) { printf("Searching factor for "); gmp_printf("%Zd", n); printf(" of %i digits\n", size_table[iB1]); } mpz_set(n1, n); res = my_ecm_factor(n, c, B1_table[iB1], it_table[iB1]); if (mpz_cmp(n1, n) != 0) { if (flag_verbose) { printf("Some progress !! \n"); } iB1 = -1; } } return res; } int factorize_no_small(mpz_t n, pock_certif_t c) { int res; if (mpz_probab_prime_p(n, 3)) { if (flag_verbose) mpz_out_str(stdout, 10, n); dec_add_mpz(c, n); res = check_pock(c); } else res = ecm_factorize(n, c); if (flag_verbose) { fprintf(stdout, "\n"); fflush(stdout); } return res; } int factorize(mpz_t n, pock_certif_t c) { int res; /* compute the factorization */ if (flag_verbose) { fprintf(stdout, " factorize "); mpz_out_str(stdout, 10, n); fflush(stdout); fprintf(stdout, "\n "); fprintf(stdout, " of %lu digits\n", mpz_sizeinbase(n, 10)); fflush(stdout); } factor_using_division(n, c); res = check_pock(c); if (!res) res = factorize_no_small(n, c); if (flag_verbose) { fprintf(stdout, "\n"); fflush(stdout); } return res; } int factorize_mersenne(unsigned long int p, pock_certif_t c) { unsigned long int q; int i, iB1, res, used; mpz_t n; __mpz_struct dec[100]; if (flag_verbose) { fprintf(stdout, "\nfactorize mersenne %lu\n", p); fflush(stdout); } used = 0; q = p; mpz_init(n); while (q > 3) { if (q % 2 == 0) { q = q / 2; mpz_set_ui(n, 1); /* n = 1 */ mpz_mul_2exp(n, n, q); /* n = 2^q */ mpz_add_ui(n, n, 1); /* n = 2^q + 1 */ factor_using_division(n, c); mpz_init_set(&(dec[used]), n); used++; } else if (q % 3 == 0) { q = q / 3; mpz_set_ui(n, 1); /* n = 1 */ mpz_mul_2exp(n, n, q); /* n = 2^q */ mpz_add_ui(n, n, 1); /* n = 2^q + 1 */ mpz_mul_2exp(n, n, q); /* n = 2^(2q) + 2^q */ mpz_add_ui(n, n, 1); /* n = 2^(2q) + 2^q + 1 */ factor_using_division(n, c); mpz_init_set(&(dec[used]), n); used++; } else break; } switch (q) { case 1: break; case 2: dec_add_ui(c, 3); break; case 3: dec_add_ui(c, 7); break; default: mpz_set_ui(n, 1); mpz_mul_2exp(n, n, q); mpz_sub_ui(n, n, 1); factor_using_division(n, c); mpz_init_set(&(dec[used]), n); used++; break; } res = check_pock(c); iB1 = 0; while (!res && iB1 < 10) { for (i = 0; i < used && !res; i++) { if (mpz_cmp_ui(&(dec[i]), 1) != 0) res = my_ecm_factor(&(dec[i]), c, B1_table[iB1], it_table[iB1]); } iB1++; } mpz_clear(n); return res; } pock_certif_t mersenne_certif(mpz_t t, unsigned long int p) { pock_certif_t c; c = pock_init(t); dec_add_ui(c, 2); factorize_mersenne(p - 1, c); finalize_pock(c); return c; } pock_certif_t pock_certif(mpz_t t) { mpz_t tm1; pock_certif_t c; if (flag_verbose) { fprintf(stdout, "pocklington "); mpz_out_str(stdout, 10, t); fflush(stdout); fprintf(stdout, "\n"); fflush(stdout); } /* initialize the decompostion */ c = pock_init(t); /* compute t - 1 */ mpz_init_set(tm1, c->_R1); /* compute the factorisation */ int res = factorize(tm1, c); if (flag_verbose) { if (res) { fprintf(stdout, "the certificate is valid"); } else { fprintf(stdout, "the certificate is unvalid"); } fprintf(stdout, "\n"); fflush(stdout); } mpz_clear(tm1); finalize_pock(c); return c; } int MAXPROOFPRIMES = 48611; /* 5000 first ones */ pre_certif_t certif_2; void extend_lc(certif_t lc, pock_certif_t c, unsigned long int min, unsigned long int max) { int i, size; mpz_ptr *ptr; mpz_t t; mpz_init(t); ptr = c->_dec; size = c->_used; if (c->_pow2 > 0 && !_2_is_in(lc)) { mpz_t t2; pre_certif_t ct; mpz_init_set_ui(t2, 2); ct = mk_proof_certif(t2); add_pre(ct, lc); mpz_clear(t2); } for (i = size - 1; i >= 0; i--) { mpz_set(t, ptr[i]); if (!is_in(t, lc)) { pre_certif_t ct; if (mpz_cmp_ui(t, MAXPROOFPRIMES) <= 0 || (mpz_cmp_ui(t, min) >= 0 && (mpz_cmp_ui(t, max) <= 0))) ct = mk_proof_certif(t); else { ct = mk_pock_certif(pock_certif(t)); extend_lc(lc, ct->_certif._pock, min, max); } add_pre(ct, lc); } } return; } coqprime-8.18/gencertif/factorize.h000066400000000000000000000013241451023060700173740ustar00rootroot00000000000000/* (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) */ #include "gmp.h" #include "certif.h" #ifndef __FACTORIZE_H__ void set_verbose(); pock_certif_t mersenne_certif (mpz_t t, unsigned long int p); pock_certif_t pock_certif (mpz_t t); void extend_lc (certif_t lc, pock_certif_t c, unsigned long int min, unsigned long int max ); #define __FACTORIZE_H__ #endif /* __FACTORIZE_H__ */ coqprime-8.18/gencertif/firstprimes.c000066400000000000000000031133051451023060700177560ustar00rootroot00000000000000/* (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) */ #include #include #include #include "gmp.h" #include "certif.h" #include "factorize.h" static unsigned int tprimes[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331, 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177, 4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297, 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657, 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999, 5003, 5009, 5011, 5021, 5023, 5039, 5051, 5059, 5077, 5081, 5087, 5099, 5101, 5107, 5113, 5119, 5147, 5153, 5167, 5171, 5179, 5189, 5197, 5209, 5227, 5231, 5233, 5237, 5261, 5273, 5279, 5281, 5297, 5303, 5309, 5323, 5333, 5347, 5351, 5381, 5387, 5393, 5399, 5407, 5413, 5417, 5419, 5431, 5437, 5441, 5443, 5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507, 5519, 5521, 5527, 5531, 5557, 5563, 5569, 5573, 5581, 5591, 5623, 5639, 5641, 5647, 5651, 5653, 5657, 5659, 5669, 5683, 5689, 5693, 5701, 5711, 5717, 5737, 5741, 5743, 5749, 5779, 5783, 5791, 5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849, 5851, 5857, 5861, 5867, 5869, 5879, 5881, 5897, 5903, 5923, 5927, 5939, 5953, 5981, 5987, 6007, 6011, 6029, 6037, 6043, 6047, 6053, 6067, 6073, 6079, 6089, 6091, 6101, 6113, 6121, 6131, 6133, 6143, 6151, 6163, 6173, 6197, 6199, 6203, 6211, 6217, 6221, 6229, 6247, 6257, 6263, 6269, 6271, 6277, 6287, 6299, 6301, 6311, 6317, 6323, 6329, 6337, 6343, 6353, 6359, 6361, 6367, 6373, 6379, 6389, 6397, 6421, 6427, 6449, 6451, 6469, 6473, 6481, 6491, 6521, 6529, 6547, 6551, 6553, 6563, 6569, 6571, 6577, 6581, 6599, 6607, 6619, 6637, 6653, 6659, 6661, 6673, 6679, 6689, 6691, 6701, 6703, 6709, 6719, 6733, 6737, 6761, 6763, 6779, 6781, 6791, 6793, 6803, 6823, 6827, 6829, 6833, 6841, 6857, 6863, 6869, 6871, 6883, 6899, 6907, 6911, 6917, 6947, 6949, 6959, 6961, 6967, 6971, 6977, 6983, 6991, 6997, 7001, 7013, 7019, 7027, 7039, 7043, 7057, 7069, 7079, 7103, 7109, 7121, 7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207, 7211, 7213, 7219, 7229, 7237, 7243, 7247, 7253, 7283, 7297, 7307, 7309, 7321, 7331, 7333, 7349, 7351, 7369, 7393, 7411, 7417, 7433, 7451, 7457, 7459, 7477, 7481, 7487, 7489, 7499, 7507, 7517, 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561, 7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621, 7639, 7643, 7649, 7669, 7673, 7681, 7687, 7691, 7699, 7703, 7717, 7723, 7727, 7741, 7753, 7757, 7759, 7789, 7793, 7817, 7823, 7829, 7841, 7853, 7867, 7873, 7877, 7879, 7883, 7901, 7907, 7919, 7927, 7933, 7937, 7949, 7951, 7963, 7993, 8009, 8011, 8017, 8039, 8053, 8059, 8069, 8081, 8087, 8089, 8093, 8101, 8111, 8117, 8123, 8147, 8161, 8167, 8171, 8179, 8191, 8209, 8219, 8221, 8231, 8233, 8237, 8243, 8263, 8269, 8273, 8287, 8291, 8293, 8297, 8311, 8317, 8329, 8353, 8363, 8369, 8377, 8387, 8389, 8419, 8423, 8429, 8431, 8443, 8447, 8461, 8467, 8501, 8513, 8521, 8527, 8537, 8539, 8543, 8563, 8573, 8581, 8597, 8599, 8609, 8623, 8627, 8629, 8641, 8647, 8663, 8669, 8677, 8681, 8689, 8693, 8699, 8707, 8713, 8719, 8731, 8737, 8741, 8747, 8753, 8761, 8779, 8783, 8803, 8807, 8819, 8821, 8831, 8837, 8839, 8849, 8861, 8863, 8867, 8887, 8893, 8923, 8929, 8933, 8941, 8951, 8963, 8969, 8971, 8999, 9001, 9007, 9011, 9013, 9029, 9041, 9043, 9049, 9059, 9067, 9091, 9103, 9109, 9127, 9133, 9137, 9151, 9157, 9161, 9173, 9181, 9187, 9199, 9203, 9209, 9221, 9227, 9239, 9241, 9257, 9277, 9281, 9283, 9293, 9311, 9319, 9323, 9337, 9341, 9343, 9349, 9371, 9377, 9391, 9397, 9403, 9413, 9419, 9421, 9431, 9433, 9437, 9439, 9461, 9463, 9467, 9473, 9479, 9491, 9497, 9511, 9521, 9533, 9539, 9547, 9551, 9587, 9601, 9613, 9619, 9623, 9629, 9631, 9643, 9649, 9661, 9677, 9679, 9689, 9697, 9719, 9721, 9733, 9739, 9743, 9749, 9767, 9769, 9781, 9787, 9791, 9803, 9811, 9817, 9829, 9833, 9839, 9851, 9857, 9859, 9871, 9883, 9887, 9901, 9907, 9923, 9929, 9931, 9941, 9949, 9967, 9973, 10007, 10009, 10037, 10039, 10061, 10067, 10069, 10079, 10091, 10093, 10099, 10103, 10111, 10133, 10139, 10141, 10151, 10159, 10163, 10169, 10177, 10181, 10193, 10211, 10223, 10243, 10247, 10253, 10259, 10267, 10271, 10273, 10289, 10301, 10303, 10313, 10321, 10331, 10333, 10337, 10343, 10357, 10369, 10391, 10399, 10427, 10429, 10433, 10453, 10457, 10459, 10463, 10477, 10487, 10499, 10501, 10513, 10529, 10531, 10559, 10567, 10589, 10597, 10601, 10607, 10613, 10627, 10631, 10639, 10651, 10657, 10663, 10667, 10687, 10691, 10709, 10711, 10723, 10729, 10733, 10739, 10753, 10771, 10781, 10789, 10799, 10831, 10837, 10847, 10853, 10859, 10861, 10867, 10883, 10889, 10891, 10903, 10909, 10937, 10939, 10949, 10957, 10973, 10979, 10987, 10993, 11003, 11027, 11047, 11057, 11059, 11069, 11071, 11083, 11087, 11093, 11113, 11117, 11119, 11131, 11149, 11159, 11161, 11171, 11173, 11177, 11197, 11213, 11239, 11243, 11251, 11257, 11261, 11273, 11279, 11287, 11299, 11311, 11317, 11321, 11329, 11351, 11353, 11369, 11383, 11393, 11399, 11411, 11423, 11437, 11443, 11447, 11467, 11471, 11483, 11489, 11491, 11497, 11503, 11519, 11527, 11549, 11551, 11579, 11587, 11593, 11597, 11617, 11621, 11633, 11657, 11677, 11681, 11689, 11699, 11701, 11717, 11719, 11731, 11743, 11777, 11779, 11783, 11789, 11801, 11807, 11813, 11821, 11827, 11831, 11833, 11839, 11863, 11867, 11887, 11897, 11903, 11909, 11923, 11927, 11933, 11939, 11941, 11953, 11959, 11969, 11971, 11981, 11987, 12007, 12011, 12037, 12041, 12043, 12049, 12071, 12073, 12097, 12101, 12107, 12109, 12113, 12119, 12143, 12149, 12157, 12161, 12163, 12197, 12203, 12211, 12227, 12239, 12241, 12251, 12253, 12263, 12269, 12277, 12281, 12289, 12301, 12323, 12329, 12343, 12347, 12373, 12377, 12379, 12391, 12401, 12409, 12413, 12421, 12433, 12437, 12451, 12457, 12473, 12479, 12487, 12491, 12497, 12503, 12511, 12517, 12527, 12539, 12541, 12547, 12553, 12569, 12577, 12583, 12589, 12601, 12611, 12613, 12619, 12637, 12641, 12647, 12653, 12659, 12671, 12689, 12697, 12703, 12713, 12721, 12739, 12743, 12757, 12763, 12781, 12791, 12799, 12809, 12821, 12823, 12829, 12841, 12853, 12889, 12893, 12899, 12907, 12911, 12917, 12919, 12923, 12941, 12953, 12959, 12967, 12973, 12979, 12983, 13001, 13003, 13007, 13009, 13033, 13037, 13043, 13049, 13063, 13093, 13099, 13103, 13109, 13121, 13127, 13147, 13151, 13159, 13163, 13171, 13177, 13183, 13187, 13217, 13219, 13229, 13241, 13249, 13259, 13267, 13291, 13297, 13309, 13313, 13327, 13331, 13337, 13339, 13367, 13381, 13397, 13399, 13411, 13417, 13421, 13441, 13451, 13457, 13463, 13469, 13477, 13487, 13499, 13513, 13523, 13537, 13553, 13567, 13577, 13591, 13597, 13613, 13619, 13627, 13633, 13649, 13669, 13679, 13681, 13687, 13691, 13693, 13697, 13709, 13711, 13721, 13723, 13729, 13751, 13757, 13759, 13763, 13781, 13789, 13799, 13807, 13829, 13831, 13841, 13859, 13873, 13877, 13879, 13883, 13901, 13903, 13907, 13913, 13921, 13931, 13933, 13963, 13967, 13997, 13999, 14009, 14011, 14029, 14033, 14051, 14057, 14071, 14081, 14083, 14087, 14107, 14143, 14149, 14153, 14159, 14173, 14177, 14197, 14207, 14221, 14243, 14249, 14251, 14281, 14293, 14303, 14321, 14323, 14327, 14341, 14347, 14369, 14387, 14389, 14401, 14407, 14411, 14419, 14423, 14431, 14437, 14447, 14449, 14461, 14479, 14489, 14503, 14519, 14533, 14537, 14543, 14549, 14551, 14557, 14561, 14563, 14591, 14593, 14621, 14627, 14629, 14633, 14639, 14653, 14657, 14669, 14683, 14699, 14713, 14717, 14723, 14731, 14737, 14741, 14747, 14753, 14759, 14767, 14771, 14779, 14783, 14797, 14813, 14821, 14827, 14831, 14843, 14851, 14867, 14869, 14879, 14887, 14891, 14897, 14923, 14929, 14939, 14947, 14951, 14957, 14969, 14983, 15013, 15017, 15031, 15053, 15061, 15073, 15077, 15083, 15091, 15101, 15107, 15121, 15131, 15137, 15139, 15149, 15161, 15173, 15187, 15193, 15199, 15217, 15227, 15233, 15241, 15259, 15263, 15269, 15271, 15277, 15287, 15289, 15299, 15307, 15313, 15319, 15329, 15331, 15349, 15359, 15361, 15373, 15377, 15383, 15391, 15401, 15413, 15427, 15439, 15443, 15451, 15461, 15467, 15473, 15493, 15497, 15511, 15527, 15541, 15551, 15559, 15569, 15581, 15583, 15601, 15607, 15619, 15629, 15641, 15643, 15647, 15649, 15661, 15667, 15671, 15679, 15683, 15727, 15731, 15733, 15737, 15739, 15749, 15761, 15767, 15773, 15787, 15791, 15797, 15803, 15809, 15817, 15823, 15859, 15877, 15881, 15887, 15889, 15901, 15907, 15913, 15919, 15923, 15937, 15959, 15971, 15973, 15991, 16001, 16007, 16033, 16057, 16061, 16063, 16067, 16069, 16073, 16087, 16091, 16097, 16103, 16111, 16127, 16139, 16141, 16183, 16187, 16189, 16193, 16217, 16223, 16229, 16231, 16249, 16253, 16267, 16273, 16301, 16319, 16333, 16339, 16349, 16361, 16363, 16369, 16381, 16411, 16417, 16421, 16427, 16433, 16447, 16451, 16453, 16477, 16481, 16487, 16493, 16519, 16529, 16547, 16553, 16561, 16567, 16573, 16603, 16607, 16619, 16631, 16633, 16649, 16651, 16657, 16661, 16673, 16691, 16693, 16699, 16703, 16729, 16741, 16747, 16759, 16763, 16787, 16811, 16823, 16829, 16831, 16843, 16871, 16879, 16883, 16889, 16901, 16903, 16921, 16927, 16931, 16937, 16943, 16963, 16979, 16981, 16987, 16993, 17011, 17021, 17027, 17029, 17033, 17041, 17047, 17053, 17077, 17093, 17099, 17107, 17117, 17123, 17137, 17159, 17167, 17183, 17189, 17191, 17203, 17207, 17209, 17231, 17239, 17257, 17291, 17293, 17299, 17317, 17321, 17327, 17333, 17341, 17351, 17359, 17377, 17383, 17387, 17389, 17393, 17401, 17417, 17419, 17431, 17443, 17449, 17467, 17471, 17477, 17483, 17489, 17491, 17497, 17509, 17519, 17539, 17551, 17569, 17573, 17579, 17581, 17597, 17599, 17609, 17623, 17627, 17657, 17659, 17669, 17681, 17683, 17707, 17713, 17729, 17737, 17747, 17749, 17761, 17783, 17789, 17791, 17807, 17827, 17837, 17839, 17851, 17863, 17881, 17891, 17903, 17909, 17911, 17921, 17923, 17929, 17939, 17957, 17959, 17971, 17977, 17981, 17987, 17989, 18013, 18041, 18043, 18047, 18049, 18059, 18061, 18077, 18089, 18097, 18119, 18121, 18127, 18131, 18133, 18143, 18149, 18169, 18181, 18191, 18199, 18211, 18217, 18223, 18229, 18233, 18251, 18253, 18257, 18269, 18287, 18289, 18301, 18307, 18311, 18313, 18329, 18341, 18353, 18367, 18371, 18379, 18397, 18401, 18413, 18427, 18433, 18439, 18443, 18451, 18457, 18461, 18481, 18493, 18503, 18517, 18521, 18523, 18539, 18541, 18553, 18583, 18587, 18593, 18617, 18637, 18661, 18671, 18679, 18691, 18701, 18713, 18719, 18731, 18743, 18749, 18757, 18773, 18787, 18793, 18797, 18803, 18839, 18859, 18869, 18899, 18911, 18913, 18917, 18919, 18947, 18959, 18973, 18979, 19001, 19009, 19013, 19031, 19037, 19051, 19069, 19073, 19079, 19081, 19087, 19121, 19139, 19141, 19157, 19163, 19181, 19183, 19207, 19211, 19213, 19219, 19231, 19237, 19249, 19259, 19267, 19273, 19289, 19301, 19309, 19319, 19333, 19373, 19379, 19381, 19387, 19391, 19403, 19417, 19421, 19423, 19427, 19429, 19433, 19441, 19447, 19457, 19463, 19469, 19471, 19477, 19483, 19489, 19501, 19507, 19531, 19541, 19543, 19553, 19559, 19571, 19577, 19583, 19597, 19603, 19609, 19661, 19681, 19687, 19697, 19699, 19709, 19717, 19727, 19739, 19751, 19753, 19759, 19763, 19777, 19793, 19801, 19813, 19819, 19841, 19843, 19853, 19861, 19867, 19889, 19891, 19913, 19919, 19927, 19937, 19949, 19961, 19963, 19973, 19979, 19991, 19993, 19997, 20011, 20021, 20023, 20029, 20047, 20051, 20063, 20071, 20089, 20101, 20107, 20113, 20117, 20123, 20129, 20143, 20147, 20149, 20161, 20173, 20177, 20183, 20201, 20219, 20231, 20233, 20249, 20261, 20269, 20287, 20297, 20323, 20327, 20333, 20341, 20347, 20353, 20357, 20359, 20369, 20389, 20393, 20399, 20407, 20411, 20431, 20441, 20443, 20477, 20479, 20483, 20507, 20509, 20521, 20533, 20543, 20549, 20551, 20563, 20593, 20599, 20611, 20627, 20639, 20641, 20663, 20681, 20693, 20707, 20717, 20719, 20731, 20743, 20747, 20749, 20753, 20759, 20771, 20773, 20789, 20807, 20809, 20849, 20857, 20873, 20879, 20887, 20897, 20899, 20903, 20921, 20929, 20939, 20947, 20959, 20963, 20981, 20983, 21001, 21011, 21013, 21017, 21019, 21023, 21031, 21059, 21061, 21067, 21089, 21101, 21107, 21121, 21139, 21143, 21149, 21157, 21163, 21169, 21179, 21187, 21191, 21193, 21211, 21221, 21227, 21247, 21269, 21277, 21283, 21313, 21317, 21319, 21323, 21341, 21347, 21377, 21379, 21383, 21391, 21397, 21401, 21407, 21419, 21433, 21467, 21481, 21487, 21491, 21493, 21499, 21503, 21517, 21521, 21523, 21529, 21557, 21559, 21563, 21569, 21577, 21587, 21589, 21599, 21601, 21611, 21613, 21617, 21647, 21649, 21661, 21673, 21683, 21701, 21713, 21727, 21737, 21739, 21751, 21757, 21767, 21773, 21787, 21799, 21803, 21817, 21821, 21839, 21841, 21851, 21859, 21863, 21871, 21881, 21893, 21911, 21929, 21937, 21943, 21961, 21977, 21991, 21997, 22003, 22013, 22027, 22031, 22037, 22039, 22051, 22063, 22067, 22073, 22079, 22091, 22093, 22109, 22111, 22123, 22129, 22133, 22147, 22153, 22157, 22159, 22171, 22189, 22193, 22229, 22247, 22259, 22271, 22273, 22277, 22279, 22283, 22291, 22303, 22307, 22343, 22349, 22367, 22369, 22381, 22391, 22397, 22409, 22433, 22441, 22447, 22453, 22469, 22481, 22483, 22501, 22511, 22531, 22541, 22543, 22549, 22567, 22571, 22573, 22613, 22619, 22621, 22637, 22639, 22643, 22651, 22669, 22679, 22691, 22697, 22699, 22709, 22717, 22721, 22727, 22739, 22741, 22751, 22769, 22777, 22783, 22787, 22807, 22811, 22817, 22853, 22859, 22861, 22871, 22877, 22901, 22907, 22921, 22937, 22943, 22961, 22963, 22973, 22993, 23003, 23011, 23017, 23021, 23027, 23029, 23039, 23041, 23053, 23057, 23059, 23063, 23071, 23081, 23087, 23099, 23117, 23131, 23143, 23159, 23167, 23173, 23189, 23197, 23201, 23203, 23209, 23227, 23251, 23269, 23279, 23291, 23293, 23297, 23311, 23321, 23327, 23333, 23339, 23357, 23369, 23371, 23399, 23417, 23431, 23447, 23459, 23473, 23497, 23509, 23531, 23537, 23539, 23549, 23557, 23561, 23563, 23567, 23581, 23593, 23599, 23603, 23609, 23623, 23627, 23629, 23633, 23663, 23669, 23671, 23677, 23687, 23689, 23719, 23741, 23743, 23747, 23753, 23761, 23767, 23773, 23789, 23801, 23813, 23819, 23827, 23831, 23833, 23857, 23869, 23873, 23879, 23887, 23893, 23899, 23909, 23911, 23917, 23929, 23957, 23971, 23977, 23981, 23993, 24001, 24007, 24019, 24023, 24029, 24043, 24049, 24061, 24071, 24077, 24083, 24091, 24097, 24103, 24107, 24109, 24113, 24121, 24133, 24137, 24151, 24169, 24179, 24181, 24197, 24203, 24223, 24229, 24239, 24247, 24251, 24281, 24317, 24329, 24337, 24359, 24371, 24373, 24379, 24391, 24407, 24413, 24419, 24421, 24439, 24443, 24469, 24473, 24481, 24499, 24509, 24517, 24527, 24533, 24547, 24551, 24571, 24593, 24611, 24623, 24631, 24659, 24671, 24677, 24683, 24691, 24697, 24709, 24733, 24749, 24763, 24767, 24781, 24793, 24799, 24809, 24821, 24841, 24847, 24851, 24859, 24877, 24889, 24907, 24917, 24919, 24923, 24943, 24953, 24967, 24971, 24977, 24979, 24989, 25013, 25031, 25033, 25037, 25057, 25073, 25087, 25097, 25111, 25117, 25121, 25127, 25147, 25153, 25163, 25169, 25171, 25183, 25189, 25219, 25229, 25237, 25243, 25247, 25253, 25261, 25301, 25303, 25307, 25309, 25321, 25339, 25343, 25349, 25357, 25367, 25373, 25391, 25409, 25411, 25423, 25439, 25447, 25453, 25457, 25463, 25469, 25471, 25523, 25537, 25541, 25561, 25577, 25579, 25583, 25589, 25601, 25603, 25609, 25621, 25633, 25639, 25643, 25657, 25667, 25673, 25679, 25693, 25703, 25717, 25733, 25741, 25747, 25759, 25763, 25771, 25793, 25799, 25801, 25819, 25841, 25847, 25849, 25867, 25873, 25889, 25903, 25913, 25919, 25931, 25933, 25939, 25943, 25951, 25969, 25981, 25997, 25999, 26003, 26017, 26021, 26029, 26041, 26053, 26083, 26099, 26107, 26111, 26113, 26119, 26141, 26153, 26161, 26171, 26177, 26183, 26189, 26203, 26209, 26227, 26237, 26249, 26251, 26261, 26263, 26267, 26293, 26297, 26309, 26317, 26321, 26339, 26347, 26357, 26371, 26387, 26393, 26399, 26407, 26417, 26423, 26431, 26437, 26449, 26459, 26479, 26489, 26497, 26501, 26513, 26539, 26557, 26561, 26573, 26591, 26597, 26627, 26633, 26641, 26647, 26669, 26681, 26683, 26687, 26693, 26699, 26701, 26711, 26713, 26717, 26723, 26729, 26731, 26737, 26759, 26777, 26783, 26801, 26813, 26821, 26833, 26839, 26849, 26861, 26863, 26879, 26881, 26891, 26893, 26903, 26921, 26927, 26947, 26951, 26953, 26959, 26981, 26987, 26993, 27011, 27017, 27031, 27043, 27059, 27061, 27067, 27073, 27077, 27091, 27103, 27107, 27109, 27127, 27143, 27179, 27191, 27197, 27211, 27239, 27241, 27253, 27259, 27271, 27277, 27281, 27283, 27299, 27329, 27337, 27361, 27367, 27397, 27407, 27409, 27427, 27431, 27437, 27449, 27457, 27479, 27481, 27487, 27509, 27527, 27529, 27539, 27541, 27551, 27581, 27583, 27611, 27617, 27631, 27647, 27653, 27673, 27689, 27691, 27697, 27701, 27733, 27737, 27739, 27743, 27749, 27751, 27763, 27767, 27773, 27779, 27791, 27793, 27799, 27803, 27809, 27817, 27823, 27827, 27847, 27851, 27883, 27893, 27901, 27917, 27919, 27941, 27943, 27947, 27953, 27961, 27967, 27983, 27997, 28001, 28019, 28027, 28031, 28051, 28057, 28069, 28081, 28087, 28097, 28099, 28109, 28111, 28123, 28151, 28163, 28181, 28183, 28201, 28211, 28219, 28229, 28277, 28279, 28283, 28289, 28297, 28307, 28309, 28319, 28349, 28351, 28387, 28393, 28403, 28409, 28411, 28429, 28433, 28439, 28447, 28463, 28477, 28493, 28499, 28513, 28517, 28537, 28541, 28547, 28549, 28559, 28571, 28573, 28579, 28591, 28597, 28603, 28607, 28619, 28621, 28627, 28631, 28643, 28649, 28657, 28661, 28663, 28669, 28687, 28697, 28703, 28711, 28723, 28729, 28751, 28753, 28759, 28771, 28789, 28793, 28807, 28813, 28817, 28837, 28843, 28859, 28867, 28871, 28879, 28901, 28909, 28921, 28927, 28933, 28949, 28961, 28979, 29009, 29017, 29021, 29023, 29027, 29033, 29059, 29063, 29077, 29101, 29123, 29129, 29131, 29137, 29147, 29153, 29167, 29173, 29179, 29191, 29201, 29207, 29209, 29221, 29231, 29243, 29251, 29269, 29287, 29297, 29303, 29311, 29327, 29333, 29339, 29347, 29363, 29383, 29387, 29389, 29399, 29401, 29411, 29423, 29429, 29437, 29443, 29453, 29473, 29483, 29501, 29527, 29531, 29537, 29567, 29569, 29573, 29581, 29587, 29599, 29611, 29629, 29633, 29641, 29663, 29669, 29671, 29683, 29717, 29723, 29741, 29753, 29759, 29761, 29789, 29803, 29819, 29833, 29837, 29851, 29863, 29867, 29873, 29879, 29881, 29917, 29921, 29927, 29947, 29959, 29983, 29989, 30011, 30013, 30029, 30047, 30059, 30071, 30089, 30091, 30097, 30103, 30109, 30113, 30119, 30133, 30137, 30139, 30161, 30169, 30181, 30187, 30197, 30203, 30211, 30223, 30241, 30253, 30259, 30269, 30271, 30293, 30307, 30313, 30319, 30323, 30341, 30347, 30367, 30389, 30391, 30403, 30427, 30431, 30449, 30467, 30469, 30491, 30493, 30497, 30509, 30517, 30529, 30539, 30553, 30557, 30559, 30577, 30593, 30631, 30637, 30643, 30649, 30661, 30671, 30677, 30689, 30697, 30703, 30707, 30713, 30727, 30757, 30763, 30773, 30781, 30803, 30809, 30817, 30829, 30839, 30841, 30851, 30853, 30859, 30869, 30871, 30881, 30893, 30911, 30931, 30937, 30941, 30949, 30971, 30977, 30983, 31013, 31019, 31033, 31039, 31051, 31063, 31069, 31079, 31081, 31091, 31121, 31123, 31139, 31147, 31151, 31153, 31159, 31177, 31181, 31183, 31189, 31193, 31219, 31223, 31231, 31237, 31247, 31249, 31253, 31259, 31267, 31271, 31277, 31307, 31319, 31321, 31327, 31333, 31337, 31357, 31379, 31387, 31391, 31393, 31397, 31469, 31477, 31481, 31489, 31511, 31513, 31517, 31531, 31541, 31543, 31547, 31567, 31573, 31583, 31601, 31607, 31627, 31643, 31649, 31657, 31663, 31667, 31687, 31699, 31721, 31723, 31727, 31729, 31741, 31751, 31769, 31771, 31793, 31799, 31817, 31847, 31849, 31859, 31873, 31883, 31891, 31907, 31957, 31963, 31973, 31981, 31991, 32003, 32009, 32027, 32029, 32051, 32057, 32059, 32063, 32069, 32077, 32083, 32089, 32099, 32117, 32119, 32141, 32143, 32159, 32173, 32183, 32189, 32191, 32203, 32213, 32233, 32237, 32251, 32257, 32261, 32297, 32299, 32303, 32309, 32321, 32323, 32327, 32341, 32353, 32359, 32363, 32369, 32371, 32377, 32381, 32401, 32411, 32413, 32423, 32429, 32441, 32443, 32467, 32479, 32491, 32497, 32503, 32507, 32531, 32533, 32537, 32561, 32563, 32569, 32573, 32579, 32587, 32603, 32609, 32611, 32621, 32633, 32647, 32653, 32687, 32693, 32707, 32713, 32717, 32719, 32749, 32771, 32779, 32783, 32789, 32797, 32801, 32803, 32831, 32833, 32839, 32843, 32869, 32887, 32909, 32911, 32917, 32933, 32939, 32941, 32957, 32969, 32971, 32983, 32987, 32993, 32999, 33013, 33023, 33029, 33037, 33049, 33053, 33071, 33073, 33083, 33091, 33107, 33113, 33119, 33149, 33151, 33161, 33179, 33181, 33191, 33199, 33203, 33211, 33223, 33247, 33287, 33289, 33301, 33311, 33317, 33329, 33331, 33343, 33347, 33349, 33353, 33359, 33377, 33391, 33403, 33409, 33413, 33427, 33457, 33461, 33469, 33479, 33487, 33493, 33503, 33521, 33529, 33533, 33547, 33563, 33569, 33577, 33581, 33587, 33589, 33599, 33601, 33613, 33617, 33619, 33623, 33629, 33637, 33641, 33647, 33679, 33703, 33713, 33721, 33739, 33749, 33751, 33757, 33767, 33769, 33773, 33791, 33797, 33809, 33811, 33827, 33829, 33851, 33857, 33863, 33871, 33889, 33893, 33911, 33923, 33931, 33937, 33941, 33961, 33967, 33997, 34019, 34031, 34033, 34039, 34057, 34061, 34123, 34127, 34129, 34141, 34147, 34157, 34159, 34171, 34183, 34211, 34213, 34217, 34231, 34253, 34259, 34261, 34267, 34273, 34283, 34297, 34301, 34303, 34313, 34319, 34327, 34337, 34351, 34361, 34367, 34369, 34381, 34403, 34421, 34429, 34439, 34457, 34469, 34471, 34483, 34487, 34499, 34501, 34511, 34513, 34519, 34537, 34543, 34549, 34583, 34589, 34591, 34603, 34607, 34613, 34631, 34649, 34651, 34667, 34673, 34679, 34687, 34693, 34703, 34721, 34729, 34739, 34747, 34757, 34759, 34763, 34781, 34807, 34819, 34841, 34843, 34847, 34849, 34871, 34877, 34883, 34897, 34913, 34919, 34939, 34949, 34961, 34963, 34981, 35023, 35027, 35051, 35053, 35059, 35069, 35081, 35083, 35089, 35099, 35107, 35111, 35117, 35129, 35141, 35149, 35153, 35159, 35171, 35201, 35221, 35227, 35251, 35257, 35267, 35279, 35281, 35291, 35311, 35317, 35323, 35327, 35339, 35353, 35363, 35381, 35393, 35401, 35407, 35419, 35423, 35437, 35447, 35449, 35461, 35491, 35507, 35509, 35521, 35527, 35531, 35533, 35537, 35543, 35569, 35573, 35591, 35593, 35597, 35603, 35617, 35671, 35677, 35729, 35731, 35747, 35753, 35759, 35771, 35797, 35801, 35803, 35809, 35831, 35837, 35839, 35851, 35863, 35869, 35879, 35897, 35899, 35911, 35923, 35933, 35951, 35963, 35969, 35977, 35983, 35993, 35999, 36007, 36011, 36013, 36017, 36037, 36061, 36067, 36073, 36083, 36097, 36107, 36109, 36131, 36137, 36151, 36161, 36187, 36191, 36209, 36217, 36229, 36241, 36251, 36263, 36269, 36277, 36293, 36299, 36307, 36313, 36319, 36341, 36343, 36353, 36373, 36383, 36389, 36433, 36451, 36457, 36467, 36469, 36473, 36479, 36493, 36497, 36523, 36527, 36529, 36541, 36551, 36559, 36563, 36571, 36583, 36587, 36599, 36607, 36629, 36637, 36643, 36653, 36671, 36677, 36683, 36691, 36697, 36709, 36713, 36721, 36739, 36749, 36761, 36767, 36779, 36781, 36787, 36791, 36793, 36809, 36821, 36833, 36847, 36857, 36871, 36877, 36887, 36899, 36901, 36913, 36919, 36923, 36929, 36931, 36943, 36947, 36973, 36979, 36997, 37003, 37013, 37019, 37021, 37039, 37049, 37057, 37061, 37087, 37097, 37117, 37123, 37139, 37159, 37171, 37181, 37189, 37199, 37201, 37217, 37223, 37243, 37253, 37273, 37277, 37307, 37309, 37313, 37321, 37337, 37339, 37357, 37361, 37363, 37369, 37379, 37397, 37409, 37423, 37441, 37447, 37463, 37483, 37489, 37493, 37501, 37507, 37511, 37517, 37529, 37537, 37547, 37549, 37561, 37567, 37571, 37573, 37579, 37589, 37591, 37607, 37619, 37633, 37643, 37649, 37657, 37663, 37691, 37693, 37699, 37717, 37747, 37781, 37783, 37799, 37811, 37813, 37831, 37847, 37853, 37861, 37871, 37879, 37889, 37897, 37907, 37951, 37957, 37963, 37967, 37987, 37991, 37993, 37997, 38011, 38039, 38047, 38053, 38069, 38083, 38113, 38119, 38149, 38153, 38167, 38177, 38183, 38189, 38197, 38201, 38219, 38231, 38237, 38239, 38261, 38273, 38281, 38287, 38299, 38303, 38317, 38321, 38327, 38329, 38333, 38351, 38371, 38377, 38393, 38431, 38447, 38449, 38453, 38459, 38461, 38501, 38543, 38557, 38561, 38567, 38569, 38593, 38603, 38609, 38611, 38629, 38639, 38651, 38653, 38669, 38671, 38677, 38693, 38699, 38707, 38711, 38713, 38723, 38729, 38737, 38747, 38749, 38767, 38783, 38791, 38803, 38821, 38833, 38839, 38851, 38861, 38867, 38873, 38891, 38903, 38917, 38921, 38923, 38933, 38953, 38959, 38971, 38977, 38993, 39019, 39023, 39041, 39043, 39047, 39079, 39089, 39097, 39103, 39107, 39113, 39119, 39133, 39139, 39157, 39161, 39163, 39181, 39191, 39199, 39209, 39217, 39227, 39229, 39233, 39239, 39241, 39251, 39293, 39301, 39313, 39317, 39323, 39341, 39343, 39359, 39367, 39371, 39373, 39383, 39397, 39409, 39419, 39439, 39443, 39451, 39461, 39499, 39503, 39509, 39511, 39521, 39541, 39551, 39563, 39569, 39581, 39607, 39619, 39623, 39631, 39659, 39667, 39671, 39679, 39703, 39709, 39719, 39727, 39733, 39749, 39761, 39769, 39779, 39791, 39799, 39821, 39827, 39829, 39839, 39841, 39847, 39857, 39863, 39869, 39877, 39883, 39887, 39901, 39929, 39937, 39953, 39971, 39979, 39983, 39989, 40009, 40013, 40031, 40037, 40039, 40063, 40087, 40093, 40099, 40111, 40123, 40127, 40129, 40151, 40153, 40163, 40169, 40177, 40189, 40193, 40213, 40231, 40237, 40241, 40253, 40277, 40283, 40289, 40343, 40351, 40357, 40361, 40387, 40423, 40427, 40429, 40433, 40459, 40471, 40483, 40487, 40493, 40499, 40507, 40519, 40529, 40531, 40543, 40559, 40577, 40583, 40591, 40597, 40609, 40627, 40637, 40639, 40693, 40697, 40699, 40709, 40739, 40751, 40759, 40763, 40771, 40787, 40801, 40813, 40819, 40823, 40829, 40841, 40847, 40849, 40853, 40867, 40879, 40883, 40897, 40903, 40927, 40933, 40939, 40949, 40961, 40973, 40993, 41011, 41017, 41023, 41039, 41047, 41051, 41057, 41077, 41081, 41113, 41117, 41131, 41141, 41143, 41149, 41161, 41177, 41179, 41183, 41189, 41201, 41203, 41213, 41221, 41227, 41231, 41233, 41243, 41257, 41263, 41269, 41281, 41299, 41333, 41341, 41351, 41357, 41381, 41387, 41389, 41399, 41411, 41413, 41443, 41453, 41467, 41479, 41491, 41507, 41513, 41519, 41521, 41539, 41543, 41549, 41579, 41593, 41597, 41603, 41609, 41611, 41617, 41621, 41627, 41641, 41647, 41651, 41659, 41669, 41681, 41687, 41719, 41729, 41737, 41759, 41761, 41771, 41777, 41801, 41809, 41813, 41843, 41849, 41851, 41863, 41879, 41887, 41893, 41897, 41903, 41911, 41927, 41941, 41947, 41953, 41957, 41959, 41969, 41981, 41983, 41999, 42013, 42017, 42019, 42023, 42043, 42061, 42071, 42073, 42083, 42089, 42101, 42131, 42139, 42157, 42169, 42179, 42181, 42187, 42193, 42197, 42209, 42221, 42223, 42227, 42239, 42257, 42281, 42283, 42293, 42299, 42307, 42323, 42331, 42337, 42349, 42359, 42373, 42379, 42391, 42397, 42403, 42407, 42409, 42433, 42437, 42443, 42451, 42457, 42461, 42463, 42467, 42473, 42487, 42491, 42499, 42509, 42533, 42557, 42569, 42571, 42577, 42589, 42611, 42641, 42643, 42649, 42667, 42677, 42683, 42689, 42697, 42701, 42703, 42709, 42719, 42727, 42737, 42743, 42751, 42767, 42773, 42787, 42793, 42797, 42821, 42829, 42839, 42841, 42853, 42859, 42863, 42899, 42901, 42923, 42929, 42937, 42943, 42953, 42961, 42967, 42979, 42989, 43003, 43013, 43019, 43037, 43049, 43051, 43063, 43067, 43093, 43103, 43117, 43133, 43151, 43159, 43177, 43189, 43201, 43207, 43223, 43237, 43261, 43271, 43283, 43291, 43313, 43319, 43321, 43331, 43391, 43397, 43399, 43403, 43411, 43427, 43441, 43451, 43457, 43481, 43487, 43499, 43517, 43541, 43543, 43573, 43577, 43579, 43591, 43597, 43607, 43609, 43613, 43627, 43633, 43649, 43651, 43661, 43669, 43691, 43711, 43717, 43721, 43753, 43759, 43777, 43781, 43783, 43787, 43789, 43793, 43801, 43853, 43867, 43889, 43891, 43913, 43933, 43943, 43951, 43961, 43963, 43969, 43973, 43987, 43991, 43997, 44017, 44021, 44027, 44029, 44041, 44053, 44059, 44071, 44087, 44089, 44101, 44111, 44119, 44123, 44129, 44131, 44159, 44171, 44179, 44189, 44201, 44203, 44207, 44221, 44249, 44257, 44263, 44267, 44269, 44273, 44279, 44281, 44293, 44351, 44357, 44371, 44381, 44383, 44389, 44417, 44449, 44453, 44483, 44491, 44497, 44501, 44507, 44519, 44531, 44533, 44537, 44543, 44549, 44563, 44579, 44587, 44617, 44621, 44623, 44633, 44641, 44647, 44651, 44657, 44683, 44687, 44699, 44701, 44711, 44729, 44741, 44753, 44771, 44773, 44777, 44789, 44797, 44809, 44819, 44839, 44843, 44851, 44867, 44879, 44887, 44893, 44909, 44917, 44927, 44939, 44953, 44959, 44963, 44971, 44983, 44987, 45007, 45013, 45053, 45061, 45077, 45083, 45119, 45121, 45127, 45131, 45137, 45139, 45161, 45179, 45181, 45191, 45197, 45233, 45247, 45259, 45263, 45281, 45289, 45293, 45307, 45317, 45319, 45329, 45337, 45341, 45343, 45361, 45377, 45389, 45403, 45413, 45427, 45433, 45439, 45481, 45491, 45497, 45503, 45523, 45533, 45541, 45553, 45557, 45569, 45587, 45589, 45599, 45613, 45631, 45641, 45659, 45667, 45673, 45677, 45691, 45697, 45707, 45737, 45751, 45757, 45763, 45767, 45779, 45817, 45821, 45823, 45827, 45833, 45841, 45853, 45863, 45869, 45887, 45893, 45943, 45949, 45953, 45959, 45971, 45979, 45989, 46021, 46027, 46049, 46051, 46061, 46073, 46091, 46093, 46099, 46103, 46133, 46141, 46147, 46153, 46171, 46181, 46183, 46187, 46199, 46219, 46229, 46237, 46261, 46271, 46273, 46279, 46301, 46307, 46309, 46327, 46337, 46349, 46351, 46381, 46399, 46411, 46439, 46441, 46447, 46451, 46457, 46471, 46477, 46489, 46499, 46507, 46511, 46523, 46549, 46559, 46567, 46573, 46589, 46591, 46601, 46619, 46633, 46639, 46643, 46649, 46663, 46679, 46681, 46687, 46691, 46703, 46723, 46727, 46747, 46751, 46757, 46769, 46771, 46807, 46811, 46817, 46819, 46829, 46831, 46853, 46861, 46867, 46877, 46889, 46901, 46919, 46933, 46957, 46993, 46997, 47017, 47041, 47051, 47057, 47059, 47087, 47093, 47111, 47119, 47123, 47129, 47137, 47143, 47147, 47149, 47161, 47189, 47207, 47221, 47237, 47251, 47269, 47279, 47287, 47293, 47297, 47303, 47309, 47317, 47339, 47351, 47353, 47363, 47381, 47387, 47389, 47407, 47417, 47419, 47431, 47441, 47459, 47491, 47497, 47501, 47507, 47513, 47521, 47527, 47533, 47543, 47563, 47569, 47581, 47591, 47599, 47609, 47623, 47629, 47639, 47653, 47657, 47659, 47681, 47699, 47701, 47711, 47713, 47717, 47737, 47741, 47743, 47777, 47779, 47791, 47797, 47807, 47809, 47819, 47837, 47843, 47857, 47869, 47881, 47903, 47911, 47917, 47933, 47939, 47947, 47951, 47963, 47969, 47977, 47981, 48017, 48023, 48029, 48049, 48073, 48079, 48091, 48109, 48119, 48121, 48131, 48157, 48163, 48179, 48187, 48193, 48197, 48221, 48239, 48247, 48259, 48271, 48281, 48299, 48311, 48313, 48337, 48341, 48353, 48371, 48383, 48397, 48407, 48409, 48413, 48437, 48449, 48463, 48473, 48479, 48481, 48487, 48491, 48497, 48523, 48527, 48533, 48539, 48541, 48563, 48571, 48589, 48593, 48611, 48619, 48623, 48647, 48649, 48661, 48673, 48677, 48679, 48731, 48733, 48751, 48757, 48761, 48767, 48779, 48781, 48787, 48799, 48809, 48817, 48821, 48823, 48847, 48857, 48859, 48869, 48871, 48883, 48889, 48907, 48947, 48953, 48973, 48989, 48991, 49003, 49009, 49019, 49031, 49033, 49037, 49043, 49057, 49069, 49081, 49103, 49109, 49117, 49121, 49123, 49139, 49157, 49169, 49171, 49177, 49193, 49199, 49201, 49207, 49211, 49223, 49253, 49261, 49277, 49279, 49297, 49307, 49331, 49333, 49339, 49363, 49367, 49369, 49391, 49393, 49409, 49411, 49417, 49429, 49433, 49451, 49459, 49463, 49477, 49481, 49499, 49523, 49529, 49531, 49537, 49547, 49549, 49559, 49597, 49603, 49613, 49627, 49633, 49639, 49663, 49667, 49669, 49681, 49697, 49711, 49727, 49739, 49741, 49747, 49757, 49783, 49787, 49789, 49801, 49807, 49811, 49823, 49831, 49843, 49853, 49871, 49877, 49891, 49919, 49921, 49927, 49937, 49939, 49943, 49957, 49991, 49993, 49999, 50021, 50023, 50033, 50047, 50051, 50053, 50069, 50077, 50087, 50093, 50101, 50111, 50119, 50123, 50129, 50131, 50147, 50153, 50159, 50177, 50207, 50221, 50227, 50231, 50261, 50263, 50273, 50287, 50291, 50311, 50321, 50329, 50333, 50341, 50359, 50363, 50377, 50383, 50387, 50411, 50417, 50423, 50441, 50459, 50461, 50497, 50503, 50513, 50527, 50539, 50543, 50549, 50551, 50581, 50587, 50591, 50593, 50599, 50627, 50647, 50651, 50671, 50683, 50707, 50723, 50741, 50753, 50767, 50773, 50777, 50789, 50821, 50833, 50839, 50849, 50857, 50867, 50873, 50891, 50893, 50909, 50923, 50929, 50951, 50957, 50969, 50971, 50989, 50993, 51001, 51031, 51043, 51047, 51059, 51061, 51071, 51109, 51131, 51133, 51137, 51151, 51157, 51169, 51193, 51197, 51199, 51203, 51217, 51229, 51239, 51241, 51257, 51263, 51283, 51287, 51307, 51329, 51341, 51343, 51347, 51349, 51361, 51383, 51407, 51413, 51419, 51421, 51427, 51431, 51437, 51439, 51449, 51461, 51473, 51479, 51481, 51487, 51503, 51511, 51517, 51521, 51539, 51551, 51563, 51577, 51581, 51593, 51599, 51607, 51613, 51631, 51637, 51647, 51659, 51673, 51679, 51683, 51691, 51713, 51719, 51721, 51749, 51767, 51769, 51787, 51797, 51803, 51817, 51827, 51829, 51839, 51853, 51859, 51869, 51871, 51893, 51899, 51907, 51913, 51929, 51941, 51949, 51971, 51973, 51977, 51991, 52009, 52021, 52027, 52051, 52057, 52067, 52069, 52081, 52103, 52121, 52127, 52147, 52153, 52163, 52177, 52181, 52183, 52189, 52201, 52223, 52237, 52249, 52253, 52259, 52267, 52289, 52291, 52301, 52313, 52321, 52361, 52363, 52369, 52379, 52387, 52391, 52433, 52453, 52457, 52489, 52501, 52511, 52517, 52529, 52541, 52543, 52553, 52561, 52567, 52571, 52579, 52583, 52609, 52627, 52631, 52639, 52667, 52673, 52691, 52697, 52709, 52711, 52721, 52727, 52733, 52747, 52757, 52769, 52783, 52807, 52813, 52817, 52837, 52859, 52861, 52879, 52883, 52889, 52901, 52903, 52919, 52937, 52951, 52957, 52963, 52967, 52973, 52981, 52999, 53003, 53017, 53047, 53051, 53069, 53077, 53087, 53089, 53093, 53101, 53113, 53117, 53129, 53147, 53149, 53161, 53171, 53173, 53189, 53197, 53201, 53231, 53233, 53239, 53267, 53269, 53279, 53281, 53299, 53309, 53323, 53327, 53353, 53359, 53377, 53381, 53401, 53407, 53411, 53419, 53437, 53441, 53453, 53479, 53503, 53507, 53527, 53549, 53551, 53569, 53591, 53593, 53597, 53609, 53611, 53617, 53623, 53629, 53633, 53639, 53653, 53657, 53681, 53693, 53699, 53717, 53719, 53731, 53759, 53773, 53777, 53783, 53791, 53813, 53819, 53831, 53849, 53857, 53861, 53881, 53887, 53891, 53897, 53899, 53917, 53923, 53927, 53939, 53951, 53959, 53987, 53993, 54001, 54011, 54013, 54037, 54049, 54059, 54083, 54091, 54101, 54121, 54133, 54139, 54151, 54163, 54167, 54181, 54193, 54217, 54251, 54269, 54277, 54287, 54293, 54311, 54319, 54323, 54331, 54347, 54361, 54367, 54371, 54377, 54401, 54403, 54409, 54413, 54419, 54421, 54437, 54443, 54449, 54469, 54493, 54497, 54499, 54503, 54517, 54521, 54539, 54541, 54547, 54559, 54563, 54577, 54581, 54583, 54601, 54617, 54623, 54629, 54631, 54647, 54667, 54673, 54679, 54709, 54713, 54721, 54727, 54751, 54767, 54773, 54779, 54787, 54799, 54829, 54833, 54851, 54869, 54877, 54881, 54907, 54917, 54919, 54941, 54949, 54959, 54973, 54979, 54983, 55001, 55009, 55021, 55049, 55051, 55057, 55061, 55073, 55079, 55103, 55109, 55117, 55127, 55147, 55163, 55171, 55201, 55207, 55213, 55217, 55219, 55229, 55243, 55249, 55259, 55291, 55313, 55331, 55333, 55337, 55339, 55343, 55351, 55373, 55381, 55399, 55411, 55439, 55441, 55457, 55469, 55487, 55501, 55511, 55529, 55541, 55547, 55579, 55589, 55603, 55609, 55619, 55621, 55631, 55633, 55639, 55661, 55663, 55667, 55673, 55681, 55691, 55697, 55711, 55717, 55721, 55733, 55763, 55787, 55793, 55799, 55807, 55813, 55817, 55819, 55823, 55829, 55837, 55843, 55849, 55871, 55889, 55897, 55901, 55903, 55921, 55927, 55931, 55933, 55949, 55967, 55987, 55997, 56003, 56009, 56039, 56041, 56053, 56081, 56087, 56093, 56099, 56101, 56113, 56123, 56131, 56149, 56167, 56171, 56179, 56197, 56207, 56209, 56237, 56239, 56249, 56263, 56267, 56269, 56299, 56311, 56333, 56359, 56369, 56377, 56383, 56393, 56401, 56417, 56431, 56437, 56443, 56453, 56467, 56473, 56477, 56479, 56489, 56501, 56503, 56509, 56519, 56527, 56531, 56533, 56543, 56569, 56591, 56597, 56599, 56611, 56629, 56633, 56659, 56663, 56671, 56681, 56687, 56701, 56711, 56713, 56731, 56737, 56747, 56767, 56773, 56779, 56783, 56807, 56809, 56813, 56821, 56827, 56843, 56857, 56873, 56891, 56893, 56897, 56909, 56911, 56921, 56923, 56929, 56941, 56951, 56957, 56963, 56983, 56989, 56993, 56999, 57037, 57041, 57047, 57059, 57073, 57077, 57089, 57097, 57107, 57119, 57131, 57139, 57143, 57149, 57163, 57173, 57179, 57191, 57193, 57203, 57221, 57223, 57241, 57251, 57259, 57269, 57271, 57283, 57287, 57301, 57329, 57331, 57347, 57349, 57367, 57373, 57383, 57389, 57397, 57413, 57427, 57457, 57467, 57487, 57493, 57503, 57527, 57529, 57557, 57559, 57571, 57587, 57593, 57601, 57637, 57641, 57649, 57653, 57667, 57679, 57689, 57697, 57709, 57713, 57719, 57727, 57731, 57737, 57751, 57773, 57781, 57787, 57791, 57793, 57803, 57809, 57829, 57839, 57847, 57853, 57859, 57881, 57899, 57901, 57917, 57923, 57943, 57947, 57973, 57977, 57991, 58013, 58027, 58031, 58043, 58049, 58057, 58061, 58067, 58073, 58099, 58109, 58111, 58129, 58147, 58151, 58153, 58169, 58171, 58189, 58193, 58199, 58207, 58211, 58217, 58229, 58231, 58237, 58243, 58271, 58309, 58313, 58321, 58337, 58363, 58367, 58369, 58379, 58391, 58393, 58403, 58411, 58417, 58427, 58439, 58441, 58451, 58453, 58477, 58481, 58511, 58537, 58543, 58549, 58567, 58573, 58579, 58601, 58603, 58613, 58631, 58657, 58661, 58679, 58687, 58693, 58699, 58711, 58727, 58733, 58741, 58757, 58763, 58771, 58787, 58789, 58831, 58889, 58897, 58901, 58907, 58909, 58913, 58921, 58937, 58943, 58963, 58967, 58979, 58991, 58997, 59009, 59011, 59021, 59023, 59029, 59051, 59053, 59063, 59069, 59077, 59083, 59093, 59107, 59113, 59119, 59123, 59141, 59149, 59159, 59167, 59183, 59197, 59207, 59209, 59219, 59221, 59233, 59239, 59243, 59263, 59273, 59281, 59333, 59341, 59351, 59357, 59359, 59369, 59377, 59387, 59393, 59399, 59407, 59417, 59419, 59441, 59443, 59447, 59453, 59467, 59471, 59473, 59497, 59509, 59513, 59539, 59557, 59561, 59567, 59581, 59611, 59617, 59621, 59627, 59629, 59651, 59659, 59663, 59669, 59671, 59693, 59699, 59707, 59723, 59729, 59743, 59747, 59753, 59771, 59779, 59791, 59797, 59809, 59833, 59863, 59879, 59887, 59921, 59929, 59951, 59957, 59971, 59981, 59999, 60013, 60017, 60029, 60037, 60041, 60077, 60083, 60089, 60091, 60101, 60103, 60107, 60127, 60133, 60139, 60149, 60161, 60167, 60169, 60209, 60217, 60223, 60251, 60257, 60259, 60271, 60289, 60293, 60317, 60331, 60337, 60343, 60353, 60373, 60383, 60397, 60413, 60427, 60443, 60449, 60457, 60493, 60497, 60509, 60521, 60527, 60539, 60589, 60601, 60607, 60611, 60617, 60623, 60631, 60637, 60647, 60649, 60659, 60661, 60679, 60689, 60703, 60719, 60727, 60733, 60737, 60757, 60761, 60763, 60773, 60779, 60793, 60811, 60821, 60859, 60869, 60887, 60889, 60899, 60901, 60913, 60917, 60919, 60923, 60937, 60943, 60953, 60961, 61001, 61007, 61027, 61031, 61043, 61051, 61057, 61091, 61099, 61121, 61129, 61141, 61151, 61153, 61169, 61211, 61223, 61231, 61253, 61261, 61283, 61291, 61297, 61331, 61333, 61339, 61343, 61357, 61363, 61379, 61381, 61403, 61409, 61417, 61441, 61463, 61469, 61471, 61483, 61487, 61493, 61507, 61511, 61519, 61543, 61547, 61553, 61559, 61561, 61583, 61603, 61609, 61613, 61627, 61631, 61637, 61643, 61651, 61657, 61667, 61673, 61681, 61687, 61703, 61717, 61723, 61729, 61751, 61757, 61781, 61813, 61819, 61837, 61843, 61861, 61871, 61879, 61909, 61927, 61933, 61949, 61961, 61967, 61979, 61981, 61987, 61991, 62003, 62011, 62017, 62039, 62047, 62053, 62057, 62071, 62081, 62099, 62119, 62129, 62131, 62137, 62141, 62143, 62171, 62189, 62191, 62201, 62207, 62213, 62219, 62233, 62273, 62297, 62299, 62303, 62311, 62323, 62327, 62347, 62351, 62383, 62401, 62417, 62423, 62459, 62467, 62473, 62477, 62483, 62497, 62501, 62507, 62533, 62539, 62549, 62563, 62581, 62591, 62597, 62603, 62617, 62627, 62633, 62639, 62653, 62659, 62683, 62687, 62701, 62723, 62731, 62743, 62753, 62761, 62773, 62791, 62801, 62819, 62827, 62851, 62861, 62869, 62873, 62897, 62903, 62921, 62927, 62929, 62939, 62969, 62971, 62981, 62983, 62987, 62989, 63029, 63031, 63059, 63067, 63073, 63079, 63097, 63103, 63113, 63127, 63131, 63149, 63179, 63197, 63199, 63211, 63241, 63247, 63277, 63281, 63299, 63311, 63313, 63317, 63331, 63337, 63347, 63353, 63361, 63367, 63377, 63389, 63391, 63397, 63409, 63419, 63421, 63439, 63443, 63463, 63467, 63473, 63487, 63493, 63499, 63521, 63527, 63533, 63541, 63559, 63577, 63587, 63589, 63599, 63601, 63607, 63611, 63617, 63629, 63647, 63649, 63659, 63667, 63671, 63689, 63691, 63697, 63703, 63709, 63719, 63727, 63737, 63743, 63761, 63773, 63781, 63793, 63799, 63803, 63809, 63823, 63839, 63841, 63853, 63857, 63863, 63901, 63907, 63913, 63929, 63949, 63977, 63997, 64007, 64013, 64019, 64033, 64037, 64063, 64067, 64081, 64091, 64109, 64123, 64151, 64153, 64157, 64171, 64187, 64189, 64217, 64223, 64231, 64237, 64271, 64279, 64283, 64301, 64303, 64319, 64327, 64333, 64373, 64381, 64399, 64403, 64433, 64439, 64451, 64453, 64483, 64489, 64499, 64513, 64553, 64567, 64577, 64579, 64591, 64601, 64609, 64613, 64621, 64627, 64633, 64661, 64663, 64667, 64679, 64693, 64709, 64717, 64747, 64763, 64781, 64783, 64793, 64811, 64817, 64849, 64853, 64871, 64877, 64879, 64891, 64901, 64919, 64921, 64927, 64937, 64951, 64969, 64997, 65003, 65011, 65027, 65029, 65033, 65053, 65063, 65071, 65089, 65099, 65101, 65111, 65119, 65123, 65129, 65141, 65147, 65167, 65171, 65173, 65179, 65183, 65203, 65213, 65239, 65257, 65267, 65269, 65287, 65293, 65309, 65323, 65327, 65353, 65357, 65371, 65381, 65393, 65407, 65413, 65419, 65423, 65437, 65447, 65449, 65479, 65497, 65519, 65521, 65537, 65539, 65543, 65551, 65557, 65563, 65579, 65581, 65587, 65599, 65609, 65617, 65629, 65633, 65647, 65651, 65657, 65677, 65687, 65699, 65701, 65707, 65713, 65717, 65719, 65729, 65731, 65761, 65777, 65789, 65809, 65827, 65831, 65837, 65839, 65843, 65851, 65867, 65881, 65899, 65921, 65927, 65929, 65951, 65957, 65963, 65981, 65983, 65993, 66029, 66037, 66041, 66047, 66067, 66071, 66083, 66089, 66103, 66107, 66109, 66137, 66161, 66169, 66173, 66179, 66191, 66221, 66239, 66271, 66293, 66301, 66337, 66343, 66347, 66359, 66361, 66373, 66377, 66383, 66403, 66413, 66431, 66449, 66457, 66463, 66467, 66491, 66499, 66509, 66523, 66529, 66533, 66541, 66553, 66569, 66571, 66587, 66593, 66601, 66617, 66629, 66643, 66653, 66683, 66697, 66701, 66713, 66721, 66733, 66739, 66749, 66751, 66763, 66791, 66797, 66809, 66821, 66841, 66851, 66853, 66863, 66877, 66883, 66889, 66919, 66923, 66931, 66943, 66947, 66949, 66959, 66973, 66977, 67003, 67021, 67033, 67043, 67049, 67057, 67061, 67073, 67079, 67103, 67121, 67129, 67139, 67141, 67153, 67157, 67169, 67181, 67187, 67189, 67211, 67213, 67217, 67219, 67231, 67247, 67261, 67271, 67273, 67289, 67307, 67339, 67343, 67349, 67369, 67391, 67399, 67409, 67411, 67421, 67427, 67429, 67433, 67447, 67453, 67477, 67481, 67489, 67493, 67499, 67511, 67523, 67531, 67537, 67547, 67559, 67567, 67577, 67579, 67589, 67601, 67607, 67619, 67631, 67651, 67679, 67699, 67709, 67723, 67733, 67741, 67751, 67757, 67759, 67763, 67777, 67783, 67789, 67801, 67807, 67819, 67829, 67843, 67853, 67867, 67883, 67891, 67901, 67927, 67931, 67933, 67939, 67943, 67957, 67961, 67967, 67979, 67987, 67993, 68023, 68041, 68053, 68059, 68071, 68087, 68099, 68111, 68113, 68141, 68147, 68161, 68171, 68207, 68209, 68213, 68219, 68227, 68239, 68261, 68279, 68281, 68311, 68329, 68351, 68371, 68389, 68399, 68437, 68443, 68447, 68449, 68473, 68477, 68483, 68489, 68491, 68501, 68507, 68521, 68531, 68539, 68543, 68567, 68581, 68597, 68611, 68633, 68639, 68659, 68669, 68683, 68687, 68699, 68711, 68713, 68729, 68737, 68743, 68749, 68767, 68771, 68777, 68791, 68813, 68819, 68821, 68863, 68879, 68881, 68891, 68897, 68899, 68903, 68909, 68917, 68927, 68947, 68963, 68993, 69001, 69011, 69019, 69029, 69031, 69061, 69067, 69073, 69109, 69119, 69127, 69143, 69149, 69151, 69163, 69191, 69193, 69197, 69203, 69221, 69233, 69239, 69247, 69257, 69259, 69263, 69313, 69317, 69337, 69341, 69371, 69379, 69383, 69389, 69401, 69403, 69427, 69431, 69439, 69457, 69463, 69467, 69473, 69481, 69491, 69493, 69497, 69499, 69539, 69557, 69593, 69623, 69653, 69661, 69677, 69691, 69697, 69709, 69737, 69739, 69761, 69763, 69767, 69779, 69809, 69821, 69827, 69829, 69833, 69847, 69857, 69859, 69877, 69899, 69911, 69929, 69931, 69941, 69959, 69991, 69997, 70001, 70003, 70009, 70019, 70039, 70051, 70061, 70067, 70079, 70099, 70111, 70117, 70121, 70123, 70139, 70141, 70157, 70163, 70177, 70181, 70183, 70199, 70201, 70207, 70223, 70229, 70237, 70241, 70249, 70271, 70289, 70297, 70309, 70313, 70321, 70327, 70351, 70373, 70379, 70381, 70393, 70423, 70429, 70439, 70451, 70457, 70459, 70481, 70487, 70489, 70501, 70507, 70529, 70537, 70549, 70571, 70573, 70583, 70589, 70607, 70619, 70621, 70627, 70639, 70657, 70663, 70667, 70687, 70709, 70717, 70729, 70753, 70769, 70783, 70793, 70823, 70841, 70843, 70849, 70853, 70867, 70877, 70879, 70891, 70901, 70913, 70919, 70921, 70937, 70949, 70951, 70957, 70969, 70979, 70981, 70991, 70997, 70999, 71011, 71023, 71039, 71059, 71069, 71081, 71089, 71119, 71129, 71143, 71147, 71153, 71161, 71167, 71171, 71191, 71209, 71233, 71237, 71249, 71257, 71261, 71263, 71287, 71293, 71317, 71327, 71329, 71333, 71339, 71341, 71347, 71353, 71359, 71363, 71387, 71389, 71399, 71411, 71413, 71419, 71429, 71437, 71443, 71453, 71471, 71473, 71479, 71483, 71503, 71527, 71537, 71549, 71551, 71563, 71569, 71593, 71597, 71633, 71647, 71663, 71671, 71693, 71699, 71707, 71711, 71713, 71719, 71741, 71761, 71777, 71789, 71807, 71809, 71821, 71837, 71843, 71849, 71861, 71867, 71879, 71881, 71887, 71899, 71909, 71917, 71933, 71941, 71947, 71963, 71971, 71983, 71987, 71993, 71999, 72019, 72031, 72043, 72047, 72053, 72073, 72077, 72089, 72091, 72101, 72103, 72109, 72139, 72161, 72167, 72169, 72173, 72211, 72221, 72223, 72227, 72229, 72251, 72253, 72269, 72271, 72277, 72287, 72307, 72313, 72337, 72341, 72353, 72367, 72379, 72383, 72421, 72431, 72461, 72467, 72469, 72481, 72493, 72497, 72503, 72533, 72547, 72551, 72559, 72577, 72613, 72617, 72623, 72643, 72647, 72649, 72661, 72671, 72673, 72679, 72689, 72701, 72707, 72719, 72727, 72733, 72739, 72763, 72767, 72797, 72817, 72823, 72859, 72869, 72871, 72883, 72889, 72893, 72901, 72907, 72911, 72923, 72931, 72937, 72949, 72953, 72959, 72973, 72977, 72997, 73009, 73013, 73019, 73037, 73039, 73043, 73061, 73063, 73079, 73091, 73121, 73127, 73133, 73141, 73181, 73189, 73237, 73243, 73259, 73277, 73291, 73303, 73309, 73327, 73331, 73351, 73361, 73363, 73369, 73379, 73387, 73417, 73421, 73433, 73453, 73459, 73471, 73477, 73483, 73517, 73523, 73529, 73547, 73553, 73561, 73571, 73583, 73589, 73597, 73607, 73609, 73613, 73637, 73643, 73651, 73673, 73679, 73681, 73693, 73699, 73709, 73721, 73727, 73751, 73757, 73771, 73783, 73819, 73823, 73847, 73849, 73859, 73867, 73877, 73883, 73897, 73907, 73939, 73943, 73951, 73961, 73973, 73999, 74017, 74021, 74027, 74047, 74051, 74071, 74077, 74093, 74099, 74101, 74131, 74143, 74149, 74159, 74161, 74167, 74177, 74189, 74197, 74201, 74203, 74209, 74219, 74231, 74257, 74279, 74287, 74293, 74297, 74311, 74317, 74323, 74353, 74357, 74363, 74377, 74381, 74383, 74411, 74413, 74419, 74441, 74449, 74453, 74471, 74489, 74507, 74509, 74521, 74527, 74531, 74551, 74561, 74567, 74573, 74587, 74597, 74609, 74611, 74623, 74653, 74687, 74699, 74707, 74713, 74717, 74719, 74729, 74731, 74747, 74759, 74761, 74771, 74779, 74797, 74821, 74827, 74831, 74843, 74857, 74861, 74869, 74873, 74887, 74891, 74897, 74903, 74923, 74929, 74933, 74941, 74959, 75011, 75013, 75017, 75029, 75037, 75041, 75079, 75083, 75109, 75133, 75149, 75161, 75167, 75169, 75181, 75193, 75209, 75211, 75217, 75223, 75227, 75239, 75253, 75269, 75277, 75289, 75307, 75323, 75329, 75337, 75347, 75353, 75367, 75377, 75389, 75391, 75401, 75403, 75407, 75431, 75437, 75479, 75503, 75511, 75521, 75527, 75533, 75539, 75541, 75553, 75557, 75571, 75577, 75583, 75611, 75617, 75619, 75629, 75641, 75653, 75659, 75679, 75683, 75689, 75703, 75707, 75709, 75721, 75731, 75743, 75767, 75773, 75781, 75787, 75793, 75797, 75821, 75833, 75853, 75869, 75883, 75913, 75931, 75937, 75941, 75967, 75979, 75983, 75989, 75991, 75997, 76001, 76003, 76031, 76039, 76079, 76081, 76091, 76099, 76103, 76123, 76129, 76147, 76157, 76159, 76163, 76207, 76213, 76231, 76243, 76249, 76253, 76259, 76261, 76283, 76289, 76303, 76333, 76343, 76367, 76369, 76379, 76387, 76403, 76421, 76423, 76441, 76463, 76471, 76481, 76487, 76493, 76507, 76511, 76519, 76537, 76541, 76543, 76561, 76579, 76597, 76603, 76607, 76631, 76649, 76651, 76667, 76673, 76679, 76697, 76717, 76733, 76753, 76757, 76771, 76777, 76781, 76801, 76819, 76829, 76831, 76837, 76847, 76871, 76873, 76883, 76907, 76913, 76919, 76943, 76949, 76961, 76963, 76991, 77003, 77017, 77023, 77029, 77041, 77047, 77069, 77081, 77093, 77101, 77137, 77141, 77153, 77167, 77171, 77191, 77201, 77213, 77237, 77239, 77243, 77249, 77261, 77263, 77267, 77269, 77279, 77291, 77317, 77323, 77339, 77347, 77351, 77359, 77369, 77377, 77383, 77417, 77419, 77431, 77447, 77471, 77477, 77479, 77489, 77491, 77509, 77513, 77521, 77527, 77543, 77549, 77551, 77557, 77563, 77569, 77573, 77587, 77591, 77611, 77617, 77621, 77641, 77647, 77659, 77681, 77687, 77689, 77699, 77711, 77713, 77719, 77723, 77731, 77743, 77747, 77761, 77773, 77783, 77797, 77801, 77813, 77839, 77849, 77863, 77867, 77893, 77899, 77929, 77933, 77951, 77969, 77977, 77983, 77999, 78007, 78017, 78031, 78041, 78049, 78059, 78079, 78101, 78121, 78137, 78139, 78157, 78163, 78167, 78173, 78179, 78191, 78193, 78203, 78229, 78233, 78241, 78259, 78277, 78283, 78301, 78307, 78311, 78317, 78341, 78347, 78367, 78401, 78427, 78437, 78439, 78467, 78479, 78487, 78497, 78509, 78511, 78517, 78539, 78541, 78553, 78569, 78571, 78577, 78583, 78593, 78607, 78623, 78643, 78649, 78653, 78691, 78697, 78707, 78713, 78721, 78737, 78779, 78781, 78787, 78791, 78797, 78803, 78809, 78823, 78839, 78853, 78857, 78877, 78887, 78889, 78893, 78901, 78919, 78929, 78941, 78977, 78979, 78989, 79031, 79039, 79043, 79063, 79087, 79103, 79111, 79133, 79139, 79147, 79151, 79153, 79159, 79181, 79187, 79193, 79201, 79229, 79231, 79241, 79259, 79273, 79279, 79283, 79301, 79309, 79319, 79333, 79337, 79349, 79357, 79367, 79379, 79393, 79397, 79399, 79411, 79423, 79427, 79433, 79451, 79481, 79493, 79531, 79537, 79549, 79559, 79561, 79579, 79589, 79601, 79609, 79613, 79621, 79627, 79631, 79633, 79657, 79669, 79687, 79691, 79693, 79697, 79699, 79757, 79769, 79777, 79801, 79811, 79813, 79817, 79823, 79829, 79841, 79843, 79847, 79861, 79867, 79873, 79889, 79901, 79903, 79907, 79939, 79943, 79967, 79973, 79979, 79987, 79997, 79999, 80021, 80039, 80051, 80071, 80077, 80107, 80111, 80141, 80147, 80149, 80153, 80167, 80173, 80177, 80191, 80207, 80209, 80221, 80231, 80233, 80239, 80251, 80263, 80273, 80279, 80287, 80309, 80317, 80329, 80341, 80347, 80363, 80369, 80387, 80407, 80429, 80447, 80449, 80471, 80473, 80489, 80491, 80513, 80527, 80537, 80557, 80567, 80599, 80603, 80611, 80621, 80627, 80629, 80651, 80657, 80669, 80671, 80677, 80681, 80683, 80687, 80701, 80713, 80737, 80747, 80749, 80761, 80777, 80779, 80783, 80789, 80803, 80809, 80819, 80831, 80833, 80849, 80863, 80897, 80909, 80911, 80917, 80923, 80929, 80933, 80953, 80963, 80989, 81001, 81013, 81017, 81019, 81023, 81031, 81041, 81043, 81047, 81049, 81071, 81077, 81083, 81097, 81101, 81119, 81131, 81157, 81163, 81173, 81181, 81197, 81199, 81203, 81223, 81233, 81239, 81281, 81283, 81293, 81299, 81307, 81331, 81343, 81349, 81353, 81359, 81371, 81373, 81401, 81409, 81421, 81439, 81457, 81463, 81509, 81517, 81527, 81533, 81547, 81551, 81553, 81559, 81563, 81569, 81611, 81619, 81629, 81637, 81647, 81649, 81667, 81671, 81677, 81689, 81701, 81703, 81707, 81727, 81737, 81749, 81761, 81769, 81773, 81799, 81817, 81839, 81847, 81853, 81869, 81883, 81899, 81901, 81919, 81929, 81931, 81937, 81943, 81953, 81967, 81971, 81973, 82003, 82007, 82009, 82013, 82021, 82031, 82037, 82039, 82051, 82067, 82073, 82129, 82139, 82141, 82153, 82163, 82171, 82183, 82189, 82193, 82207, 82217, 82219, 82223, 82231, 82237, 82241, 82261, 82267, 82279, 82301, 82307, 82339, 82349, 82351, 82361, 82373, 82387, 82393, 82421, 82457, 82463, 82469, 82471, 82483, 82487, 82493, 82499, 82507, 82529, 82531, 82549, 82559, 82561, 82567, 82571, 82591, 82601, 82609, 82613, 82619, 82633, 82651, 82657, 82699, 82721, 82723, 82727, 82729, 82757, 82759, 82763, 82781, 82787, 82793, 82799, 82811, 82813, 82837, 82847, 82883, 82889, 82891, 82903, 82913, 82939, 82963, 82981, 82997, 83003, 83009, 83023, 83047, 83059, 83063, 83071, 83077, 83089, 83093, 83101, 83117, 83137, 83177, 83203, 83207, 83219, 83221, 83227, 83231, 83233, 83243, 83257, 83267, 83269, 83273, 83299, 83311, 83339, 83341, 83357, 83383, 83389, 83399, 83401, 83407, 83417, 83423, 83431, 83437, 83443, 83449, 83459, 83471, 83477, 83497, 83537, 83557, 83561, 83563, 83579, 83591, 83597, 83609, 83617, 83621, 83639, 83641, 83653, 83663, 83689, 83701, 83717, 83719, 83737, 83761, 83773, 83777, 83791, 83813, 83833, 83843, 83857, 83869, 83873, 83891, 83903, 83911, 83921, 83933, 83939, 83969, 83983, 83987, 84011, 84017, 84047, 84053, 84059, 84061, 84067, 84089, 84121, 84127, 84131, 84137, 84143, 84163, 84179, 84181, 84191, 84199, 84211, 84221, 84223, 84229, 84239, 84247, 84263, 84299, 84307, 84313, 84317, 84319, 84347, 84349, 84377, 84389, 84391, 84401, 84407, 84421, 84431, 84437, 84443, 84449, 84457, 84463, 84467, 84481, 84499, 84503, 84509, 84521, 84523, 84533, 84551, 84559, 84589, 84629, 84631, 84649, 84653, 84659, 84673, 84691, 84697, 84701, 84713, 84719, 84731, 84737, 84751, 84761, 84787, 84793, 84809, 84811, 84827, 84857, 84859, 84869, 84871, 84913, 84919, 84947, 84961, 84967, 84977, 84979, 84991, 85009, 85021, 85027, 85037, 85049, 85061, 85081, 85087, 85091, 85093, 85103, 85109, 85121, 85133, 85147, 85159, 85193, 85199, 85201, 85213, 85223, 85229, 85237, 85243, 85247, 85259, 85297, 85303, 85313, 85331, 85333, 85361, 85363, 85369, 85381, 85411, 85427, 85429, 85439, 85447, 85451, 85453, 85469, 85487, 85513, 85517, 85523, 85531, 85549, 85571, 85577, 85597, 85601, 85607, 85619, 85621, 85627, 85639, 85643, 85661, 85667, 85669, 85691, 85703, 85711, 85717, 85733, 85751, 85781, 85793, 85817, 85819, 85829, 85831, 85837, 85843, 85847, 85853, 85889, 85903, 85909, 85931, 85933, 85991, 85999, 86011, 86017, 86027, 86029, 86069, 86077, 86083, 86111, 86113, 86117, 86131, 86137, 86143, 86161, 86171, 86179, 86183, 86197, 86201, 86209, 86239, 86243, 86249, 86257, 86263, 86269, 86287, 86291, 86293, 86297, 86311, 86323, 86341, 86351, 86353, 86357, 86369, 86371, 86381, 86389, 86399, 86413, 86423, 86441, 86453, 86461, 86467, 86477, 86491, 86501, 86509, 86531, 86533, 86539, 86561, 86573, 86579, 86587, 86599, 86627, 86629, 86677, 86689, 86693, 86711, 86719, 86729, 86743, 86753, 86767, 86771, 86783, 86813, 86837, 86843, 86851, 86857, 86861, 86869, 86923, 86927, 86929, 86939, 86951, 86959, 86969, 86981, 86993, 87011, 87013, 87037, 87041, 87049, 87071, 87083, 87103, 87107, 87119, 87121, 87133, 87149, 87151, 87179, 87181, 87187, 87211, 87221, 87223, 87251, 87253, 87257, 87277, 87281, 87293, 87299, 87313, 87317, 87323, 87337, 87359, 87383, 87403, 87407, 87421, 87427, 87433, 87443, 87473, 87481, 87491, 87509, 87511, 87517, 87523, 87539, 87541, 87547, 87553, 87557, 87559, 87583, 87587, 87589, 87613, 87623, 87629, 87631, 87641, 87643, 87649, 87671, 87679, 87683, 87691, 87697, 87701, 87719, 87721, 87739, 87743, 87751, 87767, 87793, 87797, 87803, 87811, 87833, 87853, 87869, 87877, 87881, 87887, 87911, 87917, 87931, 87943, 87959, 87961, 87973, 87977, 87991, 88001, 88003, 88007, 88019, 88037, 88069, 88079, 88093, 88117, 88129, 88169, 88177, 88211, 88223, 88237, 88241, 88259, 88261, 88289, 88301, 88321, 88327, 88337, 88339, 88379, 88397, 88411, 88423, 88427, 88463, 88469, 88471, 88493, 88499, 88513, 88523, 88547, 88589, 88591, 88607, 88609, 88643, 88651, 88657, 88661, 88663, 88667, 88681, 88721, 88729, 88741, 88747, 88771, 88789, 88793, 88799, 88801, 88807, 88811, 88813, 88817, 88819, 88843, 88853, 88861, 88867, 88873, 88883, 88897, 88903, 88919, 88937, 88951, 88969, 88993, 88997, 89003, 89009, 89017, 89021, 89041, 89051, 89057, 89069, 89071, 89083, 89087, 89101, 89107, 89113, 89119, 89123, 89137, 89153, 89189, 89203, 89209, 89213, 89227, 89231, 89237, 89261, 89269, 89273, 89293, 89303, 89317, 89329, 89363, 89371, 89381, 89387, 89393, 89399, 89413, 89417, 89431, 89443, 89449, 89459, 89477, 89491, 89501, 89513, 89519, 89521, 89527, 89533, 89561, 89563, 89567, 89591, 89597, 89599, 89603, 89611, 89627, 89633, 89653, 89657, 89659, 89669, 89671, 89681, 89689, 89753, 89759, 89767, 89779, 89783, 89797, 89809, 89819, 89821, 89833, 89839, 89849, 89867, 89891, 89897, 89899, 89909, 89917, 89923, 89939, 89959, 89963, 89977, 89983, 89989, 90001, 90007, 90011, 90017, 90019, 90023, 90031, 90053, 90059, 90067, 90071, 90073, 90089, 90107, 90121, 90127, 90149, 90163, 90173, 90187, 90191, 90197, 90199, 90203, 90217, 90227, 90239, 90247, 90263, 90271, 90281, 90289, 90313, 90353, 90359, 90371, 90373, 90379, 90397, 90401, 90403, 90407, 90437, 90439, 90469, 90473, 90481, 90499, 90511, 90523, 90527, 90529, 90533, 90547, 90583, 90599, 90617, 90619, 90631, 90641, 90647, 90659, 90677, 90679, 90697, 90703, 90709, 90731, 90749, 90787, 90793, 90803, 90821, 90823, 90833, 90841, 90847, 90863, 90887, 90901, 90907, 90911, 90917, 90931, 90947, 90971, 90977, 90989, 90997, 91009, 91019, 91033, 91079, 91081, 91097, 91099, 91121, 91127, 91129, 91139, 91141, 91151, 91153, 91159, 91163, 91183, 91193, 91199, 91229, 91237, 91243, 91249, 91253, 91283, 91291, 91297, 91303, 91309, 91331, 91367, 91369, 91373, 91381, 91387, 91393, 91397, 91411, 91423, 91433, 91453, 91457, 91459, 91463, 91493, 91499, 91513, 91529, 91541, 91571, 91573, 91577, 91583, 91591, 91621, 91631, 91639, 91673, 91691, 91703, 91711, 91733, 91753, 91757, 91771, 91781, 91801, 91807, 91811, 91813, 91823, 91837, 91841, 91867, 91873, 91909, 91921, 91939, 91943, 91951, 91957, 91961, 91967, 91969, 91997, 92003, 92009, 92033, 92041, 92051, 92077, 92083, 92107, 92111, 92119, 92143, 92153, 92173, 92177, 92179, 92189, 92203, 92219, 92221, 92227, 92233, 92237, 92243, 92251, 92269, 92297, 92311, 92317, 92333, 92347, 92353, 92357, 92363, 92369, 92377, 92381, 92383, 92387, 92399, 92401, 92413, 92419, 92431, 92459, 92461, 92467, 92479, 92489, 92503, 92507, 92551, 92557, 92567, 92569, 92581, 92593, 92623, 92627, 92639, 92641, 92647, 92657, 92669, 92671, 92681, 92683, 92693, 92699, 92707, 92717, 92723, 92737, 92753, 92761, 92767, 92779, 92789, 92791, 92801, 92809, 92821, 92831, 92849, 92857, 92861, 92863, 92867, 92893, 92899, 92921, 92927, 92941, 92951, 92957, 92959, 92987, 92993, 93001, 93047, 93053, 93059, 93077, 93083, 93089, 93097, 93103, 93113, 93131, 93133, 93139, 93151, 93169, 93179, 93187, 93199, 93229, 93239, 93241, 93251, 93253, 93257, 93263, 93281, 93283, 93287, 93307, 93319, 93323, 93329, 93337, 93371, 93377, 93383, 93407, 93419, 93427, 93463, 93479, 93481, 93487, 93491, 93493, 93497, 93503, 93523, 93529, 93553, 93557, 93559, 93563, 93581, 93601, 93607, 93629, 93637, 93683, 93701, 93703, 93719, 93739, 93761, 93763, 93787, 93809, 93811, 93827, 93851, 93871, 93887, 93889, 93893, 93901, 93911, 93913, 93923, 93937, 93941, 93949, 93967, 93971, 93979, 93983, 93997, 94007, 94009, 94033, 94049, 94057, 94063, 94079, 94099, 94109, 94111, 94117, 94121, 94151, 94153, 94169, 94201, 94207, 94219, 94229, 94253, 94261, 94273, 94291, 94307, 94309, 94321, 94327, 94331, 94343, 94349, 94351, 94379, 94397, 94399, 94421, 94427, 94433, 94439, 94441, 94447, 94463, 94477, 94483, 94513, 94529, 94531, 94541, 94543, 94547, 94559, 94561, 94573, 94583, 94597, 94603, 94613, 94621, 94649, 94651, 94687, 94693, 94709, 94723, 94727, 94747, 94771, 94777, 94781, 94789, 94793, 94811, 94819, 94823, 94837, 94841, 94847, 94849, 94873, 94889, 94903, 94907, 94933, 94949, 94951, 94961, 94993, 94999, 95003, 95009, 95021, 95027, 95063, 95071, 95083, 95087, 95089, 95093, 95101, 95107, 95111, 95131, 95143, 95153, 95177, 95189, 95191, 95203, 95213, 95219, 95231, 95233, 95239, 95257, 95261, 95267, 95273, 95279, 95287, 95311, 95317, 95327, 95339, 95369, 95383, 95393, 95401, 95413, 95419, 95429, 95441, 95443, 95461, 95467, 95471, 95479, 95483, 95507, 95527, 95531, 95539, 95549, 95561, 95569, 95581, 95597, 95603, 95617, 95621, 95629, 95633, 95651, 95701, 95707, 95713, 95717, 95723, 95731, 95737, 95747, 95773, 95783, 95789, 95791, 95801, 95803, 95813, 95819, 95857, 95869, 95873, 95881, 95891, 95911, 95917, 95923, 95929, 95947, 95957, 95959, 95971, 95987, 95989, 96001, 96013, 96017, 96043, 96053, 96059, 96079, 96097, 96137, 96149, 96157, 96167, 96179, 96181, 96199, 96211, 96221, 96223, 96233, 96259, 96263, 96269, 96281, 96289, 96293, 96323, 96329, 96331, 96337, 96353, 96377, 96401, 96419, 96431, 96443, 96451, 96457, 96461, 96469, 96479, 96487, 96493, 96497, 96517, 96527, 96553, 96557, 96581, 96587, 96589, 96601, 96643, 96661, 96667, 96671, 96697, 96703, 96731, 96737, 96739, 96749, 96757, 96763, 96769, 96779, 96787, 96797, 96799, 96821, 96823, 96827, 96847, 96851, 96857, 96893, 96907, 96911, 96931, 96953, 96959, 96973, 96979, 96989, 96997, 97001, 97003, 97007, 97021, 97039, 97073, 97081, 97103, 97117, 97127, 97151, 97157, 97159, 97169, 97171, 97177, 97187, 97213, 97231, 97241, 97259, 97283, 97301, 97303, 97327, 97367, 97369, 97373, 97379, 97381, 97387, 97397, 97423, 97429, 97441, 97453, 97459, 97463, 97499, 97501, 97511, 97523, 97547, 97549, 97553, 97561, 97571, 97577, 97579, 97583, 97607, 97609, 97613, 97649, 97651, 97673, 97687, 97711, 97729, 97771, 97777, 97787, 97789, 97813, 97829, 97841, 97843, 97847, 97849, 97859, 97861, 97871, 97879, 97883, 97919, 97927, 97931, 97943, 97961, 97967, 97973, 97987, 98009, 98011, 98017, 98041, 98047, 98057, 98081, 98101, 98123, 98129, 98143, 98179, 98207, 98213, 98221, 98227, 98251, 98257, 98269, 98297, 98299, 98317, 98321, 98323, 98327, 98347, 98369, 98377, 98387, 98389, 98407, 98411, 98419, 98429, 98443, 98453, 98459, 98467, 98473, 98479, 98491, 98507, 98519, 98533, 98543, 98561, 98563, 98573, 98597, 98621, 98627, 98639, 98641, 98663, 98669, 98689, 98711, 98713, 98717, 98729, 98731, 98737, 98773, 98779, 98801, 98807, 98809, 98837, 98849, 98867, 98869, 98873, 98887, 98893, 98897, 98899, 98909, 98911, 98927, 98929, 98939, 98947, 98953, 98963, 98981, 98993, 98999, 99013, 99017, 99023, 99041, 99053, 99079, 99083, 99089, 99103, 99109, 99119, 99131, 99133, 99137, 99139, 99149, 99173, 99181, 99191, 99223, 99233, 99241, 99251, 99257, 99259, 99277, 99289, 99317, 99347, 99349, 99367, 99371, 99377, 99391, 99397, 99401, 99409, 99431, 99439, 99469, 99487, 99497, 99523, 99527, 99529, 99551, 99559, 99563, 99571, 99577, 99581, 99607, 99611, 99623, 99643, 99661, 99667, 99679, 99689, 99707, 99709, 99713, 99719, 99721, 99733, 99761, 99767, 99787, 99793, 99809, 99817, 99823, 99829, 99833, 99839, 99859, 99871, 99877, 99881, 99901, 99907, 99923, 99929, 99961, 99971, 99989, 99991, 100003, 100019, 100043, 100049, 100057, 100069, 100103, 100109, 100129, 100151, 100153, 100169, 100183, 100189, 100193, 100207, 100213, 100237, 100267, 100271, 100279, 100291, 100297, 100313, 100333, 100343, 100357, 100361, 100363, 100379, 100391, 100393, 100403, 100411, 100417, 100447, 100459, 100469, 100483, 100493, 100501, 100511, 100517, 100519, 100523, 100537, 100547, 100549, 100559, 100591, 100609, 100613, 100621, 100649, 100669, 100673, 100693, 100699, 100703, 100733, 100741, 100747, 100769, 100787, 100799, 100801, 100811, 100823, 100829, 100847, 100853, 100907, 100913, 100927, 100931, 100937, 100943, 100957, 100981, 100987, 100999, 101009, 101021, 101027, 101051, 101063, 101081, 101089, 101107, 101111, 101113, 101117, 101119, 101141, 101149, 101159, 101161, 101173, 101183, 101197, 101203, 101207, 101209, 101221, 101267, 101273, 101279, 101281, 101287, 101293, 101323, 101333, 101341, 101347, 101359, 101363, 101377, 101383, 101399, 101411, 101419, 101429, 101449, 101467, 101477, 101483, 101489, 101501, 101503, 101513, 101527, 101531, 101533, 101537, 101561, 101573, 101581, 101599, 101603, 101611, 101627, 101641, 101653, 101663, 101681, 101693, 101701, 101719, 101723, 101737, 101741, 101747, 101749, 101771, 101789, 101797, 101807, 101833, 101837, 101839, 101863, 101869, 101873, 101879, 101891, 101917, 101921, 101929, 101939, 101957, 101963, 101977, 101987, 101999, 102001, 102013, 102019, 102023, 102031, 102043, 102059, 102061, 102071, 102077, 102079, 102101, 102103, 102107, 102121, 102139, 102149, 102161, 102181, 102191, 102197, 102199, 102203, 102217, 102229, 102233, 102241, 102251, 102253, 102259, 102293, 102299, 102301, 102317, 102329, 102337, 102359, 102367, 102397, 102407, 102409, 102433, 102437, 102451, 102461, 102481, 102497, 102499, 102503, 102523, 102533, 102539, 102547, 102551, 102559, 102563, 102587, 102593, 102607, 102611, 102643, 102647, 102653, 102667, 102673, 102677, 102679, 102701, 102761, 102763, 102769, 102793, 102797, 102811, 102829, 102841, 102859, 102871, 102877, 102881, 102911, 102913, 102929, 102931, 102953, 102967, 102983, 103001, 103007, 103043, 103049, 103067, 103069, 103079, 103087, 103091, 103093, 103099, 103123, 103141, 103171, 103177, 103183, 103217, 103231, 103237, 103289, 103291, 103307, 103319, 103333, 103349, 103357, 103387, 103391, 103393, 103399, 103409, 103421, 103423, 103451, 103457, 103471, 103483, 103511, 103529, 103549, 103553, 103561, 103567, 103573, 103577, 103583, 103591, 103613, 103619, 103643, 103651, 103657, 103669, 103681, 103687, 103699, 103703, 103723, 103769, 103787, 103801, 103811, 103813, 103837, 103841, 103843, 103867, 103889, 103903, 103913, 103919, 103951, 103963, 103967, 103969, 103979, 103981, 103991, 103993, 103997, 104003, 104009, 104021, 104033, 104047, 104053, 104059, 104087, 104089, 104107, 104113, 104119, 104123, 104147, 104149, 104161, 104173, 104179, 104183, 104207, 104231, 104233, 104239, 104243, 104281, 104287, 104297, 104309, 104311, 104323, 104327, 104347, 104369, 104381, 104383, 104393, 104399, 104417, 104459, 104471, 104473, 104479, 104491, 104513, 104527, 104537, 104543, 104549, 104551, 104561, 104579, 104593, 104597, 104623, 104639, 104651, 104659, 104677, 104681, 104683, 104693, 104701, 104707, 104711, 104717, 104723, 104729, 104743, 104759, 104761, 104773, 104779, 104789, 104801, 104803, 104827, 104831, 104849, 104851, 104869, 104879, 104891, 104911, 104917, 104933, 104947, 104953, 104959, 104971, 104987, 104999, 105019, 105023, 105031, 105037, 105071, 105097, 105107, 105137, 105143, 105167, 105173, 105199, 105211, 105227, 105229, 105239, 105251, 105253, 105263, 105269, 105277, 105319, 105323, 105331, 105337, 105341, 105359, 105361, 105367, 105373, 105379, 105389, 105397, 105401, 105407, 105437, 105449, 105467, 105491, 105499, 105503, 105509, 105517, 105527, 105529, 105533, 105541, 105557, 105563, 105601, 105607, 105613, 105619, 105649, 105653, 105667, 105673, 105683, 105691, 105701, 105727, 105733, 105751, 105761, 105767, 105769, 105817, 105829, 105863, 105871, 105883, 105899, 105907, 105913, 105929, 105943, 105953, 105967, 105971, 105977, 105983, 105997, 106013, 106019, 106031, 106033, 106087, 106103, 106109, 106121, 106123, 106129, 106163, 106181, 106187, 106189, 106207, 106213, 106217, 106219, 106243, 106261, 106273, 106277, 106279, 106291, 106297, 106303, 106307, 106319, 106321, 106331, 106349, 106357, 106363, 106367, 106373, 106391, 106397, 106411, 106417, 106427, 106433, 106441, 106451, 106453, 106487, 106501, 106531, 106537, 106541, 106543, 106591, 106619, 106621, 106627, 106637, 106649, 106657, 106661, 106663, 106669, 106681, 106693, 106699, 106703, 106721, 106727, 106739, 106747, 106751, 106753, 106759, 106781, 106783, 106787, 106801, 106823, 106853, 106859, 106861, 106867, 106871, 106877, 106903, 106907, 106921, 106937, 106949, 106957, 106961, 106963, 106979, 106993, 107021, 107033, 107053, 107057, 107069, 107071, 107077, 107089, 107099, 107101, 107119, 107123, 107137, 107171, 107183, 107197, 107201, 107209, 107227, 107243, 107251, 107269, 107273, 107279, 107309, 107323, 107339, 107347, 107351, 107357, 107377, 107441, 107449, 107453, 107467, 107473, 107507, 107509, 107563, 107581, 107599, 107603, 107609, 107621, 107641, 107647, 107671, 107687, 107693, 107699, 107713, 107717, 107719, 107741, 107747, 107761, 107773, 107777, 107791, 107827, 107837, 107839, 107843, 107857, 107867, 107873, 107881, 107897, 107903, 107923, 107927, 107941, 107951, 107971, 107981, 107999, 108007, 108011, 108013, 108023, 108037, 108041, 108061, 108079, 108089, 108107, 108109, 108127, 108131, 108139, 108161, 108179, 108187, 108191, 108193, 108203, 108211, 108217, 108223, 108233, 108247, 108263, 108271, 108287, 108289, 108293, 108301, 108343, 108347, 108359, 108377, 108379, 108401, 108413, 108421, 108439, 108457, 108461, 108463, 108497, 108499, 108503, 108517, 108529, 108533, 108541, 108553, 108557, 108571, 108587, 108631, 108637, 108643, 108649, 108677, 108707, 108709, 108727, 108739, 108751, 108761, 108769, 108791, 108793, 108799, 108803, 108821, 108827, 108863, 108869, 108877, 108881, 108883, 108887, 108893, 108907, 108917, 108923, 108929, 108943, 108947, 108949, 108959, 108961, 108967, 108971, 108991, 109001, 109013, 109037, 109049, 109063, 109073, 109097, 109103, 109111, 109121, 109133, 109139, 109141, 109147, 109159, 109169, 109171, 109199, 109201, 109211, 109229, 109253, 109267, 109279, 109297, 109303, 109313, 109321, 109331, 109357, 109363, 109367, 109379, 109387, 109391, 109397, 109423, 109433, 109441, 109451, 109453, 109469, 109471, 109481, 109507, 109517, 109519, 109537, 109541, 109547, 109567, 109579, 109583, 109589, 109597, 109609, 109619, 109621, 109639, 109661, 109663, 109673, 109717, 109721, 109741, 109751, 109789, 109793, 109807, 109819, 109829, 109831, 109841, 109843, 109847, 109849, 109859, 109873, 109883, 109891, 109897, 109903, 109913, 109919, 109937, 109943, 109961, 109987, 110017, 110023, 110039, 110051, 110059, 110063, 110069, 110083, 110119, 110129, 110161, 110183, 110221, 110233, 110237, 110251, 110261, 110269, 110273, 110281, 110291, 110311, 110321, 110323, 110339, 110359, 110419, 110431, 110437, 110441, 110459, 110477, 110479, 110491, 110501, 110503, 110527, 110533, 110543, 110557, 110563, 110567, 110569, 110573, 110581, 110587, 110597, 110603, 110609, 110623, 110629, 110641, 110647, 110651, 110681, 110711, 110729, 110731, 110749, 110753, 110771, 110777, 110807, 110813, 110819, 110821, 110849, 110863, 110879, 110881, 110899, 110909, 110917, 110921, 110923, 110927, 110933, 110939, 110947, 110951, 110969, 110977, 110989, 111029, 111031, 111043, 111049, 111053, 111091, 111103, 111109, 111119, 111121, 111127, 111143, 111149, 111187, 111191, 111211, 111217, 111227, 111229, 111253, 111263, 111269, 111271, 111301, 111317, 111323, 111337, 111341, 111347, 111373, 111409, 111427, 111431, 111439, 111443, 111467, 111487, 111491, 111493, 111497, 111509, 111521, 111533, 111539, 111577, 111581, 111593, 111599, 111611, 111623, 111637, 111641, 111653, 111659, 111667, 111697, 111721, 111731, 111733, 111751, 111767, 111773, 111779, 111781, 111791, 111799, 111821, 111827, 111829, 111833, 111847, 111857, 111863, 111869, 111871, 111893, 111913, 111919, 111949, 111953, 111959, 111973, 111977, 111997, 112019, 112031, 112061, 112067, 112069, 112087, 112097, 112103, 112111, 112121, 112129, 112139, 112153, 112163, 112181, 112199, 112207, 112213, 112223, 112237, 112241, 112247, 112249, 112253, 112261, 112279, 112289, 112291, 112297, 112303, 112327, 112331, 112337, 112339, 112349, 112361, 112363, 112397, 112403, 112429, 112459, 112481, 112501, 112507, 112543, 112559, 112571, 112573, 112577, 112583, 112589, 112601, 112603, 112621, 112643, 112657, 112663, 112687, 112691, 112741, 112757, 112759, 112771, 112787, 112799, 112807, 112831, 112843, 112859, 112877, 112901, 112909, 112913, 112919, 112921, 112927, 112939, 112951, 112967, 112979, 112997, 113011, 113017, 113021, 113023, 113027, 113039, 113041, 113051, 113063, 113081, 113083, 113089, 113093, 113111, 113117, 113123, 113131, 113143, 113147, 113149, 113153, 113159, 113161, 113167, 113171, 113173, 113177, 113189, 113209, 113213, 113227, 113233, 113279, 113287, 113327, 113329, 113341, 113357, 113359, 113363, 113371, 113381, 113383, 113417, 113437, 113453, 113467, 113489, 113497, 113501, 113513, 113537, 113539, 113557, 113567, 113591, 113621, 113623, 113647, 113657, 113683, 113717, 113719, 113723, 113731, 113749, 113759, 113761, 113777, 113779, 113783, 113797, 113809, 113819, 113837, 113843, 113891, 113899, 113903, 113909, 113921, 113933, 113947, 113957, 113963, 113969, 113983, 113989, 114001, 114013, 114031, 114041, 114043, 114067, 114073, 114077, 114083, 114089, 114113, 114143, 114157, 114161, 114167, 114193, 114197, 114199, 114203, 114217, 114221, 114229, 114259, 114269, 114277, 114281, 114299, 114311, 114319, 114329, 114343, 114371, 114377, 114407, 114419, 114451, 114467, 114473, 114479, 114487, 114493, 114547, 114553, 114571, 114577, 114593, 114599, 114601, 114613, 114617, 114641, 114643, 114649, 114659, 114661, 114671, 114679, 114689, 114691, 114713, 114743, 114749, 114757, 114761, 114769, 114773, 114781, 114797, 114799, 114809, 114827, 114833, 114847, 114859, 114883, 114889, 114901, 114913, 114941, 114967, 114973, 114997, 115001, 115013, 115019, 115021, 115057, 115061, 115067, 115079, 115099, 115117, 115123, 115127, 115133, 115151, 115153, 115163, 115183, 115201, 115211, 115223, 115237, 115249, 115259, 115279, 115301, 115303, 115309, 115319, 115321, 115327, 115331, 115337, 115343, 115361, 115363, 115399, 115421, 115429, 115459, 115469, 115471, 115499, 115513, 115523, 115547, 115553, 115561, 115571, 115589, 115597, 115601, 115603, 115613, 115631, 115637, 115657, 115663, 115679, 115693, 115727, 115733, 115741, 115751, 115757, 115763, 115769, 115771, 115777, 115781, 115783, 115793, 115807, 115811, 115823, 115831, 115837, 115849, 115853, 115859, 115861, 115873, 115877, 115879, 115883, 115891, 115901, 115903, 115931, 115933, 115963, 115979, 115981, 115987, 116009, 116027, 116041, 116047, 116089, 116099, 116101, 116107, 116113, 116131, 116141, 116159, 116167, 116177, 116189, 116191, 116201, 116239, 116243, 116257, 116269, 116273, 116279, 116293, 116329, 116341, 116351, 116359, 116371, 116381, 116387, 116411, 116423, 116437, 116443, 116447, 116461, 116471, 116483, 116491, 116507, 116531, 116533, 116537, 116539, 116549, 116579, 116593, 116639, 116657, 116663, 116681, 116687, 116689, 116707, 116719, 116731, 116741, 116747, 116789, 116791, 116797, 116803, 116819, 116827, 116833, 116849, 116867, 116881, 116903, 116911, 116923, 116927, 116929, 116933, 116953, 116959, 116969, 116981, 116989, 116993, 117017, 117023, 117037, 117041, 117043, 117053, 117071, 117101, 117109, 117119, 117127, 117133, 117163, 117167, 117191, 117193, 117203, 117209, 117223, 117239, 117241, 117251, 117259, 117269, 117281, 117307, 117319, 117329, 117331, 117353, 117361, 117371, 117373, 117389, 117413, 117427, 117431, 117437, 117443, 117497, 117499, 117503, 117511, 117517, 117529, 117539, 117541, 117563, 117571, 117577, 117617, 117619, 117643, 117659, 117671, 117673, 117679, 117701, 117703, 117709, 117721, 117727, 117731, 117751, 117757, 117763, 117773, 117779, 117787, 117797, 117809, 117811, 117833, 117839, 117841, 117851, 117877, 117881, 117883, 117889, 117899, 117911, 117917, 117937, 117959, 117973, 117977, 117979, 117989, 117991, 118033, 118037, 118043, 118051, 118057, 118061, 118081, 118093, 118127, 118147, 118163, 118169, 118171, 118189, 118211, 118213, 118219, 118247, 118249, 118253, 118259, 118273, 118277, 118297, 118343, 118361, 118369, 118373, 118387, 118399, 118409, 118411, 118423, 118429, 118453, 118457, 118463, 118471, 118493, 118529, 118543, 118549, 118571, 118583, 118589, 118603, 118619, 118621, 118633, 118661, 118669, 118673, 118681, 118687, 118691, 118709, 118717, 118739, 118747, 118751, 118757, 118787, 118799, 118801, 118819, 118831, 118843, 118861, 118873, 118891, 118897, 118901, 118903, 118907, 118913, 118927, 118931, 118967, 118973, 119027, 119033, 119039, 119047, 119057, 119069, 119083, 119087, 119089, 119099, 119101, 119107, 119129, 119131, 119159, 119173, 119179, 119183, 119191, 119227, 119233, 119237, 119243, 119267, 119291, 119293, 119297, 119299, 119311, 119321, 119359, 119363, 119389, 119417, 119419, 119429, 119447, 119489, 119503, 119513, 119533, 119549, 119551, 119557, 119563, 119569, 119591, 119611, 119617, 119627, 119633, 119653, 119657, 119659, 119671, 119677, 119687, 119689, 119699, 119701, 119723, 119737, 119747, 119759, 119771, 119773, 119783, 119797, 119809, 119813, 119827, 119831, 119839, 119849, 119851, 119869, 119881, 119891, 119921, 119923, 119929, 119953, 119963, 119971, 119981, 119983, 119993, 120011, 120017, 120041, 120047, 120049, 120067, 120077, 120079, 120091, 120097, 120103, 120121, 120157, 120163, 120167, 120181, 120193, 120199, 120209, 120223, 120233, 120247, 120277, 120283, 120293, 120299, 120319, 120331, 120349, 120371, 120383, 120391, 120397, 120401, 120413, 120427, 120431, 120473, 120503, 120511, 120539, 120551, 120557, 120563, 120569, 120577, 120587, 120607, 120619, 120623, 120641, 120647, 120661, 120671, 120677, 120689, 120691, 120709, 120713, 120721, 120737, 120739, 120749, 120763, 120767, 120779, 120811, 120817, 120823, 120829, 120833, 120847, 120851, 120863, 120871, 120877, 120889, 120899, 120907, 120917, 120919, 120929, 120937, 120941, 120943, 120947, 120977, 120997, 121001, 121007, 121013, 121019, 121021, 121039, 121061, 121063, 121067, 121081, 121123, 121139, 121151, 121157, 121169, 121171, 121181, 121189, 121229, 121259, 121267, 121271, 121283, 121291, 121309, 121313, 121321, 121327, 121333, 121343, 121349, 121351, 121357, 121367, 121369, 121379, 121403, 121421, 121439, 121441, 121447, 121453, 121469, 121487, 121493, 121501, 121507, 121523, 121531, 121547, 121553, 121559, 121571, 121577, 121579, 121591, 121607, 121609, 121621, 121631, 121633, 121637, 121661, 121687, 121697, 121711, 121721, 121727, 121763, 121787, 121789, 121843, 121853, 121867, 121883, 121889, 121909, 121921, 121931, 121937, 121949, 121951, 121963, 121967, 121993, 121997, 122011, 122021, 122027, 122029, 122033, 122039, 122041, 122051, 122053, 122069, 122081, 122099, 122117, 122131, 122147, 122149, 122167, 122173, 122201, 122203, 122207, 122209, 122219, 122231, 122251, 122263, 122267, 122273, 122279, 122299, 122321, 122323, 122327, 122347, 122363, 122387, 122389, 122393, 122399, 122401, 122443, 122449, 122453, 122471, 122477, 122489, 122497, 122501, 122503, 122509, 122527, 122533, 122557, 122561, 122579, 122597, 122599, 122609, 122611, 122651, 122653, 122663, 122693, 122701, 122719, 122741, 122743, 122753, 122761, 122777, 122789, 122819, 122827, 122833, 122839, 122849, 122861, 122867, 122869, 122887, 122891, 122921, 122929, 122939, 122953, 122957, 122963, 122971, 123001, 123007, 123017, 123031, 123049, 123059, 123077, 123083, 123091, 123113, 123121, 123127, 123143, 123169, 123191, 123203, 123209, 123217, 123229, 123239, 123259, 123269, 123289, 123307, 123311, 123323, 123341, 123373, 123377, 123379, 123397, 123401, 123407, 123419, 123427, 123433, 123439, 123449, 123457, 123479, 123491, 123493, 123499, 123503, 123517, 123527, 123547, 123551, 123553, 123581, 123583, 123593, 123601, 123619, 123631, 123637, 123653, 123661, 123667, 123677, 123701, 123707, 123719, 123727, 123731, 123733, 123737, 123757, 123787, 123791, 123803, 123817, 123821, 123829, 123833, 123853, 123863, 123887, 123911, 123923, 123931, 123941, 123953, 123973, 123979, 123983, 123989, 123997, 124001, 124021, 124067, 124087, 124097, 124121, 124123, 124133, 124139, 124147, 124153, 124171, 124181, 124183, 124193, 124199, 124213, 124231, 124247, 124249, 124277, 124291, 124297, 124301, 124303, 124309, 124337, 124339, 124343, 124349, 124351, 124363, 124367, 124427, 124429, 124433, 124447, 124459, 124471, 124477, 124489, 124493, 124513, 124529, 124541, 124543, 124561, 124567, 124577, 124601, 124633, 124643, 124669, 124673, 124679, 124693, 124699, 124703, 124717, 124721, 124739, 124753, 124759, 124769, 124771, 124777, 124781, 124783, 124793, 124799, 124819, 124823, 124847, 124853, 124897, 124907, 124909, 124919, 124951, 124979, 124981, 124987, 124991, 125003, 125017, 125029, 125053, 125063, 125093, 125101, 125107, 125113, 125117, 125119, 125131, 125141, 125149, 125183, 125197, 125201, 125207, 125219, 125221, 125231, 125243, 125261, 125269, 125287, 125299, 125303, 125311, 125329, 125339, 125353, 125371, 125383, 125387, 125399, 125407, 125423, 125429, 125441, 125453, 125471, 125497, 125507, 125509, 125527, 125539, 125551, 125591, 125597, 125617, 125621, 125627, 125639, 125641, 125651, 125659, 125669, 125683, 125687, 125693, 125707, 125711, 125717, 125731, 125737, 125743, 125753, 125777, 125789, 125791, 125803, 125813, 125821, 125863, 125887, 125897, 125899, 125921, 125927, 125929, 125933, 125941, 125959, 125963, 126001, 126011, 126013, 126019, 126023, 126031, 126037, 126041, 126047, 126067, 126079, 126097, 126107, 126127, 126131, 126143, 126151, 126173, 126199, 126211, 126223, 126227, 126229, 126233, 126241, 126257, 126271, 126307, 126311, 126317, 126323, 126337, 126341, 126349, 126359, 126397, 126421, 126433, 126443, 126457, 126461, 126473, 126481, 126487, 126491, 126493, 126499, 126517, 126541, 126547, 126551, 126583, 126601, 126611, 126613, 126631, 126641, 126653, 126683, 126691, 126703, 126713, 126719, 126733, 126739, 126743, 126751, 126757, 126761, 126781, 126823, 126827, 126839, 126851, 126857, 126859, 126913, 126923, 126943, 126949, 126961, 126967, 126989, 127031, 127033, 127037, 127051, 127079, 127081, 127103, 127123, 127133, 127139, 127157, 127163, 127189, 127207, 127217, 127219, 127241, 127247, 127249, 127261, 127271, 127277, 127289, 127291, 127297, 127301, 127321, 127331, 127343, 127363, 127373, 127399, 127403, 127423, 127447, 127453, 127481, 127487, 127493, 127507, 127529, 127541, 127549, 127579, 127583, 127591, 127597, 127601, 127607, 127609, 127637, 127643, 127649, 127657, 127663, 127669, 127679, 127681, 127691, 127703, 127709, 127711, 127717, 127727, 127733, 127739, 127747, 127763, 127781, 127807, 127817, 127819, 127837, 127843, 127849, 127859, 127867, 127873, 127877, 127913, 127921, 127931, 127951, 127973, 127979, 127997, 128021, 128033, 128047, 128053, 128099, 128111, 128113, 128119, 128147, 128153, 128159, 128173, 128189, 128201, 128203, 128213, 128221, 128237, 128239, 128257, 128273, 128287, 128291, 128311, 128321, 128327, 128339, 128341, 128347, 128351, 128377, 128389, 128393, 128399, 128411, 128413, 128431, 128437, 128449, 128461, 128467, 128473, 128477, 128483, 128489, 128509, 128519, 128521, 128549, 128551, 128563, 128591, 128599, 128603, 128621, 128629, 128657, 128659, 128663, 128669, 128677, 128683, 128693, 128717, 128747, 128749, 128761, 128767, 128813, 128819, 128831, 128833, 128837, 128857, 128861, 128873, 128879, 128903, 128923, 128939, 128941, 128951, 128959, 128969, 128971, 128981, 128983, 128987, 128993, 129001, 129011, 129023, 129037, 129049, 129061, 129083, 129089, 129097, 129113, 129119, 129121, 129127, 129169, 129187, 129193, 129197, 129209, 129221, 129223, 129229, 129263, 129277, 129281, 129287, 129289, 129293, 129313, 129341, 129347, 129361, 129379, 129401, 129403, 129419, 129439, 129443, 129449, 129457, 129461, 129469, 129491, 129497, 129499, 129509, 129517, 129527, 129529, 129533, 129539, 129553, 129581, 129587, 129589, 129593, 129607, 129629, 129631, 129641, 129643, 129671, 129707, 129719, 129733, 129737, 129749, 129757, 129763, 129769, 129793, 129803, 129841, 129853, 129887, 129893, 129901, 129917, 129919, 129937, 129953, 129959, 129967, 129971, 130003, 130021, 130027, 130043, 130051, 130057, 130069, 130073, 130079, 130087, 130099, 130121, 130127, 130147, 130171, 130183, 130199, 130201, 130211, 130223, 130241, 130253, 130259, 130261, 130267, 130279, 130303, 130307, 130337, 130343, 130349, 130363, 130367, 130369, 130379, 130399, 130409, 130411, 130423, 130439, 130447, 130457, 130469, 130477, 130483, 130489, 130513, 130517, 130523, 130531, 130547, 130553, 130579, 130589, 130619, 130621, 130631, 130633, 130639, 130643, 130649, 130651, 130657, 130681, 130687, 130693, 130699, 130729, 130769, 130783, 130787, 130807, 130811, 130817, 130829, 130841, 130843, 130859, 130873, 130927, 130957, 130969, 130973, 130981, 130987, 131009, 131011, 131023, 131041, 131059, 131063, 131071, 131101, 131111, 131113, 131129, 131143, 131149, 131171, 131203, 131213, 131221, 131231, 131249, 131251, 131267, 131293, 131297, 131303, 131311, 131317, 131321, 131357, 131363, 131371, 131381, 131413, 131431, 131437, 131441, 131447, 131449, 131477, 131479, 131489, 131497, 131501, 131507, 131519, 131543, 131561, 131581, 131591, 131611, 131617, 131627, 131639, 131641, 131671, 131687, 131701, 131707, 131711, 131713, 131731, 131743, 131749, 131759, 131771, 131777, 131779, 131783, 131797, 131837, 131839, 131849, 131861, 131891, 131893, 131899, 131909, 131927, 131933, 131939, 131941, 131947, 131959, 131969, 132001, 132019, 132047, 132049, 132059, 132071, 132103, 132109, 132113, 132137, 132151, 132157, 132169, 132173, 132199, 132229, 132233, 132241, 132247, 132257, 132263, 132283, 132287, 132299, 132313, 132329, 132331, 132347, 132361, 132367, 132371, 132383, 132403, 132409, 132421, 132437, 132439, 132469, 132491, 132499, 132511, 132523, 132527, 132529, 132533, 132541, 132547, 132589, 132607, 132611, 132619, 132623, 132631, 132637, 132647, 132661, 132667, 132679, 132689, 132697, 132701, 132707, 132709, 132721, 132739, 132749, 132751, 132757, 132761, 132763, 132817, 132833, 132851, 132857, 132859, 132863, 132887, 132893, 132911, 132929, 132947, 132949, 132953, 132961, 132967, 132971, 132989, 133013, 133033, 133039, 133051, 133069, 133073, 133087, 133097, 133103, 133109, 133117, 133121, 133153, 133157, 133169, 133183, 133187, 133201, 133213, 133241, 133253, 133261, 133271, 133277, 133279, 133283, 133303, 133319, 133321, 133327, 133337, 133349, 133351, 133379, 133387, 133391, 133403, 133417, 133439, 133447, 133451, 133481, 133493, 133499, 133519, 133541, 133543, 133559, 133571, 133583, 133597, 133631, 133633, 133649, 133657, 133669, 133673, 133691, 133697, 133709, 133711, 133717, 133723, 133733, 133769, 133781, 133801, 133811, 133813, 133831, 133843, 133853, 133873, 133877, 133919, 133949, 133963, 133967, 133979, 133981, 133993, 133999, 134033, 134039, 134047, 134053, 134059, 134077, 134081, 134087, 134089, 134093, 134129, 134153, 134161, 134171, 134177, 134191, 134207, 134213, 134219, 134227, 134243, 134257, 134263, 134269, 134287, 134291, 134293, 134327, 134333, 134339, 134341, 134353, 134359, 134363, 134369, 134371, 134399, 134401, 134417, 134437, 134443, 134471, 134489, 134503, 134507, 134513, 134581, 134587, 134591, 134593, 134597, 134609, 134639, 134669, 134677, 134681, 134683, 134699, 134707, 134731, 134741, 134753, 134777, 134789, 134807, 134837, 134839, 134851, 134857, 134867, 134873, 134887, 134909, 134917, 134921, 134923, 134947, 134951, 134989, 134999, 135007, 135017, 135019, 135029, 135043, 135049, 135059, 135077, 135089, 135101, 135119, 135131, 135151, 135173, 135181, 135193, 135197, 135209, 135211, 135221, 135241, 135257, 135271, 135277, 135281, 135283, 135301, 135319, 135329, 135347, 135349, 135353, 135367, 135389, 135391, 135403, 135409, 135427, 135431, 135433, 135449, 135461, 135463, 135467, 135469, 135479, 135497, 135511, 135533, 135559, 135571, 135581, 135589, 135593, 135599, 135601, 135607, 135613, 135617, 135623, 135637, 135647, 135649, 135661, 135671, 135697, 135701, 135719, 135721, 135727, 135731, 135743, 135757, 135781, 135787, 135799, 135829, 135841, 135851, 135859, 135887, 135893, 135899, 135911, 135913, 135929, 135937, 135977, 135979, 136013, 136027, 136033, 136043, 136057, 136067, 136069, 136093, 136099, 136111, 136133, 136139, 136163, 136177, 136189, 136193, 136207, 136217, 136223, 136237, 136247, 136261, 136273, 136277, 136303, 136309, 136319, 136327, 136333, 136337, 136343, 136351, 136361, 136373, 136379, 136393, 136397, 136399, 136403, 136417, 136421, 136429, 136447, 136453, 136463, 136471, 136481, 136483, 136501, 136511, 136519, 136523, 136531, 136537, 136541, 136547, 136559, 136573, 136601, 136603, 136607, 136621, 136649, 136651, 136657, 136691, 136693, 136709, 136711, 136727, 136733, 136739, 136751, 136753, 136769, 136777, 136811, 136813, 136841, 136849, 136859, 136861, 136879, 136883, 136889, 136897, 136943, 136949, 136951, 136963, 136973, 136979, 136987, 136991, 136993, 136999, 137029, 137077, 137087, 137089, 137117, 137119, 137131, 137143, 137147, 137153, 137177, 137183, 137191, 137197, 137201, 137209, 137219, 137239, 137251, 137273, 137279, 137303, 137321, 137339, 137341, 137353, 137359, 137363, 137369, 137383, 137387, 137393, 137399, 137413, 137437, 137443, 137447, 137453, 137477, 137483, 137491, 137507, 137519, 137537, 137567, 137573, 137587, 137593, 137597, 137623, 137633, 137639, 137653, 137659, 137699, 137707, 137713, 137723, 137737, 137743, 137771, 137777, 137791, 137803, 137827, 137831, 137849, 137867, 137869, 137873, 137909, 137911, 137927, 137933, 137941, 137947, 137957, 137983, 137993, 137999, 138007, 138041, 138053, 138059, 138071, 138077, 138079, 138101, 138107, 138113, 138139, 138143, 138157, 138163, 138179, 138181, 138191, 138197, 138209, 138239, 138241, 138247, 138251, 138283, 138289, 138311, 138319, 138323, 138337, 138349, 138371, 138373, 138389, 138401, 138403, 138407, 138427, 138433, 138449, 138451, 138461, 138469, 138493, 138497, 138511, 138517, 138547, 138559, 138563, 138569, 138571, 138577, 138581, 138587, 138599, 138617, 138629, 138637, 138641, 138647, 138661, 138679, 138683, 138727, 138731, 138739, 138763, 138793, 138797, 138799, 138821, 138829, 138841, 138863, 138869, 138883, 138889, 138893, 138899, 138917, 138923, 138937, 138959, 138967, 138977, 139021, 139033, 139067, 139079, 139091, 139109, 139121, 139123, 139133, 139169, 139177, 139187, 139199, 139201, 139241, 139267, 139273, 139291, 139297, 139301, 139303, 139309, 139313, 139333, 139339, 139343, 139361, 139367, 139369, 139387, 139393, 139397, 139409, 139423, 139429, 139439, 139457, 139459, 139483, 139487, 139493, 139501, 139511, 139537, 139547, 139571, 139589, 139591, 139597, 139609, 139619, 139627, 139661, 139663, 139681, 139697, 139703, 139709, 139721, 139729, 139739, 139747, 139753, 139759, 139787, 139801, 139813, 139831, 139837, 139861, 139871, 139883, 139891, 139901, 139907, 139921, 139939, 139943, 139967, 139969, 139981, 139987, 139991, 139999, 140009, 140053, 140057, 140069, 140071, 140111, 140123, 140143, 140159, 140167, 140171, 140177, 140191, 140197, 140207, 140221, 140227, 140237, 140249, 140263, 140269, 140281, 140297, 140317, 140321, 140333, 140339, 140351, 140363, 140381, 140401, 140407, 140411, 140417, 140419, 140423, 140443, 140449, 140453, 140473, 140477, 140521, 140527, 140533, 140549, 140551, 140557, 140587, 140593, 140603, 140611, 140617, 140627, 140629, 140639, 140659, 140663, 140677, 140681, 140683, 140689, 140717, 140729, 140731, 140741, 140759, 140761, 140773, 140779, 140797, 140813, 140827, 140831, 140837, 140839, 140863, 140867, 140869, 140891, 140893, 140897, 140909, 140929, 140939, 140977, 140983, 140989, 141023, 141041, 141061, 141067, 141073, 141079, 141101, 141107, 141121, 141131, 141157, 141161, 141179, 141181, 141199, 141209, 141221, 141223, 141233, 141241, 141257, 141263, 141269, 141277, 141283, 141301, 141307, 141311, 141319, 141353, 141359, 141371, 141397, 141403, 141413, 141439, 141443, 141461, 141481, 141497, 141499, 141509, 141511, 141529, 141539, 141551, 141587, 141601, 141613, 141619, 141623, 141629, 141637, 141649, 141653, 141667, 141671, 141677, 141679, 141689, 141697, 141707, 141709, 141719, 141731, 141761, 141767, 141769, 141773, 141793, 141803, 141811, 141829, 141833, 141851, 141853, 141863, 141871, 141907, 141917, 141931, 141937, 141941, 141959, 141961, 141971, 141991, 142007, 142019, 142031, 142039, 142049, 142057, 142061, 142067, 142097, 142099, 142111, 142123, 142151, 142157, 142159, 142169, 142183, 142189, 142193, 142211, 142217, 142223, 142231, 142237, 142271, 142297, 142319, 142327, 142357, 142369, 142381, 142391, 142403, 142421, 142427, 142433, 142453, 142469, 142501, 142529, 142537, 142543, 142547, 142553, 142559, 142567, 142573, 142589, 142591, 142601, 142607, 142609, 142619, 142657, 142673, 142697, 142699, 142711, 142733, 142757, 142759, 142771, 142787, 142789, 142799, 142811, 142837, 142841, 142867, 142871, 142873, 142897, 142903, 142907, 142939, 142949, 142963, 142969, 142973, 142979, 142981, 142993, 143053, 143063, 143093, 143107, 143111, 143113, 143137, 143141, 143159, 143177, 143197, 143239, 143243, 143249, 143257, 143261, 143263, 143281, 143287, 143291, 143329, 143333, 143357, 143387, 143401, 143413, 143419, 143443, 143461, 143467, 143477, 143483, 143489, 143501, 143503, 143509, 143513, 143519, 143527, 143537, 143551, 143567, 143569, 143573, 143593, 143609, 143617, 143629, 143651, 143653, 143669, 143677, 143687, 143699, 143711, 143719, 143729, 143743, 143779, 143791, 143797, 143807, 143813, 143821, 143827, 143831, 143833, 143873, 143879, 143881, 143909, 143947, 143953, 143971, 143977, 143981, 143999, 144013, 144031, 144037, 144061, 144071, 144073, 144103, 144139, 144161, 144163, 144167, 144169, 144173, 144203, 144223, 144241, 144247, 144253, 144259, 144271, 144289, 144299, 144307, 144311, 144323, 144341, 144349, 144379, 144383, 144407, 144409, 144413, 144427, 144439, 144451, 144461, 144479, 144481, 144497, 144511, 144539, 144541, 144563, 144569, 144577, 144583, 144589, 144593, 144611, 144629, 144659, 144667, 144671, 144701, 144709, 144719, 144731, 144737, 144751, 144757, 144763, 144773, 144779, 144791, 144817, 144829, 144839, 144847, 144883, 144887, 144889, 144899, 144917, 144931, 144941, 144961, 144967, 144973, 144983, 145007, 145009, 145021, 145031, 145037, 145043, 145063, 145069, 145091, 145109, 145121, 145133, 145139, 145177, 145193, 145207, 145213, 145219, 145253, 145259, 145267, 145283, 145289, 145303, 145307, 145349, 145361, 145381, 145391, 145399, 145417, 145423, 145433, 145441, 145451, 145459, 145463, 145471, 145477, 145487, 145501, 145511, 145513, 145517, 145531, 145543, 145547, 145549, 145577, 145589, 145601, 145603, 145633, 145637, 145643, 145661, 145679, 145681, 145687, 145703, 145709, 145721, 145723, 145753, 145757, 145759, 145771, 145777, 145799, 145807, 145819, 145823, 145829, 145861, 145879, 145897, 145903, 145931, 145933, 145949, 145963, 145967, 145969, 145987, 145991, 146009, 146011, 146021, 146023, 146033, 146051, 146057, 146059, 146063, 146077, 146093, 146099, 146117, 146141, 146161, 146173, 146191, 146197, 146203, 146213, 146221, 146239, 146249, 146273, 146291, 146297, 146299, 146309, 146317, 146323, 146347, 146359, 146369, 146381, 146383, 146389, 146407, 146417, 146423, 146437, 146449, 146477, 146513, 146519, 146521, 146527, 146539, 146543, 146563, 146581, 146603, 146609, 146617, 146639, 146647, 146669, 146677, 146681, 146683, 146701, 146719, 146743, 146749, 146767, 146777, 146801, 146807, 146819, 146833, 146837, 146843, 146849, 146857, 146891, 146893, 146917, 146921, 146933, 146941, 146953, 146977, 146983, 146987, 146989, 147011, 147029, 147031, 147047, 147073, 147083, 147089, 147097, 147107, 147137, 147139, 147151, 147163, 147179, 147197, 147209, 147211, 147221, 147227, 147229, 147253, 147263, 147283, 147289, 147293, 147299, 147311, 147319, 147331, 147341, 147347, 147353, 147377, 147391, 147397, 147401, 147409, 147419, 147449, 147451, 147457, 147481, 147487, 147503, 147517, 147541, 147547, 147551, 147557, 147571, 147583, 147607, 147613, 147617, 147629, 147647, 147661, 147671, 147673, 147689, 147703, 147709, 147727, 147739, 147743, 147761, 147769, 147773, 147779, 147787, 147793, 147799, 147811, 147827, 147853, 147859, 147863, 147881, 147919, 147937, 147949, 147977, 147997, 148013, 148021, 148061, 148063, 148073, 148079, 148091, 148123, 148139, 148147, 148151, 148153, 148157, 148171, 148193, 148199, 148201, 148207, 148229, 148243, 148249, 148279, 148301, 148303, 148331, 148339, 148361, 148367, 148381, 148387, 148399, 148403, 148411, 148429, 148439, 148457, 148469, 148471, 148483, 148501, 148513, 148517, 148531, 148537, 148549, 148573, 148579, 148609, 148627, 148633, 148639, 148663, 148667, 148669, 148691, 148693, 148711, 148721, 148723, 148727, 148747, 148763, 148781, 148783, 148793, 148817, 148829, 148853, 148859, 148861, 148867, 148873, 148891, 148913, 148921, 148927, 148931, 148933, 148949, 148957, 148961, 148991, 148997, 149011, 149021, 149027, 149033, 149053, 149057, 149059, 149069, 149077, 149087, 149099, 149101, 149111, 149113, 149119, 149143, 149153, 149159, 149161, 149173, 149183, 149197, 149213, 149239, 149249, 149251, 149257, 149269, 149287, 149297, 149309, 149323, 149333, 149341, 149351, 149371, 149377, 149381, 149393, 149399, 149411, 149417, 149419, 149423, 149441, 149459, 149489, 149491, 149497, 149503, 149519, 149521, 149531, 149533, 149543, 149551, 149561, 149563, 149579, 149603, 149623, 149627, 149629, 149689, 149711, 149713, 149717, 149729, 149731, 149749, 149759, 149767, 149771, 149791, 149803, 149827, 149837, 149839, 149861, 149867, 149873, 149893, 149899, 149909, 149911, 149921, 149939, 149953, 149969, 149971, 149993, 150001, 150011, 150041, 150053, 150061, 150067, 150077, 150083, 150089, 150091, 150097, 150107, 150131, 150151, 150169, 150193, 150197, 150203, 150209, 150211, 150217, 150221, 150223, 150239, 150247, 150287, 150299, 150301, 150323, 150329, 150343, 150373, 150377, 150379, 150383, 150401, 150407, 150413, 150427, 150431, 150439, 150473, 150497, 150503, 150517, 150523, 150533, 150551, 150559, 150571, 150583, 150587, 150589, 150607, 150611, 150617, 150649, 150659, 150697, 150707, 150721, 150743, 150767, 150769, 150779, 150791, 150797, 150827, 150833, 150847, 150869, 150881, 150883, 150889, 150893, 150901, 150907, 150919, 150929, 150959, 150961, 150967, 150979, 150989, 150991, 151007, 151009, 151013, 151027, 151049, 151051, 151057, 151091, 151121, 151141, 151153, 151157, 151163, 151169, 151171, 151189, 151201, 151213, 151237, 151241, 151243, 151247, 151253, 151273, 151279, 151289, 151303, 151337, 151339, 151343, 151357, 151379, 151381, 151391, 151397, 151423, 151429, 151433, 151451, 151471, 151477, 151483, 151499, 151507, 151517, 151523, 151531, 151537, 151549, 151553, 151561, 151573, 151579, 151597, 151603, 151607, 151609, 151631, 151637, 151643, 151651, 151667, 151673, 151681, 151687, 151693, 151703, 151717, 151729, 151733, 151769, 151771, 151783, 151787, 151799, 151813, 151817, 151841, 151847, 151849, 151871, 151883, 151897, 151901, 151903, 151909, 151937, 151939, 151967, 151969, 152003, 152017, 152027, 152029, 152039, 152041, 152063, 152077, 152081, 152083, 152093, 152111, 152123, 152147, 152183, 152189, 152197, 152203, 152213, 152219, 152231, 152239, 152249, 152267, 152287, 152293, 152297, 152311, 152363, 152377, 152381, 152389, 152393, 152407, 152417, 152419, 152423, 152429, 152441, 152443, 152459, 152461, 152501, 152519, 152531, 152533, 152539, 152563, 152567, 152597, 152599, 152617, 152623, 152629, 152639, 152641, 152657, 152671, 152681, 152717, 152723, 152729, 152753, 152767, 152777, 152783, 152791, 152809, 152819, 152821, 152833, 152837, 152839, 152843, 152851, 152857, 152879, 152897, 152899, 152909, 152939, 152941, 152947, 152953, 152959, 152981, 152989, 152993, 153001, 153059, 153067, 153071, 153073, 153077, 153089, 153107, 153113, 153133, 153137, 153151, 153191, 153247, 153259, 153269, 153271, 153277, 153281, 153287, 153313, 153319, 153337, 153343, 153353, 153359, 153371, 153379, 153407, 153409, 153421, 153427, 153437, 153443, 153449, 153457, 153469, 153487, 153499, 153509, 153511, 153521, 153523, 153529, 153533, 153557, 153563, 153589, 153607, 153611, 153623, 153641, 153649, 153689, 153701, 153719, 153733, 153739, 153743, 153749, 153757, 153763, 153817, 153841, 153871, 153877, 153887, 153889, 153911, 153913, 153929, 153941, 153947, 153949, 153953, 153991, 153997, 154001, 154027, 154043, 154057, 154061, 154067, 154073, 154079, 154081, 154087, 154097, 154111, 154127, 154153, 154157, 154159, 154181, 154183, 154211, 154213, 154229, 154243, 154247, 154267, 154277, 154279, 154291, 154303, 154313, 154321, 154333, 154339, 154351, 154369, 154373, 154387, 154409, 154417, 154423, 154439, 154459, 154487, 154493, 154501, 154523, 154543, 154571, 154573, 154579, 154589, 154591, 154613, 154619, 154621, 154643, 154667, 154669, 154681, 154691, 154699, 154723, 154727, 154733, 154747, 154753, 154769, 154787, 154789, 154799, 154807, 154823, 154841, 154849, 154871, 154873, 154877, 154883, 154897, 154927, 154933, 154937, 154943, 154981, 154991, 155003, 155009, 155017, 155027, 155047, 155069, 155081, 155083, 155087, 155119, 155137, 155153, 155161, 155167, 155171, 155191, 155201, 155203, 155209, 155219, 155231, 155251, 155269, 155291, 155299, 155303, 155317, 155327, 155333, 155371, 155377, 155381, 155383, 155387, 155399, 155413, 155423, 155443, 155453, 155461, 155473, 155501, 155509, 155521, 155537, 155539, 155557, 155569, 155579, 155581, 155593, 155599, 155609, 155621, 155627, 155653, 155657, 155663, 155671, 155689, 155693, 155699, 155707, 155717, 155719, 155723, 155731, 155741, 155747, 155773, 155777, 155783, 155797, 155801, 155809, 155821, 155833, 155849, 155851, 155861, 155863, 155887, 155891, 155893, 155921, 156007, 156011, 156019, 156041, 156059, 156061, 156071, 156089, 156109, 156119, 156127, 156131, 156139, 156151, 156157, 156217, 156227, 156229, 156241, 156253, 156257, 156259, 156269, 156307, 156319, 156329, 156347, 156353, 156361, 156371, 156419, 156421, 156437, 156467, 156487, 156491, 156493, 156511, 156521, 156539, 156577, 156589, 156593, 156601, 156619, 156623, 156631, 156641, 156659, 156671, 156677, 156679, 156683, 156691, 156703, 156707, 156719, 156727, 156733, 156749, 156781, 156797, 156799, 156817, 156823, 156833, 156841, 156887, 156899, 156901, 156913, 156941, 156943, 156967, 156971, 156979, 157007, 157013, 157019, 157037, 157049, 157051, 157057, 157061, 157081, 157103, 157109, 157127, 157133, 157141, 157163, 157177, 157181, 157189, 157207, 157211, 157217, 157219, 157229, 157231, 157243, 157247, 157253, 157259, 157271, 157273, 157277, 157279, 157291, 157303, 157307, 157321, 157327, 157349, 157351, 157363, 157393, 157411, 157427, 157429, 157433, 157457, 157477, 157483, 157489, 157513, 157519, 157523, 157543, 157559, 157561, 157571, 157579, 157627, 157637, 157639, 157649, 157667, 157669, 157679, 157721, 157733, 157739, 157747, 157769, 157771, 157793, 157799, 157813, 157823, 157831, 157837, 157841, 157867, 157877, 157889, 157897, 157901, 157907, 157931, 157933, 157951, 157991, 157999, 158003, 158009, 158017, 158029, 158047, 158071, 158077, 158113, 158129, 158141, 158143, 158161, 158189, 158201, 158209, 158227, 158231, 158233, 158243, 158261, 158269, 158293, 158303, 158329, 158341, 158351, 158357, 158359, 158363, 158371, 158393, 158407, 158419, 158429, 158443, 158449, 158489, 158507, 158519, 158527, 158537, 158551, 158563, 158567, 158573, 158581, 158591, 158597, 158611, 158617, 158621, 158633, 158647, 158657, 158663, 158699, 158731, 158747, 158749, 158759, 158761, 158771, 158777, 158791, 158803, 158843, 158849, 158863, 158867, 158881, 158909, 158923, 158927, 158941, 158959, 158981, 158993, 159013, 159017, 159023, 159059, 159073, 159079, 159097, 159113, 159119, 159157, 159161, 159167, 159169, 159179, 159191, 159193, 159199, 159209, 159223, 159227, 159233, 159287, 159293, 159311, 159319, 159337, 159347, 159349, 159361, 159389, 159403, 159407, 159421, 159431, 159437, 159457, 159463, 159469, 159473, 159491, 159499, 159503, 159521, 159539, 159541, 159553, 159563, 159569, 159571, 159589, 159617, 159623, 159629, 159631, 159667, 159671, 159673, 159683, 159697, 159701, 159707, 159721, 159737, 159739, 159763, 159769, 159773, 159779, 159787, 159791, 159793, 159799, 159811, 159833, 159839, 159853, 159857, 159869, 159871, 159899, 159911, 159931, 159937, 159977, 159979, 160001, 160009, 160019, 160031, 160033, 160049, 160073, 160079, 160081, 160087, 160091, 160093, 160117, 160141, 160159, 160163, 160169, 160183, 160201, 160207, 160217, 160231, 160243, 160253, 160309, 160313, 160319, 160343, 160357, 160367, 160373, 160387, 160397, 160403, 160409, 160423, 160441, 160453, 160481, 160483, 160499, 160507, 160541, 160553, 160579, 160583, 160591, 160603, 160619, 160621, 160627, 160637, 160639, 160649, 160651, 160663, 160669, 160681, 160687, 160697, 160709, 160711, 160723, 160739, 160751, 160753, 160757, 160781, 160789, 160807, 160813, 160817, 160829, 160841, 160861, 160877, 160879, 160883, 160903, 160907, 160933, 160967, 160969, 160981, 160997, 161009, 161017, 161033, 161039, 161047, 161053, 161059, 161071, 161087, 161093, 161123, 161137, 161141, 161149, 161159, 161167, 161201, 161221, 161233, 161237, 161263, 161267, 161281, 161303, 161309, 161323, 161333, 161339, 161341, 161363, 161377, 161387, 161407, 161411, 161453, 161459, 161461, 161471, 161503, 161507, 161521, 161527, 161531, 161543, 161561, 161563, 161569, 161573, 161591, 161599, 161611, 161627, 161639, 161641, 161659, 161683, 161717, 161729, 161731, 161741, 161743, 161753, 161761, 161771, 161773, 161779, 161783, 161807, 161831, 161839, 161869, 161873, 161879, 161881, 161911, 161921, 161923, 161947, 161957, 161969, 161971, 161977, 161983, 161999, 162007, 162011, 162017, 162053, 162059, 162079, 162091, 162109, 162119, 162143, 162209, 162221, 162229, 162251, 162257, 162263, 162269, 162277, 162287, 162289, 162293, 162343, 162359, 162389, 162391, 162413, 162419, 162439, 162451, 162457, 162473, 162493, 162499, 162517, 162523, 162527, 162529, 162553, 162557, 162563, 162577, 162593, 162601, 162611, 162623, 162629, 162641, 162649, 162671, 162677, 162683, 162691, 162703, 162709, 162713, 162727, 162731, 162739, 162749, 162751, 162779, 162787, 162791, 162821, 162823, 162829, 162839, 162847, 162853, 162859, 162881, 162889, 162901, 162907, 162917, 162937, 162947, 162971, 162973, 162989, 162997, 163003, 163019, 163021, 163027, 163061, 163063, 163109, 163117, 163127, 163129, 163147, 163151, 163169, 163171, 163181, 163193, 163199, 163211, 163223, 163243, 163249, 163259, 163307, 163309, 163321, 163327, 163337, 163351, 163363, 163367, 163393, 163403, 163409, 163411, 163417, 163433, 163469, 163477, 163481, 163483, 163487, 163517, 163543, 163561, 163567, 163573, 163601, 163613, 163621, 163627, 163633, 163637, 163643, 163661, 163673, 163679, 163697, 163729, 163733, 163741, 163753, 163771, 163781, 163789, 163811, 163819, 163841, 163847, 163853, 163859, 163861, 163871, 163883, 163901, 163909, 163927, 163973, 163979, 163981, 163987, 163991, 163993, 163997, 164011, 164023, 164039, 164051, 164057, 164071, 164089, 164093, 164113, 164117, 164147, 164149, 164173, 164183, 164191, 164201, 164209, 164231, 164233, 164239, 164249, 164251, 164267, 164279, 164291, 164299, 164309, 164321, 164341, 164357, 164363, 164371, 164377, 164387, 164413, 164419, 164429, 164431, 164443, 164447, 164449, 164471, 164477, 164503, 164513, 164531, 164569, 164581, 164587, 164599, 164617, 164621, 164623, 164627, 164653, 164663, 164677, 164683, 164701, 164707, 164729, 164743, 164767, 164771, 164789, 164809, 164821, 164831, 164837, 164839, 164881, 164893, 164911, 164953, 164963, 164987, 164999, 165001, 165037, 165041, 165047, 165049, 165059, 165079, 165083, 165089, 165103, 165133, 165161, 165173, 165181, 165203, 165211, 165229, 165233, 165247, 165287, 165293, 165311, 165313, 165317, 165331, 165343, 165349, 165367, 165379, 165383, 165391, 165397, 165437, 165443, 165449, 165457, 165463, 165469, 165479, 165511, 165523, 165527, 165533, 165541, 165551, 165553, 165559, 165569, 165587, 165589, 165601, 165611, 165617, 165653, 165667, 165673, 165701, 165703, 165707, 165709, 165713, 165719, 165721, 165749, 165779, 165799, 165811, 165817, 165829, 165833, 165857, 165877, 165883, 165887, 165901, 165931, 165941, 165947, 165961, 165983, 166013, 166021, 166027, 166031, 166043, 166063, 166081, 166099, 166147, 166151, 166157, 166169, 166183, 166189, 166207, 166219, 166237, 166247, 166259, 166273, 166289, 166297, 166301, 166303, 166319, 166349, 166351, 166357, 166363, 166393, 166399, 166403, 166409, 166417, 166429, 166457, 166471, 166487, 166541, 166561, 166567, 166571, 166597, 166601, 166603, 166609, 166613, 166619, 166627, 166631, 166643, 166657, 166667, 166669, 166679, 166693, 166703, 166723, 166739, 166741, 166781, 166783, 166799, 166807, 166823, 166841, 166843, 166847, 166849, 166853, 166861, 166867, 166871, 166909, 166919, 166931, 166949, 166967, 166973, 166979, 166987, 167009, 167017, 167021, 167023, 167033, 167039, 167047, 167051, 167071, 167077, 167081, 167087, 167099, 167107, 167113, 167117, 167119, 167149, 167159, 167173, 167177, 167191, 167197, 167213, 167221, 167249, 167261, 167267, 167269, 167309, 167311, 167317, 167329, 167339, 167341, 167381, 167393, 167407, 167413, 167423, 167429, 167437, 167441, 167443, 167449, 167471, 167483, 167491, 167521, 167537, 167543, 167593, 167597, 167611, 167621, 167623, 167627, 167633, 167641, 167663, 167677, 167683, 167711, 167729, 167747, 167759, 167771, 167777, 167779, 167801, 167809, 167861, 167863, 167873, 167879, 167887, 167891, 167899, 167911, 167917, 167953, 167971, 167987, 168013, 168023, 168029, 168037, 168043, 168067, 168071, 168083, 168089, 168109, 168127, 168143, 168151, 168193, 168197, 168211, 168227, 168247, 168253, 168263, 168269, 168277, 168281, 168293, 168323, 168331, 168347, 168353, 168391, 168409, 168433, 168449, 168451, 168457, 168463, 168481, 168491, 168499, 168523, 168527, 168533, 168541, 168559, 168599, 168601, 168617, 168629, 168631, 168643, 168673, 168677, 168697, 168713, 168719, 168731, 168737, 168743, 168761, 168769, 168781, 168803, 168851, 168863, 168869, 168887, 168893, 168899, 168901, 168913, 168937, 168943, 168977, 168991, 169003, 169007, 169009, 169019, 169049, 169063, 169067, 169069, 169079, 169093, 169097, 169111, 169129, 169151, 169159, 169177, 169181, 169199, 169217, 169219, 169241, 169243, 169249, 169259, 169283, 169307, 169313, 169319, 169321, 169327, 169339, 169343, 169361, 169369, 169373, 169399, 169409, 169427, 169457, 169471, 169483, 169489, 169493, 169501, 169523, 169531, 169553, 169567, 169583, 169591, 169607, 169627, 169633, 169639, 169649, 169657, 169661, 169667, 169681, 169691, 169693, 169709, 169733, 169751, 169753, 169769, 169777, 169783, 169789, 169817, 169823, 169831, 169837, 169843, 169859, 169889, 169891, 169909, 169913, 169919, 169933, 169937, 169943, 169951, 169957, 169987, 169991, 170003, 170021, 170029, 170047, 170057, 170063, 170081, 170099, 170101, 170111, 170123, 170141, 170167, 170179, 170189, 170197, 170207, 170213, 170227, 170231, 170239, 170243, 170249, 170263, 170267, 170279, 170293, 170299, 170327, 170341, 170347, 170351, 170353, 170363, 170369, 170371, 170383, 170389, 170393, 170413, 170441, 170447, 170473, 170483, 170497, 170503, 170509, 170537, 170539, 170551, 170557, 170579, 170603, 170609, 170627, 170633, 170641, 170647, 170669, 170689, 170701, 170707, 170711, 170741, 170749, 170759, 170761, 170767, 170773, 170777, 170801, 170809, 170813, 170827, 170837, 170843, 170851, 170857, 170873, 170881, 170887, 170899, 170921, 170927, 170953, 170957, 170971, 171007, 171023, 171029, 171043, 171047, 171049, 171053, 171077, 171079, 171091, 171103, 171131, 171161, 171163, 171167, 171169, 171179, 171203, 171233, 171251, 171253, 171263, 171271, 171293, 171299, 171317, 171329, 171341, 171383, 171401, 171403, 171427, 171439, 171449, 171467, 171469, 171473, 171481, 171491, 171517, 171529, 171539, 171541, 171553, 171559, 171571, 171583, 171617, 171629, 171637, 171641, 171653, 171659, 171671, 171673, 171679, 171697, 171707, 171713, 171719, 171733, 171757, 171761, 171763, 171793, 171799, 171803, 171811, 171823, 171827, 171851, 171863, 171869, 171877, 171881, 171889, 171917, 171923, 171929, 171937, 171947, 172001, 172009, 172021, 172027, 172031, 172049, 172069, 172079, 172093, 172097, 172127, 172147, 172153, 172157, 172169, 172171, 172181, 172199, 172213, 172217, 172219, 172223, 172243, 172259, 172279, 172283, 172297, 172307, 172313, 172321, 172331, 172343, 172351, 172357, 172373, 172399, 172411, 172421, 172423, 172427, 172433, 172439, 172441, 172489, 172507, 172517, 172519, 172541, 172553, 172561, 172573, 172583, 172589, 172597, 172603, 172607, 172619, 172633, 172643, 172649, 172657, 172663, 172673, 172681, 172687, 172709, 172717, 172721, 172741, 172751, 172759, 172787, 172801, 172807, 172829, 172849, 172853, 172859, 172867, 172871, 172877, 172883, 172933, 172969, 172973, 172981, 172987, 172993, 172999, 173021, 173023, 173039, 173053, 173059, 173081, 173087, 173099, 173137, 173141, 173149, 173177, 173183, 173189, 173191, 173207, 173209, 173219, 173249, 173263, 173267, 173273, 173291, 173293, 173297, 173309, 173347, 173357, 173359, 173429, 173431, 173473, 173483, 173491, 173497, 173501, 173531, 173539, 173543, 173549, 173561, 173573, 173599, 173617, 173629, 173647, 173651, 173659, 173669, 173671, 173683, 173687, 173699, 173707, 173713, 173729, 173741, 173743, 173773, 173777, 173779, 173783, 173807, 173819, 173827, 173839, 173851, 173861, 173867, 173891, 173897, 173909, 173917, 173923, 173933, 173969, 173977, 173981, 173993, 174007, 174017, 174019, 174047, 174049, 174061, 174067, 174071, 174077, 174079, 174091, 174101, 174121, 174137, 174143, 174149, 174157, 174169, 174197, 174221, 174241, 174257, 174259, 174263, 174281, 174289, 174299, 174311, 174329, 174331, 174337, 174347, 174367, 174389, 174407, 174413, 174431, 174443, 174457, 174467, 174469, 174481, 174487, 174491, 174527, 174533, 174569, 174571, 174583, 174599, 174613, 174617, 174631, 174637, 174649, 174653, 174659, 174673, 174679, 174703, 174721, 174737, 174749, 174761, 174763, 174767, 174773, 174799, 174821, 174829, 174851, 174859, 174877, 174893, 174901, 174907, 174917, 174929, 174931, 174943, 174959, 174989, 174991, 175003, 175013, 175039, 175061, 175067, 175069, 175079, 175081, 175103, 175129, 175141, 175211, 175229, 175261, 175267, 175277, 175291, 175303, 175309, 175327, 175333, 175349, 175361, 175391, 175393, 175403, 175411, 175433, 175447, 175453, 175463, 175481, 175493, 175499, 175519, 175523, 175543, 175573, 175601, 175621, 175631, 175633, 175649, 175663, 175673, 175687, 175691, 175699, 175709, 175723, 175727, 175753, 175757, 175759, 175781, 175783, 175811, 175829, 175837, 175843, 175853, 175859, 175873, 175891, 175897, 175909, 175919, 175937, 175939, 175949, 175961, 175963, 175979, 175991, 175993, 176017, 176021, 176023, 176041, 176047, 176051, 176053, 176063, 176081, 176087, 176089, 176123, 176129, 176153, 176159, 176161, 176179, 176191, 176201, 176207, 176213, 176221, 176227, 176237, 176243, 176261, 176299, 176303, 176317, 176321, 176327, 176329, 176333, 176347, 176353, 176357, 176369, 176383, 176389, 176401, 176413, 176417, 176419, 176431, 176459, 176461, 176467, 176489, 176497, 176503, 176507, 176509, 176521, 176531, 176537, 176549, 176551, 176557, 176573, 176591, 176597, 176599, 176609, 176611, 176629, 176641, 176651, 176677, 176699, 176711, 176713, 176741, 176747, 176753, 176777, 176779, 176789, 176791, 176797, 176807, 176809, 176819, 176849, 176857, 176887, 176899, 176903, 176921, 176923, 176927, 176933, 176951, 176977, 176983, 176989, 177007, 177011, 177013, 177019, 177043, 177091, 177101, 177109, 177113, 177127, 177131, 177167, 177173, 177209, 177211, 177217, 177223, 177239, 177257, 177269, 177283, 177301, 177319, 177323, 177337, 177347, 177379, 177383, 177409, 177421, 177427, 177431, 177433, 177467, 177473, 177481, 177487, 177493, 177511, 177533, 177539, 177553, 177589, 177601, 177623, 177647, 177677, 177679, 177691, 177739, 177743, 177761, 177763, 177787, 177791, 177797, 177811, 177823, 177839, 177841, 177883, 177887, 177889, 177893, 177907, 177913, 177917, 177929, 177943, 177949, 177953, 177967, 177979, 178001, 178021, 178037, 178039, 178067, 178069, 178091, 178093, 178103, 178117, 178127, 178141, 178151, 178169, 178183, 178187, 178207, 178223, 178231, 178247, 178249, 178259, 178261, 178289, 178301, 178307, 178327, 178333, 178349, 178351, 178361, 178393, 178397, 178403, 178417, 178439, 178441, 178447, 178469, 178481, 178487, 178489, 178501, 178513, 178531, 178537, 178559, 178561, 178567, 178571, 178597, 178601, 178603, 178609, 178613, 178621, 178627, 178639, 178643, 178681, 178691, 178693, 178697, 178753, 178757, 178781, 178793, 178799, 178807, 178813, 178817, 178819, 178831, 178853, 178859, 178873, 178877, 178889, 178897, 178903, 178907, 178909, 178921, 178931, 178933, 178939, 178951, 178973, 178987, 179021, 179029, 179033, 179041, 179051, 179057, 179083, 179089, 179099, 179107, 179111, 179119, 179143, 179161, 179167, 179173, 179203, 179209, 179213, 179233, 179243, 179261, 179269, 179281, 179287, 179317, 179321, 179327, 179351, 179357, 179369, 179381, 179383, 179393, 179407, 179411, 179429, 179437, 179441, 179453, 179461, 179471, 179479, 179483, 179497, 179519, 179527, 179533, 179549, 179563, 179573, 179579, 179581, 179591, 179593, 179603, 179623, 179633, 179651, 179657, 179659, 179671, 179687, 179689, 179693, 179717, 179719, 179737, 179743, 179749, 179779, 179801, 179807, 179813, 179819, 179821, 179827, 179833, 179849, 179897, 179899, 179903, 179909, 179917, 179923, 179939, 179947, 179951, 179953, 179957, 179969, 179981, 179989, 179999, 180001, 180007, 180023, 180043, 180053, 180071, 180073, 180077, 180097, 180137, 180161, 180179, 180181, 180211, 180221, 180233, 180239, 180241, 180247, 180259, 180263, 180281, 180287, 180289, 180307, 180311, 180317, 180331, 180337, 180347, 180361, 180371, 180379, 180391, 180413, 180419, 180437, 180463, 180473, 180491, 180497, 180503, 180511, 180533, 180539, 180541, 180547, 180563, 180569, 180617, 180623, 180629, 180647, 180667, 180679, 180701, 180731, 180749, 180751, 180773, 180779, 180793, 180797, 180799, 180811, 180847, 180871, 180883, 180907, 180949, 180959, 181001, 181003, 181019, 181031, 181039, 181061, 181063, 181081, 181087, 181123, 181141, 181157, 181183, 181193, 181199, 181201, 181211, 181213, 181219, 181243, 181253, 181273, 181277, 181283, 181297, 181301, 181303, 181361, 181387, 181397, 181399, 181409, 181421, 181439, 181457, 181459, 181499, 181501, 181513, 181523, 181537, 181549, 181553, 181603, 181607, 181609, 181619, 181639, 181667, 181669, 181693, 181711, 181717, 181721, 181729, 181739, 181751, 181757, 181759, 181763, 181777, 181787, 181789, 181813, 181837, 181871, 181873, 181889, 181891, 181903, 181913, 181919, 181927, 181931, 181943, 181957, 181967, 181981, 181997, 182009, 182011, 182027, 182029, 182041, 182047, 182057, 182059, 182089, 182099, 182101, 182107, 182111, 182123, 182129, 182131, 182141, 182159, 182167, 182177, 182179, 182201, 182209, 182233, 182239, 182243, 182261, 182279, 182297, 182309, 182333, 182339, 182341, 182353, 182387, 182389, 182417, 182423, 182431, 182443, 182453, 182467, 182471, 182473, 182489, 182503, 182509, 182519, 182537, 182549, 182561, 182579, 182587, 182593, 182599, 182603, 182617, 182627, 182639, 182641, 182653, 182657, 182659, 182681, 182687, 182701, 182711, 182713, 182747, 182773, 182779, 182789, 182803, 182813, 182821, 182839, 182851, 182857, 182867, 182887, 182893, 182899, 182921, 182927, 182929, 182933, 182953, 182957, 182969, 182981, 182999, 183023, 183037, 183041, 183047, 183059, 183067, 183089, 183091, 183119, 183151, 183167, 183191, 183203, 183247, 183259, 183263, 183283, 183289, 183299, 183301, 183307, 183317, 183319, 183329, 183343, 183349, 183361, 183373, 183377, 183383, 183389, 183397, 183437, 183439, 183451, 183461, 183473, 183479, 183487, 183497, 183499, 183503, 183509, 183511, 183523, 183527, 183569, 183571, 183577, 183581, 183587, 183593, 183611, 183637, 183661, 183683, 183691, 183697, 183707, 183709, 183713, 183761, 183763, 183797, 183809, 183823, 183829, 183871, 183877, 183881, 183907, 183917, 183919, 183943, 183949, 183959, 183971, 183973, 183979, 184003, 184007, 184013, 184031, 184039, 184043, 184057, 184073, 184081, 184087, 184111, 184117, 184133, 184153, 184157, 184181, 184187, 184189, 184199, 184211, 184231, 184241, 184259, 184271, 184273, 184279, 184291, 184309, 184321, 184333, 184337, 184351, 184369, 184409, 184417, 184441, 184447, 184463, 184477, 184487, 184489, 184511, 184517, 184523, 184553, 184559, 184567, 184571, 184577, 184607, 184609, 184627, 184631, 184633, 184649, 184651, 184669, 184687, 184693, 184703, 184711, 184721, 184727, 184733, 184753, 184777, 184823, 184829, 184831, 184837, 184843, 184859, 184879, 184901, 184903, 184913, 184949, 184957, 184967, 184969, 184993, 184997, 184999, 185021, 185027, 185051, 185057, 185063, 185069, 185071, 185077, 185089, 185099, 185123, 185131, 185137, 185149, 185153, 185161, 185167, 185177, 185183, 185189, 185221, 185233, 185243, 185267, 185291, 185299, 185303, 185309, 185323, 185327, 185359, 185363, 185369, 185371, 185401, 185429, 185441, 185467, 185477, 185483, 185491, 185519, 185527, 185531, 185533, 185539, 185543, 185551, 185557, 185567, 185569, 185593, 185599, 185621, 185641, 185651, 185677, 185681, 185683, 185693, 185699, 185707, 185711, 185723, 185737, 185747, 185749, 185753, 185767, 185789, 185797, 185813, 185819, 185821, 185831, 185833, 185849, 185869, 185873, 185893, 185897, 185903, 185917, 185923, 185947, 185951, 185957, 185959, 185971, 185987, 185993, 186007, 186013, 186019, 186023, 186037, 186041, 186049, 186071, 186097, 186103, 186107, 186113, 186119, 186149, 186157, 186161, 186163, 186187, 186191, 186211, 186227, 186229, 186239, 186247, 186253, 186259, 186271, 186283, 186299, 186301, 186311, 186317, 186343, 186377, 186379, 186391, 186397, 186419, 186437, 186451, 186469, 186479, 186481, 186551, 186569, 186581, 186583, 186587, 186601, 186619, 186629, 186647, 186649, 186653, 186671, 186679, 186689, 186701, 186707, 186709, 186727, 186733, 186743, 186757, 186761, 186763, 186773, 186793, 186799, 186841, 186859, 186869, 186871, 186877, 186883, 186889, 186917, 186947, 186959, 187003, 187009, 187027, 187043, 187049, 187067, 187069, 187073, 187081, 187091, 187111, 187123, 187127, 187129, 187133, 187139, 187141, 187163, 187171, 187177, 187181, 187189, 187193, 187211, 187217, 187219, 187223, 187237, 187273, 187277, 187303, 187337, 187339, 187349, 187361, 187367, 187373, 187379, 187387, 187393, 187409, 187417, 187423, 187433, 187441, 187463, 187469, 187471, 187477, 187507, 187513, 187531, 187547, 187559, 187573, 187597, 187631, 187633, 187637, 187639, 187651, 187661, 187669, 187687, 187699, 187711, 187721, 187751, 187763, 187787, 187793, 187823, 187843, 187861, 187871, 187877, 187883, 187897, 187907, 187909, 187921, 187927, 187931, 187951, 187963, 187973, 187987, 188011, 188017, 188021, 188029, 188107, 188137, 188143, 188147, 188159, 188171, 188179, 188189, 188197, 188249, 188261, 188273, 188281, 188291, 188299, 188303, 188311, 188317, 188323, 188333, 188351, 188359, 188369, 188389, 188401, 188407, 188417, 188431, 188437, 188443, 188459, 188473, 188483, 188491, 188519, 188527, 188533, 188563, 188579, 188603, 188609, 188621, 188633, 188653, 188677, 188681, 188687, 188693, 188701, 188707, 188711, 188719, 188729, 188753, 188767, 188779, 188791, 188801, 188827, 188831, 188833, 188843, 188857, 188861, 188863, 188869, 188891, 188911, 188927, 188933, 188939, 188941, 188953, 188957, 188983, 188999, 189011, 189017, 189019, 189041, 189043, 189061, 189067, 189127, 189139, 189149, 189151, 189169, 189187, 189199, 189223, 189229, 189239, 189251, 189253, 189257, 189271, 189307, 189311, 189337, 189347, 189349, 189353, 189361, 189377, 189389, 189391, 189401, 189407, 189421, 189433, 189437, 189439, 189463, 189467, 189473, 189479, 189491, 189493, 189509, 189517, 189523, 189529, 189547, 189559, 189583, 189593, 189599, 189613, 189617, 189619, 189643, 189653, 189661, 189671, 189691, 189697, 189701, 189713, 189733, 189743, 189757, 189767, 189797, 189799, 189817, 189823, 189851, 189853, 189859, 189877, 189881, 189887, 189901, 189913, 189929, 189947, 189949, 189961, 189967, 189977, 189983, 189989, 189997, 190027, 190031, 190051, 190063, 190093, 190097, 190121, 190129, 190147, 190159, 190181, 190207, 190243, 190249, 190261, 190271, 190283, 190297, 190301, 190313, 190321, 190331, 190339, 190357, 190367, 190369, 190387, 190391, 190403, 190409, 190471, 190507, 190523, 190529, 190537, 190543, 190573, 190577, 190579, 190583, 190591, 190607, 190613, 190633, 190639, 190649, 190657, 190667, 190669, 190699, 190709, 190711, 190717, 190753, 190759, 190763, 190769, 190783, 190787, 190793, 190807, 190811, 190823, 190829, 190837, 190843, 190871, 190889, 190891, 190901, 190909, 190913, 190921, 190979, 190997, 191021, 191027, 191033, 191039, 191047, 191057, 191071, 191089, 191099, 191119, 191123, 191137, 191141, 191143, 191161, 191173, 191189, 191227, 191231, 191237, 191249, 191251, 191281, 191297, 191299, 191339, 191341, 191353, 191413, 191441, 191447, 191449, 191453, 191459, 191461, 191467, 191473, 191491, 191497, 191507, 191509, 191519, 191531, 191533, 191537, 191551, 191561, 191563, 191579, 191599, 191621, 191627, 191657, 191669, 191671, 191677, 191689, 191693, 191699, 191707, 191717, 191747, 191749, 191773, 191783, 191791, 191801, 191803, 191827, 191831, 191833, 191837, 191861, 191899, 191903, 191911, 191929, 191953, 191969, 191977, 191999, 192007, 192013, 192029, 192037, 192043, 192047, 192053, 192091, 192097, 192103, 192113, 192121, 192133, 192149, 192161, 192173, 192187, 192191, 192193, 192229, 192233, 192239, 192251, 192259, 192263, 192271, 192307, 192317, 192319, 192323, 192341, 192343, 192347, 192373, 192377, 192383, 192391, 192407, 192431, 192461, 192463, 192497, 192499, 192529, 192539, 192547, 192553, 192557, 192571, 192581, 192583, 192587, 192601, 192611, 192613, 192617, 192629, 192631, 192637, 192667, 192677, 192697, 192737, 192743, 192749, 192757, 192767, 192781, 192791, 192799, 192811, 192817, 192833, 192847, 192853, 192859, 192877, 192883, 192887, 192889, 192917, 192923, 192931, 192949, 192961, 192971, 192977, 192979, 192991, 193003, 193009, 193013, 193031, 193043, 193051, 193057, 193073, 193093, 193133, 193139, 193147, 193153, 193163, 193181, 193183, 193189, 193201, 193243, 193247, 193261, 193283, 193301, 193327, 193337, 193357, 193367, 193373, 193379, 193381, 193387, 193393, 193423, 193433, 193441, 193447, 193451, 193463, 193469, 193493, 193507, 193513, 193541, 193549, 193559, 193573, 193577, 193597, 193601, 193603, 193607, 193619, 193649, 193663, 193679, 193703, 193723, 193727, 193741, 193751, 193757, 193763, 193771, 193789, 193793, 193799, 193811, 193813, 193841, 193847, 193859, 193861, 193871, 193873, 193877, 193883, 193891, 193937, 193939, 193943, 193951, 193957, 193979, 193993, 194003, 194017, 194027, 194057, 194069, 194071, 194083, 194087, 194093, 194101, 194113, 194119, 194141, 194149, 194167, 194179, 194197, 194203, 194239, 194263, 194267, 194269, 194309, 194323, 194353, 194371, 194377, 194413, 194431, 194443, 194471, 194479, 194483, 194507, 194521, 194527, 194543, 194569, 194581, 194591, 194609, 194647, 194653, 194659, 194671, 194681, 194683, 194687, 194707, 194713, 194717, 194723, 194729, 194749, 194767, 194771, 194809, 194813, 194819, 194827, 194839, 194861, 194863, 194867, 194869, 194891, 194899, 194911, 194917, 194933, 194963, 194977, 194981, 194989, 195023, 195029, 195043, 195047, 195049, 195053, 195071, 195077, 195089, 195103, 195121, 195127, 195131, 195137, 195157, 195161, 195163, 195193, 195197, 195203, 195229, 195241, 195253, 195259, 195271, 195277, 195281, 195311, 195319, 195329, 195341, 195343, 195353, 195359, 195389, 195401, 195407, 195413, 195427, 195443, 195457, 195469, 195479, 195493, 195497, 195511, 195527, 195539, 195541, 195581, 195593, 195599, 195659, 195677, 195691, 195697, 195709, 195731, 195733, 195737, 195739, 195743, 195751, 195761, 195781, 195787, 195791, 195809, 195817, 195863, 195869, 195883, 195887, 195893, 195907, 195913, 195919, 195929, 195931, 195967, 195971, 195973, 195977, 195991, 195997, 196003, 196033, 196039, 196043, 196051, 196073, 196081, 196087, 196111, 196117, 196139, 196159, 196169, 196171, 196177, 196181, 196187, 196193, 196201, 196247, 196271, 196277, 196279, 196291, 196303, 196307, 196331, 196337, 196379, 196387, 196429, 196439, 196453, 196459, 196477, 196499, 196501, 196519, 196523, 196541, 196543, 196549, 196561, 196579, 196583, 196597, 196613, 196643, 196657, 196661, 196663, 196681, 196687, 196699, 196709, 196717, 196727, 196739, 196751, 196769, 196771, 196799, 196817, 196831, 196837, 196853, 196871, 196873, 196879, 196901, 196907, 196919, 196927, 196961, 196991, 196993, 197003, 197009, 197023, 197033, 197059, 197063, 197077, 197083, 197089, 197101, 197117, 197123, 197137, 197147, 197159, 197161, 197203, 197207, 197221, 197233, 197243, 197257, 197261, 197269, 197273, 197279, 197293, 197297, 197299, 197311, 197339, 197341, 197347, 197359, 197369, 197371, 197381, 197383, 197389, 197419, 197423, 197441, 197453, 197479, 197507, 197521, 197539, 197551, 197567, 197569, 197573, 197597, 197599, 197609, 197621, 197641, 197647, 197651, 197677, 197683, 197689, 197699, 197711, 197713, 197741, 197753, 197759, 197767, 197773, 197779, 197803, 197807, 197831, 197837, 197887, 197891, 197893, 197909, 197921, 197927, 197933, 197947, 197957, 197959, 197963, 197969, 197971, 198013, 198017, 198031, 198043, 198047, 198073, 198083, 198091, 198097, 198109, 198127, 198139, 198173, 198179, 198193, 198197, 198221, 198223, 198241, 198251, 198257, 198259, 198277, 198281, 198301, 198313, 198323, 198337, 198347, 198349, 198377, 198391, 198397, 198409, 198413, 198427, 198437, 198439, 198461, 198463, 198469, 198479, 198491, 198503, 198529, 198533, 198553, 198571, 198589, 198593, 198599, 198613, 198623, 198637, 198641, 198647, 198659, 198673, 198689, 198701, 198719, 198733, 198761, 198769, 198811, 198817, 198823, 198827, 198829, 198833, 198839, 198841, 198851, 198859, 198899, 198901, 198929, 198937, 198941, 198943, 198953, 198959, 198967, 198971, 198977, 198997, 199021, 199033, 199037, 199039, 199049, 199081, 199103, 199109, 199151, 199153, 199181, 199193, 199207, 199211, 199247, 199261, 199267, 199289, 199313, 199321, 199337, 199343, 199357, 199373, 199379, 199399, 199403, 199411, 199417, 199429, 199447, 199453, 199457, 199483, 199487, 199489, 199499, 199501, 199523, 199559, 199567, 199583, 199601, 199603, 199621, 199637, 199657, 199669, 199673, 199679, 199687, 199697, 199721, 199729, 199739, 199741, 199751, 199753, 199777, 199783, 199799, 199807, 199811, 199813, 199819, 199831, 199853, 199873, 199877, 199889, 199909, 199921, 199931, 199933, 199961, 199967, 199999, 200003, 200009, 200017, 200023, 200029, 200033, 200041, 200063, 200087, 200117, 200131, 200153, 200159, 200171, 200177, 200183, 200191, 200201, 200227, 200231, 200237, 200257, 200273, 200293, 200297, 200323, 200329, 200341, 200351, 200357, 200363, 200371, 200381, 200383, 200401, 200407, 200437, 200443, 200461, 200467, 200483, 200513, 200569, 200573, 200579, 200587, 200591, 200597, 200609, 200639, 200657, 200671, 200689, 200699, 200713, 200723, 200731, 200771, 200779, 200789, 200797, 200807, 200843, 200861, 200867, 200869, 200881, 200891, 200899, 200903, 200909, 200927, 200929, 200971, 200983, 200987, 200989, 201007, 201011, 201031, 201037, 201049, 201073, 201101, 201107, 201119, 201121, 201139, 201151, 201163, 201167, 201193, 201203, 201209, 201211, 201233, 201247, 201251, 201281, 201287, 201307, 201329, 201337, 201359, 201389, 201401, 201403, 201413, 201437, 201449, 201451, 201473, 201491, 201493, 201497, 201499, 201511, 201517, 201547, 201557, 201577, 201581, 201589, 201599, 201611, 201623, 201629, 201653, 201661, 201667, 201673, 201683, 201701, 201709, 201731, 201743, 201757, 201767, 201769, 201781, 201787, 201791, 201797, 201809, 201821, 201823, 201827, 201829, 201833, 201847, 201881, 201889, 201893, 201907, 201911, 201919, 201923, 201937, 201947, 201953, 201961, 201973, 201979, 201997, 202001, 202021, 202031, 202049, 202061, 202063, 202067, 202087, 202099, 202109, 202121, 202127, 202129, 202183, 202187, 202201, 202219, 202231, 202243, 202277, 202289, 202291, 202309, 202327, 202339, 202343, 202357, 202361, 202381, 202387, 202393, 202403, 202409, 202441, 202471, 202481, 202493, 202519, 202529, 202549, 202567, 202577, 202591, 202613, 202621, 202627, 202637, 202639, 202661, 202667, 202679, 202693, 202717, 202729, 202733, 202747, 202751, 202753, 202757, 202777, 202799, 202817, 202823, 202841, 202859, 202877, 202879, 202889, 202907, 202921, 202931, 202933, 202949, 202967, 202973, 202981, 202987, 202999, 203011, 203017, 203023, 203039, 203051, 203057, 203117, 203141, 203173, 203183, 203207, 203209, 203213, 203221, 203227, 203233, 203249, 203279, 203293, 203309, 203311, 203317, 203321, 203323, 203339, 203341, 203351, 203353, 203363, 203381, 203383, 203387, 203393, 203417, 203419, 203429, 203431, 203449, 203459, 203461, 203531, 203549, 203563, 203569, 203579, 203591, 203617, 203627, 203641, 203653, 203657, 203659, 203663, 203669, 203713, 203761, 203767, 203771, 203773, 203789, 203807, 203809, 203821, 203843, 203857, 203869, 203873, 203897, 203909, 203911, 203921, 203947, 203953, 203969, 203971, 203977, 203989, 203999, 204007, 204013, 204019, 204023, 204047, 204059, 204067, 204101, 204107, 204133, 204137, 204143, 204151, 204161, 204163, 204173, 204233, 204251, 204299, 204301, 204311, 204319, 204329, 204331, 204353, 204359, 204361, 204367, 204371, 204377, 204397, 204427, 204431, 204437, 204439, 204443, 204461, 204481, 204487, 204509, 204511, 204517, 204521, 204557, 204563, 204583, 204587, 204599, 204601, 204613, 204623, 204641, 204667, 204679, 204707, 204719, 204733, 204749, 204751, 204781, 204791, 204793, 204797, 204803, 204821, 204857, 204859, 204871, 204887, 204913, 204917, 204923, 204931, 204947, 204973, 204979, 204983, 205019, 205031, 205033, 205043, 205063, 205069, 205081, 205097, 205103, 205111, 205129, 205133, 205141, 205151, 205157, 205171, 205187, 205201, 205211, 205213, 205223, 205237, 205253, 205267, 205297, 205307, 205319, 205327, 205339, 205357, 205391, 205397, 205399, 205417, 205421, 205423, 205427, 205433, 205441, 205453, 205463, 205477, 205483, 205487, 205493, 205507, 205519, 205529, 205537, 205549, 205553, 205559, 205589, 205603, 205607, 205619, 205627, 205633, 205651, 205657, 205661, 205663, 205703, 205721, 205759, 205763, 205783, 205817, 205823, 205837, 205847, 205879, 205883, 205913, 205937, 205949, 205951, 205957, 205963, 205967, 205981, 205991, 205993, 206009, 206021, 206027, 206033, 206039, 206047, 206051, 206069, 206077, 206081, 206083, 206123, 206153, 206177, 206179, 206183, 206191, 206197, 206203, 206209, 206221, 206233, 206237, 206249, 206251, 206263, 206273, 206279, 206281, 206291, 206299, 206303, 206341, 206347, 206351, 206369, 206383, 206399, 206407, 206411, 206413, 206419, 206447, 206461, 206467, 206477, 206483, 206489, 206501, 206519, 206527, 206543, 206551, 206593, 206597, 206603, 206623, 206627, 206639, 206641, 206651, 206699, 206749, 206779, 206783, 206803, 206807, 206813, 206819, 206821, 206827, 206879, 206887, 206897, 206909, 206911, 206917, 206923, 206933, 206939, 206951, 206953, 206993, 207013, 207017, 207029, 207037, 207041, 207061, 207073, 207079, 207113, 207121, 207127, 207139, 207169, 207187, 207191, 207197, 207199, 207227, 207239, 207241, 207257, 207269, 207287, 207293, 207301, 207307, 207329, 207331, 207341, 207343, 207367, 207371, 207377, 207401, 207409, 207433, 207443, 207457, 207463, 207469, 207479, 207481, 207491, 207497, 207509, 207511, 207517, 207521, 207523, 207541, 207547, 207551, 207563, 207569, 207589, 207593, 207619, 207629, 207643, 207653, 207661, 207671, 207673, 207679, 207709, 207719, 207721, 207743, 207763, 207769, 207797, 207799, 207811, 207821, 207833, 207847, 207869, 207877, 207923, 207931, 207941, 207947, 207953, 207967, 207971, 207973, 207997, 208001, 208003, 208009, 208037, 208049, 208057, 208067, 208073, 208099, 208111, 208121, 208129, 208139, 208141, 208147, 208189, 208207, 208213, 208217, 208223, 208231, 208253, 208261, 208277, 208279, 208283, 208291, 208309, 208319, 208333, 208337, 208367, 208379, 208387, 208391, 208393, 208409, 208433, 208441, 208457, 208459, 208463, 208469, 208489, 208493, 208499, 208501, 208511, 208513, 208519, 208529, 208553, 208577, 208589, 208591, 208609, 208627, 208631, 208657, 208667, 208673, 208687, 208697, 208699, 208721, 208729, 208739, 208759, 208787, 208799, 208807, 208837, 208843, 208877, 208889, 208891, 208907, 208927, 208931, 208933, 208961, 208963, 208991, 208993, 208997, 209021, 209029, 209039, 209063, 209071, 209089, 209123, 209147, 209159, 209173, 209179, 209189, 209201, 209203, 209213, 209221, 209227, 209233, 209249, 209257, 209263, 209267, 209269, 209299, 209311, 209317, 209327, 209333, 209347, 209353, 209357, 209359, 209371, 209381, 209393, 209401, 209431, 209441, 209449, 209459, 209471, 209477, 209497, 209519, 209533, 209543, 209549, 209563, 209567, 209569, 209579, 209581, 209597, 209621, 209623, 209639, 209647, 209659, 209669, 209687, 209701, 209707, 209717, 209719, 209743, 209767, 209771, 209789, 209801, 209809, 209813, 209819, 209821, 209837, 209851, 209857, 209861, 209887, 209917, 209927, 209929, 209939, 209953, 209959, 209971, 209977, 209983, 209987, 210011, 210019, 210031, 210037, 210053, 210071, 210097, 210101, 210109, 210113, 210127, 210131, 210139, 210143, 210157, 210169, 210173, 210187, 210191, 210193, 210209, 210229, 210233, 210241, 210247, 210257, 210263, 210277, 210283, 210299, 210317, 210319, 210323, 210347, 210359, 210361, 210391, 210401, 210403, 210407, 210421, 210437, 210461, 210467, 210481, 210487, 210491, 210499, 210523, 210527, 210533, 210557, 210599, 210601, 210619, 210631, 210643, 210659, 210671, 210709, 210713, 210719, 210731, 210739, 210761, 210773, 210803, 210809, 210811, 210823, 210827, 210839, 210853, 210857, 210869, 210901, 210907, 210911, 210913, 210923, 210929, 210943, 210961, 210967, 211007, 211039, 211049, 211051, 211061, 211063, 211067, 211073, 211093, 211097, 211129, 211151, 211153, 211177, 211187, 211193, 211199, 211213, 211217, 211219, 211229, 211231, 211241, 211247, 211271, 211283, 211291, 211297, 211313, 211319, 211333, 211339, 211349, 211369, 211373, 211403, 211427, 211433, 211441, 211457, 211469, 211493, 211499, 211501, 211507, 211543, 211559, 211571, 211573, 211583, 211597, 211619, 211639, 211643, 211657, 211661, 211663, 211681, 211691, 211693, 211711, 211723, 211727, 211741, 211747, 211777, 211781, 211789, 211801, 211811, 211817, 211859, 211867, 211873, 211877, 211879, 211889, 211891, 211927, 211931, 211933, 211943, 211949, 211969, 211979, 211997, 212029, 212039, 212057, 212081, 212099, 212117, 212123, 212131, 212141, 212161, 212167, 212183, 212203, 212207, 212209, 212227, 212239, 212243, 212281, 212293, 212297, 212353, 212369, 212383, 212411, 212419, 212423, 212437, 212447, 212453, 212461, 212467, 212479, 212501, 212507, 212557, 212561, 212573, 212579, 212587, 212593, 212627, 212633, 212651, 212669, 212671, 212677, 212683, 212701, 212777, 212791, 212801, 212827, 212837, 212843, 212851, 212867, 212869, 212873, 212881, 212897, 212903, 212909, 212917, 212923, 212969, 212981, 212987, 212999, 213019, 213023, 213029, 213043, 213067, 213079, 213091, 213097, 213119, 213131, 213133, 213139, 213149, 213173, 213181, 213193, 213203, 213209, 213217, 213223, 213229, 213247, 213253, 213263, 213281, 213287, 213289, 213307, 213319, 213329, 213337, 213349, 213359, 213361, 213383, 213391, 213397, 213407, 213449, 213461, 213467, 213481, 213491, 213523, 213533, 213539, 213553, 213557, 213589, 213599, 213611, 213613, 213623, 213637, 213641, 213649, 213659, 213713, 213721, 213727, 213737, 213751, 213791, 213799, 213821, 213827, 213833, 213847, 213859, 213881, 213887, 213901, 213919, 213929, 213943, 213947, 213949, 213953, 213973, 213977, 213989, 214003, 214007, 214009, 214021, 214031, 214033, 214043, 214051, 214063, 214069, 214087, 214091, 214129, 214133, 214141, 214147, 214163, 214177, 214189, 214211, 214213, 214219, 214237, 214243, 214259, 214283, 214297, 214309, 214351, 214363, 214373, 214381, 214391, 214399, 214433, 214439, 214451, 214457, 214463, 214469, 214481, 214483, 214499, 214507, 214517, 214519, 214531, 214541, 214559, 214561, 214589, 214603, 214607, 214631, 214639, 214651, 214657, 214663, 214667, 214673, 214691, 214723, 214729, 214733, 214741, 214759, 214763, 214771, 214783, 214787, 214789, 214807, 214811, 214817, 214831, 214849, 214853, 214867, 214883, 214891, 214913, 214939, 214943, 214967, 214987, 214993, 215051, 215063, 215077, 215087, 215123, 215141, 215143, 215153, 215161, 215179, 215183, 215191, 215197, 215239, 215249, 215261, 215273, 215279, 215297, 215309, 215317, 215329, 215351, 215353, 215359, 215381, 215389, 215393, 215399, 215417, 215443, 215447, 215459, 215461, 215471, 215483, 215497, 215503, 215507, 215521, 215531, 215563, 215573, 215587, 215617, 215653, 215659, 215681, 215687, 215689, 215693, 215723, 215737, 215753, 215767, 215771, 215797, 215801, 215827, 215833, 215843, 215851, 215857, 215863, 215893, 215899, 215909, 215921, 215927, 215939, 215953, 215959, 215981, 215983, 216023, 216037, 216061, 216071, 216091, 216103, 216107, 216113, 216119, 216127, 216133, 216149, 216157, 216173, 216179, 216211, 216217, 216233, 216259, 216263, 216289, 216317, 216319, 216329, 216347, 216371, 216373, 216379, 216397, 216401, 216421, 216431, 216451, 216481, 216493, 216509, 216523, 216551, 216553, 216569, 216571, 216577, 216607, 216617, 216641, 216647, 216649, 216653, 216661, 216679, 216703, 216719, 216731, 216743, 216751, 216757, 216761, 216779, 216781, 216787, 216791, 216803, 216829, 216841, 216851, 216859, 216877, 216899, 216901, 216911, 216917, 216919, 216947, 216967, 216973, 216991, 217001, 217003, 217027, 217033, 217057, 217069, 217081, 217111, 217117, 217121, 217157, 217163, 217169, 217199, 217201, 217207, 217219, 217223, 217229, 217241, 217253, 217271, 217307, 217309, 217313, 217319, 217333, 217337, 217339, 217351, 217361, 217363, 217367, 217369, 217387, 217397, 217409, 217411, 217421, 217429, 217439, 217457, 217463, 217489, 217499, 217517, 217519, 217559, 217561, 217573, 217577, 217579, 217619, 217643, 217661, 217667, 217681, 217687, 217691, 217697, 217717, 217727, 217733, 217739, 217747, 217771, 217781, 217793, 217823, 217829, 217849, 217859, 217901, 217907, 217909, 217933, 217937, 217969, 217979, 217981, 218003, 218021, 218047, 218069, 218077, 218081, 218083, 218087, 218107, 218111, 218117, 218131, 218137, 218143, 218149, 218171, 218191, 218213, 218227, 218233, 218249, 218279, 218287, 218357, 218363, 218371, 218381, 218389, 218401, 218417, 218419, 218423, 218437, 218447, 218453, 218459, 218461, 218479, 218509, 218513, 218521, 218527, 218531, 218549, 218551, 218579, 218591, 218599, 218611, 218623, 218627, 218629, 218641, 218651, 218657, 218677, 218681, 218711, 218717, 218719, 218723, 218737, 218749, 218761, 218783, 218797, 218809, 218819, 218833, 218839, 218843, 218849, 218857, 218873, 218887, 218923, 218941, 218947, 218963, 218969, 218971, 218987, 218989, 218993, 219001, 219017, 219019, 219031, 219041, 219053, 219059, 219071, 219083, 219091, 219097, 219103, 219119, 219133, 219143, 219169, 219187, 219217, 219223, 219251, 219277, 219281, 219293, 219301, 219311, 219313, 219353, 219361, 219371, 219377, 219389, 219407, 219409, 219433, 219437, 219451, 219463, 219467, 219491, 219503, 219517, 219523, 219529, 219533, 219547, 219577, 219587, 219599, 219607, 219613, 219619, 219629, 219647, 219649, 219677, 219679, 219683, 219689, 219707, 219721, 219727, 219731, 219749, 219757, 219761, 219763, 219767, 219787, 219797, 219799, 219809, 219823, 219829, 219839, 219847, 219851, 219871, 219881, 219889, 219911, 219917, 219931, 219937, 219941, 219943, 219953, 219959, 219971, 219977, 219979, 219983, 220009, 220013, 220019, 220021, 220057, 220063, 220123, 220141, 220147, 220151, 220163, 220169, 220177, 220189, 220217, 220243, 220279, 220291, 220301, 220307, 220327, 220333, 220351, 220357, 220361, 220369, 220373, 220391, 220399, 220403, 220411, 220421, 220447, 220469, 220471, 220511, 220513, 220529, 220537, 220543, 220553, 220559, 220573, 220579, 220589, 220613, 220663, 220667, 220673, 220681, 220687, 220699, 220709, 220721, 220747, 220757, 220771, 220783, 220789, 220793, 220807, 220811, 220841, 220859, 220861, 220873, 220877, 220879, 220889, 220897, 220901, 220903, 220907, 220919, 220931, 220933, 220939, 220973, 221021, 221047, 221059, 221069, 221071, 221077, 221083, 221087, 221093, 221101, 221159, 221171, 221173, 221197, 221201, 221203, 221209, 221219, 221227, 221233, 221239, 221251, 221261, 221281, 221303, 221311, 221317, 221327, 221393, 221399, 221401, 221411, 221413, 221447, 221453, 221461, 221471, 221477, 221489, 221497, 221509, 221537, 221539, 221549, 221567, 221581, 221587, 221603, 221621, 221623, 221653, 221657, 221659, 221671, 221677, 221707, 221713, 221717, 221719, 221723, 221729, 221737, 221747, 221773, 221797, 221807, 221813, 221827, 221831, 221849, 221873, 221891, 221909, 221941, 221951, 221953, 221957, 221987, 221989, 221999, 222007, 222011, 222023, 222029, 222041, 222043, 222059, 222067, 222073, 222107, 222109, 222113, 222127, 222137, 222149, 222151, 222161, 222163, 222193, 222197, 222199, 222247, 222269, 222289, 222293, 222311, 222317, 222323, 222329, 222337, 222347, 222349, 222361, 222367, 222379, 222389, 222403, 222419, 222437, 222461, 222493, 222499, 222511, 222527, 222533, 222553, 222557, 222587, 222601, 222613, 222619, 222643, 222647, 222659, 222679, 222707, 222713, 222731, 222773, 222779, 222787, 222791, 222793, 222799, 222823, 222839, 222841, 222857, 222863, 222877, 222883, 222913, 222919, 222931, 222941, 222947, 222953, 222967, 222977, 222979, 222991, 223007, 223009, 223019, 223037, 223049, 223051, 223061, 223063, 223087, 223099, 223103, 223129, 223133, 223151, 223207, 223211, 223217, 223219, 223229, 223241, 223243, 223247, 223253, 223259, 223273, 223277, 223283, 223291, 223303, 223313, 223319, 223331, 223337, 223339, 223361, 223367, 223381, 223403, 223423, 223429, 223439, 223441, 223463, 223469, 223481, 223493, 223507, 223529, 223543, 223547, 223549, 223577, 223589, 223621, 223633, 223637, 223667, 223679, 223681, 223697, 223711, 223747, 223753, 223757, 223759, 223781, 223823, 223829, 223831, 223837, 223841, 223843, 223849, 223903, 223919, 223921, 223939, 223963, 223969, 223999, 224011, 224027, 224033, 224041, 224047, 224057, 224069, 224071, 224101, 224113, 224129, 224131, 224149, 224153, 224171, 224177, 224197, 224201, 224209, 224221, 224233, 224239, 224251, 224261, 224267, 224291, 224299, 224303, 224309, 224317, 224327, 224351, 224359, 224363, 224401, 224423, 224429, 224443, 224449, 224461, 224467, 224473, 224491, 224501, 224513, 224527, 224563, 224569, 224579, 224591, 224603, 224611, 224617, 224629, 224633, 224669, 224677, 224683, 224699, 224711, 224717, 224729, 224737, 224743, 224759, 224771, 224797, 224813, 224831, 224863, 224869, 224881, 224891, 224897, 224909, 224911, 224921, 224929, 224947, 224951, 224969, 224977, 224993, 225023, 225037, 225061, 225067, 225077, 225079, 225089, 225109, 225119, 225133, 225143, 225149, 225157, 225161, 225163, 225167, 225217, 225221, 225223, 225227, 225241, 225257, 225263, 225287, 225289, 225299, 225307, 225341, 225343, 225347, 225349, 225353, 225371, 225373, 225383, 225427, 225431, 225457, 225461, 225479, 225493, 225499, 225503, 225509, 225523, 225527, 225529, 225569, 225581, 225583, 225601, 225611, 225613, 225619, 225629, 225637, 225671, 225683, 225689, 225697, 225721, 225733, 225749, 225751, 225767, 225769, 225779, 225781, 225809, 225821, 225829, 225839, 225859, 225871, 225889, 225919, 225931, 225941, 225943, 225949, 225961, 225977, 225983, 225989, 226001, 226007, 226013, 226027, 226063, 226087, 226099, 226103, 226123, 226129, 226133, 226141, 226169, 226183, 226189, 226199, 226201, 226217, 226231, 226241, 226267, 226283, 226307, 226313, 226337, 226357, 226367, 226379, 226381, 226397, 226409, 226427, 226433, 226451, 226453, 226463, 226483, 226487, 226511, 226531, 226547, 226549, 226553, 226571, 226601, 226609, 226621, 226631, 226637, 226643, 226649, 226657, 226663, 226669, 226691, 226697, 226741, 226753, 226769, 226777, 226783, 226789, 226799, 226813, 226817, 226819, 226823, 226843, 226871, 226901, 226903, 226907, 226913, 226937, 226943, 226991, 227011, 227027, 227053, 227081, 227089, 227093, 227111, 227113, 227131, 227147, 227153, 227159, 227167, 227177, 227189, 227191, 227207, 227219, 227231, 227233, 227251, 227257, 227267, 227281, 227299, 227303, 227363, 227371, 227377, 227387, 227393, 227399, 227407, 227419, 227431, 227453, 227459, 227467, 227471, 227473, 227489, 227497, 227501, 227519, 227531, 227533, 227537, 227561, 227567, 227569, 227581, 227593, 227597, 227603, 227609, 227611, 227627, 227629, 227651, 227653, 227663, 227671, 227693, 227699, 227707, 227719, 227729, 227743, 227789, 227797, 227827, 227849, 227869, 227873, 227893, 227947, 227951, 227977, 227989, 227993, 228013, 228023, 228049, 228061, 228077, 228097, 228103, 228113, 228127, 228131, 228139, 228181, 228197, 228199, 228203, 228211, 228223, 228233, 228251, 228257, 228281, 228299, 228301, 228307, 228311, 228331, 228337, 228341, 228353, 228359, 228383, 228409, 228419, 228421, 228427, 228443, 228451, 228457, 228461, 228469, 228479, 228509, 228511, 228517, 228521, 228523, 228539, 228559, 228577, 228581, 228587, 228593, 228601, 228611, 228617, 228619, 228637, 228647, 228677, 228707, 228713, 228731, 228733, 228737, 228751, 228757, 228773, 228793, 228797, 228799, 228829, 228841, 228847, 228853, 228859, 228869, 228881, 228883, 228887, 228901, 228911, 228913, 228923, 228929, 228953, 228959, 228961, 228983, 228989, 229003, 229027, 229037, 229081, 229093, 229123, 229127, 229133, 229139, 229153, 229157, 229171, 229181, 229189, 229199, 229213, 229217, 229223, 229237, 229247, 229249, 229253, 229261, 229267, 229283, 229309, 229321, 229343, 229351, 229373, 229393, 229399, 229403, 229409, 229423, 229433, 229459, 229469, 229487, 229499, 229507, 229519, 229529, 229547, 229549, 229553, 229561, 229583, 229589, 229591, 229601, 229613, 229627, 229631, 229637, 229639, 229681, 229693, 229699, 229703, 229711, 229717, 229727, 229739, 229751, 229753, 229759, 229763, 229769, 229771, 229777, 229781, 229799, 229813, 229819, 229837, 229841, 229847, 229849, 229897, 229903, 229937, 229939, 229949, 229961, 229963, 229979, 229981, 230003, 230017, 230047, 230059, 230063, 230077, 230081, 230089, 230101, 230107, 230117, 230123, 230137, 230143, 230149, 230189, 230203, 230213, 230221, 230227, 230233, 230239, 230257, 230273, 230281, 230291, 230303, 230309, 230311, 230327, 230339, 230341, 230353, 230357, 230369, 230383, 230387, 230389, 230393, 230431, 230449, 230453, 230467, 230471, 230479, 230501, 230507, 230539, 230551, 230561, 230563, 230567, 230597, 230611, 230647, 230653, 230663, 230683, 230693, 230719, 230729, 230743, 230761, 230767, 230771, 230773, 230779, 230807, 230819, 230827, 230833, 230849, 230861, 230863, 230873, 230891, 230929, 230933, 230939, 230941, 230959, 230969, 230977, 230999, 231001, 231017, 231019, 231031, 231041, 231053, 231067, 231079, 231107, 231109, 231131, 231169, 231197, 231223, 231241, 231269, 231271, 231277, 231289, 231293, 231299, 231317, 231323, 231331, 231347, 231349, 231359, 231367, 231379, 231409, 231419, 231431, 231433, 231443, 231461, 231463, 231479, 231481, 231493, 231503, 231529, 231533, 231547, 231551, 231559, 231563, 231571, 231589, 231599, 231607, 231611, 231613, 231631, 231643, 231661, 231677, 231701, 231709, 231719, 231779, 231799, 231809, 231821, 231823, 231827, 231839, 231841, 231859, 231871, 231877, 231893, 231901, 231919, 231923, 231943, 231947, 231961, 231967, 232003, 232007, 232013, 232049, 232051, 232073, 232079, 232081, 232091, 232103, 232109, 232117, 232129, 232153, 232171, 232187, 232189, 232207, 232217, 232259, 232303, 232307, 232333, 232357, 232363, 232367, 232381, 232391, 232409, 232411, 232417, 232433, 232439, 232451, 232457, 232459, 232487, 232499, 232513, 232523, 232549, 232567, 232571, 232591, 232597, 232607, 232621, 232633, 232643, 232663, 232669, 232681, 232699, 232709, 232711, 232741, 232751, 232753, 232777, 232801, 232811, 232819, 232823, 232847, 232853, 232861, 232871, 232877, 232891, 232901, 232907, 232919, 232937, 232961, 232963, 232987, 233021, 233069, 233071, 233083, 233113, 233117, 233141, 233143, 233159, 233161, 233173, 233183, 233201, 233221, 233231, 233239, 233251, 233267, 233279, 233293, 233297, 233323, 233327, 233329, 233341, 233347, 233353, 233357, 233371, 233407, 233417, 233419, 233423, 233437, 233477, 233489, 233509, 233549, 233551, 233557, 233591, 233599, 233609, 233617, 233621, 233641, 233663, 233669, 233683, 233687, 233689, 233693, 233713, 233743, 233747, 233759, 233777, 233837, 233851, 233861, 233879, 233881, 233911, 233917, 233921, 233923, 233939, 233941, 233969, 233983, 233993, 234007, 234029, 234043, 234067, 234083, 234089, 234103, 234121, 234131, 234139, 234149, 234161, 234167, 234181, 234187, 234191, 234193, 234197, 234203, 234211, 234217, 234239, 234259, 234271, 234281, 234287, 234293, 234317, 234319, 234323, 234331, 234341, 234343, 234361, 234383, 234431, 234457, 234461, 234463, 234467, 234473, 234499, 234511, 234527, 234529, 234539, 234541, 234547, 234571, 234587, 234589, 234599, 234613, 234629, 234653, 234659, 234673, 234683, 234713, 234721, 234727, 234733, 234743, 234749, 234769, 234781, 234791, 234799, 234803, 234809, 234811, 234833, 234847, 234851, 234863, 234869, 234893, 234907, 234917, 234931, 234947, 234959, 234961, 234967, 234977, 234979, 234989, 235003, 235007, 235009, 235013, 235043, 235051, 235057, 235069, 235091, 235099, 235111, 235117, 235159, 235171, 235177, 235181, 235199, 235211, 235231, 235241, 235243, 235273, 235289, 235307, 235309, 235337, 235349, 235369, 235397, 235439, 235441, 235447, 235483, 235489, 235493, 235513, 235519, 235523, 235537, 235541, 235553, 235559, 235577, 235591, 235601, 235607, 235621, 235661, 235663, 235673, 235679, 235699, 235723, 235747, 235751, 235783, 235787, 235789, 235793, 235811, 235813, 235849, 235871, 235877, 235889, 235891, 235901, 235919, 235927, 235951, 235967, 235979, 235997, 236017, 236021, 236053, 236063, 236069, 236077, 236087, 236107, 236111, 236129, 236143, 236153, 236167, 236207, 236209, 236219, 236231, 236261, 236287, 236293, 236297, 236323, 236329, 236333, 236339, 236377, 236381, 236387, 236399, 236407, 236429, 236449, 236461, 236471, 236477, 236479, 236503, 236507, 236519, 236527, 236549, 236563, 236573, 236609, 236627, 236641, 236653, 236659, 236681, 236699, 236701, 236707, 236713, 236723, 236729, 236737, 236749, 236771, 236773, 236779, 236783, 236807, 236813, 236867, 236869, 236879, 236881, 236891, 236893, 236897, 236909, 236917, 236947, 236981, 236983, 236993, 237011, 237019, 237043, 237053, 237067, 237071, 237073, 237089, 237091, 237137, 237143, 237151, 237157, 237161, 237163, 237173, 237179, 237203, 237217, 237233, 237257, 237271, 237277, 237283, 237287, 237301, 237313, 237319, 237331, 237343, 237361, 237373, 237379, 237401, 237409, 237467, 237487, 237509, 237547, 237563, 237571, 237581, 237607, 237619, 237631, 237673, 237683, 237689, 237691, 237701, 237707, 237733, 237737, 237749, 237763, 237767, 237781, 237791, 237821, 237851, 237857, 237859, 237877, 237883, 237901, 237911, 237929, 237959, 237967, 237971, 237973, 237977, 237997, 238001, 238009, 238019, 238031, 238037, 238039, 238079, 238081, 238093, 238099, 238103, 238109, 238141, 238151, 238157, 238159, 238163, 238171, 238181, 238201, 238207, 238213, 238223, 238229, 238237, 238247, 238261, 238267, 238291, 238307, 238313, 238321, 238331, 238339, 238361, 238363, 238369, 238373, 238397, 238417, 238423, 238439, 238451, 238463, 238471, 238477, 238481, 238499, 238519, 238529, 238531, 238547, 238573, 238591, 238627, 238639, 238649, 238657, 238673, 238681, 238691, 238703, 238709, 238723, 238727, 238729, 238747, 238759, 238781, 238789, 238801, 238829, 238837, 238841, 238853, 238859, 238877, 238879, 238883, 238897, 238919, 238921, 238939, 238943, 238949, 238967, 238991, 239017, 239023, 239027, 239053, 239069, 239081, 239087, 239119, 239137, 239147, 239167, 239171, 239179, 239201, 239231, 239233, 239237, 239243, 239251, 239263, 239273, 239287, 239297, 239329, 239333, 239347, 239357, 239383, 239387, 239389, 239417, 239423, 239429, 239431, 239441, 239461, 239489, 239509, 239521, 239527, 239531, 239539, 239543, 239557, 239567, 239579, 239587, 239597, 239611, 239623, 239633, 239641, 239671, 239689, 239699, 239711, 239713, 239731, 239737, 239753, 239779, 239783, 239803, 239807, 239831, 239843, 239849, 239851, 239857, 239873, 239879, 239893, 239929, 239933, 239947, 239957, 239963, 239977, 239999, 240007, 240011, 240017, 240041, 240043, 240047, 240049, 240059, 240073, 240089, 240101, 240109, 240113, 240131, 240139, 240151, 240169, 240173, 240197, 240203, 240209, 240257, 240259, 240263, 240271, 240283, 240287, 240319, 240341, 240347, 240349, 240353, 240371, 240379, 240421, 240433, 240437, 240473, 240479, 240491, 240503, 240509, 240517, 240551, 240571, 240587, 240589, 240599, 240607, 240623, 240631, 240641, 240659, 240677, 240701, 240707, 240719, 240727, 240733, 240739, 240743, 240763, 240769, 240797, 240811, 240829, 240841, 240853, 240859, 240869, 240881, 240883, 240893, 240899, 240913, 240943, 240953, 240959, 240967, 240997, 241013, 241027, 241037, 241049, 241051, 241061, 241067, 241069, 241079, 241093, 241117, 241127, 241141, 241169, 241177, 241183, 241207, 241229, 241249, 241253, 241259, 241261, 241271, 241291, 241303, 241313, 241321, 241327, 241333, 241337, 241343, 241361, 241363, 241391, 241393, 241421, 241429, 241441, 241453, 241463, 241469, 241489, 241511, 241513, 241517, 241537, 241543, 241559, 241561, 241567, 241589, 241597, 241601, 241603, 241639, 241643, 241651, 241663, 241667, 241679, 241687, 241691, 241711, 241727, 241739, 241771, 241781, 241783, 241793, 241807, 241811, 241817, 241823, 241847, 241861, 241867, 241873, 241877, 241883, 241903, 241907, 241919, 241921, 241931, 241939, 241951, 241963, 241973, 241979, 241981, 241993, 242009, 242057, 242059, 242069, 242083, 242093, 242101, 242119, 242129, 242147, 242161, 242171, 242173, 242197, 242201, 242227, 242243, 242257, 242261, 242273, 242279, 242309, 242329, 242357, 242371, 242377, 242393, 242399, 242413, 242419, 242441, 242447, 242449, 242453, 242467, 242479, 242483, 242491, 242509, 242519, 242521, 242533, 242551, 242591, 242603, 242617, 242621, 242629, 242633, 242639, 242647, 242659, 242677, 242681, 242689, 242713, 242729, 242731, 242747, 242773, 242779, 242789, 242797, 242807, 242813, 242819, 242863, 242867, 242873, 242887, 242911, 242923, 242927, 242971, 242989, 242999, 243011, 243031, 243073, 243077, 243091, 243101, 243109, 243119, 243121, 243137, 243149, 243157, 243161, 243167, 243197, 243203, 243209, 243227, 243233, 243239, 243259, 243263, 243301, 243311, 243343, 243367, 243391, 243401, 243403, 243421, 243431, 243433, 243437, 243461, 243469, 243473, 243479, 243487, 243517, 243521, 243527, 243533, 243539, 243553, 243577, 243583, 243587, 243589, 243613, 243623, 243631, 243643, 243647, 243671, 243673, 243701, 243703, 243707, 243709, 243769, 243781, 243787, 243799, 243809, 243829, 243839, 243851, 243857, 243863, 243871, 243889, 243911, 243917, 243931, 243953, 243973, 243989, 244003, 244009, 244021, 244033, 244043, 244087, 244091, 244109, 244121, 244129, 244141, 244147, 244157, 244159, 244177, 244199, 244217, 244219, 244243, 244247, 244253, 244261, 244291, 244297, 244301, 244303, 244313, 244333, 244339, 244351, 244357, 244367, 244379, 244381, 244393, 244399, 244403, 244411, 244423, 244429, 244451, 244457, 244463, 244471, 244481, 244493, 244507, 244529, 244547, 244553, 244561, 244567, 244583, 244589, 244597, 244603, 244619, 244633, 244637, 244639, 244667, 244669, 244687, 244691, 244703, 244711, 244721, 244733, 244747, 244753, 244759, 244781, 244787, 244813, 244837, 244841, 244843, 244859, 244861, 244873, 244877, 244889, 244897, 244901, 244939, 244943, 244957, 244997, 245023, 245029, 245033, 245039, 245071, 245083, 245087, 245107, 245129, 245131, 245149, 245171, 245173, 245177, 245183, 245209, 245251, 245257, 245261, 245269, 245279, 245291, 245299, 245317, 245321, 245339, 245383, 245389, 245407, 245411, 245417, 245419, 245437, 245471, 245473, 245477, 245501, 245513, 245519, 245521, 245527, 245533, 245561, 245563, 245587, 245591, 245593, 245621, 245627, 245629, 245639, 245653, 245671, 245681, 245683, 245711, 245719, 245723, 245741, 245747, 245753, 245759, 245771, 245783, 245789, 245821, 245849, 245851, 245863, 245881, 245897, 245899, 245909, 245911, 245941, 245963, 245977, 245981, 245983, 245989, 246011, 246017, 246049, 246073, 246097, 246119, 246121, 246131, 246133, 246151, 246167, 246173, 246187, 246193, 246203, 246209, 246217, 246223, 246241, 246247, 246251, 246271, 246277, 246289, 246317, 246319, 246329, 246343, 246349, 246361, 246371, 246391, 246403, 246439, 246469, 246473, 246497, 246509, 246511, 246523, 246527, 246539, 246557, 246569, 246577, 246599, 246607, 246611, 246613, 246637, 246641, 246643, 246661, 246683, 246689, 246707, 246709, 246713, 246731, 246739, 246769, 246773, 246781, 246787, 246793, 246803, 246809, 246811, 246817, 246833, 246839, 246889, 246899, 246907, 246913, 246919, 246923, 246929, 246931, 246937, 246941, 246947, 246971, 246979, 247001, 247007, 247031, 247067, 247069, 247073, 247087, 247099, 247141, 247183, 247193, 247201, 247223, 247229, 247241, 247249, 247259, 247279, 247301, 247309, 247337, 247339, 247343, 247363, 247369, 247381, 247391, 247393, 247409, 247421, 247433, 247439, 247451, 247463, 247501, 247519, 247529, 247531, 247547, 247553, 247579, 247591, 247601, 247603, 247607, 247609, 247613, 247633, 247649, 247651, 247691, 247693, 247697, 247711, 247717, 247729, 247739, 247759, 247769, 247771, 247781, 247799, 247811, 247813, 247829, 247847, 247853, 247873, 247879, 247889, 247901, 247913, 247939, 247943, 247957, 247991, 247993, 247997, 247999, 248021, 248033, 248041, 248051, 248057, 248063, 248071, 248077, 248089, 248099, 248117, 248119, 248137, 248141, 248161, 248167, 248177, 248179, 248189, 248201, 248203, 248231, 248243, 248257, 248267, 248291, 248293, 248299, 248309, 248317, 248323, 248351, 248357, 248371, 248389, 248401, 248407, 248431, 248441, 248447, 248461, 248473, 248477, 248483, 248509, 248533, 248537, 248543, 248569, 248579, 248587, 248593, 248597, 248609, 248621, 248627, 248639, 248641, 248657, 248683, 248701, 248707, 248719, 248723, 248737, 248749, 248753, 248779, 248783, 248789, 248797, 248813, 248821, 248827, 248839, 248851, 248861, 248867, 248869, 248879, 248887, 248891, 248893, 248903, 248909, 248971, 248981, 248987, 249017, 249037, 249059, 249079, 249089, 249097, 249103, 249107, 249127, 249131, 249133, 249143, 249181, 249187, 249199, 249211, 249217, 249229, 249233, 249253, 249257, 249287, 249311, 249317, 249329, 249341, 249367, 249377, 249383, 249397, 249419, 249421, 249427, 249433, 249437, 249439, 249449, 249463, 249497, 249499, 249503, 249517, 249521, 249533, 249539, 249541, 249563, 249583, 249589, 249593, 249607, 249647, 249659, 249671, 249677, 249703, 249721, 249727, 249737, 249749, 249763, 249779, 249797, 249811, 249827, 249833, 249853, 249857, 249859, 249863, 249871, 249881, 249911, 249923, 249943, 249947, 249967, 249971, 249973, 249989, 250007, 250013, 250027, 250031, 250037, 250043, 250049, 250051, 250057, 250073, 250091, 250109, 250123, 250147, 250153, 250169, 250199, 250253, 250259, 250267, 250279, 250301, 250307, 250343, 250361, 250403, 250409, 250423, 250433, 250441, 250451, 250489, 250499, 250501, 250543, 250583, 250619, 250643, 250673, 250681, 250687, 250693, 250703, 250709, 250721, 250727, 250739, 250741, 250751, 250753, 250777, 250787, 250793, 250799, 250807, 250813, 250829, 250837, 250841, 250853, 250867, 250871, 250889, 250919, 250949, 250951, 250963, 250967, 250969, 250979, 250993, 251003, 251033, 251051, 251057, 251059, 251063, 251071, 251081, 251087, 251099, 251117, 251143, 251149, 251159, 251171, 251177, 251179, 251191, 251197, 251201, 251203, 251219, 251221, 251231, 251233, 251257, 251261, 251263, 251287, 251291, 251297, 251323, 251347, 251353, 251359, 251387, 251393, 251417, 251429, 251431, 251437, 251443, 251467, 251473, 251477, 251483, 251491, 251501, 251513, 251519, 251527, 251533, 251539, 251543, 251561, 251567, 251609, 251611, 251621, 251623, 251639, 251653, 251663, 251677, 251701, 251707, 251737, 251761, 251789, 251791, 251809, 251831, 251833, 251843, 251857, 251861, 251879, 251887, 251893, 251897, 251903, 251917, 251939, 251941, 251947, 251969, 251971, 251983, 252001, 252013, 252017, 252029, 252037, 252079, 252101, 252139, 252143, 252151, 252157, 252163, 252169, 252173, 252181, 252193, 252209, 252223, 252233, 252253, 252277, 252283, 252289, 252293, 252313, 252319, 252323, 252341, 252359, 252383, 252391, 252401, 252409, 252419, 252431, 252443, 252449, 252457, 252463, 252481, 252509, 252533, 252541, 252559, 252583, 252589, 252607, 252611, 252617, 252641, 252667, 252691, 252709, 252713, 252727, 252731, 252737, 252761, 252767, 252779, 252817, 252823, 252827, 252829, 252869, 252877, 252881, 252887, 252893, 252899, 252911, 252913, 252919, 252937, 252949, 252971, 252979, 252983, 253003, 253013, 253049, 253063, 253081, 253103, 253109, 253133, 253153, 253157, 253159, 253229, 253243, 253247, 253273, 253307, 253321, 253343, 253349, 253361, 253367, 253369, 253381, 253387, 253417, 253423, 253427, 253433, 253439, 253447, 253469, 253481, 253493, 253501, 253507, 253531, 253537, 253543, 253553, 253567, 253573, 253601, 253607, 253609, 253613, 253633, 253637, 253639, 253651, 253661, 253679, 253681, 253703, 253717, 253733, 253741, 253751, 253763, 253769, 253777, 253787, 253789, 253801, 253811, 253819, 253823, 253853, 253867, 253871, 253879, 253901, 253907, 253909, 253919, 253937, 253949, 253951, 253969, 253987, 253993, 253999, 254003, 254021, 254027, 254039, 254041, 254047, 254053, 254071, 254083, 254119, 254141, 254147, 254161, 254179, 254197, 254207, 254209, 254213, 254249, 254257, 254279, 254281, 254291, 254299, 254329, 254369, 254377, 254383, 254389, 254407, 254413, 254437, 254447, 254461, 254489, 254491, 254519, 254537, 254557, 254593, 254623, 254627, 254647, 254659, 254663, 254699, 254713, 254729, 254731, 254741, 254747, 254753, 254773, 254777, 254783, 254791, 254803, 254827, 254831, 254833, 254857, 254869, 254873, 254879, 254887, 254899, 254911, 254927, 254929, 254941, 254959, 254963, 254971, 254977, 254987, 254993, 255007, 255019, 255023, 255043, 255049, 255053, 255071, 255077, 255083, 255097, 255107, 255121, 255127, 255133, 255137, 255149, 255173, 255179, 255181, 255191, 255193, 255197, 255209, 255217, 255239, 255247, 255251, 255253, 255259, 255313, 255329, 255349, 255361, 255371, 255383, 255413, 255419, 255443, 255457, 255467, 255469, 255473, 255487, 255499, 255503, 255511, 255517, 255523, 255551, 255571, 255587, 255589, 255613, 255617, 255637, 255641, 255649, 255653, 255659, 255667, 255679, 255709, 255713, 255733, 255743, 255757, 255763, 255767, 255803, 255839, 255841, 255847, 255851, 255859, 255869, 255877, 255887, 255907, 255917, 255919, 255923, 255947, 255961, 255971, 255973, 255977, 255989, 256019, 256021, 256031, 256033, 256049, 256057, 256079, 256093, 256117, 256121, 256129, 256133, 256147, 256163, 256169, 256181, 256187, 256189, 256199, 256211, 256219, 256279, 256301, 256307, 256313, 256337, 256349, 256363, 256369, 256391, 256393, 256423, 256441, 256469, 256471, 256483, 256489, 256493, 256499, 256517, 256541, 256561, 256567, 256577, 256579, 256589, 256603, 256609, 256639, 256643, 256651, 256661, 256687, 256699, 256721, 256723, 256757, 256771, 256799, 256801, 256813, 256831, 256873, 256877, 256889, 256901, 256903, 256931, 256939, 256957, 256967, 256981, 257003, 257017, 257053, 257069, 257077, 257093, 257099, 257107, 257123, 257141, 257161, 257171, 257177, 257189, 257219, 257221, 257239, 257249, 257263, 257273, 257281, 257287, 257293, 257297, 257311, 257321, 257339, 257351, 257353, 257371, 257381, 257399, 257401, 257407, 257437, 257443, 257447, 257459, 257473, 257489, 257497, 257501, 257503, 257519, 257539, 257561, 257591, 257611, 257627, 257639, 257657, 257671, 257687, 257689, 257707, 257711, 257713, 257717, 257731, 257783, 257791, 257797, 257837, 257857, 257861, 257863, 257867, 257869, 257879, 257893, 257903, 257921, 257947, 257953, 257981, 257987, 257989, 257993, 258019, 258023, 258031, 258061, 258067, 258101, 258107, 258109, 258113, 258119, 258127, 258131, 258143, 258157, 258161, 258173, 258197, 258211, 258233, 258241, 258253, 258277, 258283, 258299, 258317, 258319, 258329, 258331, 258337, 258353, 258373, 258389, 258403, 258407, 258413, 258421, 258437, 258443, 258449, 258469, 258487, 258491, 258499, 258521, 258527, 258539, 258551, 258563, 258569, 258581, 258607, 258611, 258613, 258617, 258623, 258631, 258637, 258659, 258673, 258677, 258691, 258697, 258703, 258707, 258721, 258733, 258737, 258743, 258763, 258779, 258787, 258803, 258809, 258827, 258847, 258871, 258887, 258917, 258919, 258949, 258959, 258967, 258971, 258977, 258983, 258991, 259001, 259009, 259019, 259033, 259099, 259121, 259123, 259151, 259157, 259159, 259163, 259169, 259177, 259183, 259201, 259211, 259213, 259219, 259229, 259271, 259277, 259309, 259321, 259339, 259379, 259381, 259387, 259397, 259411, 259421, 259429, 259451, 259453, 259459, 259499, 259507, 259517, 259531, 259537, 259547, 259577, 259583, 259603, 259619, 259621, 259627, 259631, 259639, 259643, 259657, 259667, 259681, 259691, 259697, 259717, 259723, 259733, 259751, 259771, 259781, 259783, 259801, 259813, 259823, 259829, 259837, 259841, 259867, 259907, 259933, 259937, 259943, 259949, 259967, 259991, 259993, 260003, 260009, 260011, 260017, 260023, 260047, 260081, 260089, 260111, 260137, 260171, 260179, 260189, 260191, 260201, 260207, 260209, 260213, 260231, 260263, 260269, 260317, 260329, 260339, 260363, 260387, 260399, 260411, 260413, 260417, 260419, 260441, 260453, 260461, 260467, 260483, 260489, 260527, 260539, 260543, 260549, 260551, 260569, 260573, 260581, 260587, 260609, 260629, 260647, 260651, 260671, 260677, 260713, 260717, 260723, 260747, 260753, 260761, 260773, 260791, 260807, 260809, 260849, 260857, 260861, 260863, 260873, 260879, 260893, 260921, 260941, 260951, 260959, 260969, 260983, 260987, 260999, 261011, 261013, 261017, 261031, 261043, 261059, 261061, 261071, 261077, 261089, 261101, 261127, 261167, 261169, 261223, 261229, 261241, 261251, 261271, 261281, 261301, 261323, 261329, 261337, 261347, 261353, 261379, 261389, 261407, 261427, 261431, 261433, 261439, 261451, 261463, 261467, 261509, 261523, 261529, 261557, 261563, 261577, 261581, 261587, 261593, 261601, 261619, 261631, 261637, 261641, 261643, 261673, 261697, 261707, 261713, 261721, 261739, 261757, 261761, 261773, 261787, 261791, 261799, 261823, 261847, 261881, 261887, 261917, 261959, 261971, 261973, 261977, 261983, 262007, 262027, 262049, 262051, 262069, 262079, 262103, 262109, 262111, 262121, 262127, 262133, 262139, 262147, 262151, 262153, 262187, 262193, 262217, 262231, 262237, 262253, 262261, 262271, 262303, 262313, 262321, 262331, 262337, 262349, 262351, 262369, 262387, 262391, 262399, 262411, 262433, 262459, 262469, 262489, 262501, 262511, 262513, 262519, 262541, 262543, 262553, 262567, 262583, 262597, 262621, 262627, 262643, 262649, 262651, 262657, 262681, 262693, 262697, 262709, 262723, 262733, 262739, 262741, 262747, 262781, 262783, 262807, 262819, 262853, 262877, 262883, 262897, 262901, 262909, 262937, 262949, 262957, 262981, 263009, 263023, 263047, 263063, 263071, 263077, 263083, 263089, 263101, 263111, 263119, 263129, 263167, 263171, 263183, 263191, 263201, 263209, 263213, 263227, 263239, 263257, 263267, 263269, 263273, 263287, 263293, 263303, 263323, 263369, 263383, 263387, 263399, 263401, 263411, 263423, 263429, 263437, 263443, 263489, 263491, 263503, 263513, 263519, 263521, 263533, 263537, 263561, 263567, 263573, 263591, 263597, 263609, 263611, 263621, 263647, 263651, 263657, 263677, 263723, 263729, 263737, 263759, 263761, 263803, 263819, 263821, 263827, 263843, 263849, 263863, 263867, 263869, 263881, 263899, 263909, 263911, 263927, 263933, 263941, 263951, 263953, 263957, 263983, 264007, 264013, 264029, 264031, 264053, 264059, 264071, 264083, 264091, 264101, 264113, 264127, 264133, 264137, 264139, 264167, 264169, 264179, 264211, 264221, 264263, 264269, 264283, 264289, 264301, 264323, 264331, 264343, 264349, 264353, 264359, 264371, 264391, 264403, 264437, 264443, 264463, 264487, 264527, 264529, 264553, 264559, 264577, 264581, 264599, 264601, 264619, 264631, 264637, 264643, 264659, 264697, 264731, 264739, 264743, 264749, 264757, 264763, 264769, 264779, 264787, 264791, 264793, 264811, 264827, 264829, 264839, 264871, 264881, 264889, 264893, 264899, 264919, 264931, 264949, 264959, 264961, 264977, 264991, 264997, 265003, 265007, 265021, 265037, 265079, 265091, 265093, 265117, 265123, 265129, 265141, 265151, 265157, 265163, 265169, 265193, 265207, 265231, 265241, 265247, 265249, 265261, 265271, 265273, 265277, 265313, 265333, 265337, 265339, 265381, 265399, 265403, 265417, 265423, 265427, 265451, 265459, 265471, 265483, 265493, 265511, 265513, 265541, 265543, 265547, 265561, 265567, 265571, 265579, 265607, 265613, 265619, 265621, 265703, 265709, 265711, 265717, 265729, 265739, 265747, 265757, 265781, 265787, 265807, 265813, 265819, 265831, 265841, 265847, 265861, 265871, 265873, 265883, 265891, 265921, 265957, 265961, 265987, 266003, 266009, 266023, 266027, 266029, 266047, 266051, 266053, 266059, 266081, 266083, 266089, 266093, 266099, 266111, 266117, 266129, 266137, 266153, 266159, 266177, 266183, 266221, 266239, 266261, 266269, 266281, 266291, 266293, 266297, 266333, 266351, 266353, 266359, 266369, 266381, 266401, 266411, 266417, 266447, 266449, 266477, 266479, 266489, 266491, 266521, 266549, 266587, 266599, 266603, 266633, 266641, 266647, 266663, 266671, 266677, 266681, 266683, 266687, 266689, 266701, 266711, 266719, 266759, 266767, 266797, 266801, 266821, 266837, 266839, 266863, 266867, 266891, 266897, 266899, 266909, 266921, 266927, 266933, 266947, 266953, 266957, 266971, 266977, 266983, 266993, 266999, 267017, 267037, 267049, 267097, 267131, 267133, 267139, 267143, 267167, 267187, 267193, 267199, 267203, 267217, 267227, 267229, 267233, 267259, 267271, 267277, 267299, 267301, 267307, 267317, 267341, 267353, 267373, 267389, 267391, 267401, 267403, 267413, 267419, 267431, 267433, 267439, 267451, 267469, 267479, 267481, 267493, 267497, 267511, 267517, 267521, 267523, 267541, 267551, 267557, 267569, 267581, 267587, 267593, 267601, 267611, 267613, 267629, 267637, 267643, 267647, 267649, 267661, 267667, 267671, 267677, 267679, 267713, 267719, 267721, 267727, 267737, 267739, 267749, 267763, 267781, 267791, 267797, 267803, 267811, 267829, 267833, 267857, 267863, 267877, 267887, 267893, 267899, 267901, 267907, 267913, 267929, 267941, 267959, 267961, 268003, 268013, 268043, 268049, 268063, 268069, 268091, 268123, 268133, 268153, 268171, 268189, 268199, 268207, 268211, 268237, 268253, 268267, 268271, 268283, 268291, 268297, 268343, 268403, 268439, 268459, 268487, 268493, 268501, 268507, 268517, 268519, 268529, 268531, 268537, 268547, 268573, 268607, 268613, 268637, 268643, 268661, 268693, 268721, 268729, 268733, 268747, 268757, 268759, 268771, 268777, 268781, 268783, 268789, 268811, 268813, 268817, 268819, 268823, 268841, 268843, 268861, 268883, 268897, 268909, 268913, 268921, 268927, 268937, 268969, 268973, 268979, 268993, 268997, 268999, 269023, 269029, 269039, 269041, 269057, 269063, 269069, 269089, 269117, 269131, 269141, 269167, 269177, 269179, 269183, 269189, 269201, 269209, 269219, 269221, 269231, 269237, 269251, 269257, 269281, 269317, 269327, 269333, 269341, 269351, 269377, 269383, 269387, 269389, 269393, 269413, 269419, 269429, 269431, 269441, 269461, 269473, 269513, 269519, 269527, 269539, 269543, 269561, 269573, 269579, 269597, 269617, 269623, 269641, 269651, 269663, 269683, 269701, 269713, 269719, 269723, 269741, 269749, 269761, 269779, 269783, 269791, 269851, 269879, 269887, 269891, 269897, 269923, 269939, 269947, 269953, 269981, 269987, 270001, 270029, 270031, 270037, 270059, 270071, 270073, 270097, 270121, 270131, 270133, 270143, 270157, 270163, 270167, 270191, 270209, 270217, 270223, 270229, 270239, 270241, 270269, 270271, 270287, 270299, 270307, 270311, 270323, 270329, 270337, 270343, 270371, 270379, 270407, 270421, 270437, 270443, 270451, 270461, 270463, 270493, 270509, 270527, 270539, 270547, 270551, 270553, 270563, 270577, 270583, 270587, 270593, 270601, 270619, 270631, 270653, 270659, 270667, 270679, 270689, 270701, 270709, 270719, 270737, 270749, 270761, 270763, 270791, 270797, 270799, 270821, 270833, 270841, 270859, 270899, 270913, 270923, 270931, 270937, 270953, 270961, 270967, 270973, 271003, 271013, 271021, 271027, 271043, 271057, 271067, 271079, 271097, 271109, 271127, 271129, 271163, 271169, 271177, 271181, 271211, 271217, 271231, 271241, 271253, 271261, 271273, 271277, 271279, 271289, 271333, 271351, 271357, 271363, 271367, 271393, 271409, 271429, 271451, 271463, 271471, 271483, 271489, 271499, 271501, 271517, 271549, 271553, 271571, 271573, 271597, 271603, 271619, 271637, 271639, 271651, 271657, 271693, 271703, 271723, 271729, 271753, 271769, 271771, 271787, 271807, 271811, 271829, 271841, 271849, 271853, 271861, 271867, 271879, 271897, 271903, 271919, 271927, 271939, 271967, 271969, 271981, 272003, 272009, 272011, 272029, 272039, 272053, 272059, 272093, 272131, 272141, 272171, 272179, 272183, 272189, 272191, 272201, 272203, 272227, 272231, 272249, 272257, 272263, 272267, 272269, 272287, 272299, 272317, 272329, 272333, 272341, 272347, 272351, 272353, 272359, 272369, 272381, 272383, 272399, 272407, 272411, 272417, 272423, 272449, 272453, 272477, 272507, 272533, 272537, 272539, 272549, 272563, 272567, 272581, 272603, 272621, 272651, 272659, 272683, 272693, 272717, 272719, 272737, 272759, 272761, 272771, 272777, 272807, 272809, 272813, 272863, 272879, 272887, 272903, 272911, 272917, 272927, 272933, 272959, 272971, 272981, 272983, 272989, 272999, 273001, 273029, 273043, 273047, 273059, 273061, 273067, 273073, 273083, 273107, 273113, 273127, 273131, 273149, 273157, 273181, 273187, 273193, 273233, 273253, 273269, 273271, 273281, 273283, 273289, 273311, 273313, 273323, 273349, 273359, 273367, 273433, 273457, 273473, 273503, 273517, 273521, 273527, 273551, 273569, 273601, 273613, 273617, 273629, 273641, 273643, 273653, 273697, 273709, 273719, 273727, 273739, 273773, 273787, 273797, 273803, 273821, 273827, 273857, 273881, 273899, 273901, 273913, 273919, 273929, 273941, 273943, 273967, 273971, 273979, 273997, 274007, 274019, 274033, 274061, 274069, 274081, 274093, 274103, 274117, 274121, 274123, 274139, 274147, 274163, 274171, 274177, 274187, 274199, 274201, 274213, 274223, 274237, 274243, 274259, 274271, 274277, 274283, 274301, 274333, 274349, 274357, 274361, 274403, 274423, 274441, 274451, 274453, 274457, 274471, 274489, 274517, 274529, 274579, 274583, 274591, 274609, 274627, 274661, 274667, 274679, 274693, 274697, 274709, 274711, 274723, 274739, 274751, 274777, 274783, 274787, 274811, 274817, 274829, 274831, 274837, 274843, 274847, 274853, 274861, 274867, 274871, 274889, 274909, 274931, 274943, 274951, 274957, 274961, 274973, 274993, 275003, 275027, 275039, 275047, 275053, 275059, 275083, 275087, 275129, 275131, 275147, 275153, 275159, 275161, 275167, 275183, 275201, 275207, 275227, 275251, 275263, 275269, 275299, 275309, 275321, 275323, 275339, 275357, 275371, 275389, 275393, 275399, 275419, 275423, 275447, 275449, 275453, 275459, 275461, 275489, 275491, 275503, 275521, 275531, 275543, 275549, 275573, 275579, 275581, 275591, 275593, 275599, 275623, 275641, 275651, 275657, 275669, 275677, 275699, 275711, 275719, 275729, 275741, 275767, 275773, 275783, 275813, 275827, 275837, 275881, 275897, 275911, 275917, 275921, 275923, 275929, 275939, 275941, 275963, 275969, 275981, 275987, 275999, 276007, 276011, 276019, 276037, 276041, 276043, 276047, 276049, 276079, 276083, 276091, 276113, 276137, 276151, 276173, 276181, 276187, 276191, 276209, 276229, 276239, 276247, 276251, 276257, 276277, 276293, 276319, 276323, 276337, 276343, 276347, 276359, 276371, 276373, 276389, 276401, 276439, 276443, 276449, 276461, 276467, 276487, 276499, 276503, 276517, 276527, 276553, 276557, 276581, 276587, 276589, 276593, 276599, 276623, 276629, 276637, 276671, 276673, 276707, 276721, 276739, 276763, 276767, 276779, 276781, 276817, 276821, 276823, 276827, 276833, 276839, 276847, 276869, 276883, 276901, 276907, 276917, 276919, 276929, 276949, 276953, 276961, 276977, 277003, 277007, 277021, 277051, 277063, 277073, 277087, 277097, 277099, 277157, 277163, 277169, 277177, 277183, 277213, 277217, 277223, 277231, 277247, 277259, 277261, 277273, 277279, 277297, 277301, 277309, 277331, 277363, 277373, 277411, 277421, 277427, 277429, 277483, 277493, 277499, 277513, 277531, 277547, 277549, 277567, 277577, 277579, 277597, 277601, 277603, 277637, 277639, 277643, 277657, 277663, 277687, 277691, 277703, 277741, 277747, 277751, 277757, 277787, 277789, 277793, 277813, 277829, 277847, 277859, 277883, 277889, 277891, 277897, 277903, 277919, 277961, 277993, 277999, 278017, 278029, 278041, 278051, 278063, 278071, 278087, 278111, 278119, 278123, 278143, 278147, 278149, 278177, 278191, 278207, 278209, 278219, 278227, 278233, 278237, 278261, 278269, 278279, 278321, 278329, 278347, 278353, 278363, 278387, 278393, 278413, 278437, 278459, 278479, 278489, 278491, 278497, 278501, 278503, 278543, 278549, 278557, 278561, 278563, 278581, 278591, 278609, 278611, 278617, 278623, 278627, 278639, 278651, 278671, 278687, 278689, 278701, 278717, 278741, 278743, 278753, 278767, 278801, 278807, 278809, 278813, 278819, 278827, 278843, 278849, 278867, 278879, 278881, 278891, 278903, 278909, 278911, 278917, 278947, 278981, 279001, 279007, 279023, 279029, 279047, 279073, 279109, 279119, 279121, 279127, 279131, 279137, 279143, 279173, 279179, 279187, 279203, 279211, 279221, 279269, 279311, 279317, 279329, 279337, 279353, 279397, 279407, 279413, 279421, 279431, 279443, 279451, 279479, 279481, 279511, 279523, 279541, 279551, 279553, 279557, 279571, 279577, 279583, 279593, 279607, 279613, 279619, 279637, 279641, 279649, 279659, 279679, 279689, 279707, 279709, 279731, 279751, 279761, 279767, 279779, 279817, 279823, 279847, 279857, 279863, 279883, 279913, 279919, 279941, 279949, 279967, 279977, 279991, 280001, 280009, 280013, 280031, 280037, 280061, 280069, 280097, 280099, 280103, 280121, 280129, 280139, 280183, 280187, 280199, 280207, 280219, 280223, 280229, 280243, 280249, 280253, 280277, 280297, 280303, 280321, 280327, 280337, 280339, 280351, 280373, 280409, 280411, 280451, 280463, 280487, 280499, 280507, 280513, 280537, 280541, 280547, 280549, 280561, 280583, 280589, 280591, 280597, 280603, 280607, 280613, 280627, 280639, 280673, 280681, 280697, 280699, 280703, 280711, 280717, 280729, 280751, 280759, 280769, 280771, 280811, 280817, 280837, 280843, 280859, 280871, 280879, 280883, 280897, 280909, 280913, 280921, 280927, 280933, 280939, 280949, 280957, 280963, 280967, 280979, 280997, 281023, 281033, 281053, 281063, 281069, 281081, 281117, 281131, 281153, 281159, 281167, 281189, 281191, 281207, 281227, 281233, 281243, 281249, 281251, 281273, 281279, 281291, 281297, 281317, 281321, 281327, 281339, 281353, 281357, 281363, 281381, 281419, 281423, 281429, 281431, 281509, 281527, 281531, 281539, 281549, 281551, 281557, 281563, 281579, 281581, 281609, 281621, 281623, 281627, 281641, 281647, 281651, 281653, 281663, 281669, 281683, 281717, 281719, 281737, 281747, 281761, 281767, 281777, 281783, 281791, 281797, 281803, 281807, 281833, 281837, 281839, 281849, 281857, 281867, 281887, 281893, 281921, 281923, 281927, 281933, 281947, 281959, 281971, 281989, 281993, 282001, 282011, 282019, 282053, 282059, 282071, 282089, 282091, 282097, 282101, 282103, 282127, 282143, 282157, 282167, 282221, 282229, 282239, 282241, 282253, 282281, 282287, 282299, 282307, 282311, 282313, 282349, 282377, 282383, 282389, 282391, 282407, 282409, 282413, 282427, 282439, 282461, 282481, 282487, 282493, 282559, 282563, 282571, 282577, 282589, 282599, 282617, 282661, 282671, 282677, 282679, 282683, 282691, 282697, 282703, 282707, 282713, 282767, 282769, 282773, 282797, 282809, 282827, 282833, 282847, 282851, 282869, 282881, 282889, 282907, 282911, 282913, 282917, 282959, 282973, 282977, 282991, 283001, 283007, 283009, 283027, 283051, 283079, 283093, 283097, 283099, 283111, 283117, 283121, 283133, 283139, 283159, 283163, 283181, 283183, 283193, 283207, 283211, 283267, 283277, 283289, 283303, 283369, 283397, 283403, 283411, 283447, 283463, 283487, 283489, 283501, 283511, 283519, 283541, 283553, 283571, 283573, 283579, 283583, 283601, 283607, 283609, 283631, 283637, 283639, 283669, 283687, 283697, 283721, 283741, 283763, 283769, 283771, 283793, 283799, 283807, 283813, 283817, 283831, 283837, 283859, 283861, 283873, 283909, 283937, 283949, 283957, 283961, 283979, 284003, 284023, 284041, 284051, 284057, 284059, 284083, 284093, 284111, 284117, 284129, 284131, 284149, 284153, 284159, 284161, 284173, 284191, 284201, 284227, 284231, 284233, 284237, 284243, 284261, 284267, 284269, 284293, 284311, 284341, 284357, 284369, 284377, 284387, 284407, 284413, 284423, 284429, 284447, 284467, 284477, 284483, 284489, 284507, 284509, 284521, 284527, 284539, 284551, 284561, 284573, 284587, 284591, 284593, 284623, 284633, 284651, 284657, 284659, 284681, 284689, 284701, 284707, 284723, 284729, 284731, 284737, 284741, 284743, 284747, 284749, 284759, 284777, 284783, 284803, 284807, 284813, 284819, 284831, 284833, 284839, 284857, 284881, 284897, 284899, 284917, 284927, 284957, 284969, 284989, 285007, 285023, 285031, 285049, 285071, 285079, 285091, 285101, 285113, 285119, 285121, 285139, 285151, 285161, 285179, 285191, 285199, 285221, 285227, 285251, 285281, 285283, 285287, 285289, 285301, 285317, 285343, 285377, 285421, 285433, 285451, 285457, 285463, 285469, 285473, 285497, 285517, 285521, 285533, 285539, 285553, 285557, 285559, 285569, 285599, 285611, 285613, 285629, 285631, 285641, 285643, 285661, 285667, 285673, 285697, 285707, 285709, 285721, 285731, 285749, 285757, 285763, 285767, 285773, 285781, 285823, 285827, 285839, 285841, 285871, 285937, 285949, 285953, 285977, 285979, 285983, 285997, 286001, 286009, 286019, 286043, 286049, 286061, 286063, 286073, 286103, 286129, 286163, 286171, 286199, 286243, 286249, 286289, 286301, 286333, 286367, 286369, 286381, 286393, 286397, 286411, 286421, 286427, 286453, 286457, 286459, 286469, 286477, 286483, 286487, 286493, 286499, 286513, 286519, 286541, 286543, 286547, 286553, 286589, 286591, 286609, 286613, 286619, 286633, 286651, 286673, 286687, 286697, 286703, 286711, 286721, 286733, 286751, 286753, 286763, 286771, 286777, 286789, 286801, 286813, 286831, 286859, 286873, 286927, 286973, 286981, 286987, 286999, 287003, 287047, 287057, 287059, 287087, 287093, 287099, 287107, 287117, 287137, 287141, 287149, 287159, 287167, 287173, 287179, 287191, 287219, 287233, 287237, 287239, 287251, 287257, 287269, 287279, 287281, 287291, 287297, 287321, 287327, 287333, 287341, 287347, 287383, 287387, 287393, 287437, 287449, 287491, 287501, 287503, 287537, 287549, 287557, 287579, 287597, 287611, 287629, 287669, 287671, 287681, 287689, 287701, 287731, 287747, 287783, 287789, 287801, 287813, 287821, 287849, 287851, 287857, 287863, 287867, 287873, 287887, 287921, 287933, 287939, 287977, 288007, 288023, 288049, 288053, 288061, 288077, 288089, 288109, 288137, 288179, 288181, 288191, 288199, 288203, 288209, 288227, 288241, 288247, 288257, 288283, 288293, 288307, 288313, 288317, 288349, 288359, 288361, 288383, 288389, 288403, 288413, 288427, 288433, 288461, 288467, 288481, 288493, 288499, 288527, 288529, 288539, 288551, 288559, 288571, 288577, 288583, 288647, 288649, 288653, 288661, 288679, 288683, 288689, 288697, 288731, 288733, 288751, 288767, 288773, 288803, 288817, 288823, 288833, 288839, 288851, 288853, 288877, 288907, 288913, 288929, 288931, 288947, 288973, 288979, 288989, 288991, 288997, 289001, 289019, 289021, 289031, 289033, 289039, 289049, 289063, 289067, 289099, 289103, 289109, 289111, 289127, 289129, 289139, 289141, 289151, 289169, 289171, 289181, 289189, 289193, 289213, 289241, 289243, 289249, 289253, 289273, 289283, 289291, 289297, 289309, 289319, 289343, 289349, 289361, 289369, 289381, 289397, 289417, 289423, 289439, 289453, 289463, 289469, 289477, 289489, 289511, 289543, 289559, 289573, 289577, 289589, 289603, 289607, 289637, 289643, 289657, 289669, 289717, 289721, 289727, 289733, 289741, 289759, 289763, 289771, 289789, 289837, 289841, 289843, 289847, 289853, 289859, 289871, 289889, 289897, 289937, 289951, 289957, 289967, 289973, 289987, 289999, 290011, 290021, 290023, 290027, 290033, 290039, 290041, 290047, 290057, 290083, 290107, 290113, 290119, 290137, 290141, 290161, 290183, 290189, 290201, 290209, 290219, 290233, 290243, 290249, 290317, 290327, 290347, 290351, 290359, 290369, 290383, 290393, 290399, 290419, 290429, 290441, 290443, 290447, 290471, 290473, 290489, 290497, 290509, 290527, 290531, 290533, 290539, 290557, 290593, 290597, 290611, 290617, 290621, 290623, 290627, 290657, 290659, 290663, 290669, 290671, 290677, 290701, 290707, 290711, 290737, 290761, 290767, 290791, 290803, 290821, 290827, 290837, 290839, 290861, 290869, 290879, 290897, 290923, 290959, 290963, 290971, 290987, 290993, 290999, 291007, 291013, 291037, 291041, 291043, 291077, 291089, 291101, 291103, 291107, 291113, 291143, 291167, 291169, 291173, 291191, 291199, 291209, 291217, 291253, 291257, 291271, 291287, 291293, 291299, 291331, 291337, 291349, 291359, 291367, 291371, 291373, 291377, 291419, 291437, 291439, 291443, 291457, 291481, 291491, 291503, 291509, 291521, 291539, 291547, 291559, 291563, 291569, 291619, 291647, 291649, 291661, 291677, 291689, 291691, 291701, 291721, 291727, 291743, 291751, 291779, 291791, 291817, 291829, 291833, 291853, 291857, 291869, 291877, 291887, 291899, 291901, 291923, 291971, 291979, 291983, 291997, 292021, 292027, 292037, 292057, 292069, 292079, 292081, 292091, 292093, 292133, 292141, 292147, 292157, 292181, 292183, 292223, 292231, 292241, 292249, 292267, 292283, 292301, 292309, 292319, 292343, 292351, 292363, 292367, 292381, 292393, 292427, 292441, 292459, 292469, 292471, 292477, 292483, 292489, 292493, 292517, 292531, 292541, 292549, 292561, 292573, 292577, 292601, 292627, 292631, 292661, 292667, 292673, 292679, 292693, 292703, 292709, 292711, 292717, 292727, 292753, 292759, 292777, 292793, 292801, 292807, 292819, 292837, 292841, 292849, 292867, 292879, 292909, 292921, 292933, 292969, 292973, 292979, 292993, 293021, 293071, 293081, 293087, 293093, 293099, 293107, 293123, 293129, 293147, 293149, 293173, 293177, 293179, 293201, 293207, 293213, 293221, 293257, 293261, 293263, 293269, 293311, 293329, 293339, 293351, 293357, 293399, 293413, 293431, 293441, 293453, 293459, 293467, 293473, 293483, 293507, 293543, 293599, 293603, 293617, 293621, 293633, 293639, 293651, 293659, 293677, 293681, 293701, 293717, 293723, 293729, 293749, 293767, 293773, 293791, 293803, 293827, 293831, 293861, 293863, 293893, 293899, 293941, 293957, 293983, 293989, 293999, 294001, 294013, 294023, 294029, 294043, 294053, 294059, 294067, 294103, 294127, 294131, 294149, 294157, 294167, 294169, 294179, 294181, 294199, 294211, 294223, 294227, 294241, 294247, 294251, 294269, 294277, 294289, 294293, 294311, 294313, 294317, 294319, 294337, 294341, 294347, 294353, 294383, 294391, 294397, 294403, 294431, 294439, 294461, 294467, 294479, 294499, 294509, 294523, 294529, 294551, 294563, 294629, 294641, 294647, 294649, 294659, 294673, 294703, 294731, 294751, 294757, 294761, 294773, 294781, 294787, 294793, 294799, 294803, 294809, 294821, 294829, 294859, 294869, 294887, 294893, 294911, 294919, 294923, 294947, 294949, 294953, 294979, 294989, 294991, 294997, 295007, 295033, 295037, 295039, 295049, 295073, 295079, 295081, 295111, 295123, 295129, 295153, 295187, 295199, 295201, 295219, 295237, 295247, 295259, 295271, 295277, 295283, 295291, 295313, 295319, 295333, 295357, 295363, 295387, 295411, 295417, 295429, 295433, 295439, 295441, 295459, 295513, 295517, 295541, 295553, 295567, 295571, 295591, 295601, 295663, 295693, 295699, 295703, 295727, 295751, 295759, 295769, 295777, 295787, 295819, 295831, 295837, 295843, 295847, 295853, 295861, 295871, 295873, 295877, 295879, 295901, 295903, 295909, 295937, 295943, 295949, 295951, 295961, 295973, 295993, 296011, 296017, 296027, 296041, 296047, 296071, 296083, 296099, 296117, 296129, 296137, 296159, 296183, 296201, 296213, 296221, 296237, 296243, 296249, 296251, 296269, 296273, 296279, 296287, 296299, 296347, 296353, 296363, 296369, 296377, 296437, 296441, 296473, 296477, 296479, 296489, 296503, 296507, 296509, 296519, 296551, 296557, 296561, 296563, 296579, 296581, 296587, 296591, 296627, 296651, 296663, 296669, 296683, 296687, 296693, 296713, 296719, 296729, 296731, 296741, 296749, 296753, 296767, 296771, 296773, 296797, 296801, 296819, 296827, 296831, 296833, 296843, 296909, 296911, 296921, 296929, 296941, 296969, 296971, 296981, 296983, 296987, 297019, 297023, 297049, 297061, 297067, 297079, 297083, 297097, 297113, 297133, 297151, 297161, 297169, 297191, 297233, 297247, 297251, 297257, 297263, 297289, 297317, 297359, 297371, 297377, 297391, 297397, 297403, 297421, 297439, 297457, 297467, 297469, 297481, 297487, 297503, 297509, 297523, 297533, 297581, 297589, 297601, 297607, 297613, 297617, 297623, 297629, 297641, 297659, 297683, 297691, 297707, 297719, 297727, 297757, 297779, 297793, 297797, 297809, 297811, 297833, 297841, 297853, 297881, 297889, 297893, 297907, 297911, 297931, 297953, 297967, 297971, 297989, 297991, 298013, 298021, 298031, 298043, 298049, 298063, 298087, 298093, 298099, 298153, 298157, 298159, 298169, 298171, 298187, 298201, 298211, 298213, 298223, 298237, 298247, 298261, 298283, 298303, 298307, 298327, 298339, 298343, 298349, 298369, 298373, 298399, 298409, 298411, 298427, 298451, 298477, 298483, 298513, 298559, 298579, 298583, 298589, 298601, 298607, 298621, 298631, 298651, 298667, 298679, 298681, 298687, 298691, 298693, 298709, 298723, 298733, 298757, 298759, 298777, 298799, 298801, 298817, 298819, 298841, 298847, 298853, 298861, 298897, 298937, 298943, 298993, 298999, 299011, 299017, 299027, 299029, 299053, 299059, 299063, 299087, 299099, 299107, 299113, 299137, 299147, 299171, 299179, 299191, 299197, 299213, 299239, 299261, 299281, 299287, 299311, 299317, 299329, 299333, 299357, 299359, 299363, 299371, 299389, 299393, 299401, 299417, 299419, 299447, 299471, 299473, 299477, 299479, 299501, 299513, 299521, 299527, 299539, 299567, 299569, 299603, 299617, 299623, 299653, 299671, 299681, 299683, 299699, 299701, 299711, 299723, 299731, 299743, 299749, 299771, 299777, 299807, 299843, 299857, 299861, 299881, 299891, 299903, 299909, 299933, 299941, 299951, 299969, 299977, 299983, 299993, 300007, 300017, 300023, 300043, 300073, 300089, 300109, 300119, 300137, 300149, 300151, 300163, 300187, 300191, 300193, 300221, 300229, 300233, 300239, 300247, 300277, 300299, 300301, 300317, 300319, 300323, 300331, 300343, 300347, 300367, 300397, 300413, 300427, 300431, 300439, 300463, 300481, 300491, 300493, 300497, 300499, 300511, 300557, 300569, 300581, 300583, 300589, 300593, 300623, 300631, 300647, 300649, 300661, 300667, 300673, 300683, 300691, 300719, 300721, 300733, 300739, 300743, 300749, 300757, 300761, 300779, 300787, 300799, 300809, 300821, 300823, 300851, 300857, 300869, 300877, 300889, 300893, 300929, 300931, 300953, 300961, 300967, 300973, 300977, 300997, 301013, 301027, 301039, 301051, 301057, 301073, 301079, 301123, 301127, 301141, 301153, 301159, 301177, 301181, 301183, 301211, 301219, 301237, 301241, 301243, 301247, 301267, 301303, 301319, 301331, 301333, 301349, 301361, 301363, 301381, 301403, 301409, 301423, 301429, 301447, 301459, 301463, 301471, 301487, 301489, 301493, 301501, 301531, 301577, 301579, 301583, 301591, 301601, 301619, 301627, 301643, 301649, 301657, 301669, 301673, 301681, 301703, 301711, 301747, 301751, 301753, 301759, 301789, 301793, 301813, 301831, 301841, 301843, 301867, 301877, 301897, 301901, 301907, 301913, 301927, 301933, 301943, 301949, 301979, 301991, 301993, 301997, 301999, 302009, 302053, 302111, 302123, 302143, 302167, 302171, 302173, 302189, 302191, 302213, 302221, 302227, 302261, 302273, 302279, 302287, 302297, 302299, 302317, 302329, 302399, 302411, 302417, 302429, 302443, 302459, 302483, 302507, 302513, 302551, 302563, 302567, 302573, 302579, 302581, 302587, 302593, 302597, 302609, 302629, 302647, 302663, 302681, 302711, 302723, 302747, 302759, 302767, 302779, 302791, 302801, 302831, 302833, 302837, 302843, 302851, 302857, 302873, 302891, 302903, 302909, 302921, 302927, 302941, 302959, 302969, 302971, 302977, 302983, 302989, 302999, 303007, 303011, 303013, 303019, 303029, 303049, 303053, 303073, 303089, 303091, 303097, 303119, 303139, 303143, 303151, 303157, 303187, 303217, 303257, 303271, 303283, 303287, 303293, 303299, 303307, 303313, 303323, 303337, 303341, 303361, 303367, 303371, 303377, 303379, 303389, 303409, 303421, 303431, 303463, 303469, 303473, 303491, 303493, 303497, 303529, 303539, 303547, 303551, 303553, 303571, 303581, 303587, 303593, 303613, 303617, 303619, 303643, 303647, 303649, 303679, 303683, 303689, 303691, 303703, 303713, 303727, 303731, 303749, 303767, 303781, 303803, 303817, 303827, 303839, 303859, 303871, 303889, 303907, 303917, 303931, 303937, 303959, 303983, 303997, 304009, 304013, 304021, 304033, 304039, 304049, 304063, 304067, 304069, 304081, 304091, 304099, 304127, 304151, 304153, 304163, 304169, 304193, 304211, 304217, 304223, 304253, 304259, 304279, 304301, 304303, 304331, 304349, 304357, 304363, 304373, 304391, 304393, 304411, 304417, 304429, 304433, 304439, 304457, 304459, 304477, 304481, 304489, 304501, 304511, 304517, 304523, 304537, 304541, 304553, 304559, 304561, 304597, 304609, 304631, 304643, 304651, 304663, 304687, 304709, 304723, 304729, 304739, 304751, 304757, 304763, 304771, 304781, 304789, 304807, 304813, 304831, 304847, 304849, 304867, 304879, 304883, 304897, 304901, 304903, 304907, 304933, 304937, 304943, 304949, 304961, 304979, 304981, 305017, 305021, 305023, 305029, 305033, 305047, 305069, 305093, 305101, 305111, 305113, 305119, 305131, 305143, 305147, 305209, 305219, 305231, 305237, 305243, 305267, 305281, 305297, 305329, 305339, 305351, 305353, 305363, 305369, 305377, 305401, 305407, 305411, 305413, 305419, 305423, 305441, 305449, 305471, 305477, 305479, 305483, 305489, 305497, 305521, 305533, 305551, 305563, 305581, 305593, 305597, 305603, 305611, 305621, 305633, 305639, 305663, 305717, 305719, 305741, 305743, 305749, 305759, 305761, 305771, 305783, 305803, 305821, 305839, 305849, 305857, 305861, 305867, 305873, 305917, 305927, 305933, 305947, 305971, 305999, 306011, 306023, 306029, 306041, 306049, 306083, 306091, 306121, 306133, 306139, 306149, 306157, 306167, 306169, 306191, 306193, 306209, 306239, 306247, 306253, 306259, 306263, 306301, 306329, 306331, 306347, 306349, 306359, 306367, 306377, 306389, 306407, 306419, 306421, 306431, 306437, 306457, 306463, 306473, 306479, 306491, 306503, 306511, 306517, 306529, 306533, 306541, 306563, 306577, 306587, 306589, 306643, 306653, 306661, 306689, 306701, 306703, 306707, 306727, 306739, 306749, 306763, 306781, 306809, 306821, 306827, 306829, 306847, 306853, 306857, 306871, 306877, 306883, 306893, 306899, 306913, 306919, 306941, 306947, 306949, 306953, 306991, 307009, 307019, 307031, 307033, 307067, 307079, 307091, 307093, 307103, 307121, 307129, 307147, 307163, 307169, 307171, 307187, 307189, 307201, 307243, 307253, 307259, 307261, 307267, 307273, 307277, 307283, 307289, 307301, 307337, 307339, 307361, 307367, 307381, 307397, 307399, 307409, 307423, 307451, 307471, 307481, 307511, 307523, 307529, 307537, 307543, 307577, 307583, 307589, 307609, 307627, 307631, 307633, 307639, 307651, 307669, 307687, 307691, 307693, 307711, 307733, 307759, 307817, 307823, 307831, 307843, 307859, 307871, 307873, 307891, 307903, 307919, 307939, 307969, 308003, 308017, 308027, 308041, 308051, 308081, 308093, 308101, 308107, 308117, 308129, 308137, 308141, 308149, 308153, 308213, 308219, 308249, 308263, 308291, 308293, 308303, 308309, 308311, 308317, 308323, 308327, 308333, 308359, 308383, 308411, 308423, 308437, 308447, 308467, 308489, 308491, 308501, 308507, 308509, 308519, 308521, 308527, 308537, 308551, 308569, 308573, 308587, 308597, 308621, 308639, 308641, 308663, 308681, 308701, 308713, 308723, 308761, 308773, 308801, 308809, 308813, 308827, 308849, 308851, 308857, 308887, 308899, 308923, 308927, 308929, 308933, 308939, 308951, 308989, 308999, 309007, 309011, 309013, 309019, 309031, 309037, 309059, 309079, 309083, 309091, 309107, 309109, 309121, 309131, 309137, 309157, 309167, 309173, 309193, 309223, 309241, 309251, 309259, 309269, 309271, 309277, 309289, 309293, 309311, 309313, 309317, 309359, 309367, 309371, 309391, 309403, 309433, 309437, 309457, 309461, 309469, 309479, 309481, 309493, 309503, 309521, 309523, 309539, 309541, 309559, 309571, 309577, 309583, 309599, 309623, 309629, 309637, 309667, 309671, 309677, 309707, 309713, 309731, 309737, 309769, 309779, 309781, 309797, 309811, 309823, 309851, 309853, 309857, 309877, 309899, 309929, 309931, 309937, 309977, 309989, 310019, 310021, 310027, 310043, 310049, 310081, 310087, 310091, 310111, 310117, 310127, 310129, 310169, 310181, 310187, 310223, 310229, 310231, 310237, 310243, 310273, 310283, 310291, 310313, 310333, 310357, 310361, 310363, 310379, 310397, 310423, 310433, 310439, 310447, 310459, 310463, 310481, 310489, 310501, 310507, 310511, 310547, 310553, 310559, 310567, 310571, 310577, 310591, 310627, 310643, 310663, 310693, 310697, 310711, 310721, 310727, 310729, 310733, 310741, 310747, 310771, 310781, 310789, 310801, 310819, 310823, 310829, 310831, 310861, 310867, 310883, 310889, 310901, 310927, 310931, 310949, 310969, 310987, 310997, 311009, 311021, 311027, 311033, 311041, 311099, 311111, 311123, 311137, 311153, 311173, 311177, 311183, 311189, 311197, 311203, 311237, 311279, 311291, 311293, 311299, 311303, 311323, 311329, 311341, 311347, 311359, 311371, 311393, 311407, 311419, 311447, 311453, 311473, 311533, 311537, 311539, 311551, 311557, 311561, 311567, 311569, 311603, 311609, 311653, 311659, 311677, 311681, 311683, 311687, 311711, 311713, 311737, 311743, 311747, 311749, 311791, 311803, 311807, 311821, 311827, 311867, 311869, 311881, 311897, 311951, 311957, 311963, 311981, 312007, 312023, 312029, 312031, 312043, 312047, 312071, 312073, 312083, 312089, 312101, 312107, 312121, 312161, 312197, 312199, 312203, 312209, 312211, 312217, 312229, 312233, 312241, 312251, 312253, 312269, 312281, 312283, 312289, 312311, 312313, 312331, 312343, 312349, 312353, 312371, 312383, 312397, 312401, 312407, 312413, 312427, 312451, 312469, 312509, 312517, 312527, 312551, 312553, 312563, 312581, 312583, 312589, 312601, 312617, 312619, 312623, 312643, 312673, 312677, 312679, 312701, 312703, 312709, 312727, 312737, 312743, 312757, 312773, 312779, 312799, 312839, 312841, 312857, 312863, 312887, 312899, 312929, 312931, 312937, 312941, 312943, 312967, 312971, 312979, 312989, 313003, 313009, 313031, 313037, 313081, 313087, 313109, 313127, 313129, 313133, 313147, 313151, 313153, 313163, 313207, 313211, 313219, 313241, 313249, 313267, 313273, 313289, 313297, 313301, 313307, 313321, 313331, 313333, 313343, 313351, 313373, 313381, 313387, 313399, 313409, 313471, 313477, 313507, 313517, 313543, 313549, 313553, 313561, 313567, 313571, 313583, 313589, 313597, 313603, 313613, 313619, 313637, 313639, 313661, 313669, 313679, 313699, 313711, 313717, 313721, 313727, 313739, 313741, 313763, 313777, 313783, 313829, 313849, 313853, 313879, 313883, 313889, 313897, 313909, 313921, 313931, 313933, 313949, 313961, 313969, 313979, 313981, 313987, 313991, 313993, 313997, 314003, 314021, 314059, 314063, 314077, 314107, 314113, 314117, 314129, 314137, 314159, 314161, 314173, 314189, 314213, 314219, 314227, 314233, 314239, 314243, 314257, 314261, 314263, 314267, 314299, 314329, 314339, 314351, 314357, 314359, 314399, 314401, 314407, 314423, 314441, 314453, 314467, 314491, 314497, 314513, 314527, 314543, 314549, 314569, 314581, 314591, 314597, 314599, 314603, 314623, 314627, 314641, 314651, 314693, 314707, 314711, 314719, 314723, 314747, 314761, 314771, 314777, 314779, 314807, 314813, 314827, 314851, 314879, 314903, 314917, 314927, 314933, 314953, 314957, 314983, 314989, 315011, 315013, 315037, 315047, 315059, 315067, 315083, 315097, 315103, 315109, 315127, 315179, 315181, 315193, 315199, 315223, 315247, 315251, 315257, 315269, 315281, 315313, 315349, 315361, 315373, 315377, 315389, 315407, 315409, 315421, 315437, 315449, 315451, 315461, 315467, 315481, 315493, 315517, 315521, 315527, 315529, 315547, 315551, 315559, 315569, 315589, 315593, 315599, 315613, 315617, 315631, 315643, 315671, 315677, 315691, 315697, 315701, 315703, 315739, 315743, 315751, 315779, 315803, 315811, 315829, 315851, 315857, 315881, 315883, 315893, 315899, 315907, 315937, 315949, 315961, 315967, 315977, 316003, 316031, 316033, 316037, 316051, 316067, 316073, 316087, 316097, 316109, 316133, 316139, 316153, 316177, 316189, 316193, 316201, 316213, 316219, 316223, 316241, 316243, 316259, 316271, 316291, 316297, 316301, 316321, 316339, 316343, 316363, 316373, 316391, 316403, 316423, 316429, 316439, 316453, 316469, 316471, 316493, 316499, 316501, 316507, 316531, 316567, 316571, 316577, 316583, 316621, 316633, 316637, 316649, 316661, 316663, 316681, 316691, 316697, 316699, 316703, 316717, 316753, 316759, 316769, 316777, 316783, 316793, 316801, 316817, 316819, 316847, 316853, 316859, 316861, 316879, 316891, 316903, 316907, 316919, 316937, 316951, 316957, 316961, 316991, 317003, 317011, 317021, 317029, 317047, 317063, 317071, 317077, 317087, 317089, 317123, 317159, 317171, 317179, 317189, 317197, 317209, 317227, 317257, 317263, 317267, 317269, 317279, 317321, 317323, 317327, 317333, 317351, 317353, 317363, 317371, 317399, 317411, 317419, 317431, 317437, 317453, 317459, 317483, 317489, 317491, 317503, 317539, 317557, 317563, 317587, 317591, 317593, 317599, 317609, 317617, 317621, 317651, 317663, 317671, 317693, 317701, 317711, 317717, 317729, 317731, 317741, 317743, 317771, 317773, 317777, 317783, 317789, 317797, 317827, 317831, 317839, 317857, 317887, 317903, 317921, 317923, 317957, 317959, 317963, 317969, 317971, 317983, 317987, 318001, 318007, 318023, 318077, 318103, 318107, 318127, 318137, 318161, 318173, 318179, 318181, 318191, 318203, 318209, 318211, 318229, 318233, 318247, 318259, 318271, 318281, 318287, 318289, 318299, 318301, 318313, 318319, 318323, 318337, 318347, 318349, 318377, 318403, 318407, 318419, 318431, 318443, 318457, 318467, 318473, 318503, 318523, 318557, 318559, 318569, 318581, 318589, 318601, 318629, 318641, 318653, 318671, 318677, 318679, 318683, 318691, 318701, 318713, 318737, 318743, 318749, 318751, 318781, 318793, 318809, 318811, 318817, 318823, 318833, 318841, 318863, 318881, 318883, 318889, 318907, 318911, 318917, 318919, 318949, 318979, 319001, 319027, 319031, 319037, 319049, 319057, 319061, 319069, 319093, 319097, 319117, 319127, 319129, 319133, 319147, 319159, 319169, 319183, 319201, 319211, 319223, 319237, 319259, 319279, 319289, 319313, 319321, 319327, 319339, 319343, 319351, 319357, 319387, 319391, 319399, 319411, 319427, 319433, 319439, 319441, 319453, 319469, 319477, 319483, 319489, 319499, 319511, 319519, 319541, 319547, 319567, 319577, 319589, 319591, 319601, 319607, 319639, 319673, 319679, 319681, 319687, 319691, 319699, 319727, 319729, 319733, 319747, 319757, 319763, 319811, 319817, 319819, 319829, 319831, 319849, 319883, 319897, 319901, 319919, 319927, 319931, 319937, 319967, 319973, 319981, 319993, 320009, 320011, 320027, 320039, 320041, 320053, 320057, 320063, 320081, 320083, 320101, 320107, 320113, 320119, 320141, 320143, 320149, 320153, 320179, 320209, 320213, 320219, 320237, 320239, 320267, 320269, 320273, 320291, 320293, 320303, 320317, 320329, 320339, 320377, 320387, 320389, 320401, 320417, 320431, 320449, 320471, 320477, 320483, 320513, 320521, 320533, 320539, 320561, 320563, 320591, 320609, 320611, 320627, 320647, 320657, 320659, 320669, 320687, 320693, 320699, 320713, 320741, 320759, 320767, 320791, 320821, 320833, 320839, 320843, 320851, 320861, 320867, 320899, 320911, 320923, 320927, 320939, 320941, 320953, 321007, 321017, 321031, 321037, 321047, 321053, 321073, 321077, 321091, 321109, 321143, 321163, 321169, 321187, 321193, 321199, 321203, 321221, 321227, 321239, 321247, 321289, 321301, 321311, 321313, 321319, 321323, 321329, 321331, 321341, 321359, 321367, 321371, 321383, 321397, 321403, 321413, 321427, 321443, 321449, 321467, 321469, 321509, 321547, 321553, 321569, 321571, 321577, 321593, 321611, 321617, 321619, 321631, 321647, 321661, 321679, 321707, 321709, 321721, 321733, 321743, 321751, 321757, 321779, 321799, 321817, 321821, 321823, 321829, 321833, 321847, 321851, 321889, 321901, 321911, 321947, 321949, 321961, 321983, 321991, 322001, 322009, 322013, 322037, 322039, 322051, 322057, 322067, 322073, 322079, 322093, 322097, 322109, 322111, 322139, 322169, 322171, 322193, 322213, 322229, 322237, 322243, 322247, 322249, 322261, 322271, 322319, 322327, 322339, 322349, 322351, 322397, 322403, 322409, 322417, 322429, 322433, 322459, 322463, 322501, 322513, 322519, 322523, 322537, 322549, 322559, 322571, 322573, 322583, 322589, 322591, 322607, 322613, 322627, 322631, 322633, 322649, 322669, 322709, 322727, 322747, 322757, 322769, 322771, 322781, 322783, 322807, 322849, 322859, 322871, 322877, 322891, 322901, 322919, 322921, 322939, 322951, 322963, 322969, 322997, 322999, 323003, 323009, 323027, 323053, 323077, 323083, 323087, 323093, 323101, 323123, 323131, 323137, 323149, 323201, 323207, 323233, 323243, 323249, 323251, 323273, 323333, 323339, 323341, 323359, 323369, 323371, 323377, 323381, 323383, 323413, 323419, 323441, 323443, 323467, 323471, 323473, 323507, 323509, 323537, 323549, 323567, 323579, 323581, 323591, 323597, 323599, 323623, 323641, 323647, 323651, 323699, 323707, 323711, 323717, 323759, 323767, 323789, 323797, 323801, 323803, 323819, 323837, 323879, 323899, 323903, 323923, 323927, 323933, 323951, 323957, 323987, 324011, 324031, 324053, 324067, 324073, 324089, 324097, 324101, 324113, 324119, 324131, 324143, 324151, 324161, 324179, 324199, 324209, 324211, 324217, 324223, 324239, 324251, 324293, 324299, 324301, 324319, 324329, 324341, 324361, 324391, 324397, 324403, 324419, 324427, 324431, 324437, 324439, 324449, 324451, 324469, 324473, 324491, 324497, 324503, 324517, 324523, 324529, 324557, 324587, 324589, 324593, 324617, 324619, 324637, 324641, 324647, 324661, 324673, 324689, 324697, 324707, 324733, 324743, 324757, 324763, 324773, 324781, 324791, 324799, 324809, 324811, 324839, 324847, 324869, 324871, 324889, 324893, 324901, 324931, 324941, 324949, 324953, 324977, 324979, 324983, 324991, 324997, 325001, 325009, 325019, 325021, 325027, 325043, 325051, 325063, 325079, 325081, 325093, 325133, 325153, 325163, 325181, 325187, 325189, 325201, 325217, 325219, 325229, 325231, 325249, 325271, 325301, 325307, 325309, 325319, 325333, 325343, 325349, 325379, 325411, 325421, 325439, 325447, 325453, 325459, 325463, 325477, 325487, 325513, 325517, 325537, 325541, 325543, 325571, 325597, 325607, 325627, 325631, 325643, 325667, 325673, 325681, 325691, 325693, 325697, 325709, 325723, 325729, 325747, 325751, 325753, 325769, 325777, 325781, 325783, 325807, 325813, 325849, 325861, 325877, 325883, 325889, 325891, 325901, 325921, 325939, 325943, 325951, 325957, 325987, 325993, 325999, 326023, 326057, 326063, 326083, 326087, 326099, 326101, 326113, 326119, 326141, 326143, 326147, 326149, 326153, 326159, 326171, 326189, 326203, 326219, 326251, 326257, 326309, 326323, 326351, 326353, 326369, 326437, 326441, 326449, 326467, 326479, 326497, 326503, 326537, 326539, 326549, 326561, 326563, 326567, 326581, 326593, 326597, 326609, 326611, 326617, 326633, 326657, 326659, 326663, 326681, 326687, 326693, 326701, 326707, 326737, 326741, 326773, 326779, 326831, 326863, 326867, 326869, 326873, 326881, 326903, 326923, 326939, 326941, 326947, 326951, 326983, 326993, 326999, 327001, 327007, 327011, 327017, 327023, 327059, 327071, 327079, 327127, 327133, 327163, 327179, 327193, 327203, 327209, 327211, 327247, 327251, 327263, 327277, 327289, 327307, 327311, 327317, 327319, 327331, 327337, 327343, 327347, 327401, 327407, 327409, 327419, 327421, 327433, 327443, 327463, 327469, 327473, 327479, 327491, 327493, 327499, 327511, 327517, 327529, 327553, 327557, 327559, 327571, 327581, 327583, 327599, 327619, 327629, 327647, 327661, 327667, 327673, 327689, 327707, 327721, 327737, 327739, 327757, 327779, 327797, 327799, 327809, 327823, 327827, 327829, 327839, 327851, 327853, 327869, 327871, 327881, 327889, 327917, 327923, 327941, 327953, 327967, 327979, 327983, 328007, 328037, 328043, 328051, 328061, 328063, 328067, 328093, 328103, 328109, 328121, 328127, 328129, 328171, 328177, 328213, 328243, 328249, 328271, 328277, 328283, 328291, 328303, 328327, 328331, 328333, 328343, 328357, 328373, 328379, 328381, 328397, 328411, 328421, 328429, 328439, 328481, 328511, 328513, 328519, 328543, 328579, 328589, 328591, 328619, 328621, 328633, 328637, 328639, 328651, 328667, 328687, 328709, 328721, 328753, 328777, 328781, 328787, 328789, 328813, 328829, 328837, 328847, 328849, 328883, 328891, 328897, 328901, 328919, 328921, 328931, 328961, 328981, 329009, 329027, 329053, 329059, 329081, 329083, 329089, 329101, 329111, 329123, 329143, 329167, 329177, 329191, 329201, 329207, 329209, 329233, 329243, 329257, 329267, 329269, 329281, 329293, 329297, 329299, 329309, 329317, 329321, 329333, 329347, 329387, 329393, 329401, 329419, 329431, 329471, 329473, 329489, 329503, 329519, 329533, 329551, 329557, 329587, 329591, 329597, 329603, 329617, 329627, 329629, 329639, 329657, 329663, 329671, 329677, 329683, 329687, 329711, 329717, 329723, 329729, 329761, 329773, 329779, 329789, 329801, 329803, 329863, 329867, 329873, 329891, 329899, 329941, 329947, 329951, 329957, 329969, 329977, 329993, 329999, 330017, 330019, 330037, 330041, 330047, 330053, 330061, 330067, 330097, 330103, 330131, 330133, 330139, 330149, 330167, 330199, 330203, 330217, 330227, 330229, 330233, 330241, 330247, 330271, 330287, 330289, 330311, 330313, 330329, 330331, 330347, 330359, 330383, 330389, 330409, 330413, 330427, 330431, 330433, 330439, 330469, 330509, 330557, 330563, 330569, 330587, 330607, 330611, 330623, 330641, 330643, 330653, 330661, 330679, 330683, 330689, 330697, 330703, 330719, 330721, 330731, 330749, 330767, 330787, 330791, 330793, 330821, 330823, 330839, 330853, 330857, 330859, 330877, 330887, 330899, 330907, 330917, 330943, 330983, 330997, 331013, 331027, 331031, 331043, 331063, 331081, 331099, 331127, 331141, 331147, 331153, 331159, 331171, 331183, 331207, 331213, 331217, 331231, 331241, 331249, 331259, 331277, 331283, 331301, 331307, 331319, 331333, 331337, 331339, 331349, 331367, 331369, 331391, 331399, 331423, 331447, 331451, 331489, 331501, 331511, 331519, 331523, 331537, 331543, 331547, 331549, 331553, 331577, 331579, 331589, 331603, 331609, 331613, 331651, 331663, 331691, 331693, 331697, 331711, 331739, 331753, 331769, 331777, 331781, 331801, 331819, 331841, 331843, 331871, 331883, 331889, 331897, 331907, 331909, 331921, 331937, 331943, 331957, 331967, 331973, 331997, 331999, 332009, 332011, 332039, 332053, 332069, 332081, 332099, 332113, 332117, 332147, 332159, 332161, 332179, 332183, 332191, 332201, 332203, 332207, 332219, 332221, 332251, 332263, 332273, 332287, 332303, 332309, 332317, 332393, 332399, 332411, 332417, 332441, 332447, 332461, 332467, 332471, 332473, 332477, 332489, 332509, 332513, 332561, 332567, 332569, 332573, 332611, 332617, 332623, 332641, 332687, 332699, 332711, 332729, 332743, 332749, 332767, 332779, 332791, 332803, 332837, 332851, 332873, 332881, 332887, 332903, 332921, 332933, 332947, 332951, 332987, 332989, 332993, 333019, 333023, 333029, 333031, 333041, 333049, 333071, 333097, 333101, 333103, 333107, 333131, 333139, 333161, 333187, 333197, 333209, 333227, 333233, 333253, 333269, 333271, 333283, 333287, 333299, 333323, 333331, 333337, 333341, 333349, 333367, 333383, 333397, 333419, 333427, 333433, 333439, 333449, 333451, 333457, 333479, 333491, 333493, 333497, 333503, 333517, 333533, 333539, 333563, 333581, 333589, 333623, 333631, 333647, 333667, 333673, 333679, 333691, 333701, 333713, 333719, 333721, 333737, 333757, 333769, 333779, 333787, 333791, 333793, 333803, 333821, 333857, 333871, 333911, 333923, 333929, 333941, 333959, 333973, 333989, 333997, 334021, 334031, 334043, 334049, 334057, 334069, 334093, 334099, 334127, 334133, 334157, 334171, 334177, 334183, 334189, 334199, 334231, 334247, 334261, 334289, 334297, 334319, 334331, 334333, 334349, 334363, 334379, 334387, 334393, 334403, 334421, 334423, 334427, 334429, 334447, 334487, 334493, 334507, 334511, 334513, 334541, 334547, 334549, 334561, 334603, 334619, 334637, 334643, 334651, 334661, 334667, 334681, 334693, 334699, 334717, 334721, 334727, 334751, 334753, 334759, 334771, 334777, 334783, 334787, 334793, 334843, 334861, 334877, 334889, 334891, 334897, 334931, 334963, 334973, 334987, 334991, 334993, 335009, 335021, 335029, 335033, 335047, 335051, 335057, 335077, 335081, 335089, 335107, 335113, 335117, 335123, 335131, 335149, 335161, 335171, 335173, 335207, 335213, 335221, 335249, 335261, 335273, 335281, 335299, 335323, 335341, 335347, 335381, 335383, 335411, 335417, 335429, 335449, 335453, 335459, 335473, 335477, 335507, 335519, 335527, 335539, 335557, 335567, 335579, 335591, 335609, 335633, 335641, 335653, 335663, 335669, 335681, 335689, 335693, 335719, 335729, 335743, 335747, 335771, 335807, 335809, 335813, 335821, 335833, 335843, 335857, 335879, 335893, 335897, 335917, 335941, 335953, 335957, 335999, 336029, 336031, 336041, 336059, 336079, 336101, 336103, 336109, 336113, 336121, 336143, 336151, 336157, 336163, 336181, 336199, 336211, 336221, 336223, 336227, 336239, 336247, 336251, 336253, 336263, 336307, 336317, 336353, 336361, 336373, 336397, 336403, 336419, 336437, 336463, 336491, 336499, 336503, 336521, 336527, 336529, 336533, 336551, 336563, 336571, 336577, 336587, 336593, 336599, 336613, 336631, 336643, 336649, 336653, 336667, 336671, 336683, 336689, 336703, 336727, 336757, 336761, 336767, 336769, 336773, 336793, 336799, 336803, 336823, 336827, 336829, 336857, 336863, 336871, 336887, 336899, 336901, 336911, 336929, 336961, 336977, 336983, 336989, 336997, 337013, 337021, 337031, 337039, 337049, 337069, 337081, 337091, 337097, 337121, 337153, 337189, 337201, 337213, 337217, 337219, 337223, 337261, 337277, 337279, 337283, 337291, 337301, 337313, 337327, 337339, 337343, 337349, 337361, 337367, 337369, 337397, 337411, 337427, 337453, 337457, 337487, 337489, 337511, 337517, 337529, 337537, 337541, 337543, 337583, 337607, 337609, 337627, 337633, 337639, 337651, 337661, 337669, 337681, 337691, 337697, 337721, 337741, 337751, 337759, 337781, 337793, 337817, 337837, 337853, 337859, 337861, 337867, 337871, 337873, 337891, 337901, 337903, 337907, 337919, 337949, 337957, 337969, 337973, 337999, 338017, 338027, 338033, 338119, 338137, 338141, 338153, 338159, 338161, 338167, 338171, 338183, 338197, 338203, 338207, 338213, 338231, 338237, 338251, 338263, 338267, 338269, 338279, 338287, 338293, 338297, 338309, 338321, 338323, 338339, 338341, 338347, 338369, 338383, 338389, 338407, 338411, 338413, 338423, 338431, 338449, 338461, 338473, 338477, 338497, 338531, 338543, 338563, 338567, 338573, 338579, 338581, 338609, 338659, 338669, 338683, 338687, 338707, 338717, 338731, 338747, 338753, 338761, 338773, 338777, 338791, 338803, 338839, 338851, 338857, 338867, 338893, 338909, 338927, 338959, 338993, 338999, 339023, 339049, 339067, 339071, 339091, 339103, 339107, 339121, 339127, 339137, 339139, 339151, 339161, 339173, 339187, 339211, 339223, 339239, 339247, 339257, 339263, 339289, 339307, 339323, 339331, 339341, 339373, 339389, 339413, 339433, 339467, 339491, 339517, 339527, 339539, 339557, 339583, 339589, 339601, 339613, 339617, 339631, 339637, 339649, 339653, 339659, 339671, 339673, 339679, 339707, 339727, 339749, 339751, 339761, 339769, 339799, 339811, 339817, 339821, 339827, 339839, 339841, 339863, 339887, 339907, 339943, 339959, 339991, 340007, 340027, 340031, 340037, 340049, 340057, 340061, 340063, 340073, 340079, 340103, 340111, 340117, 340121, 340127, 340129, 340169, 340183, 340201, 340211, 340237, 340261, 340267, 340283, 340297, 340321, 340337, 340339, 340369, 340381, 340387, 340393, 340397, 340409, 340429, 340447, 340451, 340453, 340477, 340481, 340519, 340541, 340559, 340573, 340577, 340579, 340583, 340591, 340601, 340619, 340633, 340643, 340649, 340657, 340661, 340687, 340693, 340709, 340723, 340757, 340777, 340787, 340789, 340793, 340801, 340811, 340819, 340849, 340859, 340877, 340889, 340897, 340903, 340909, 340913, 340919, 340927, 340931, 340933, 340937, 340939, 340957, 340979, 340999, 341017, 341027, 341041, 341057, 341059, 341063, 341083, 341087, 341123, 341141, 341171, 341179, 341191, 341203, 341219, 341227, 341233, 341269, 341273, 341281, 341287, 341293, 341303, 341311, 341321, 341323, 341333, 341339, 341347, 341357, 341423, 341443, 341447, 341459, 341461, 341477, 341491, 341501, 341507, 341521, 341543, 341557, 341569, 341587, 341597, 341603, 341617, 341623, 341629, 341641, 341647, 341659, 341681, 341687, 341701, 341729, 341743, 341749, 341771, 341773, 341777, 341813, 341821, 341827, 341839, 341851, 341863, 341879, 341911, 341927, 341947, 341951, 341953, 341959, 341963, 341983, 341993, 342037, 342047, 342049, 342059, 342061, 342071, 342073, 342077, 342101, 342107, 342131, 342143, 342179, 342187, 342191, 342197, 342203, 342211, 342233, 342239, 342241, 342257, 342281, 342283, 342299, 342319, 342337, 342341, 342343, 342347, 342359, 342371, 342373, 342379, 342389, 342413, 342421, 342449, 342451, 342467, 342469, 342481, 342497, 342521, 342527, 342547, 342553, 342569, 342593, 342599, 342607, 342647, 342653, 342659, 342673, 342679, 342691, 342697, 342733, 342757, 342761, 342791, 342799, 342803, 342821, 342833, 342841, 342847, 342863, 342869, 342871, 342889, 342899, 342929, 342949, 342971, 342989, 343019, 343037, 343051, 343061, 343073, 343081, 343087, 343127, 343141, 343153, 343163, 343169, 343177, 343193, 343199, 343219, 343237, 343243, 343253, 343261, 343267, 343289, 343303, 343307, 343309, 343313, 343327, 343333, 343337, 343373, 343379, 343381, 343391, 343393, 343411, 343423, 343433, 343481, 343489, 343517, 343529, 343531, 343543, 343547, 343559, 343561, 343579, 343583, 343589, 343591, 343601, 343627, 343631, 343639, 343649, 343661, 343667, 343687, 343709, 343727, 343769, 343771, 343787, 343799, 343801, 343813, 343817, 343823, 343829, 343831, 343891, 343897, 343901, 343913, 343933, 343939, 343943, 343951, 343963, 343997, 344017, 344021, 344039, 344053, 344083, 344111, 344117, 344153, 344161, 344167, 344171, 344173, 344177, 344189, 344207, 344209, 344213, 344221, 344231, 344237, 344243, 344249, 344251, 344257, 344263, 344269, 344273, 344291, 344293, 344321, 344327, 344347, 344353, 344363, 344371, 344417, 344423, 344429, 344453, 344479, 344483, 344497, 344543, 344567, 344587, 344599, 344611, 344621, 344629, 344639, 344653, 344671, 344681, 344683, 344693, 344719, 344749, 344753, 344759, 344791, 344797, 344801, 344807, 344819, 344821, 344843, 344857, 344863, 344873, 344887, 344893, 344909, 344917, 344921, 344941, 344957, 344959, 344963, 344969, 344987, 345001, 345011, 345017, 345019, 345041, 345047, 345067, 345089, 345109, 345133, 345139, 345143, 345181, 345193, 345221, 345227, 345229, 345259, 345263, 345271, 345307, 345311, 345329, 345379, 345413, 345431, 345451, 345461, 345463, 345473, 345479, 345487, 345511, 345517, 345533, 345547, 345551, 345571, 345577, 345581, 345599, 345601, 345607, 345637, 345643, 345647, 345659, 345673, 345679, 345689, 345701, 345707, 345727, 345731, 345733, 345739, 345749, 345757, 345769, 345773, 345791, 345803, 345811, 345817, 345823, 345853, 345869, 345881, 345887, 345889, 345907, 345923, 345937, 345953, 345979, 345997, 346013, 346039, 346043, 346051, 346079, 346091, 346097, 346111, 346117, 346133, 346139, 346141, 346147, 346169, 346187, 346201, 346207, 346217, 346223, 346259, 346261, 346277, 346303, 346309, 346321, 346331, 346337, 346349, 346361, 346369, 346373, 346391, 346393, 346397, 346399, 346417, 346421, 346429, 346433, 346439, 346441, 346447, 346453, 346469, 346501, 346529, 346543, 346547, 346553, 346559, 346561, 346589, 346601, 346607, 346627, 346639, 346649, 346651, 346657, 346667, 346669, 346699, 346711, 346721, 346739, 346751, 346763, 346793, 346831, 346849, 346867, 346873, 346877, 346891, 346903, 346933, 346939, 346943, 346961, 346963, 347003, 347033, 347041, 347051, 347057, 347059, 347063, 347069, 347071, 347099, 347129, 347131, 347141, 347143, 347161, 347167, 347173, 347177, 347183, 347197, 347201, 347209, 347227, 347233, 347239, 347251, 347257, 347287, 347297, 347299, 347317, 347329, 347341, 347359, 347401, 347411, 347437, 347443, 347489, 347509, 347513, 347519, 347533, 347539, 347561, 347563, 347579, 347587, 347591, 347609, 347621, 347629, 347651, 347671, 347707, 347717, 347729, 347731, 347747, 347759, 347771, 347773, 347779, 347801, 347813, 347821, 347849, 347873, 347887, 347891, 347899, 347929, 347933, 347951, 347957, 347959, 347969, 347981, 347983, 347987, 347989, 347993, 348001, 348011, 348017, 348031, 348043, 348053, 348077, 348083, 348097, 348149, 348163, 348181, 348191, 348209, 348217, 348221, 348239, 348241, 348247, 348253, 348259, 348269, 348287, 348307, 348323, 348353, 348367, 348389, 348401, 348407, 348419, 348421, 348431, 348433, 348437, 348443, 348451, 348457, 348461, 348463, 348487, 348527, 348547, 348553, 348559, 348563, 348571, 348583, 348587, 348617, 348629, 348637, 348643, 348661, 348671, 348709, 348731, 348739, 348757, 348763, 348769, 348779, 348811, 348827, 348833, 348839, 348851, 348883, 348889, 348911, 348917, 348919, 348923, 348937, 348949, 348989, 348991, 349007, 349039, 349043, 349051, 349079, 349081, 349093, 349099, 349109, 349121, 349133, 349171, 349177, 349183, 349187, 349199, 349207, 349211, 349241, 349291, 349303, 349313, 349331, 349337, 349343, 349357, 349369, 349373, 349379, 349381, 349387, 349397, 349399, 349403, 349409, 349411, 349423, 349471, 349477, 349483, 349493, 349499, 349507, 349519, 349529, 349553, 349567, 349579, 349589, 349603, 349637, 349663, 349667, 349697, 349709, 349717, 349729, 349753, 349759, 349787, 349793, 349801, 349813, 349819, 349829, 349831, 349837, 349841, 349849, 349871, 349903, 349907, 349913, 349919, 349927, 349931, 349933, 349939, 349949, 349963, 349967, 349981, 350003, 350029, 350033, 350039, 350087, 350089, 350093, 350107, 350111, 350137, 350159, 350179, 350191, 350213, 350219, 350237, 350249, 350257, 350281, 350293, 350347, 350351, 350377, 350381, 350411, 350423, 350429, 350431, 350437, 350443, 350447, 350453, 350459, 350503, 350521, 350549, 350561, 350563, 350587, 350593, 350617, 350621, 350629, 350657, 350663, 350677, 350699, 350711, 350719, 350729, 350731, 350737, 350741, 350747, 350767, 350771, 350783, 350789, 350803, 350809, 350843, 350851, 350869, 350881, 350887, 350891, 350899, 350941, 350947, 350963, 350971, 350981, 350983, 350989, 351011, 351023, 351031, 351037, 351041, 351047, 351053, 351059, 351061, 351077, 351079, 351097, 351121, 351133, 351151, 351157, 351179, 351217, 351223, 351229, 351257, 351259, 351269, 351287, 351289, 351293, 351301, 351311, 351341, 351343, 351347, 351359, 351361, 351383, 351391, 351397, 351401, 351413, 351427, 351437, 351457, 351469, 351479, 351497, 351503, 351517, 351529, 351551, 351563, 351587, 351599, 351643, 351653, 351661, 351667, 351691, 351707, 351727, 351731, 351733, 351749, 351751, 351763, 351773, 351779, 351797, 351803, 351811, 351829, 351847, 351851, 351859, 351863, 351887, 351913, 351919, 351929, 351931, 351959, 351971, 351991, 352007, 352021, 352043, 352049, 352057, 352069, 352073, 352081, 352097, 352109, 352111, 352123, 352133, 352181, 352193, 352201, 352217, 352229, 352237, 352249, 352267, 352271, 352273, 352301, 352309, 352327, 352333, 352349, 352357, 352361, 352367, 352369, 352381, 352399, 352403, 352409, 352411, 352421, 352423, 352441, 352459, 352463, 352481, 352483, 352489, 352493, 352511, 352523, 352543, 352549, 352579, 352589, 352601, 352607, 352619, 352633, 352637, 352661, 352691, 352711, 352739, 352741, 352753, 352757, 352771, 352813, 352817, 352819, 352831, 352837, 352841, 352853, 352867, 352883, 352907, 352909, 352931, 352939, 352949, 352951, 352973, 352991, 353011, 353021, 353047, 353053, 353057, 353069, 353081, 353099, 353117, 353123, 353137, 353147, 353149, 353161, 353173, 353179, 353201, 353203, 353237, 353263, 353293, 353317, 353321, 353329, 353333, 353341, 353359, 353389, 353401, 353411, 353429, 353443, 353453, 353459, 353471, 353473, 353489, 353501, 353527, 353531, 353557, 353567, 353603, 353611, 353621, 353627, 353629, 353641, 353653, 353657, 353677, 353681, 353687, 353699, 353711, 353737, 353747, 353767, 353777, 353783, 353797, 353807, 353813, 353819, 353833, 353867, 353869, 353879, 353891, 353897, 353911, 353917, 353921, 353929, 353939, 353963, 354001, 354007, 354017, 354023, 354031, 354037, 354041, 354043, 354047, 354073, 354091, 354097, 354121, 354139, 354143, 354149, 354163, 354169, 354181, 354209, 354247, 354251, 354253, 354257, 354259, 354271, 354301, 354307, 354313, 354317, 354323, 354329, 354337, 354353, 354371, 354373, 354377, 354383, 354391, 354401, 354421, 354439, 354443, 354451, 354461, 354463, 354469, 354479, 354533, 354539, 354551, 354553, 354581, 354587, 354619, 354643, 354647, 354661, 354667, 354677, 354689, 354701, 354703, 354727, 354737, 354743, 354751, 354763, 354779, 354791, 354799, 354829, 354833, 354839, 354847, 354869, 354877, 354881, 354883, 354911, 354953, 354961, 354971, 354973, 354979, 354983, 354997, 355007, 355009, 355027, 355031, 355037, 355039, 355049, 355057, 355063, 355073, 355087, 355093, 355099, 355109, 355111, 355127, 355139, 355171, 355193, 355211, 355261, 355297, 355307, 355321, 355331, 355339, 355343, 355361, 355363, 355379, 355417, 355427, 355441, 355457, 355463, 355483, 355499, 355501, 355507, 355513, 355517, 355519, 355529, 355541, 355549, 355559, 355571, 355573, 355591, 355609, 355633, 355643, 355651, 355669, 355679, 355697, 355717, 355721, 355723, 355753, 355763, 355777, 355783, 355799, 355811, 355819, 355841, 355847, 355853, 355867, 355891, 355909, 355913, 355933, 355937, 355939, 355951, 355967, 355969, 356023, 356039, 356077, 356093, 356101, 356113, 356123, 356129, 356137, 356141, 356143, 356171, 356173, 356197, 356219, 356243, 356261, 356263, 356287, 356299, 356311, 356327, 356333, 356351, 356387, 356399, 356441, 356443, 356449, 356453, 356467, 356479, 356501, 356509, 356533, 356549, 356561, 356563, 356567, 356579, 356591, 356621, 356647, 356663, 356693, 356701, 356731, 356737, 356749, 356761, 356803, 356819, 356821, 356831, 356869, 356887, 356893, 356927, 356929, 356933, 356947, 356959, 356969, 356977, 356981, 356989, 356999, 357031, 357047, 357073, 357079, 357083, 357103, 357107, 357109, 357131, 357139, 357169, 357179, 357197, 357199, 357211, 357229, 357239, 357241, 357263, 357271, 357281, 357283, 357293, 357319, 357347, 357349, 357353, 357359, 357377, 357389, 357421, 357431, 357437, 357473, 357503, 357509, 357517, 357551, 357559, 357563, 357569, 357571, 357583, 357587, 357593, 357611, 357613, 357619, 357649, 357653, 357659, 357661, 357667, 357671, 357677, 357683, 357689, 357703, 357727, 357733, 357737, 357739, 357767, 357779, 357781, 357787, 357793, 357809, 357817, 357823, 357829, 357839, 357859, 357883, 357913, 357967, 357977, 357983, 357989, 357997, 358031, 358051, 358069, 358073, 358079, 358103, 358109, 358153, 358157, 358159, 358181, 358201, 358213, 358219, 358223, 358229, 358243, 358273, 358277, 358279, 358289, 358291, 358297, 358301, 358313, 358327, 358331, 358349, 358373, 358417, 358427, 358429, 358441, 358447, 358459, 358471, 358483, 358487, 358499, 358531, 358541, 358571, 358573, 358591, 358597, 358601, 358607, 358613, 358637, 358667, 358669, 358681, 358691, 358697, 358703, 358711, 358723, 358727, 358733, 358747, 358753, 358769, 358783, 358793, 358811, 358829, 358847, 358859, 358861, 358867, 358877, 358879, 358901, 358903, 358907, 358909, 358931, 358951, 358973, 358979, 358987, 358993, 358999, 359003, 359017, 359027, 359041, 359063, 359069, 359101, 359111, 359129, 359137, 359143, 359147, 359153, 359167, 359171, 359207, 359209, 359231, 359243, 359263, 359267, 359279, 359291, 359297, 359299, 359311, 359323, 359327, 359353, 359357, 359377, 359389, 359407, 359417, 359419, 359441, 359449, 359477, 359479, 359483, 359501, 359509, 359539, 359549, 359561, 359563, 359581, 359587, 359599, 359621, 359633, 359641, 359657, 359663, 359701, 359713, 359719, 359731, 359747, 359753, 359761, 359767, 359783, 359837, 359851, 359869, 359897, 359911, 359929, 359981, 359987, 360007, 360023, 360037, 360049, 360053, 360071, 360089, 360091, 360163, 360167, 360169, 360181, 360187, 360193, 360197, 360223, 360229, 360233, 360257, 360271, 360277, 360287, 360289, 360293, 360307, 360317, 360323, 360337, 360391, 360407, 360421, 360439, 360457, 360461, 360497, 360509, 360511, 360541, 360551, 360589, 360593, 360611, 360637, 360649, 360653, 360749, 360769, 360779, 360781, 360803, 360817, 360821, 360823, 360827, 360851, 360853, 360863, 360869, 360901, 360907, 360947, 360949, 360953, 360959, 360973, 360977, 360979, 360989, 361001, 361003, 361013, 361033, 361069, 361091, 361093, 361111, 361159, 361183, 361211, 361213, 361217, 361219, 361223, 361237, 361241, 361271, 361279, 361313, 361321, 361327, 361337, 361349, 361351, 361357, 361363, 361373, 361409, 361411, 361421, 361433, 361441, 361447, 361451, 361463, 361469, 361481, 361499, 361507, 361511, 361523, 361531, 361541, 361549, 361561, 361577, 361637, 361643, 361649, 361651, 361663, 361679, 361687, 361723, 361727, 361747, 361763, 361769, 361787, 361789, 361793, 361799, 361807, 361843, 361871, 361873, 361877, 361901, 361903, 361909, 361919, 361927, 361943, 361961, 361967, 361973, 361979, 361993, 362003, 362027, 362051, 362053, 362059, 362069, 362081, 362093, 362099, 362107, 362137, 362143, 362147, 362161, 362177, 362191, 362203, 362213, 362221, 362233, 362237, 362281, 362291, 362293, 362303, 362309, 362333, 362339, 362347, 362353, 362357, 362363, 362371, 362377, 362381, 362393, 362407, 362419, 362429, 362431, 362443, 362449, 362459, 362473, 362521, 362561, 362569, 362581, 362599, 362629, 362633, 362657, 362693, 362707, 362717, 362723, 362741, 362743, 362749, 362753, 362759, 362801, 362851, 362863, 362867, 362897, 362903, 362911, 362927, 362941, 362951, 362953, 362969, 362977, 362983, 362987, 363017, 363019, 363037, 363043, 363047, 363059, 363061, 363067, 363119, 363149, 363151, 363157, 363161, 363173, 363179, 363199, 363211, 363217, 363257, 363269, 363271, 363277, 363313, 363317, 363329, 363343, 363359, 363361, 363367, 363371, 363373, 363379, 363397, 363401, 363403, 363431, 363437, 363439, 363463, 363481, 363491, 363497, 363523, 363529, 363533, 363541, 363551, 363557, 363563, 363569, 363577, 363581, 363589, 363611, 363619, 363659, 363677, 363683, 363691, 363719, 363731, 363751, 363757, 363761, 363767, 363773, 363799, 363809, 363829, 363833, 363841, 363871, 363887, 363889, 363901, 363911, 363917, 363941, 363947, 363949, 363959, 363967, 363977, 363989, 364027, 364031, 364069, 364073, 364079, 364103, 364127, 364129, 364141, 364171, 364183, 364187, 364193, 364213, 364223, 364241, 364267, 364271, 364289, 364291, 364303, 364313, 364321, 364333, 364337, 364349, 364373, 364379, 364393, 364411, 364417, 364423, 364433, 364447, 364451, 364459, 364471, 364499, 364513, 364523, 364537, 364541, 364543, 364571, 364583, 364601, 364607, 364621, 364627, 364643, 364657, 364669, 364687, 364691, 364699, 364717, 364739, 364747, 364751, 364753, 364759, 364801, 364829, 364853, 364873, 364879, 364883, 364891, 364909, 364919, 364921, 364937, 364943, 364961, 364979, 364993, 364997, 365003, 365017, 365021, 365039, 365063, 365069, 365089, 365107, 365119, 365129, 365137, 365147, 365159, 365173, 365179, 365201, 365213, 365231, 365249, 365251, 365257, 365291, 365293, 365297, 365303, 365327, 365333, 365357, 365369, 365377, 365411, 365413, 365419, 365423, 365441, 365461, 365467, 365471, 365473, 365479, 365489, 365507, 365509, 365513, 365527, 365531, 365537, 365557, 365567, 365569, 365587, 365591, 365611, 365627, 365639, 365641, 365669, 365683, 365689, 365699, 365747, 365749, 365759, 365773, 365779, 365791, 365797, 365809, 365837, 365839, 365851, 365903, 365929, 365933, 365941, 365969, 365983, 366001, 366013, 366019, 366029, 366031, 366053, 366077, 366097, 366103, 366127, 366133, 366139, 366161, 366167, 366169, 366173, 366181, 366193, 366199, 366211, 366217, 366221, 366227, 366239, 366259, 366269, 366277, 366287, 366293, 366307, 366313, 366329, 366341, 366343, 366347, 366383, 366397, 366409, 366419, 366433, 366437, 366439, 366461, 366463, 366467, 366479, 366497, 366511, 366517, 366521, 366547, 366593, 366599, 366607, 366631, 366677, 366683, 366697, 366701, 366703, 366713, 366721, 366727, 366733, 366787, 366791, 366811, 366829, 366841, 366851, 366853, 366859, 366869, 366881, 366889, 366901, 366907, 366917, 366923, 366941, 366953, 366967, 366973, 366983, 366997, 367001, 367007, 367019, 367021, 367027, 367033, 367049, 367069, 367097, 367121, 367123, 367127, 367139, 367163, 367181, 367189, 367201, 367207, 367219, 367229, 367231, 367243, 367259, 367261, 367273, 367277, 367307, 367309, 367313, 367321, 367357, 367369, 367391, 367397, 367427, 367453, 367457, 367469, 367501, 367519, 367531, 367541, 367547, 367559, 367561, 367573, 367597, 367603, 367613, 367621, 367637, 367649, 367651, 367663, 367673, 367687, 367699, 367711, 367721, 367733, 367739, 367751, 367771, 367777, 367781, 367789, 367819, 367823, 367831, 367841, 367849, 367853, 367867, 367879, 367883, 367889, 367909, 367949, 367957, 368021, 368029, 368047, 368059, 368077, 368083, 368089, 368099, 368107, 368111, 368117, 368129, 368141, 368149, 368153, 368171, 368189, 368197, 368227, 368231, 368233, 368243, 368273, 368279, 368287, 368293, 368323, 368327, 368359, 368363, 368369, 368399, 368411, 368443, 368447, 368453, 368471, 368491, 368507, 368513, 368521, 368531, 368539, 368551, 368579, 368593, 368597, 368609, 368633, 368647, 368651, 368653, 368689, 368717, 368729, 368737, 368743, 368773, 368783, 368789, 368791, 368801, 368803, 368833, 368857, 368873, 368881, 368899, 368911, 368939, 368947, 368957, 369007, 369013, 369023, 369029, 369067, 369071, 369077, 369079, 369097, 369119, 369133, 369137, 369143, 369169, 369181, 369191, 369197, 369211, 369247, 369253, 369263, 369269, 369283, 369293, 369301, 369319, 369331, 369353, 369361, 369407, 369409, 369419, 369469, 369487, 369491, 369539, 369553, 369557, 369581, 369637, 369647, 369659, 369661, 369673, 369703, 369709, 369731, 369739, 369751, 369791, 369793, 369821, 369827, 369829, 369833, 369841, 369851, 369877, 369893, 369913, 369917, 369947, 369959, 369961, 369979, 369983, 369991, 369997, 370003, 370009, 370021, 370033, 370057, 370061, 370067, 370081, 370091, 370103, 370121, 370133, 370147, 370159, 370169, 370193, 370199, 370207, 370213, 370217, 370241, 370247, 370261, 370373, 370387, 370399, 370411, 370421, 370423, 370427, 370439, 370441, 370451, 370463, 370471, 370477, 370483, 370493, 370511, 370529, 370537, 370547, 370561, 370571, 370597, 370603, 370609, 370613, 370619, 370631, 370661, 370663, 370673, 370679, 370687, 370693, 370723, 370759, 370793, 370801, 370813, 370837, 370871, 370873, 370879, 370883, 370891, 370897, 370919, 370949, 371027, 371029, 371057, 371069, 371071, 371083, 371087, 371099, 371131, 371141, 371143, 371153, 371177, 371179, 371191, 371213, 371227, 371233, 371237, 371249, 371251, 371257, 371281, 371291, 371299, 371303, 371311, 371321, 371333, 371339, 371341, 371353, 371359, 371383, 371387, 371389, 371417, 371447, 371453, 371471, 371479, 371491, 371509, 371513, 371549, 371561, 371573, 371587, 371617, 371627, 371633, 371639, 371663, 371669, 371699, 371719, 371737, 371779, 371797, 371831, 371837, 371843, 371851, 371857, 371869, 371873, 371897, 371927, 371929, 371939, 371941, 371951, 371957, 371971, 371981, 371999, 372013, 372023, 372037, 372049, 372059, 372061, 372067, 372107, 372121, 372131, 372137, 372149, 372167, 372173, 372179, 372223, 372241, 372263, 372269, 372271, 372277, 372289, 372293, 372299, 372311, 372313, 372353, 372367, 372371, 372377, 372397, 372401, 372409, 372413, 372443, 372451, 372461, 372473, 372481, 372497, 372511, 372523, 372539, 372607, 372611, 372613, 372629, 372637, 372653, 372661, 372667, 372677, 372689, 372707, 372709, 372719, 372733, 372739, 372751, 372763, 372769, 372773, 372797, 372803, 372809, 372817, 372829, 372833, 372839, 372847, 372859, 372871, 372877, 372881, 372901, 372917, 372941, 372943, 372971, 372973, 372979, 373003, 373007, 373019, 373049, 373063, 373073, 373091, 373127, 373151, 373157, 373171, 373181, 373183, 373187, 373193, 373199, 373207, 373211, 373213, 373229, 373231, 373273, 373291, 373297, 373301, 373327, 373339, 373343, 373349, 373357, 373361, 373363, 373379, 373393, 373447, 373453, 373459, 373463, 373487, 373489, 373501, 373517, 373553, 373561, 373567, 373613, 373621, 373631, 373649, 373657, 373661, 373669, 373693, 373717, 373721, 373753, 373757, 373777, 373783, 373823, 373837, 373859, 373861, 373903, 373909, 373937, 373943, 373951, 373963, 373969, 373981, 373987, 373999, 374009, 374029, 374039, 374041, 374047, 374063, 374069, 374083, 374089, 374093, 374111, 374117, 374123, 374137, 374149, 374159, 374173, 374177, 374189, 374203, 374219, 374239, 374287, 374291, 374293, 374299, 374317, 374321, 374333, 374347, 374351, 374359, 374389, 374399, 374441, 374443, 374447, 374461, 374483, 374501, 374531, 374537, 374557, 374587, 374603, 374639, 374641, 374653, 374669, 374677, 374681, 374683, 374687, 374701, 374713, 374719, 374729, 374741, 374753, 374761, 374771, 374783, 374789, 374797, 374807, 374819, 374837, 374839, 374849, 374879, 374887, 374893, 374903, 374909, 374929, 374939, 374953, 374977, 374981, 374987, 374989, 374993, 375017, 375019, 375029, 375043, 375049, 375059, 375083, 375091, 375097, 375101, 375103, 375113, 375119, 375121, 375127, 375149, 375157, 375163, 375169, 375203, 375209, 375223, 375227, 375233, 375247, 375251, 375253, 375257, 375259, 375281, 375283, 375311, 375341, 375359, 375367, 375371, 375373, 375391, 375407, 375413, 375443, 375449, 375451, 375457, 375467, 375481, 375509, 375511, 375523, 375527, 375533, 375553, 375559, 375563, 375569, 375593, 375607, 375623, 375631, 375643, 375647, 375667, 375673, 375703, 375707, 375709, 375743, 375757, 375761, 375773, 375779, 375787, 375799, 375833, 375841, 375857, 375899, 375901, 375923, 375931, 375967, 375971, 375979, 375983, 375997, 376001, 376003, 376009, 376021, 376039, 376049, 376063, 376081, 376097, 376099, 376127, 376133, 376147, 376153, 376171, 376183, 376199, 376231, 376237, 376241, 376283, 376291, 376297, 376307, 376351, 376373, 376393, 376399, 376417, 376463, 376469, 376471, 376477, 376483, 376501, 376511, 376529, 376531, 376547, 376573, 376577, 376583, 376589, 376603, 376609, 376627, 376631, 376633, 376639, 376657, 376679, 376687, 376699, 376709, 376721, 376729, 376757, 376759, 376769, 376787, 376793, 376801, 376807, 376811, 376819, 376823, 376837, 376841, 376847, 376853, 376889, 376891, 376897, 376921, 376927, 376931, 376933, 376949, 376963, 376969, 377011, 377021, 377051, 377059, 377071, 377099, 377123, 377129, 377137, 377147, 377171, 377173, 377183, 377197, 377219, 377231, 377257, 377263, 377287, 377291, 377297, 377327, 377329, 377339, 377347, 377353, 377369, 377371, 377387, 377393, 377459, 377471, 377477, 377491, 377513, 377521, 377527, 377537, 377543, 377557, 377561, 377563, 377581, 377593, 377599, 377617, 377623, 377633, 377653, 377681, 377687, 377711, 377717, 377737, 377749, 377761, 377771, 377779, 377789, 377801, 377809, 377827, 377831, 377843, 377851, 377873, 377887, 377911, 377963, 377981, 377999, 378011, 378019, 378023, 378041, 378071, 378083, 378089, 378101, 378127, 378137, 378149, 378151, 378163, 378167, 378179, 378193, 378223, 378229, 378239, 378241, 378253, 378269, 378277, 378283, 378289, 378317, 378353, 378361, 378379, 378401, 378407, 378439, 378449, 378463, 378467, 378493, 378503, 378509, 378523, 378533, 378551, 378559, 378569, 378571, 378583, 378593, 378601, 378619, 378629, 378661, 378667, 378671, 378683, 378691, 378713, 378733, 378739, 378757, 378761, 378779, 378793, 378809, 378817, 378821, 378823, 378869, 378883, 378893, 378901, 378919, 378929, 378941, 378949, 378953, 378967, 378977, 378997, 379007, 379009, 379013, 379033, 379039, 379073, 379081, 379087, 379097, 379103, 379123, 379133, 379147, 379157, 379163, 379177, 379187, 379189, 379199, 379207, 379273, 379277, 379283, 379289, 379307, 379319, 379333, 379343, 379369, 379387, 379391, 379397, 379399, 379417, 379433, 379439, 379441, 379451, 379459, 379499, 379501, 379513, 379531, 379541, 379549, 379571, 379573, 379579, 379597, 379607, 379633, 379649, 379663, 379667, 379679, 379681, 379693, 379699, 379703, 379721, 379723, 379727, 379751, 379777, 379787, 379811, 379817, 379837, 379849, 379853, 379859, 379877, 379889, 379903, 379909, 379913, 379927, 379931, 379963, 379979, 379993, 379997, 379999, 380041, 380047, 380059, 380071, 380117, 380129, 380131, 380141, 380147, 380179, 380189, 380197, 380201, 380203, 380207, 380231, 380251, 380267, 380269, 380287, 380291, 380299, 380309, 380311, 380327, 380329, 380333, 380363, 380377, 380383, 380417, 380423, 380441, 380447, 380453, 380459, 380461, 380483, 380503, 380533, 380557, 380563, 380591, 380621, 380623, 380629, 380641, 380651, 380657, 380707, 380713, 380729, 380753, 380777, 380797, 380803, 380819, 380837, 380839, 380843, 380867, 380869, 380879, 380881, 380909, 380917, 380929, 380951, 380957, 380971, 380977, 380983, 381001, 381011, 381019, 381037, 381047, 381061, 381071, 381077, 381097, 381103, 381167, 381169, 381181, 381209, 381221, 381223, 381233, 381239, 381253, 381287, 381289, 381301, 381319, 381323, 381343, 381347, 381371, 381373, 381377, 381383, 381389, 381401, 381413, 381419, 381439, 381443, 381461, 381467, 381481, 381487, 381509, 381523, 381527, 381529, 381533, 381541, 381559, 381569, 381607, 381629, 381631, 381637, 381659, 381673, 381697, 381707, 381713, 381737, 381739, 381749, 381757, 381761, 381791, 381793, 381817, 381841, 381853, 381859, 381911, 381917, 381937, 381943, 381949, 381977, 381989, 381991, 382001, 382003, 382021, 382037, 382061, 382069, 382073, 382087, 382103, 382117, 382163, 382171, 382189, 382229, 382231, 382241, 382253, 382267, 382271, 382303, 382331, 382351, 382357, 382363, 382373, 382391, 382427, 382429, 382457, 382463, 382493, 382507, 382511, 382519, 382541, 382549, 382553, 382567, 382579, 382583, 382589, 382601, 382621, 382631, 382643, 382649, 382661, 382663, 382693, 382703, 382709, 382727, 382729, 382747, 382751, 382763, 382769, 382777, 382801, 382807, 382813, 382843, 382847, 382861, 382867, 382871, 382873, 382883, 382919, 382933, 382939, 382961, 382979, 382999, 383011, 383023, 383029, 383041, 383051, 383069, 383077, 383081, 383083, 383099, 383101, 383107, 383113, 383143, 383147, 383153, 383171, 383179, 383219, 383221, 383261, 383267, 383281, 383291, 383297, 383303, 383321, 383347, 383371, 383393, 383399, 383417, 383419, 383429, 383459, 383483, 383489, 383519, 383521, 383527, 383533, 383549, 383557, 383573, 383587, 383609, 383611, 383623, 383627, 383633, 383651, 383657, 383659, 383681, 383683, 383693, 383723, 383729, 383753, 383759, 383767, 383777, 383791, 383797, 383807, 383813, 383821, 383833, 383837, 383839, 383869, 383891, 383909, 383917, 383923, 383941, 383951, 383963, 383969, 383983, 383987, 384001, 384017, 384029, 384049, 384061, 384067, 384079, 384089, 384107, 384113, 384133, 384143, 384151, 384157, 384173, 384187, 384193, 384203, 384227, 384247, 384253, 384257, 384259, 384277, 384287, 384289, 384299, 384301, 384317, 384331, 384343, 384359, 384367, 384383, 384403, 384407, 384437, 384469, 384473, 384479, 384481, 384487, 384497, 384509, 384533, 384547, 384577, 384581, 384589, 384599, 384611, 384619, 384623, 384641, 384673, 384691, 384697, 384701, 384719, 384733, 384737, 384751, 384757, 384773, 384779, 384817, 384821, 384827, 384841, 384847, 384851, 384889, 384907, 384913, 384919, 384941, 384961, 384973, 385001, 385013, 385027, 385039, 385057, 385069, 385079, 385081, 385087, 385109, 385127, 385129, 385139, 385141, 385153, 385159, 385171, 385193, 385199, 385223, 385249, 385261, 385267, 385279, 385289, 385291, 385321, 385327, 385331, 385351, 385379, 385391, 385393, 385397, 385403, 385417, 385433, 385471, 385481, 385493, 385501, 385519, 385531, 385537, 385559, 385571, 385573, 385579, 385589, 385591, 385597, 385607, 385621, 385631, 385639, 385657, 385661, 385663, 385709, 385739, 385741, 385771, 385783, 385793, 385811, 385817, 385831, 385837, 385843, 385859, 385877, 385897, 385901, 385907, 385927, 385939, 385943, 385967, 385991, 385997, 386017, 386039, 386041, 386047, 386051, 386083, 386093, 386117, 386119, 386129, 386131, 386143, 386149, 386153, 386159, 386161, 386173, 386219, 386227, 386233, 386237, 386249, 386263, 386279, 386297, 386299, 386303, 386329, 386333, 386339, 386363, 386369, 386371, 386381, 386383, 386401, 386411, 386413, 386429, 386431, 386437, 386471, 386489, 386501, 386521, 386537, 386543, 386549, 386569, 386587, 386609, 386611, 386621, 386629, 386641, 386647, 386651, 386677, 386689, 386693, 386713, 386719, 386723, 386731, 386747, 386777, 386809, 386839, 386851, 386887, 386891, 386921, 386927, 386963, 386977, 386987, 386989, 386993, 387007, 387017, 387031, 387047, 387071, 387077, 387083, 387089, 387109, 387137, 387151, 387161, 387169, 387173, 387187, 387197, 387199, 387203, 387227, 387253, 387263, 387269, 387281, 387307, 387313, 387329, 387341, 387371, 387397, 387403, 387433, 387437, 387449, 387463, 387493, 387503, 387509, 387529, 387551, 387577, 387587, 387613, 387623, 387631, 387641, 387659, 387677, 387679, 387683, 387707, 387721, 387727, 387743, 387749, 387763, 387781, 387791, 387799, 387839, 387853, 387857, 387911, 387913, 387917, 387953, 387967, 387971, 387973, 387977, 388009, 388051, 388057, 388067, 388081, 388099, 388109, 388111, 388117, 388133, 388159, 388163, 388169, 388177, 388181, 388183, 388187, 388211, 388231, 388237, 388253, 388259, 388273, 388277, 388301, 388313, 388319, 388351, 388363, 388369, 388373, 388391, 388403, 388459, 388471, 388477, 388481, 388483, 388489, 388499, 388519, 388529, 388541, 388567, 388573, 388621, 388651, 388657, 388673, 388691, 388693, 388697, 388699, 388711, 388727, 388757, 388777, 388781, 388789, 388793, 388813, 388823, 388837, 388859, 388879, 388891, 388897, 388901, 388903, 388931, 388933, 388937, 388961, 388963, 388991, 389003, 389023, 389027, 389029, 389041, 389047, 389057, 389083, 389089, 389099, 389111, 389117, 389141, 389149, 389161, 389167, 389171, 389173, 389189, 389219, 389227, 389231, 389269, 389273, 389287, 389297, 389299, 389303, 389357, 389369, 389381, 389399, 389401, 389437, 389447, 389461, 389479, 389483, 389507, 389513, 389527, 389531, 389533, 389539, 389561, 389563, 389567, 389569, 389579, 389591, 389621, 389629, 389651, 389659, 389663, 389687, 389699, 389713, 389723, 389743, 389749, 389761, 389773, 389783, 389791, 389797, 389819, 389839, 389849, 389867, 389891, 389897, 389903, 389911, 389923, 389927, 389941, 389947, 389953, 389957, 389971, 389981, 389989, 389999, 390001, 390043, 390067, 390077, 390083, 390097, 390101, 390107, 390109, 390113, 390119, 390151, 390157, 390161, 390191, 390193, 390199, 390209, 390211, 390223, 390263, 390281, 390289, 390307, 390323, 390343, 390347, 390353, 390359, 390367, 390373, 390389, 390391, 390407, 390413, 390419, 390421, 390433, 390437, 390449, 390463, 390479, 390487, 390491, 390493, 390499, 390503, 390527, 390539, 390553, 390581, 390647, 390653, 390671, 390673, 390703, 390707, 390721, 390727, 390737, 390739, 390743, 390751, 390763, 390781, 390791, 390809, 390821, 390829, 390851, 390869, 390877, 390883, 390889, 390893, 390953, 390959, 390961, 390967, 390989, 390991, 391009, 391019, 391021, 391031, 391049, 391057, 391063, 391067, 391073, 391103, 391117, 391133, 391151, 391159, 391163, 391177, 391199, 391217, 391219, 391231, 391247, 391249, 391273, 391283, 391291, 391301, 391331, 391337, 391351, 391367, 391373, 391379, 391387, 391393, 391397, 391399, 391403, 391441, 391451, 391453, 391487, 391519, 391537, 391553, 391579, 391613, 391619, 391627, 391631, 391639, 391661, 391679, 391691, 391693, 391711, 391717, 391733, 391739, 391751, 391753, 391757, 391789, 391801, 391817, 391823, 391847, 391861, 391873, 391879, 391889, 391891, 391903, 391907, 391921, 391939, 391961, 391967, 391987, 391999, 392011, 392033, 392053, 392059, 392069, 392087, 392099, 392101, 392111, 392113, 392131, 392143, 392149, 392153, 392159, 392177, 392201, 392209, 392213, 392221, 392233, 392239, 392251, 392261, 392263, 392267, 392269, 392279, 392281, 392297, 392299, 392321, 392333, 392339, 392347, 392351, 392363, 392383, 392389, 392423, 392437, 392443, 392467, 392473, 392477, 392489, 392503, 392519, 392531, 392543, 392549, 392569, 392593, 392599, 392611, 392629, 392647, 392663, 392669, 392699, 392723, 392737, 392741, 392759, 392761, 392767, 392803, 392807, 392809, 392827, 392831, 392837, 392849, 392851, 392857, 392879, 392893, 392911, 392923, 392927, 392929, 392957, 392963, 392969, 392981, 392983, 393007, 393013, 393017, 393031, 393059, 393073, 393077, 393079, 393083, 393097, 393103, 393109, 393121, 393137, 393143, 393157, 393161, 393181, 393187, 393191, 393203, 393209, 393241, 393247, 393257, 393271, 393287, 393299, 393301, 393311, 393331, 393361, 393373, 393377, 393383, 393401, 393403, 393413, 393451, 393473, 393479, 393487, 393517, 393521, 393539, 393541, 393551, 393557, 393571, 393577, 393581, 393583, 393587, 393593, 393611, 393629, 393637, 393649, 393667, 393671, 393677, 393683, 393697, 393709, 393713, 393721, 393727, 393739, 393749, 393761, 393779, 393797, 393847, 393853, 393857, 393859, 393863, 393871, 393901, 393919, 393929, 393931, 393947, 393961, 393977, 393989, 393997, 394007, 394019, 394039, 394049, 394063, 394073, 394099, 394123, 394129, 394153, 394157, 394169, 394187, 394201, 394211, 394223, 394241, 394249, 394259, 394271, 394291, 394319, 394327, 394357, 394363, 394367, 394369, 394393, 394409, 394411, 394453, 394481, 394489, 394501, 394507, 394523, 394529, 394549, 394571, 394577, 394579, 394601, 394619, 394631, 394633, 394637, 394643, 394673, 394699, 394717, 394721, 394727, 394729, 394733, 394739, 394747, 394759, 394787, 394811, 394813, 394817, 394819, 394829, 394837, 394861, 394879, 394897, 394931, 394943, 394963, 394967, 394969, 394981, 394987, 394993, 395023, 395027, 395039, 395047, 395069, 395089, 395093, 395107, 395111, 395113, 395119, 395137, 395141, 395147, 395159, 395173, 395189, 395191, 395201, 395231, 395243, 395251, 395261, 395273, 395287, 395293, 395303, 395309, 395321, 395323, 395377, 395383, 395407, 395429, 395431, 395443, 395449, 395453, 395459, 395491, 395509, 395513, 395533, 395537, 395543, 395581, 395597, 395611, 395621, 395627, 395657, 395671, 395677, 395687, 395701, 395719, 395737, 395741, 395749, 395767, 395803, 395849, 395851, 395873, 395887, 395891, 395897, 395909, 395921, 395953, 395959, 395971, 396001, 396029, 396031, 396041, 396043, 396061, 396079, 396091, 396103, 396107, 396119, 396157, 396173, 396181, 396197, 396199, 396203, 396217, 396239, 396247, 396259, 396269, 396293, 396299, 396301, 396311, 396323, 396349, 396353, 396373, 396377, 396379, 396413, 396427, 396437, 396443, 396449, 396479, 396509, 396523, 396527, 396533, 396541, 396547, 396563, 396577, 396581, 396601, 396619, 396623, 396629, 396631, 396637, 396647, 396667, 396679, 396703, 396709, 396713, 396719, 396733, 396833, 396871, 396881, 396883, 396887, 396919, 396931, 396937, 396943, 396947, 396953, 396971, 396983, 396997, 397013, 397027, 397037, 397051, 397057, 397063, 397073, 397093, 397099, 397127, 397151, 397153, 397181, 397183, 397211, 397217, 397223, 397237, 397253, 397259, 397283, 397289, 397297, 397301, 397303, 397337, 397351, 397357, 397361, 397373, 397379, 397427, 397429, 397433, 397459, 397469, 397489, 397493, 397517, 397519, 397541, 397543, 397547, 397549, 397567, 397589, 397591, 397597, 397633, 397643, 397673, 397687, 397697, 397721, 397723, 397729, 397751, 397753, 397757, 397759, 397763, 397799, 397807, 397811, 397829, 397849, 397867, 397897, 397907, 397921, 397939, 397951, 397963, 397973, 397981, 398011, 398023, 398029, 398033, 398039, 398053, 398059, 398063, 398077, 398087, 398113, 398117, 398119, 398129, 398143, 398149, 398171, 398207, 398213, 398219, 398227, 398249, 398261, 398267, 398273, 398287, 398303, 398311, 398323, 398339, 398341, 398347, 398353, 398357, 398369, 398393, 398407, 398417, 398423, 398441, 398459, 398467, 398471, 398473, 398477, 398491, 398509, 398539, 398543, 398549, 398557, 398569, 398581, 398591, 398609, 398611, 398621, 398627, 398669, 398681, 398683, 398693, 398711, 398729, 398731, 398759, 398771, 398813, 398819, 398821, 398833, 398857, 398863, 398887, 398903, 398917, 398921, 398933, 398941, 398969, 398977, 398989, 399023, 399031, 399043, 399059, 399067, 399071, 399079, 399097, 399101, 399107, 399131, 399137, 399149, 399151, 399163, 399173, 399181, 399197, 399221, 399227, 399239, 399241, 399263, 399271, 399277, 399281, 399283, 399353, 399379, 399389, 399391, 399401, 399403, 399409, 399433, 399439, 399473, 399481, 399491, 399493, 399499, 399523, 399527, 399541, 399557, 399571, 399577, 399583, 399587, 399601, 399613, 399617, 399643, 399647, 399667, 399677, 399689, 399691, 399719, 399727, 399731, 399739, 399757, 399761, 399769, 399781, 399787, 399793, 399851, 399853, 399871, 399887, 399899, 399911, 399913, 399937, 399941, 399953, 399979, 399983, 399989, 400009, 400031, 400033, 400051, 400067, 400069, 400087, 400093, 400109, 400123, 400151, 400157, 400187, 400199, 400207, 400217, 400237, 400243, 400247, 400249, 400261, 400277, 400291, 400297, 400307, 400313, 400321, 400331, 400339, 400381, 400391, 400409, 400417, 400429, 400441, 400457, 400471, 400481, 400523, 400559, 400579, 400597, 400601, 400607, 400619, 400643, 400651, 400657, 400679, 400681, 400703, 400711, 400721, 400723, 400739, 400753, 400759, 400823, 400837, 400849, 400853, 400859, 400871, 400903, 400927, 400931, 400943, 400949, 400963, 400997, 401017, 401029, 401039, 401053, 401057, 401069, 401077, 401087, 401101, 401113, 401119, 401161, 401173, 401179, 401201, 401209, 401231, 401237, 401243, 401279, 401287, 401309, 401311, 401321, 401329, 401341, 401347, 401371, 401381, 401393, 401407, 401411, 401417, 401473, 401477, 401507, 401519, 401537, 401539, 401551, 401567, 401587, 401593, 401627, 401629, 401651, 401669, 401671, 401689, 401707, 401711, 401743, 401771, 401773, 401809, 401813, 401827, 401839, 401861, 401867, 401887, 401903, 401909, 401917, 401939, 401953, 401957, 401959, 401981, 401987, 401993, 402023, 402029, 402037, 402043, 402049, 402053, 402071, 402089, 402091, 402107, 402131, 402133, 402137, 402139, 402197, 402221, 402223, 402239, 402253, 402263, 402277, 402299, 402307, 402313, 402329, 402331, 402341, 402343, 402359, 402361, 402371, 402379, 402383, 402403, 402419, 402443, 402487, 402503, 402511, 402517, 402527, 402529, 402541, 402551, 402559, 402581, 402583, 402587, 402593, 402601, 402613, 402631, 402691, 402697, 402739, 402751, 402757, 402761, 402763, 402767, 402769, 402797, 402803, 402817, 402823, 402847, 402851, 402859, 402863, 402869, 402881, 402923, 402943, 402947, 402949, 402991, 403001, 403003, 403037, 403043, 403049, 403057, 403061, 403063, 403079, 403097, 403103, 403133, 403141, 403159, 403163, 403181, 403219, 403241, 403243, 403253, 403261, 403267, 403289, 403301, 403309, 403327, 403331, 403339, 403363, 403369, 403387, 403391, 403433, 403439, 403483, 403499, 403511, 403537, 403547, 403549, 403553, 403567, 403577, 403591, 403603, 403607, 403621, 403649, 403661, 403679, 403681, 403687, 403703, 403717, 403721, 403729, 403757, 403783, 403787, 403817, 403829, 403831, 403849, 403861, 403867, 403877, 403889, 403901, 403933, 403951, 403957, 403969, 403979, 403981, 403993, 404009, 404011, 404017, 404021, 404029, 404051, 404081, 404099, 404113, 404119, 404123, 404161, 404167, 404177, 404189, 404191, 404197, 404213, 404221, 404249, 404251, 404267, 404269, 404273, 404291, 404309, 404321, 404323, 404357, 404381, 404387, 404389, 404399, 404419, 404423, 404429, 404431, 404449, 404461, 404483, 404489, 404497, 404507, 404513, 404527, 404531, 404533, 404539, 404557, 404597, 404671, 404693, 404699, 404713, 404773, 404779, 404783, 404819, 404827, 404837, 404843, 404849, 404851, 404941, 404951, 404959, 404969, 404977, 404981, 404983, 405001, 405011, 405029, 405037, 405047, 405049, 405071, 405073, 405089, 405091, 405143, 405157, 405179, 405199, 405211, 405221, 405227, 405239, 405241, 405247, 405253, 405269, 405277, 405287, 405299, 405323, 405341, 405343, 405347, 405373, 405401, 405407, 405413, 405437, 405439, 405473, 405487, 405491, 405497, 405499, 405521, 405527, 405529, 405541, 405553, 405577, 405599, 405607, 405611, 405641, 405659, 405667, 405677, 405679, 405683, 405689, 405701, 405703, 405709, 405719, 405731, 405749, 405763, 405767, 405781, 405799, 405817, 405827, 405829, 405857, 405863, 405869, 405871, 405893, 405901, 405917, 405947, 405949, 405959, 405967, 405989, 405991, 405997, 406013, 406027, 406037, 406067, 406073, 406093, 406117, 406123, 406169, 406171, 406177, 406183, 406207, 406247, 406253, 406267, 406271, 406309, 406313, 406327, 406331, 406339, 406349, 406361, 406381, 406397, 406403, 406423, 406447, 406481, 406499, 406501, 406507, 406513, 406517, 406531, 406547, 406559, 406561, 406573, 406577, 406579, 406583, 406591, 406631, 406633, 406649, 406661, 406673, 406697, 406699, 406717, 406729, 406739, 406789, 406807, 406811, 406817, 406837, 406859, 406873, 406883, 406907, 406951, 406969, 406981, 406993, 407023, 407047, 407059, 407083, 407119, 407137, 407149, 407153, 407177, 407179, 407191, 407203, 407207, 407219, 407221, 407233, 407249, 407257, 407263, 407273, 407287, 407291, 407299, 407311, 407317, 407321, 407347, 407357, 407359, 407369, 407377, 407383, 407401, 407437, 407471, 407483, 407489, 407501, 407503, 407509, 407521, 407527, 407567, 407573, 407579, 407587, 407599, 407621, 407633, 407639, 407651, 407657, 407669, 407699, 407707, 407713, 407717, 407723, 407741, 407747, 407783, 407789, 407791, 407801, 407807, 407821, 407833, 407843, 407857, 407861, 407879, 407893, 407899, 407917, 407923, 407947, 407959, 407969, 407971, 407977, 407993, 408011, 408019, 408041, 408049, 408071, 408077, 408091, 408127, 408131, 408137, 408169, 408173, 408197, 408203, 408209, 408211, 408217, 408223, 408229, 408241, 408251, 408263, 408271, 408283, 408311, 408337, 408341, 408347, 408361, 408379, 408389, 408403, 408413, 408427, 408431, 408433, 408437, 408461, 408469, 408479, 408491, 408497, 408533, 408539, 408553, 408563, 408607, 408623, 408631, 408637, 408643, 408659, 408677, 408689, 408691, 408701, 408703, 408713, 408719, 408743, 408763, 408769, 408773, 408787, 408803, 408809, 408817, 408841, 408857, 408869, 408911, 408913, 408923, 408943, 408953, 408959, 408971, 408979, 408997, 409007, 409021, 409027, 409033, 409043, 409063, 409069, 409081, 409099, 409121, 409153, 409163, 409177, 409187, 409217, 409237, 409259, 409261, 409267, 409271, 409289, 409291, 409327, 409333, 409337, 409349, 409351, 409369, 409379, 409391, 409397, 409429, 409433, 409441, 409463, 409471, 409477, 409483, 409499, 409517, 409523, 409529, 409543, 409573, 409579, 409589, 409597, 409609, 409639, 409657, 409691, 409693, 409709, 409711, 409723, 409729, 409733, 409753, 409769, 409777, 409781, 409813, 409817, 409823, 409831, 409841, 409861, 409867, 409879, 409889, 409891, 409897, 409901, 409909, 409933, 409943, 409951, 409961, 409967, 409987, 409993, 409999, 410009, 410029, 410063, 410087, 410093, 410117, 410119, 410141, 410143, 410149, 410171, 410173, 410203, 410231, 410233, 410239, 410243, 410257, 410279, 410281, 410299, 410317, 410323, 410339, 410341, 410353, 410359, 410383, 410387, 410393, 410401, 410411, 410413, 410453, 410461, 410477, 410489, 410491, 410497, 410507, 410513, 410519, 410551, 410561, 410587, 410617, 410621, 410623, 410629, 410651, 410659, 410671, 410687, 410701, 410717, 410731, 410741, 410747, 410749, 410759, 410783, 410789, 410801, 410807, 410819, 410833, 410857, 410899, 410903, 410929, 410953, 410983, 410999, 411001, 411007, 411011, 411013, 411031, 411041, 411049, 411067, 411071, 411083, 411101, 411113, 411119, 411127, 411143, 411157, 411167, 411193, 411197, 411211, 411233, 411241, 411251, 411253, 411259, 411287, 411311, 411337, 411347, 411361, 411371, 411379, 411409, 411421, 411443, 411449, 411469, 411473, 411479, 411491, 411503, 411527, 411529, 411557, 411563, 411569, 411577, 411583, 411589, 411611, 411613, 411617, 411637, 411641, 411667, 411679, 411683, 411703, 411707, 411709, 411721, 411727, 411737, 411739, 411743, 411751, 411779, 411799, 411809, 411821, 411823, 411833, 411841, 411883, 411919, 411923, 411937, 411941, 411947, 411967, 411991, 412001, 412007, 412019, 412031, 412033, 412037, 412039, 412051, 412067, 412073, 412081, 412099, 412109, 412123, 412127, 412133, 412147, 412157, 412171, 412187, 412189, 412193, 412201, 412211, 412213, 412219, 412249, 412253, 412273, 412277, 412289, 412303, 412333, 412339, 412343, 412387, 412397, 412411, 412457, 412463, 412481, 412487, 412493, 412537, 412561, 412567, 412571, 412589, 412591, 412603, 412609, 412619, 412627, 412637, 412639, 412651, 412663, 412667, 412717, 412739, 412771, 412793, 412807, 412831, 412849, 412859, 412891, 412901, 412903, 412939, 412943, 412949, 412967, 412987, 413009, 413027, 413033, 413053, 413069, 413071, 413081, 413087, 413089, 413093, 413111, 413113, 413129, 413141, 413143, 413159, 413167, 413183, 413197, 413201, 413207, 413233, 413243, 413251, 413263, 413267, 413293, 413299, 413353, 413411, 413417, 413429, 413443, 413461, 413477, 413521, 413527, 413533, 413537, 413551, 413557, 413579, 413587, 413597, 413629, 413653, 413681, 413683, 413689, 413711, 413713, 413719, 413737, 413753, 413759, 413779, 413783, 413807, 413827, 413849, 413863, 413867, 413869, 413879, 413887, 413911, 413923, 413951, 413981, 414013, 414017, 414019, 414031, 414049, 414053, 414061, 414077, 414083, 414097, 414101, 414107, 414109, 414131, 414157, 414179, 414199, 414203, 414209, 414217, 414221, 414241, 414259, 414269, 414277, 414283, 414311, 414313, 414329, 414331, 414347, 414361, 414367, 414383, 414389, 414397, 414413, 414431, 414433, 414451, 414457, 414461, 414467, 414487, 414503, 414521, 414539, 414553, 414559, 414571, 414577, 414607, 414611, 414629, 414641, 414643, 414653, 414677, 414679, 414683, 414691, 414697, 414703, 414707, 414709, 414721, 414731, 414737, 414763, 414767, 414769, 414773, 414779, 414793, 414803, 414809, 414833, 414857, 414871, 414889, 414893, 414899, 414913, 414923, 414929, 414949, 414959, 414971, 414977, 414991, 415013, 415031, 415039, 415061, 415069, 415073, 415087, 415097, 415109, 415111, 415133, 415141, 415147, 415153, 415159, 415171, 415187, 415189, 415201, 415213, 415231, 415253, 415271, 415273, 415319, 415343, 415379, 415381, 415391, 415409, 415427, 415447, 415469, 415477, 415489, 415507, 415517, 415523, 415543, 415553, 415559, 415567, 415577, 415603, 415607, 415609, 415627, 415631, 415643, 415651, 415661, 415669, 415673, 415687, 415691, 415697, 415717, 415721, 415729, 415759, 415783, 415787, 415799, 415801, 415819, 415823, 415861, 415873, 415879, 415901, 415931, 415937, 415949, 415951, 415957, 415963, 415969, 415979, 415993, 415999, 416011, 416023, 416071, 416077, 416089, 416107, 416147, 416149, 416153, 416159, 416167, 416201, 416219, 416239, 416243, 416249, 416257, 416263, 416281, 416291, 416333, 416359, 416387, 416389, 416393, 416399, 416401, 416407, 416413, 416417, 416419, 416441, 416443, 416459, 416473, 416477, 416491, 416497, 416501, 416503, 416513, 416531, 416543, 416573, 416579, 416593, 416621, 416623, 416629, 416659, 416677, 416693, 416719, 416761, 416797, 416821, 416833, 416839, 416849, 416851, 416873, 416881, 416887, 416947, 416957, 416963, 416989, 417007, 417017, 417019, 417023, 417037, 417089, 417097, 417113, 417119, 417127, 417133, 417161, 417169, 417173, 417181, 417187, 417191, 417203, 417217, 417227, 417239, 417251, 417271, 417283, 417293, 417311, 417317, 417331, 417337, 417371, 417377, 417379, 417383, 417419, 417437, 417451, 417457, 417479, 417491, 417493, 417509, 417511, 417523, 417541, 417553, 417559, 417577, 417581, 417583, 417617, 417623, 417631, 417643, 417649, 417671, 417691, 417719, 417721, 417727, 417731, 417733, 417737, 417751, 417763, 417773, 417793, 417811, 417821, 417839, 417863, 417869, 417881, 417883, 417899, 417931, 417941, 417947, 417953, 417959, 417961, 417983, 417997, 418007, 418009, 418027, 418031, 418043, 418051, 418069, 418073, 418079, 418087, 418109, 418129, 418157, 418169, 418177, 418181, 418189, 418199, 418207, 418219, 418259, 418273, 418279, 418289, 418303, 418321, 418331, 418337, 418339, 418343, 418349, 418351, 418357, 418373, 418381, 418391, 418423, 418427, 418447, 418459, 418471, 418493, 418511, 418553, 418559, 418597, 418601, 418603, 418631, 418633, 418637, 418657, 418667, 418699, 418709, 418721, 418739, 418751, 418763, 418771, 418783, 418787, 418793, 418799, 418811, 418813, 418819, 418837, 418843, 418849, 418861, 418867, 418871, 418883, 418889, 418909, 418921, 418927, 418933, 418939, 418961, 418981, 418987, 418993, 418997, 419047, 419051, 419053, 419057, 419059, 419087, 419141, 419147, 419161, 419171, 419183, 419189, 419191, 419201, 419231, 419249, 419261, 419281, 419291, 419297, 419303, 419317, 419329, 419351, 419383, 419401, 419417, 419423, 419429, 419443, 419449, 419459, 419467, 419473, 419477, 419483, 419491, 419513, 419527, 419537, 419557, 419561, 419563, 419567, 419579, 419591, 419597, 419599, 419603, 419609, 419623, 419651, 419687, 419693, 419701, 419711, 419743, 419753, 419777, 419789, 419791, 419801, 419803, 419821, 419827, 419831, 419873, 419893, 419921, 419927, 419929, 419933, 419953, 419959, 419999, 420001, 420029, 420037, 420041, 420047, 420073, 420097, 420103, 420149, 420163, 420191, 420193, 420221, 420241, 420253, 420263, 420269, 420271, 420293, 420307, 420313, 420317, 420319, 420323, 420331, 420341, 420349, 420353, 420361, 420367, 420383, 420397, 420419, 420421, 420439, 420457, 420467, 420479, 420481, 420499, 420503, 420521, 420551, 420557, 420569, 420571, 420593, 420599, 420613, 420671, 420677, 420683, 420691, 420731, 420737, 420743, 420757, 420769, 420779, 420781, 420799, 420803, 420809, 420811, 420851, 420853, 420857, 420859, 420899, 420919, 420929, 420941, 420967, 420977, 420997, 421009, 421019, 421033, 421037, 421049, 421079, 421081, 421093, 421103, 421121, 421123, 421133, 421147, 421159, 421163, 421177, 421181, 421189, 421207, 421241, 421273, 421279, 421303, 421313, 421331, 421339, 421349, 421361, 421381, 421397, 421409, 421417, 421423, 421433, 421453, 421459, 421469, 421471, 421483, 421493, 421501, 421517, 421559, 421607, 421609, 421621, 421633, 421639, 421643, 421657, 421661, 421691, 421697, 421699, 421703, 421709, 421711, 421717, 421727, 421739, 421741, 421783, 421801, 421807, 421831, 421847, 421891, 421907, 421913, 421943, 421973, 421987, 421997, 422029, 422041, 422057, 422063, 422069, 422077, 422083, 422087, 422089, 422099, 422101, 422111, 422113, 422129, 422137, 422141, 422183, 422203, 422209, 422231, 422239, 422243, 422249, 422267, 422287, 422291, 422309, 422311, 422321, 422339, 422353, 422363, 422369, 422377, 422393, 422407, 422431, 422453, 422459, 422479, 422537, 422549, 422551, 422557, 422563, 422567, 422573, 422581, 422621, 422627, 422657, 422689, 422701, 422707, 422711, 422749, 422753, 422759, 422761, 422789, 422797, 422803, 422827, 422857, 422861, 422867, 422869, 422879, 422881, 422893, 422897, 422899, 422911, 422923, 422927, 422969, 422987, 423001, 423013, 423019, 423043, 423053, 423061, 423067, 423083, 423091, 423097, 423103, 423109, 423121, 423127, 423133, 423173, 423179, 423191, 423209, 423221, 423229, 423233, 423251, 423257, 423259, 423277, 423281, 423287, 423289, 423299, 423307, 423323, 423341, 423347, 423389, 423403, 423413, 423427, 423431, 423439, 423457, 423461, 423463, 423469, 423481, 423497, 423503, 423509, 423541, 423547, 423557, 423559, 423581, 423587, 423601, 423617, 423649, 423667, 423697, 423707, 423713, 423727, 423749, 423751, 423763, 423769, 423779, 423781, 423791, 423803, 423823, 423847, 423853, 423859, 423869, 423883, 423887, 423931, 423949, 423961, 423977, 423989, 423991, 424001, 424003, 424007, 424019, 424027, 424037, 424079, 424091, 424093, 424103, 424117, 424121, 424129, 424139, 424147, 424157, 424163, 424169, 424187, 424199, 424223, 424231, 424243, 424247, 424261, 424267, 424271, 424273, 424313, 424331, 424339, 424343, 424351, 424397, 424423, 424429, 424433, 424451, 424471, 424481, 424493, 424519, 424537, 424547, 424549, 424559, 424573, 424577, 424597, 424601, 424639, 424661, 424667, 424679, 424687, 424693, 424709, 424727, 424729, 424757, 424769, 424771, 424777, 424811, 424817, 424819, 424829, 424841, 424843, 424849, 424861, 424867, 424889, 424891, 424903, 424909, 424913, 424939, 424961, 424967, 424997, 425003, 425027, 425039, 425057, 425059, 425071, 425083, 425101, 425107, 425123, 425147, 425149, 425189, 425197, 425207, 425233, 425237, 425251, 425273, 425279, 425281, 425291, 425297, 425309, 425317, 425329, 425333, 425363, 425377, 425387, 425393, 425417, 425419, 425423, 425441, 425443, 425471, 425473, 425489, 425501, 425519, 425521, 425533, 425549, 425563, 425591, 425603, 425609, 425641, 425653, 425681, 425701, 425713, 425779, 425783, 425791, 425801, 425813, 425819, 425837, 425839, 425851, 425857, 425861, 425869, 425879, 425899, 425903, 425911, 425939, 425959, 425977, 425987, 425989, 426007, 426011, 426061, 426073, 426077, 426089, 426091, 426103, 426131, 426161, 426163, 426193, 426197, 426211, 426229, 426233, 426253, 426287, 426301, 426311, 426319, 426331, 426353, 426383, 426389, 426401, 426407, 426421, 426427, 426469, 426487, 426527, 426541, 426551, 426553, 426563, 426583, 426611, 426631, 426637, 426641, 426661, 426691, 426697, 426707, 426709, 426731, 426737, 426739, 426743, 426757, 426761, 426763, 426773, 426779, 426787, 426799, 426841, 426859, 426863, 426871, 426889, 426893, 426913, 426917, 426919, 426931, 426941, 426971, 426973, 426997, 427001, 427013, 427039, 427043, 427067, 427069, 427073, 427079, 427081, 427103, 427117, 427151, 427169, 427181, 427213, 427237, 427241, 427243, 427247, 427249, 427279, 427283, 427307, 427309, 427327, 427333, 427351, 427369, 427379, 427381, 427403, 427417, 427421, 427423, 427429, 427433, 427439, 427447, 427451, 427457, 427477, 427513, 427517, 427523, 427529, 427541, 427579, 427591, 427597, 427619, 427621, 427681, 427711, 427717, 427723, 427727, 427733, 427751, 427781, 427787, 427789, 427813, 427849, 427859, 427877, 427879, 427883, 427913, 427919, 427939, 427949, 427951, 427957, 427967, 427969, 427991, 427993, 427997, 428003, 428023, 428027, 428033, 428039, 428041, 428047, 428083, 428093, 428137, 428143, 428147, 428149, 428161, 428167, 428173, 428177, 428221, 428227, 428231, 428249, 428251, 428273, 428297, 428299, 428303, 428339, 428353, 428369, 428401, 428411, 428429, 428471, 428473, 428489, 428503, 428509, 428531, 428539, 428551, 428557, 428563, 428567, 428569, 428579, 428629, 428633, 428639, 428657, 428663, 428671, 428677, 428683, 428693, 428731, 428741, 428759, 428777, 428797, 428801, 428807, 428809, 428833, 428843, 428851, 428863, 428873, 428899, 428951, 428957, 428977, 429007, 429017, 429043, 429083, 429101, 429109, 429119, 429127, 429137, 429139, 429161, 429181, 429197, 429211, 429217, 429223, 429227, 429241, 429259, 429271, 429277, 429281, 429283, 429329, 429347, 429349, 429361, 429367, 429389, 429397, 429409, 429413, 429427, 429431, 429449, 429463, 429467, 429469, 429487, 429497, 429503, 429509, 429511, 429521, 429529, 429547, 429551, 429563, 429581, 429587, 429589, 429599, 429631, 429643, 429659, 429661, 429673, 429677, 429679, 429683, 429701, 429719, 429727, 429731, 429733, 429773, 429791, 429797, 429817, 429823, 429827, 429851, 429853, 429881, 429887, 429889, 429899, 429901, 429907, 429911, 429917, 429929, 429931, 429937, 429943, 429953, 429971, 429973, 429991, 430007, 430009, 430013, 430019, 430057, 430061, 430081, 430091, 430093, 430121, 430139, 430147, 430193, 430259, 430267, 430277, 430279, 430289, 430303, 430319, 430333, 430343, 430357, 430393, 430411, 430427, 430433, 430453, 430487, 430499, 430511, 430513, 430517, 430543, 430553, 430571, 430579, 430589, 430601, 430603, 430649, 430663, 430691, 430697, 430699, 430709, 430723, 430739, 430741, 430747, 430751, 430753, 430769, 430783, 430789, 430799, 430811, 430819, 430823, 430841, 430847, 430861, 430873, 430879, 430883, 430891, 430897, 430907, 430909, 430921, 430949, 430957, 430979, 430981, 430987, 430999, 431017, 431021, 431029, 431047, 431051, 431063, 431077, 431083, 431099, 431107, 431141, 431147, 431153, 431173, 431191, 431203, 431213, 431219, 431237, 431251, 431257, 431267, 431269, 431287, 431297, 431311, 431329, 431339, 431363, 431369, 431377, 431381, 431399, 431423, 431429, 431441, 431447, 431449, 431479, 431513, 431521, 431533, 431567, 431581, 431597, 431603, 431611, 431617, 431621, 431657, 431659, 431663, 431671, 431693, 431707, 431729, 431731, 431759, 431777, 431797, 431801, 431803, 431807, 431831, 431833, 431857, 431863, 431867, 431869, 431881, 431887, 431891, 431903, 431911, 431929, 431933, 431947, 431983, 431993, 432001, 432007, 432023, 432031, 432037, 432043, 432053, 432059, 432067, 432073, 432097, 432121, 432137, 432139, 432143, 432149, 432161, 432163, 432167, 432199, 432203, 432227, 432241, 432251, 432277, 432281, 432287, 432301, 432317, 432323, 432337, 432343, 432349, 432359, 432373, 432389, 432391, 432401, 432413, 432433, 432437, 432449, 432457, 432479, 432491, 432499, 432503, 432511, 432527, 432539, 432557, 432559, 432569, 432577, 432587, 432589, 432613, 432631, 432637, 432659, 432661, 432713, 432721, 432727, 432737, 432743, 432749, 432781, 432793, 432797, 432799, 432833, 432847, 432857, 432869, 432893, 432907, 432923, 432931, 432959, 432961, 432979, 432983, 432989, 433003, 433033, 433049, 433051, 433061, 433073, 433079, 433087, 433093, 433099, 433117, 433123, 433141, 433151, 433187, 433193, 433201, 433207, 433229, 433241, 433249, 433253, 433259, 433261, 433267, 433271, 433291, 433309, 433319, 433337, 433351, 433357, 433361, 433369, 433373, 433393, 433399, 433421, 433429, 433439, 433453, 433469, 433471, 433501, 433507, 433513, 433549, 433571, 433577, 433607, 433627, 433633, 433639, 433651, 433661, 433663, 433673, 433679, 433681, 433703, 433723, 433729, 433747, 433759, 433777, 433781, 433787, 433813, 433817, 433847, 433859, 433861, 433877, 433883, 433889, 433931, 433943, 433963, 433967, 433981, 434009, 434011, 434029, 434039, 434081, 434087, 434107, 434111, 434113, 434117, 434141, 434167, 434179, 434191, 434201, 434209, 434221, 434237, 434243, 434249, 434261, 434267, 434293, 434297, 434303, 434311, 434323, 434347, 434353, 434363, 434377, 434383, 434387, 434389, 434407, 434411, 434431, 434437, 434459, 434461, 434471, 434479, 434501, 434509, 434521, 434561, 434563, 434573, 434593, 434597, 434611, 434647, 434659, 434683, 434689, 434699, 434717, 434719, 434743, 434761, 434783, 434803, 434807, 434813, 434821, 434827, 434831, 434839, 434849, 434857, 434867, 434873, 434881, 434909, 434921, 434923, 434927, 434933, 434939, 434947, 434957, 434963, 434977, 434981, 434989, 435037, 435041, 435059, 435103, 435107, 435109, 435131, 435139, 435143, 435151, 435161, 435179, 435181, 435187, 435191, 435221, 435223, 435247, 435257, 435263, 435277, 435283, 435287, 435307, 435317, 435343, 435349, 435359, 435371, 435397, 435401, 435403, 435419, 435427, 435437, 435439, 435451, 435481, 435503, 435529, 435541, 435553, 435559, 435563, 435569, 435571, 435577, 435583, 435593, 435619, 435623, 435637, 435641, 435647, 435649, 435653, 435661, 435679, 435709, 435731, 435733, 435739, 435751, 435763, 435769, 435779, 435817, 435839, 435847, 435857, 435859, 435881, 435889, 435893, 435907, 435913, 435923, 435947, 435949, 435973, 435983, 435997, 436003, 436013, 436027, 436061, 436081, 436087, 436091, 436097, 436127, 436147, 436151, 436157, 436171, 436181, 436217, 436231, 436253, 436273, 436279, 436283, 436291, 436307, 436309, 436313, 436343, 436357, 436399, 436417, 436427, 436439, 436459, 436463, 436477, 436481, 436483, 436507, 436523, 436529, 436531, 436547, 436549, 436571, 436591, 436607, 436621, 436627, 436649, 436651, 436673, 436687, 436693, 436717, 436727, 436729, 436739, 436741, 436757, 436801, 436811, 436819, 436831, 436841, 436853, 436871, 436889, 436913, 436957, 436963, 436967, 436973, 436979, 436993, 436999, 437011, 437033, 437071, 437077, 437083, 437093, 437111, 437113, 437137, 437141, 437149, 437153, 437159, 437191, 437201, 437219, 437237, 437243, 437263, 437273, 437279, 437287, 437293, 437321, 437351, 437357, 437363, 437387, 437389, 437401, 437413, 437467, 437471, 437473, 437497, 437501, 437509, 437519, 437527, 437533, 437539, 437543, 437557, 437587, 437629, 437641, 437651, 437653, 437677, 437681, 437687, 437693, 437719, 437729, 437743, 437753, 437771, 437809, 437819, 437837, 437849, 437861, 437867, 437881, 437909, 437923, 437947, 437953, 437959, 437977, 438001, 438017, 438029, 438047, 438049, 438091, 438131, 438133, 438143, 438169, 438203, 438211, 438223, 438233, 438241, 438253, 438259, 438271, 438281, 438287, 438301, 438313, 438329, 438341, 438377, 438391, 438401, 438409, 438419, 438439, 438443, 438467, 438479, 438499, 438517, 438521, 438523, 438527, 438533, 438551, 438569, 438589, 438601, 438611, 438623, 438631, 438637, 438661, 438667, 438671, 438701, 438707, 438721, 438733, 438761, 438769, 438793, 438827, 438829, 438833, 438847, 438853, 438869, 438877, 438887, 438899, 438913, 438937, 438941, 438953, 438961, 438967, 438979, 438983, 438989, 439007, 439009, 439063, 439081, 439123, 439133, 439141, 439157, 439163, 439171, 439183, 439199, 439217, 439253, 439273, 439279, 439289, 439303, 439339, 439349, 439357, 439367, 439381, 439409, 439421, 439427, 439429, 439441, 439459, 439463, 439471, 439493, 439511, 439519, 439541, 439559, 439567, 439573, 439577, 439583, 439601, 439613, 439631, 439639, 439661, 439667, 439687, 439693, 439697, 439709, 439723, 439729, 439753, 439759, 439763, 439771, 439781, 439787, 439799, 439811, 439823, 439849, 439853, 439861, 439867, 439883, 439891, 439903, 439919, 439949, 439961, 439969, 439973, 439981, 439991, 440009, 440023, 440039, 440047, 440087, 440093, 440101, 440131, 440159, 440171, 440177, 440179, 440183, 440203, 440207, 440221, 440227, 440239, 440261, 440269, 440281, 440303, 440311, 440329, 440333, 440339, 440347, 440371, 440383, 440389, 440393, 440399, 440431, 440441, 440443, 440471, 440497, 440501, 440507, 440509, 440527, 440537, 440543, 440549, 440551, 440567, 440569, 440579, 440581, 440641, 440651, 440653, 440669, 440677, 440681, 440683, 440711, 440717, 440723, 440731, 440753, 440761, 440773, 440807, 440809, 440821, 440831, 440849, 440863, 440893, 440903, 440911, 440939, 440941, 440953, 440959, 440983, 440987, 440989, 441011, 441029, 441041, 441043, 441053, 441073, 441079, 441101, 441107, 441109, 441113, 441121, 441127, 441157, 441169, 441179, 441187, 441191, 441193, 441229, 441247, 441251, 441257, 441263, 441281, 441307, 441319, 441349, 441359, 441361, 441403, 441421, 441443, 441449, 441461, 441479, 441499, 441517, 441523, 441527, 441547, 441557, 441563, 441569, 441587, 441607, 441613, 441619, 441631, 441647, 441667, 441697, 441703, 441713, 441737, 441751, 441787, 441797, 441799, 441811, 441827, 441829, 441839, 441841, 441877, 441887, 441907, 441913, 441923, 441937, 441953, 441971, 442003, 442007, 442009, 442019, 442027, 442031, 442033, 442061, 442069, 442097, 442109, 442121, 442139, 442147, 442151, 442157, 442171, 442177, 442181, 442193, 442201, 442207, 442217, 442229, 442237, 442243, 442271, 442283, 442291, 442319, 442327, 442333, 442363, 442367, 442397, 442399, 442439, 442447, 442457, 442469, 442487, 442489, 442499, 442501, 442517, 442531, 442537, 442571, 442573, 442577, 442579, 442601, 442609, 442619, 442633, 442691, 442699, 442703, 442721, 442733, 442747, 442753, 442763, 442769, 442777, 442781, 442789, 442807, 442817, 442823, 442829, 442831, 442837, 442843, 442861, 442879, 442903, 442919, 442961, 442963, 442973, 442979, 442987, 442991, 442997, 443011, 443017, 443039, 443041, 443057, 443059, 443063, 443077, 443089, 443117, 443123, 443129, 443147, 443153, 443159, 443161, 443167, 443171, 443189, 443203, 443221, 443227, 443231, 443237, 443243, 443249, 443263, 443273, 443281, 443291, 443293, 443341, 443347, 443353, 443363, 443369, 443389, 443407, 443413, 443419, 443423, 443431, 443437, 443453, 443467, 443489, 443501, 443533, 443543, 443551, 443561, 443563, 443567, 443587, 443591, 443603, 443609, 443629, 443659, 443687, 443689, 443701, 443711, 443731, 443749, 443753, 443759, 443761, 443771, 443777, 443791, 443837, 443851, 443867, 443869, 443873, 443879, 443881, 443893, 443899, 443909, 443917, 443939, 443941, 443953, 443983, 443987, 443999, 444001, 444007, 444029, 444043, 444047, 444079, 444089, 444109, 444113, 444121, 444127, 444131, 444151, 444167, 444173, 444179, 444181, 444187, 444209, 444253, 444271, 444281, 444287, 444289, 444293, 444307, 444341, 444343, 444347, 444349, 444401, 444403, 444421, 444443, 444449, 444461, 444463, 444469, 444473, 444487, 444517, 444523, 444527, 444529, 444539, 444547, 444553, 444557, 444569, 444589, 444607, 444623, 444637, 444641, 444649, 444671, 444677, 444701, 444713, 444739, 444767, 444791, 444793, 444803, 444811, 444817, 444833, 444841, 444859, 444863, 444869, 444877, 444883, 444887, 444893, 444901, 444929, 444937, 444953, 444967, 444971, 444979, 445001, 445019, 445021, 445031, 445033, 445069, 445087, 445091, 445097, 445103, 445141, 445157, 445169, 445183, 445187, 445199, 445229, 445261, 445271, 445279, 445283, 445297, 445307, 445321, 445339, 445363, 445427, 445433, 445447, 445453, 445463, 445477, 445499, 445507, 445537, 445541, 445567, 445573, 445583, 445589, 445597, 445619, 445631, 445633, 445649, 445657, 445691, 445699, 445703, 445741, 445747, 445769, 445771, 445789, 445799, 445807, 445829, 445847, 445853, 445871, 445877, 445883, 445891, 445931, 445937, 445943, 445967, 445969, 446003, 446009, 446041, 446053, 446081, 446087, 446111, 446123, 446129, 446141, 446179, 446189, 446191, 446197, 446221, 446227, 446231, 446261, 446263, 446273, 446279, 446293, 446309, 446323, 446333, 446353, 446363, 446387, 446389, 446399, 446401, 446417, 446441, 446447, 446461, 446473, 446477, 446503, 446533, 446549, 446561, 446569, 446597, 446603, 446609, 446647, 446657, 446713, 446717, 446731, 446753, 446759, 446767, 446773, 446819, 446827, 446839, 446863, 446881, 446891, 446893, 446909, 446911, 446921, 446933, 446951, 446969, 446983, 447001, 447011, 447019, 447053, 447067, 447079, 447101, 447107, 447119, 447133, 447137, 447173, 447179, 447193, 447197, 447211, 447217, 447221, 447233, 447247, 447257, 447259, 447263, 447311, 447319, 447323, 447331, 447353, 447401, 447409, 447427, 447439, 447443, 447449, 447451, 447463, 447467, 447481, 447509, 447521, 447527, 447541, 447569, 447571, 447611, 447617, 447637, 447641, 447677, 447683, 447701, 447703, 447743, 447749, 447757, 447779, 447791, 447793, 447817, 447823, 447827, 447829, 447841, 447859, 447877, 447883, 447893, 447901, 447907, 447943, 447961, 447983, 447991, 448003, 448013, 448027, 448031, 448057, 448067, 448073, 448093, 448111, 448121, 448139, 448141, 448157, 448159, 448169, 448177, 448187, 448193, 448199, 448207, 448241, 448249, 448303, 448309, 448313, 448321, 448351, 448363, 448367, 448373, 448379, 448387, 448397, 448421, 448451, 448519, 448531, 448561, 448597, 448607, 448627, 448631, 448633, 448667, 448687, 448697, 448703, 448727, 448733, 448741, 448769, 448793, 448801, 448807, 448829, 448843, 448853, 448859, 448867, 448871, 448873, 448879, 448883, 448907, 448927, 448939, 448969, 448993, 448997, 448999, 449003, 449011, 449051, 449077, 449083, 449093, 449107, 449117, 449129, 449131, 449149, 449153, 449161, 449171, 449173, 449201, 449203, 449209, 449227, 449243, 449249, 449261, 449263, 449269, 449287, 449299, 449303, 449311, 449321, 449333, 449347, 449353, 449363, 449381, 449399, 449411, 449417, 449419, 449437, 449441, 449459, 449473, 449543, 449549, 449557, 449563, 449567, 449569, 449591, 449609, 449621, 449629, 449653, 449663, 449671, 449677, 449681, 449689, 449693, 449699, 449741, 449759, 449767, 449773, 449783, 449797, 449807, 449821, 449833, 449851, 449879, 449921, 449929, 449941, 449951, 449959, 449963, 449971, 449987, 449989, 450001, 450011, 450019, 450029, 450067, 450071, 450077, 450083, 450101, 450103, 450113, 450127, 450137, 450161, 450169, 450193, 450199, 450209, 450217, 450223, 450227, 450239, 450257, 450259, 450277, 450287, 450293, 450299, 450301, 450311, 450343, 450349, 450361, 450367, 450377, 450383, 450391, 450403, 450413, 450421, 450431, 450451, 450473, 450479, 450481, 450487, 450493, 450503, 450529, 450533, 450557, 450563, 450581, 450587, 450599, 450601, 450617, 450641, 450643, 450649, 450677, 450691, 450707, 450719, 450727, 450761, 450767, 450787, 450797, 450799, 450803, 450809, 450811, 450817, 450829, 450839, 450841, 450847, 450859, 450881, 450883, 450887, 450893, 450899, 450913, 450917, 450929, 450943, 450949, 450971, 450991, 450997, 451013, 451039, 451051, 451057, 451069, 451093, 451097, 451103, 451109, 451159, 451177, 451181, 451183, 451201, 451207, 451249, 451277, 451279, 451301, 451303, 451309, 451313, 451331, 451337, 451343, 451361, 451387, 451397, 451411, 451439, 451441, 451481, 451499, 451519, 451523, 451541, 451547, 451553, 451579, 451601, 451609, 451621, 451637, 451657, 451663, 451667, 451669, 451679, 451681, 451691, 451699, 451709, 451723, 451747, 451753, 451771, 451783, 451793, 451799, 451823, 451831, 451837, 451859, 451873, 451879, 451897, 451901, 451903, 451909, 451921, 451933, 451937, 451939, 451961, 451967, 451987, 452009, 452017, 452027, 452033, 452041, 452077, 452083, 452087, 452131, 452159, 452161, 452171, 452191, 452201, 452213, 452227, 452233, 452239, 452269, 452279, 452293, 452297, 452329, 452363, 452377, 452393, 452401, 452443, 452453, 452497, 452519, 452521, 452531, 452533, 452537, 452539, 452549, 452579, 452587, 452597, 452611, 452629, 452633, 452671, 452687, 452689, 452701, 452731, 452759, 452773, 452797, 452807, 452813, 452821, 452831, 452857, 452869, 452873, 452923, 452953, 452957, 452983, 452989, 453023, 453029, 453053, 453073, 453107, 453119, 453133, 453137, 453143, 453157, 453161, 453181, 453197, 453199, 453209, 453217, 453227, 453239, 453247, 453269, 453289, 453293, 453301, 453311, 453317, 453329, 453347, 453367, 453371, 453377, 453379, 453421, 453451, 453461, 453527, 453553, 453559, 453569, 453571, 453599, 453601, 453617, 453631, 453637, 453641, 453643, 453659, 453667, 453671, 453683, 453703, 453707, 453709, 453737, 453757, 453797, 453799, 453823, 453833, 453847, 453851, 453877, 453889, 453907, 453913, 453923, 453931, 453949, 453961, 453977, 453983, 453991, 454009, 454021, 454031, 454033, 454039, 454061, 454063, 454079, 454109, 454141, 454151, 454159, 454183, 454199, 454211, 454213, 454219, 454229, 454231, 454247, 454253, 454277, 454297, 454303, 454313, 454331, 454351, 454357, 454361, 454379, 454387, 454409, 454417, 454451, 454453, 454483, 454501, 454507, 454513, 454541, 454543, 454547, 454577, 454579, 454603, 454609, 454627, 454637, 454673, 454679, 454709, 454711, 454721, 454723, 454759, 454763, 454777, 454799, 454823, 454843, 454847, 454849, 454859, 454889, 454891, 454907, 454919, 454921, 454931, 454943, 454967, 454969, 454973, 454991, 455003, 455011, 455033, 455047, 455053, 455093, 455099, 455123, 455149, 455159, 455167, 455171, 455177, 455201, 455219, 455227, 455233, 455237, 455261, 455263, 455269, 455291, 455309, 455317, 455321, 455333, 455339, 455341, 455353, 455381, 455393, 455401, 455407, 455419, 455431, 455437, 455443, 455461, 455471, 455473, 455479, 455489, 455491, 455513, 455527, 455531, 455537, 455557, 455573, 455579, 455597, 455599, 455603, 455627, 455647, 455659, 455681, 455683, 455687, 455701, 455711, 455717, 455737, 455761, 455783, 455789, 455809, 455827, 455831, 455849, 455863, 455881, 455899, 455921, 455933, 455941, 455953, 455969, 455977, 455989, 455993, 455999, 456007, 456013, 456023, 456037, 456047, 456061, 456091, 456107, 456109, 456119, 456149, 456151, 456167, 456193, 456223, 456233, 456241, 456283, 456293, 456329, 456349, 456353, 456367, 456377, 456403, 456409, 456427, 456439, 456451, 456457, 456461, 456499, 456503, 456517, 456523, 456529, 456539, 456553, 456557, 456559, 456571, 456581, 456587, 456607, 456611, 456613, 456623, 456641, 456647, 456649, 456653, 456679, 456683, 456697, 456727, 456737, 456763, 456767, 456769, 456791, 456809, 456811, 456821, 456871, 456877, 456881, 456899, 456901, 456923, 456949, 456959, 456979, 456991, 457001, 457003, 457013, 457021, 457043, 457049, 457057, 457087, 457091, 457097, 457099, 457117, 457139, 457151, 457153, 457183, 457189, 457201, 457213, 457229, 457241, 457253, 457267, 457271, 457277, 457279, 457307, 457319, 457333, 457339, 457363, 457367, 457381, 457393, 457397, 457399, 457403, 457411, 457421, 457433, 457459, 457469, 457507, 457511, 457517, 457547, 457553, 457559, 457571, 457607, 457609, 457621, 457643, 457651, 457661, 457669, 457673, 457679, 457687, 457697, 457711, 457739, 457757, 457789, 457799, 457813, 457817, 457829, 457837, 457871, 457889, 457903, 457913, 457943, 457979, 457981, 457987, 458009, 458027, 458039, 458047, 458053, 458057, 458063, 458069, 458119, 458123, 458173, 458179, 458189, 458191, 458197, 458207, 458219, 458239, 458309, 458317, 458323, 458327, 458333, 458357, 458363, 458377, 458399, 458401, 458407, 458449, 458477, 458483, 458501, 458531, 458533, 458543, 458567, 458569, 458573, 458593, 458599, 458611, 458621, 458629, 458639, 458651, 458663, 458669, 458683, 458701, 458719, 458729, 458747, 458789, 458791, 458797, 458807, 458819, 458849, 458863, 458879, 458891, 458897, 458917, 458921, 458929, 458947, 458957, 458959, 458963, 458971, 458977, 458981, 458987, 458993, 459007, 459013, 459023, 459029, 459031, 459037, 459047, 459089, 459091, 459113, 459127, 459167, 459169, 459181, 459209, 459223, 459229, 459233, 459257, 459271, 459293, 459301, 459313, 459317, 459337, 459341, 459343, 459353, 459373, 459377, 459383, 459397, 459421, 459427, 459443, 459463, 459467, 459469, 459479, 459509, 459521, 459523, 459593, 459607, 459611, 459619, 459623, 459631, 459647, 459649, 459671, 459677, 459691, 459703, 459749, 459763, 459791, 459803, 459817, 459829, 459841, 459847, 459883, 459913, 459923, 459929, 459937, 459961, 460013, 460039, 460051, 460063, 460073, 460079, 460081, 460087, 460091, 460099, 460111, 460127, 460147, 460157, 460171, 460181, 460189, 460211, 460217, 460231, 460247, 460267, 460289, 460297, 460301, 460337, 460349, 460373, 460379, 460387, 460393, 460403, 460409, 460417, 460451, 460463, 460477, 460531, 460543, 460561, 460571, 460589, 460609, 460619, 460627, 460633, 460637, 460643, 460657, 460673, 460697, 460709, 460711, 460721, 460771, 460777, 460787, 460793, 460813, 460829, 460841, 460843, 460871, 460891, 460903, 460907, 460913, 460919, 460937, 460949, 460951, 460969, 460973, 460979, 460981, 460987, 460991, 461009, 461011, 461017, 461051, 461053, 461059, 461093, 461101, 461119, 461143, 461147, 461171, 461183, 461191, 461207, 461233, 461239, 461257, 461269, 461273, 461297, 461299, 461309, 461317, 461323, 461327, 461333, 461359, 461381, 461393, 461407, 461411, 461413, 461437, 461441, 461443, 461467, 461479, 461507, 461521, 461561, 461569, 461581, 461599, 461603, 461609, 461627, 461639, 461653, 461677, 461687, 461689, 461693, 461707, 461717, 461801, 461803, 461819, 461843, 461861, 461887, 461891, 461917, 461921, 461933, 461957, 461971, 461977, 461983, 462013, 462041, 462067, 462073, 462079, 462097, 462103, 462109, 462113, 462131, 462149, 462181, 462191, 462199, 462221, 462239, 462263, 462271, 462307, 462311, 462331, 462337, 462361, 462373, 462377, 462401, 462409, 462419, 462421, 462437, 462443, 462467, 462481, 462491, 462493, 462499, 462529, 462541, 462547, 462557, 462569, 462571, 462577, 462589, 462607, 462629, 462641, 462643, 462653, 462659, 462667, 462673, 462677, 462697, 462713, 462719, 462727, 462733, 462739, 462773, 462827, 462841, 462851, 462863, 462871, 462881, 462887, 462899, 462901, 462911, 462937, 462947, 462953, 462983, 463003, 463031, 463033, 463093, 463103, 463157, 463181, 463189, 463207, 463213, 463219, 463231, 463237, 463247, 463249, 463261, 463283, 463291, 463297, 463303, 463313, 463319, 463321, 463339, 463343, 463363, 463387, 463399, 463433, 463447, 463451, 463453, 463457, 463459, 463483, 463501, 463511, 463513, 463523, 463531, 463537, 463549, 463579, 463613, 463627, 463633, 463643, 463649, 463663, 463679, 463693, 463711, 463717, 463741, 463747, 463753, 463763, 463781, 463787, 463807, 463823, 463829, 463831, 463849, 463861, 463867, 463873, 463889, 463891, 463907, 463919, 463921, 463949, 463963, 463973, 463987, 463993, 464003, 464011, 464021, 464033, 464047, 464069, 464081, 464089, 464119, 464129, 464131, 464137, 464141, 464143, 464171, 464173, 464197, 464201, 464213, 464237, 464251, 464257, 464263, 464279, 464281, 464291, 464309, 464311, 464327, 464351, 464371, 464381, 464383, 464413, 464419, 464437, 464447, 464459, 464467, 464479, 464483, 464521, 464537, 464539, 464549, 464557, 464561, 464587, 464591, 464603, 464617, 464621, 464647, 464663, 464687, 464699, 464741, 464747, 464749, 464753, 464767, 464771, 464773, 464777, 464801, 464803, 464809, 464813, 464819, 464843, 464857, 464879, 464897, 464909, 464917, 464923, 464927, 464939, 464941, 464951, 464953, 464963, 464983, 464993, 464999, 465007, 465011, 465013, 465019, 465041, 465061, 465067, 465071, 465077, 465079, 465089, 465107, 465119, 465133, 465151, 465161, 465163, 465167, 465169, 465173, 465187, 465209, 465211, 465259, 465271, 465277, 465281, 465293, 465299, 465317, 465319, 465331, 465337, 465373, 465379, 465383, 465407, 465419, 465433, 465463, 465469, 465523, 465529, 465541, 465551, 465581, 465587, 465611, 465631, 465643, 465649, 465659, 465679, 465701, 465721, 465739, 465743, 465761, 465781, 465797, 465799, 465809, 465821, 465833, 465841, 465887, 465893, 465901, 465917, 465929, 465931, 465947, 465977, 465989, 466009, 466019, 466027, 466033, 466043, 466061, 466069, 466073, 466079, 466087, 466091, 466121, 466139, 466153, 466171, 466181, 466183, 466201, 466243, 466247, 466261, 466267, 466273, 466283, 466303, 466321, 466331, 466339, 466357, 466369, 466373, 466409, 466423, 466441, 466451, 466483, 466517, 466537, 466547, 466553, 466561, 466567, 466573, 466579, 466603, 466619, 466637, 466649, 466651, 466673, 466717, 466723, 466729, 466733, 466747, 466751, 466777, 466787, 466801, 466819, 466853, 466859, 466897, 466909, 466913, 466919, 466951, 466957, 466997, 467003, 467009, 467017, 467021, 467063, 467081, 467083, 467101, 467119, 467123, 467141, 467147, 467171, 467183, 467197, 467209, 467213, 467237, 467239, 467261, 467293, 467297, 467317, 467329, 467333, 467353, 467371, 467399, 467417, 467431, 467437, 467447, 467471, 467473, 467477, 467479, 467491, 467497, 467503, 467507, 467527, 467531, 467543, 467549, 467557, 467587, 467591, 467611, 467617, 467627, 467629, 467633, 467641, 467651, 467657, 467669, 467671, 467681, 467689, 467699, 467713, 467729, 467737, 467743, 467749, 467773, 467783, 467813, 467827, 467833, 467867, 467869, 467879, 467881, 467893, 467897, 467899, 467903, 467927, 467941, 467953, 467963, 467977, 468001, 468011, 468019, 468029, 468049, 468059, 468067, 468071, 468079, 468107, 468109, 468113, 468121, 468133, 468137, 468151, 468157, 468173, 468187, 468191, 468199, 468239, 468241, 468253, 468271, 468277, 468289, 468319, 468323, 468353, 468359, 468371, 468389, 468421, 468439, 468451, 468463, 468473, 468491, 468493, 468499, 468509, 468527, 468551, 468557, 468577, 468581, 468593, 468599, 468613, 468619, 468623, 468641, 468647, 468653, 468661, 468667, 468683, 468691, 468697, 468703, 468709, 468719, 468737, 468739, 468761, 468773, 468781, 468803, 468817, 468821, 468841, 468851, 468859, 468869, 468883, 468887, 468889, 468893, 468899, 468913, 468953, 468967, 468973, 468983, 469009, 469031, 469037, 469069, 469099, 469121, 469127, 469141, 469153, 469169, 469193, 469207, 469219, 469229, 469237, 469241, 469253, 469267, 469279, 469283, 469303, 469321, 469331, 469351, 469363, 469367, 469369, 469379, 469397, 469411, 469429, 469439, 469457, 469487, 469501, 469529, 469541, 469543, 469561, 469583, 469589, 469613, 469627, 469631, 469649, 469657, 469673, 469687, 469691, 469717, 469723, 469747, 469753, 469757, 469769, 469787, 469793, 469801, 469811, 469823, 469841, 469849, 469877, 469879, 469891, 469907, 469919, 469939, 469957, 469969, 469979, 469993, 470021, 470039, 470059, 470077, 470081, 470083, 470087, 470089, 470131, 470149, 470153, 470161, 470167, 470179, 470201, 470207, 470209, 470213, 470219, 470227, 470243, 470251, 470263, 470279, 470297, 470299, 470303, 470317, 470333, 470347, 470359, 470389, 470399, 470411, 470413, 470417, 470429, 470443, 470447, 470453, 470461, 470471, 470473, 470489, 470501, 470513, 470521, 470531, 470539, 470551, 470579, 470593, 470597, 470599, 470609, 470621, 470627, 470647, 470651, 470653, 470663, 470669, 470689, 470711, 470719, 470731, 470749, 470779, 470783, 470791, 470819, 470831, 470837, 470863, 470867, 470881, 470887, 470891, 470903, 470927, 470933, 470941, 470947, 470957, 470959, 470993, 470999, 471007, 471041, 471061, 471073, 471089, 471091, 471101, 471137, 471139, 471161, 471173, 471179, 471187, 471193, 471209, 471217, 471241, 471253, 471259, 471277, 471281, 471283, 471299, 471301, 471313, 471353, 471389, 471391, 471403, 471407, 471439, 471451, 471467, 471481, 471487, 471503, 471509, 471521, 471533, 471539, 471553, 471571, 471589, 471593, 471607, 471617, 471619, 471641, 471649, 471659, 471671, 471673, 471677, 471683, 471697, 471703, 471719, 471721, 471749, 471769, 471781, 471791, 471803, 471817, 471841, 471847, 471853, 471871, 471893, 471901, 471907, 471923, 471929, 471931, 471943, 471949, 471959, 471997, 472019, 472027, 472051, 472057, 472063, 472067, 472103, 472111, 472123, 472127, 472133, 472139, 472151, 472159, 472163, 472189, 472193, 472247, 472249, 472253, 472261, 472273, 472289, 472301, 472309, 472319, 472331, 472333, 472349, 472369, 472391, 472393, 472399, 472411, 472421, 472457, 472469, 472477, 472523, 472541, 472543, 472559, 472561, 472573, 472597, 472631, 472639, 472643, 472669, 472687, 472691, 472697, 472709, 472711, 472721, 472741, 472751, 472763, 472793, 472799, 472817, 472831, 472837, 472847, 472859, 472883, 472907, 472909, 472921, 472937, 472939, 472963, 472993, 473009, 473021, 473027, 473089, 473101, 473117, 473141, 473147, 473159, 473167, 473173, 473191, 473197, 473201, 473203, 473219, 473227, 473257, 473279, 473287, 473293, 473311, 473321, 473327, 473351, 473353, 473377, 473381, 473383, 473411, 473419, 473441, 473443, 473453, 473471, 473477, 473479, 473497, 473503, 473507, 473513, 473519, 473527, 473531, 473533, 473549, 473579, 473597, 473611, 473617, 473633, 473647, 473659, 473719, 473723, 473729, 473741, 473743, 473761, 473789, 473833, 473839, 473857, 473861, 473867, 473887, 473899, 473911, 473923, 473927, 473929, 473939, 473951, 473953, 473971, 473981, 473987, 473999, 474017, 474029, 474037, 474043, 474049, 474059, 474073, 474077, 474101, 474119, 474127, 474137, 474143, 474151, 474163, 474169, 474197, 474211, 474223, 474241, 474263, 474289, 474307, 474311, 474319, 474337, 474343, 474347, 474359, 474379, 474389, 474391, 474413, 474433, 474437, 474443, 474479, 474491, 474497, 474499, 474503, 474533, 474541, 474547, 474557, 474569, 474571, 474581, 474583, 474619, 474629, 474647, 474659, 474667, 474671, 474707, 474709, 474737, 474751, 474757, 474769, 474779, 474787, 474809, 474811, 474839, 474847, 474857, 474899, 474907, 474911, 474917, 474923, 474931, 474937, 474941, 474949, 474959, 474977, 474983, 475037, 475051, 475073, 475081, 475091, 475093, 475103, 475109, 475141, 475147, 475151, 475159, 475169, 475207, 475219, 475229, 475243, 475271, 475273, 475283, 475289, 475297, 475301, 475327, 475331, 475333, 475351, 475367, 475369, 475379, 475381, 475403, 475417, 475421, 475427, 475429, 475441, 475457, 475469, 475483, 475511, 475523, 475529, 475549, 475583, 475597, 475613, 475619, 475621, 475637, 475639, 475649, 475669, 475679, 475681, 475691, 475693, 475697, 475721, 475729, 475751, 475753, 475759, 475763, 475777, 475789, 475793, 475807, 475823, 475831, 475837, 475841, 475859, 475877, 475879, 475889, 475897, 475903, 475907, 475921, 475927, 475933, 475957, 475973, 475991, 475997, 476009, 476023, 476027, 476029, 476039, 476041, 476059, 476081, 476087, 476089, 476101, 476107, 476111, 476137, 476143, 476167, 476183, 476219, 476233, 476237, 476243, 476249, 476279, 476299, 476317, 476347, 476351, 476363, 476369, 476381, 476401, 476407, 476419, 476423, 476429, 476467, 476477, 476479, 476507, 476513, 476519, 476579, 476587, 476591, 476599, 476603, 476611, 476633, 476639, 476647, 476659, 476681, 476683, 476701, 476713, 476719, 476737, 476743, 476753, 476759, 476783, 476803, 476831, 476849, 476851, 476863, 476869, 476887, 476891, 476911, 476921, 476929, 476977, 476981, 476989, 477011, 477013, 477017, 477019, 477031, 477047, 477073, 477077, 477091, 477131, 477149, 477163, 477209, 477221, 477229, 477259, 477277, 477293, 477313, 477317, 477329, 477341, 477359, 477361, 477383, 477409, 477439, 477461, 477469, 477497, 477511, 477517, 477523, 477539, 477551, 477553, 477557, 477571, 477577, 477593, 477619, 477623, 477637, 477671, 477677, 477721, 477727, 477731, 477739, 477767, 477769, 477791, 477797, 477809, 477811, 477821, 477823, 477839, 477847, 477857, 477863, 477881, 477899, 477913, 477941, 477947, 477973, 477977, 477991, 478001, 478039, 478063, 478067, 478069, 478087, 478099, 478111, 478129, 478139, 478157, 478169, 478171, 478189, 478199, 478207, 478213, 478241, 478243, 478253, 478259, 478271, 478273, 478321, 478339, 478343, 478351, 478391, 478399, 478403, 478411, 478417, 478421, 478427, 478433, 478441, 478451, 478453, 478459, 478481, 478483, 478493, 478523, 478531, 478571, 478573, 478579, 478589, 478603, 478627, 478631, 478637, 478651, 478679, 478697, 478711, 478727, 478729, 478739, 478741, 478747, 478763, 478769, 478787, 478801, 478811, 478813, 478823, 478831, 478843, 478853, 478861, 478871, 478879, 478897, 478901, 478913, 478927, 478931, 478937, 478943, 478963, 478967, 478991, 478999, 479023, 479027, 479029, 479041, 479081, 479131, 479137, 479147, 479153, 479189, 479191, 479201, 479209, 479221, 479231, 479239, 479243, 479263, 479267, 479287, 479299, 479309, 479317, 479327, 479357, 479371, 479377, 479387, 479419, 479429, 479431, 479441, 479461, 479473, 479489, 479497, 479509, 479513, 479533, 479543, 479561, 479569, 479581, 479593, 479599, 479623, 479629, 479639, 479701, 479749, 479753, 479761, 479771, 479777, 479783, 479797, 479813, 479821, 479833, 479839, 479861, 479879, 479881, 479891, 479903, 479909, 479939, 479951, 479953, 479957, 479971, 480013, 480017, 480019, 480023, 480043, 480047, 480049, 480059, 480061, 480071, 480091, 480101, 480107, 480113, 480133, 480143, 480157, 480167, 480169, 480203, 480209, 480287, 480299, 480317, 480329, 480341, 480343, 480349, 480367, 480373, 480379, 480383, 480391, 480409, 480419, 480427, 480449, 480451, 480461, 480463, 480499, 480503, 480509, 480517, 480521, 480527, 480533, 480541, 480553, 480563, 480569, 480583, 480587, 480647, 480661, 480707, 480713, 480731, 480737, 480749, 480761, 480773, 480787, 480803, 480827, 480839, 480853, 480881, 480911, 480919, 480929, 480937, 480941, 480959, 480967, 480979, 480989, 481001, 481003, 481009, 481021, 481043, 481051, 481067, 481073, 481087, 481093, 481097, 481109, 481123, 481133, 481141, 481147, 481153, 481157, 481171, 481177, 481181, 481199, 481207, 481211, 481231, 481249, 481297, 481301, 481303, 481307, 481343, 481363, 481373, 481379, 481387, 481409, 481417, 481433, 481447, 481469, 481489, 481501, 481513, 481531, 481549, 481571, 481577, 481589, 481619, 481633, 481639, 481651, 481667, 481673, 481681, 481693, 481697, 481699, 481721, 481751, 481753, 481769, 481787, 481801, 481807, 481813, 481837, 481843, 481847, 481849, 481861, 481867, 481879, 481883, 481909, 481939, 481963, 481997, 482017, 482021, 482029, 482033, 482039, 482051, 482071, 482093, 482099, 482101, 482117, 482123, 482179, 482189, 482203, 482213, 482227, 482231, 482233, 482243, 482263, 482281, 482309, 482323, 482347, 482351, 482359, 482371, 482387, 482393, 482399, 482401, 482407, 482413, 482423, 482437, 482441, 482483, 482501, 482507, 482509, 482513, 482519, 482527, 482539, 482569, 482593, 482597, 482621, 482627, 482633, 482641, 482659, 482663, 482683, 482687, 482689, 482707, 482711, 482717, 482719, 482731, 482743, 482753, 482759, 482767, 482773, 482789, 482803, 482819, 482827, 482837, 482861, 482863, 482873, 482897, 482899, 482917, 482941, 482947, 482957, 482971, 483017, 483031, 483061, 483071, 483097, 483127, 483139, 483163, 483167, 483179, 483209, 483211, 483221, 483229, 483233, 483239, 483247, 483251, 483281, 483289, 483317, 483323, 483337, 483347, 483367, 483377, 483389, 483397, 483407, 483409, 483433, 483443, 483467, 483481, 483491, 483499, 483503, 483523, 483541, 483551, 483557, 483563, 483577, 483611, 483619, 483629, 483643, 483649, 483671, 483697, 483709, 483719, 483727, 483733, 483751, 483757, 483761, 483767, 483773, 483787, 483809, 483811, 483827, 483829, 483839, 483853, 483863, 483869, 483883, 483907, 483929, 483937, 483953, 483971, 483991, 484019, 484027, 484037, 484061, 484067, 484079, 484091, 484111, 484117, 484123, 484129, 484151, 484153, 484171, 484181, 484193, 484201, 484207, 484229, 484243, 484259, 484283, 484301, 484303, 484327, 484339, 484361, 484369, 484373, 484397, 484411, 484417, 484439, 484447, 484457, 484459, 484487, 484489, 484493, 484531, 484543, 484577, 484597, 484607, 484609, 484613, 484621, 484639, 484643, 484691, 484703, 484727, 484733, 484751, 484763, 484769, 484777, 484787, 484829, 484853, 484867, 484927, 484951, 484987, 484999, 485021, 485029, 485041, 485053, 485059, 485063, 485081, 485101, 485113, 485123, 485131, 485137, 485161, 485167, 485171, 485201, 485207, 485209, 485263, 485311, 485347, 485351, 485363, 485371, 485383, 485389, 485411, 485417, 485423, 485437, 485447, 485479, 485497, 485509, 485519, 485543, 485567, 485587, 485593, 485603, 485609, 485647, 485657, 485671, 485689, 485701, 485717, 485729, 485731, 485753, 485777, 485819, 485827, 485831, 485833, 485893, 485899, 485909, 485923, 485941, 485959, 485977, 485993, 486023, 486037, 486041, 486043, 486053, 486061, 486071, 486091, 486103, 486119, 486133, 486139, 486163, 486179, 486181, 486193, 486203, 486221, 486223, 486247, 486281, 486293, 486307, 486313, 486323, 486329, 486331, 486341, 486349, 486377, 486379, 486389, 486391, 486397, 486407, 486433, 486443, 486449, 486481, 486491, 486503, 486509, 486511, 486527, 486539, 486559, 486569, 486583, 486589, 486601, 486617, 486637, 486641, 486643, 486653, 486667, 486671, 486677, 486679, 486683, 486697, 486713, 486721, 486757, 486767, 486769, 486781, 486797, 486817, 486821, 486833, 486839, 486869, 486907, 486923, 486929, 486943, 486947, 486949, 486971, 486977, 486991, 487007, 487013, 487021, 487049, 487051, 487057, 487073, 487079, 487093, 487099, 487111, 487133, 487177, 487183, 487187, 487211, 487213, 487219, 487247, 487261, 487283, 487303, 487307, 487313, 487349, 487363, 487381, 487387, 487391, 487397, 487423, 487427, 487429, 487447, 487457, 487463, 487469, 487471, 487477, 487481, 487489, 487507, 487561, 487589, 487601, 487603, 487607, 487637, 487649, 487651, 487657, 487681, 487691, 487703, 487709, 487717, 487727, 487733, 487741, 487757, 487769, 487783, 487789, 487793, 487811, 487819, 487829, 487831, 487843, 487873, 487889, 487891, 487897, 487933, 487943, 487973, 487979, 487997, 488003, 488009, 488011, 488021, 488051, 488057, 488069, 488119, 488143, 488149, 488153, 488161, 488171, 488197, 488203, 488207, 488209, 488227, 488231, 488233, 488239, 488249, 488261, 488263, 488287, 488303, 488309, 488311, 488317, 488321, 488329, 488333, 488339, 488347, 488353, 488381, 488399, 488401, 488407, 488417, 488419, 488441, 488459, 488473, 488503, 488513, 488539, 488567, 488573, 488603, 488611, 488617, 488627, 488633, 488639, 488641, 488651, 488687, 488689, 488701, 488711, 488717, 488723, 488729, 488743, 488749, 488759, 488779, 488791, 488797, 488821, 488827, 488833, 488861, 488879, 488893, 488897, 488909, 488921, 488947, 488959, 488981, 488993, 489001, 489011, 489019, 489043, 489053, 489061, 489101, 489109, 489113, 489127, 489133, 489157, 489161, 489179, 489191, 489197, 489217, 489239, 489241, 489257, 489263, 489283, 489299, 489329, 489337, 489343, 489361, 489367, 489389, 489407, 489409, 489427, 489431, 489439, 489449, 489457, 489479, 489487, 489493, 489529, 489539, 489551, 489553, 489557, 489571, 489613, 489631, 489653, 489659, 489673, 489677, 489679, 489689, 489691, 489733, 489743, 489761, 489791, 489793, 489799, 489803, 489817, 489823, 489833, 489847, 489851, 489869, 489871, 489887, 489901, 489911, 489913, 489941, 489943, 489959, 489961, 489977, 489989, 490001, 490003, 490019, 490031, 490033, 490057, 490097, 490103, 490111, 490117, 490121, 490151, 490159, 490169, 490183, 490201, 490207, 490223, 490241, 490247, 490249, 490267, 490271, 490277, 490283, 490309, 490313, 490339, 490367, 490393, 490417, 490421, 490453, 490459, 490463, 490481, 490493, 490499, 490519, 490537, 490541, 490543, 490549, 490559, 490571, 490573, 490577, 490579, 490591, 490619, 490627, 490631, 490643, 490661, 490663, 490697, 490733, 490741, 490769, 490771, 490783, 490829, 490837, 490849, 490859, 490877, 490891, 490913, 490921, 490927, 490937, 490949, 490951, 490957, 490967, 490969, 490991, 490993, 491003, 491039, 491041, 491059, 491081, 491083, 491129, 491137, 491149, 491159, 491167, 491171, 491201, 491213, 491219, 491251, 491261, 491273, 491279, 491297, 491299, 491327, 491329, 491333, 491339, 491341, 491353, 491357, 491371, 491377, 491417, 491423, 491429, 491461, 491483, 491489, 491497, 491501, 491503, 491527, 491531, 491537, 491539, 491581, 491591, 491593, 491611, 491627, 491633, 491639, 491651, 491653, 491669, 491677, 491707, 491719, 491731, 491737, 491747, 491773, 491783, 491789, 491797, 491819, 491833, 491837, 491851, 491857, 491867, 491873, 491899, 491923, 491951, 491969, 491977, 491983, 492007, 492013, 492017, 492029, 492047, 492053, 492059, 492061, 492067, 492077, 492083, 492103, 492113, 492227, 492251, 492253, 492257, 492281, 492293, 492299, 492319, 492377, 492389, 492397, 492403, 492409, 492413, 492421, 492431, 492463, 492467, 492487, 492491, 492511, 492523, 492551, 492563, 492587, 492601, 492617, 492619, 492629, 492631, 492641, 492647, 492659, 492671, 492673, 492707, 492719, 492721, 492731, 492757, 492761, 492763, 492769, 492781, 492799, 492839, 492853, 492871, 492883, 492893, 492901, 492911, 492967, 492979, 493001, 493013, 493021, 493027, 493043, 493049, 493067, 493093, 493109, 493111, 493121, 493123, 493127, 493133, 493139, 493147, 493159, 493169, 493177, 493193, 493201, 493211, 493217, 493219, 493231, 493243, 493249, 493277, 493279, 493291, 493301, 493313, 493333, 493351, 493369, 493393, 493397, 493399, 493403, 493433, 493447, 493457, 493463, 493481, 493523, 493531, 493541, 493567, 493573, 493579, 493583, 493607, 493621, 493627, 493643, 493657, 493693, 493709, 493711, 493721, 493729, 493733, 493747, 493777, 493793, 493807, 493811, 493813, 493817, 493853, 493859, 493873, 493877, 493897, 493919, 493931, 493937, 493939, 493967, 493973, 493979, 493993, 494023, 494029, 494041, 494051, 494069, 494077, 494083, 494093, 494101, 494107, 494129, 494141, 494147, 494167, 494191, 494213, 494237, 494251, 494257, 494267, 494269, 494281, 494287, 494317, 494327, 494341, 494353, 494359, 494369, 494381, 494383, 494387, 494407, 494413, 494441, 494443, 494471, 494497, 494519, 494521, 494539, 494561, 494563, 494567, 494587, 494591, 494609, 494617, 494621, 494639, 494647, 494651, 494671, 494677, 494687, 494693, 494699, 494713, 494719, 494723, 494731, 494737, 494743, 494749, 494759, 494761, 494783, 494789, 494803, 494843, 494849, 494873, 494899, 494903, 494917, 494927, 494933, 494939, 494959, 494987, 495017, 495037, 495041, 495043, 495067, 495071, 495109, 495113, 495119, 495133, 495139, 495149, 495151, 495161, 495181, 495199, 495211, 495221, 495241, 495269, 495277, 495289, 495301, 495307, 495323, 495337, 495343, 495347, 495359, 495361, 495371, 495377, 495389, 495401, 495413, 495421, 495433, 495437, 495449, 495457, 495461, 495491, 495511, 495527, 495557, 495559, 495563, 495569, 495571, 495587, 495589, 495611, 495613, 495617, 495619, 495629, 495637, 495647, 495667, 495679, 495701, 495707, 495713, 495749, 495751, 495757, 495769, 495773, 495787, 495791, 495797, 495799, 495821, 495827, 495829, 495851, 495877, 495893, 495899, 495923, 495931, 495947, 495953, 495959, 495967, 495973, 495983, 496007, 496019, 496039, 496051, 496063, 496073, 496079, 496123, 496127, 496163, 496187, 496193, 496211, 496229, 496231, 496259, 496283, 496289, 496291, 496297, 496303, 496313, 496333, 496339, 496343, 496381, 496399, 496427, 496439, 496453, 496459, 496471, 496477, 496481, 496487, 496493, 496499, 496511, 496549, 496579, 496583, 496609, 496631, 496669, 496681, 496687, 496703, 496711, 496733, 496747, 496763, 496789, 496813, 496817, 496841, 496849, 496871, 496877, 496889, 496891, 496897, 496901, 496913, 496919, 496949, 496963, 496997, 496999, 497011, 497017, 497041, 497047, 497051, 497069, 497093, 497111, 497113, 497117, 497137, 497141, 497153, 497171, 497177, 497197, 497239, 497257, 497261, 497269, 497279, 497281, 497291, 497297, 497303, 497309, 497323, 497339, 497351, 497389, 497411, 497417, 497423, 497449, 497461, 497473, 497479, 497491, 497501, 497507, 497509, 497521, 497537, 497551, 497557, 497561, 497579, 497587, 497597, 497603, 497633, 497659, 497663, 497671, 497677, 497689, 497701, 497711, 497719, 497729, 497737, 497741, 497771, 497773, 497801, 497813, 497831, 497839, 497851, 497867, 497869, 497873, 497899, 497929, 497957, 497963, 497969, 497977, 497989, 497993, 497999, 498013, 498053, 498061, 498073, 498089, 498101, 498103, 498119, 498143, 498163, 498167, 498181, 498209, 498227, 498257, 498259, 498271, 498301, 498331, 498343, 498361, 498367, 498391, 498397, 498401, 498403, 498409, 498439, 498461, 498467, 498469, 498493, 498497, 498521, 498523, 498527, 498551, 498557, 498577, 498583, 498599, 498611, 498613, 498643, 498647, 498653, 498679, 498689, 498691, 498733, 498739, 498749, 498761, 498767, 498779, 498781, 498787, 498791, 498803, 498833, 498857, 498859, 498881, 498907, 498923, 498931, 498937, 498947, 498961, 498973, 498977, 498989, 499021, 499027, 499033, 499039, 499063, 499067, 499099, 499117, 499127, 499129, 499133, 499139, 499141, 499151, 499157, 499159, 499181, 499183, 499189, 499211, 499229, 499253, 499267, 499277, 499283, 499309, 499321, 499327, 499349, 499361, 499363, 499391, 499397, 499403, 499423, 499439, 499459, 499481, 499483, 499493, 499507, 499519, 499523, 499549, 499559, 499571, 499591, 499601, 499607, 499621, 499633, 499637, 499649, 499661, 499663, 499669, 499673, 499679, 499687, 499691, 499693, 499711, 499717, 499729, 499739, 499747, 499781, 499787, 499801, 499819, 499853, 499879, 499883, 499897, 499903, 499927, 499943, 499957, 499969, 499973, 499979, 500009, 500029, 500041, 500057, 500069, 500083, 500107, 500111, 500113, 500119, 500153, 500167, 500173, 500177, 500179, 500197, 500209, 500231, 500233, 500237, 500239, 500249, 500257, 500287, 500299, 500317, 500321, 500333, 500341, 500363, 500369, 500389, 500393, 500413, 500417, 500431, 500443, 500459, 500471, 500473, 500483, 500501, 500509, 500519, 500527, 500567, 500579, 500587, 500603, 500629, 500671, 500677, 500693, 500699, 500713, 500719, 500723, 500729, 500741, 500777, 500791, 500807, 500809, 500831, 500839, 500861, 500873, 500881, 500887, 500891, 500909, 500911, 500921, 500923, 500933, 500947, 500953, 500957, 500977, 501001, 501013, 501019, 501029, 501031, 501037, 501043, 501077, 501089, 501103, 501121, 501131, 501133, 501139, 501157, 501173, 501187, 501191, 501197, 501203, 501209, 501217, 501223, 501229, 501233, 501257, 501271, 501287, 501299, 501317, 501341, 501343, 501367, 501383, 501401, 501409, 501419, 501427, 501451, 501463, 501493, 501503, 501511, 501563, 501577, 501593, 501601, 501617, 501623, 501637, 501659, 501691, 501701, 501703, 501707, 501719, 501731, 501769, 501779, 501803, 501817, 501821, 501827, 501829, 501841, 501863, 501889, 501911, 501931, 501947, 501953, 501967, 501971, 501997, 502001, 502013, 502039, 502043, 502057, 502063, 502079, 502081, 502087, 502093, 502121, 502133, 502141, 502171, 502181, 502217, 502237, 502247, 502259, 502261, 502277, 502301, 502321, 502339, 502393, 502409, 502421, 502429, 502441, 502451, 502487, 502499, 502501, 502507, 502517, 502543, 502549, 502553, 502591, 502597, 502613, 502631, 502633, 502643, 502651, 502669, 502687, 502699, 502703, 502717, 502729, 502769, 502771, 502781, 502787, 502807, 502819, 502829, 502841, 502847, 502861, 502883, 502919, 502921, 502937, 502961, 502973, 503003, 503017, 503039, 503053, 503077, 503123, 503131, 503137, 503147, 503159, 503197, 503207, 503213, 503227, 503231, 503233, 503249, 503267, 503287, 503297, 503303, 503317, 503339, 503351, 503359, 503369, 503381, 503383, 503389, 503407, 503413, 503423, 503431, 503441, 503453, 503483, 503501, 503543, 503549, 503551, 503563, 503593, 503599, 503609, 503611, 503621, 503623, 503647, 503653, 503663, 503707, 503717, 503743, 503753, 503771, 503777, 503779, 503791, 503803, 503819, 503821, 503827, 503851, 503857, 503869, 503879, 503911, 503927, 503929, 503939, 503947, 503959, 503963, 503969, 503983, 503989, 504001, 504011, 504017, 504047, 504061, 504073, 504103, 504121, 504139, 504143, 504149, 504151, 504157, 504181, 504187, 504197, 504209, 504221, 504247, 504269, 504289, 504299, 504307, 504311, 504323, 504337, 504349, 504353, 504359, 504377, 504379, 504389, 504403, 504457, 504461, 504473, 504479, 504521, 504523, 504527, 504547, 504563, 504593, 504599, 504607, 504617, 504619, 504631, 504661, 504667, 504671, 504677, 504683, 504727, 504767, 504787, 504797, 504799, 504817, 504821, 504851, 504853, 504857, 504871, 504877, 504893, 504901, 504929, 504937, 504943, 504947, 504953, 504967, 504983, 504989, 504991, 505027, 505031, 505033, 505049, 505051, 505061, 505067, 505073, 505091, 505097, 505111, 505117, 505123, 505129, 505139, 505157, 505159, 505181, 505187, 505201, 505213, 505231, 505237, 505277, 505279, 505283, 505301, 505313, 505319, 505321, 505327, 505339, 505357, 505367, 505369, 505399, 505409, 505411, 505429, 505447, 505459, 505469, 505481, 505493, 505501, 505511, 505513, 505523, 505537, 505559, 505573, 505601, 505607, 505613, 505619, 505633, 505639, 505643, 505657, 505663, 505669, 505691, 505693, 505709, 505711, 505727, 505759, 505763, 505777, 505781, 505811, 505819, 505823, 505867, 505871, 505877, 505907, 505919, 505927, 505949, 505961, 505969, 505979, 506047, 506071, 506083, 506101, 506113, 506119, 506131, 506147, 506171, 506173, 506183, 506201, 506213, 506251, 506263, 506269, 506281, 506291, 506327, 506329, 506333, 506339, 506347, 506351, 506357, 506381, 506393, 506417, 506423, 506449, 506459, 506461, 506479, 506491, 506501, 506507, 506531, 506533, 506537, 506551, 506563, 506573, 506591, 506593, 506599, 506609, 506629, 506647, 506663, 506683, 506687, 506689, 506699, 506729, 506731, 506743, 506773, 506783, 506791, 506797, 506809, 506837, 506843, 506861, 506873, 506887, 506893, 506899, 506903, 506911, 506929, 506941, 506963, 506983, 506993, 506999, 507029, 507049, 507071, 507077, 507079, 507103, 507109, 507113, 507119, 507137, 507139, 507149, 507151, 507163, 507193, 507197, 507217, 507289, 507301, 507313, 507317, 507329, 507347, 507349, 507359, 507361, 507371, 507383, 507401, 507421, 507431, 507461, 507491, 507497, 507499, 507503, 507523, 507557, 507571, 507589, 507593, 507599, 507607, 507631, 507641, 507667, 507673, 507691, 507697, 507713, 507719, 507743, 507757, 507779, 507781, 507797, 507803, 507809, 507821, 507827, 507839, 507883, 507901, 507907, 507917, 507919, 507937, 507953, 507961, 507971, 507979, 508009, 508019, 508021, 508033, 508037, 508073, 508087, 508091, 508097, 508103, 508129, 508159, 508171, 508187, 508213, 508223, 508229, 508237, 508243, 508259, 508271, 508273, 508297, 508301, 508327, 508331, 508349, 508363, 508367, 508373, 508393, 508433, 508439, 508451, 508471, 508477, 508489, 508499, 508513, 508517, 508531, 508549, 508559, 508567, 508577, 508579, 508583, 508619, 508621, 508637, 508643, 508661, 508693, 508709, 508727, 508771, 508789, 508799, 508811, 508817, 508841, 508847, 508867, 508901, 508903, 508909, 508913, 508919, 508931, 508943, 508951, 508957, 508961, 508969, 508973, 508987, 509023, 509027, 509053, 509063, 509071, 509087, 509101, 509123, 509137, 509147, 509149, 509203, 509221, 509227, 509239, 509263, 509281, 509287, 509293, 509297, 509317, 509329, 509359, 509363, 509389, 509393, 509413, 509417, 509429, 509441, 509449, 509477, 509513, 509521, 509543, 509549, 509557, 509563, 509569, 509573, 509581, 509591, 509603, 509623, 509633, 509647, 509653, 509659, 509681, 509687, 509689, 509693, 509699, 509723, 509731, 509737, 509741, 509767, 509783, 509797, 509801, 509833, 509837, 509843, 509863, 509867, 509879, 509909, 509911, 509921, 509939, 509947, 509959, 509963, 509989, 510007, 510031, 510047, 510049, 510061, 510067, 510073, 510077, 510079, 510089, 510101, 510121, 510127, 510137, 510157, 510179, 510199, 510203, 510217, 510227, 510233, 510241, 510247, 510253, 510271, 510287, 510299, 510311, 510319, 510331, 510361, 510379, 510383, 510401, 510403, 510449, 510451, 510457, 510463, 510481, 510529, 510551, 510553, 510569, 510581, 510583, 510589, 510611, 510613, 510617, 510619, 510677, 510683, 510691, 510707, 510709, 510751, 510767, 510773, 510793, 510803, 510817, 510823, 510827, 510847, 510889, 510907, 510919, 510931, 510941, 510943, 510989, 511001, 511013, 511019, 511033, 511039, 511057, 511061, 511087, 511109, 511111, 511123, 511151, 511153, 511163, 511169, 511171, 511177, 511193, 511201, 511211, 511213, 511223, 511237, 511243, 511261, 511279, 511289, 511297, 511327, 511333, 511337, 511351, 511361, 511387, 511391, 511409, 511417, 511439, 511447, 511453, 511457, 511463, 511477, 511487, 511507, 511519, 511523, 511541, 511549, 511559, 511573, 511579, 511583, 511591, 511603, 511627, 511631, 511633, 511669, 511691, 511703, 511711, 511723, 511757, 511787, 511793, 511801, 511811, 511831, 511843, 511859, 511867, 511873, 511891, 511897, 511909, 511933, 511939, 511961, 511963, 511991, 511997, 512009, 512011, 512021, 512047, 512059, 512093, 512101, 512137, 512147, 512167, 512207, 512249, 512251, 512269, 512287, 512311, 512321, 512333, 512353, 512389, 512419, 512429, 512443, 512467, 512497, 512503, 512507, 512521, 512531, 512537, 512543, 512569, 512573, 512579, 512581, 512591, 512593, 512597, 512609, 512621, 512641, 512657, 512663, 512671, 512683, 512711, 512713, 512717, 512741, 512747, 512761, 512767, 512779, 512797, 512803, 512819, 512821, 512843, 512849, 512891, 512899, 512903, 512917, 512921, 512927, 512929, 512959, 512977, 512989, 512999, 513001, 513013, 513017, 513031, 513041, 513047, 513053, 513059, 513067, 513083, 513101, 513103, 513109, 513131, 513137, 513157, 513167, 513169, 513173, 513203, 513239, 513257, 513269, 513277, 513283, 513307, 513311, 513313, 513319, 513341, 513347, 513353, 513367, 513371, 513397, 513407, 513419, 513427, 513431, 513439, 513473, 513479, 513481, 513509, 513511, 513529, 513533, 513593, 513631, 513641, 513649, 513673, 513679, 513683, 513691, 513697, 513719, 513727, 513731, 513739, 513749, 513761, 513767, 513769, 513781, 513829, 513839, 513841, 513871, 513881, 513899, 513917, 513923, 513937, 513943, 513977, 513991, 514001, 514009, 514013, 514021, 514049, 514051, 514057, 514061, 514079, 514081, 514093, 514103, 514117, 514123, 514127, 514147, 514177, 514187, 514201, 514219, 514229, 514243, 514247, 514249, 514271, 514277, 514289, 514309, 514313, 514333, 514343, 514357, 514361, 514379, 514399, 514417, 514429, 514433, 514453, 514499, 514513, 514519, 514523, 514529, 514531, 514543, 514561, 514571, 514621, 514637, 514639, 514643, 514649, 514651, 514669, 514681, 514711, 514733, 514739, 514741, 514747, 514751, 514757, 514769, 514783, 514793, 514819, 514823, 514831, 514841, 514847, 514853, 514859, 514867, 514873, 514889, 514903, 514933, 514939, 514949, 514967, 515041, 515087, 515089, 515111, 515143, 515149, 515153, 515173, 515191, 515227, 515231, 515233, 515237, 515279, 515293, 515311, 515323, 515351, 515357, 515369, 515371, 515377, 515381, 515401, 515429, 515477, 515507, 515519, 515539, 515563, 515579, 515587, 515597, 515611, 515621, 515639, 515651, 515653, 515663, 515677, 515681, 515687, 515693, 515701, 515737, 515741, 515761, 515771, 515773, 515777, 515783, 515803, 515813, 515839, 515843, 515857, 515861, 515873, 515887, 515917, 515923, 515929, 515941, 515951, 515969, 515993, 516017, 516023, 516049, 516053, 516077, 516091, 516127, 516151, 516157, 516161, 516163, 516169, 516179, 516193, 516199, 516209, 516223, 516227, 516233, 516247, 516251, 516253, 516277, 516283, 516293, 516319, 516323, 516349, 516359, 516361, 516371, 516377, 516391, 516407, 516421, 516431, 516433, 516437, 516449, 516457, 516469, 516493, 516499, 516517, 516521, 516539, 516541, 516563, 516587, 516589, 516599, 516611, 516617, 516619, 516623, 516643, 516653, 516673, 516679, 516689, 516701, 516709, 516713, 516721, 516727, 516757, 516793, 516811, 516821, 516829, 516839, 516847, 516871, 516877, 516883, 516907, 516911, 516931, 516947, 516949, 516959, 516973, 516977, 516979, 516991, 517003, 517043, 517061, 517067, 517073, 517079, 517081, 517087, 517091, 517129, 517151, 517169, 517177, 517183, 517189, 517207, 517211, 517217, 517229, 517241, 517243, 517249, 517261, 517267, 517277, 517289, 517303, 517337, 517343, 517367, 517373, 517381, 517393, 517399, 517403, 517411, 517417, 517457, 517459, 517469, 517471, 517481, 517487, 517499, 517501, 517507, 517511, 517513, 517547, 517549, 517553, 517571, 517577, 517589, 517597, 517603, 517609, 517613, 517619, 517637, 517639, 517711, 517717, 517721, 517729, 517733, 517739, 517747, 517817, 517823, 517831, 517861, 517873, 517877, 517901, 517919, 517927, 517931, 517949, 517967, 517981, 517991, 517999, 518017, 518047, 518057, 518059, 518083, 518099, 518101, 518113, 518123, 518129, 518131, 518137, 518153, 518159, 518171, 518179, 518191, 518207, 518209, 518233, 518237, 518239, 518249, 518261, 518291, 518299, 518311, 518327, 518341, 518387, 518389, 518411, 518417, 518429, 518431, 518447, 518467, 518471, 518473, 518509, 518521, 518533, 518543, 518579, 518587, 518597, 518611, 518621, 518657, 518689, 518699, 518717, 518729, 518737, 518741, 518743, 518747, 518759, 518761, 518767, 518779, 518801, 518803, 518807, 518809, 518813, 518831, 518863, 518867, 518893, 518911, 518933, 518953, 518981, 518983, 518989, 519011, 519031, 519037, 519067, 519083, 519089, 519091, 519097, 519107, 519119, 519121, 519131, 519151, 519161, 519193, 519217, 519227, 519229, 519247, 519257, 519269, 519283, 519287, 519301, 519307, 519349, 519353, 519359, 519371, 519373, 519383, 519391, 519413, 519427, 519433, 519457, 519487, 519499, 519509, 519521, 519523, 519527, 519539, 519551, 519553, 519577, 519581, 519587, 519611, 519619, 519643, 519647, 519667, 519683, 519691, 519703, 519713, 519733, 519737, 519769, 519787, 519793, 519797, 519803, 519817, 519863, 519881, 519889, 519907, 519917, 519919, 519923, 519931, 519943, 519947, 519971, 519989, 519997, 520019, 520021, 520031, 520043, 520063, 520067, 520073, 520103, 520111, 520123, 520129, 520151, 520193, 520213, 520241, 520279, 520291, 520297, 520307, 520309, 520313, 520339, 520349, 520357, 520361, 520363, 520369, 520379, 520381, 520393, 520409, 520411, 520423, 520427, 520433, 520447, 520451, 520529, 520547, 520549, 520567, 520571, 520589, 520607, 520609, 520621, 520631, 520633, 520649, 520679, 520691, 520699, 520703, 520717, 520721, 520747, 520759, 520763, 520787, 520813, 520837, 520841, 520853, 520867, 520889, 520913, 520921, 520943, 520957, 520963, 520967, 520969, 520981, 521009, 521021, 521023, 521039, 521041, 521047, 521051, 521063, 521107, 521119, 521137, 521153, 521161, 521167, 521173, 521177, 521179, 521201, 521231, 521243, 521251, 521267, 521281, 521299, 521309, 521317, 521329, 521357, 521359, 521363, 521369, 521377, 521393, 521399, 521401, 521429, 521447, 521471, 521483, 521491, 521497, 521503, 521519, 521527, 521533, 521537, 521539, 521551, 521557, 521567, 521581, 521603, 521641, 521657, 521659, 521669, 521671, 521693, 521707, 521723, 521743, 521749, 521753, 521767, 521777, 521789, 521791, 521809, 521813, 521819, 521831, 521861, 521869, 521879, 521881, 521887, 521897, 521903, 521923, 521929, 521981, 521993, 521999, 522017, 522037, 522047, 522059, 522061, 522073, 522079, 522083, 522113, 522127, 522157, 522161, 522167, 522191, 522199, 522211, 522227, 522229, 522233, 522239, 522251, 522259, 522281, 522283, 522289, 522317, 522323, 522337, 522371, 522373, 522383, 522391, 522409, 522413, 522439, 522449, 522469, 522479, 522497, 522517, 522521, 522523, 522541, 522553, 522569, 522601, 522623, 522637, 522659, 522661, 522673, 522677, 522679, 522689, 522703, 522707, 522719, 522737, 522749, 522757, 522761, 522763, 522787, 522811, 522827, 522829, 522839, 522853, 522857, 522871, 522881, 522883, 522887, 522919, 522943, 522947, 522959, 522961, 522989, 523007, 523021, 523031, 523049, 523093, 523097, 523109, 523129, 523169, 523177, 523207, 523213, 523219, 523261, 523297, 523307, 523333, 523349, 523351, 523357, 523387, 523403, 523417, 523427, 523433, 523459, 523463, 523487, 523489, 523493, 523511, 523519, 523541, 523543, 523553, 523571, 523573, 523577, 523597, 523603, 523631, 523637, 523639, 523657, 523667, 523669, 523673, 523681, 523717, 523729, 523741, 523759, 523763, 523771, 523777, 523793, 523801, 523829, 523847, 523867, 523877, 523903, 523907, 523927, 523937, 523949, 523969, 523987, 523997, 524047, 524053, 524057, 524063, 524071, 524081, 524087, 524099, 524113, 524119, 524123, 524149, 524171, 524189, 524197, 524201, 524203, 524219, 524221, 524231, 524243, 524257, 524261, 524269, 524287, 524309, 524341, 524347, 524351, 524353, 524369, 524387, 524389, 524411, 524413, 524429, 524453, 524497, 524507, 524509, 524519, 524521, 524591, 524593, 524599, 524633, 524669, 524681, 524683, 524701, 524707, 524731, 524743, 524789, 524801, 524803, 524827, 524831, 524857, 524863, 524869, 524873, 524893, 524899, 524921, 524933, 524939, 524941, 524947, 524957, 524959, 524963, 524969, 524971, 524981, 524983, 524999, 525001, 525013, 525017, 525029, 525043, 525101, 525127, 525137, 525143, 525157, 525163, 525167, 525191, 525193, 525199, 525209, 525221, 525241, 525247, 525253, 525257, 525299, 525313, 525353, 525359, 525361, 525373, 525377, 525379, 525391, 525397, 525409, 525431, 525433, 525439, 525457, 525461, 525467, 525491, 525493, 525517, 525529, 525533, 525541, 525571, 525583, 525593, 525599, 525607, 525641, 525649, 525671, 525677, 525697, 525709, 525713, 525719, 525727, 525731, 525739, 525769, 525773, 525781, 525809, 525817, 525839, 525869, 525871, 525887, 525893, 525913, 525923, 525937, 525947, 525949, 525953, 525961, 525979, 525983, 526027, 526037, 526049, 526051, 526063, 526067, 526069, 526073, 526087, 526117, 526121, 526139, 526157, 526159, 526189, 526193, 526199, 526213, 526223, 526231, 526249, 526271, 526283, 526289, 526291, 526297, 526307, 526367, 526373, 526381, 526387, 526391, 526397, 526423, 526429, 526441, 526453, 526459, 526483, 526499, 526501, 526511, 526531, 526543, 526571, 526573, 526583, 526601, 526619, 526627, 526633, 526637, 526649, 526651, 526657, 526667, 526679, 526681, 526703, 526709, 526717, 526733, 526739, 526741, 526759, 526763, 526777, 526781, 526829, 526831, 526837, 526853, 526859, 526871, 526909, 526913, 526931, 526937, 526943, 526951, 526957, 526963, 526993, 526997, 527053, 527057, 527063, 527069, 527071, 527081, 527099, 527123, 527129, 527143, 527159, 527161, 527173, 527179, 527203, 527207, 527209, 527237, 527251, 527273, 527281, 527291, 527327, 527333, 527347, 527353, 527377, 527381, 527393, 527399, 527407, 527411, 527419, 527441, 527447, 527453, 527489, 527507, 527533, 527557, 527563, 527581, 527591, 527599, 527603, 527623, 527627, 527633, 527671, 527699, 527701, 527729, 527741, 527749, 527753, 527789, 527803, 527809, 527819, 527843, 527851, 527869, 527881, 527897, 527909, 527921, 527929, 527941, 527981, 527983, 527987, 527993, 528001, 528013, 528041, 528043, 528053, 528091, 528097, 528107, 528127, 528131, 528137, 528163, 528167, 528191, 528197, 528217, 528223, 528247, 528263, 528289, 528299, 528313, 528317, 528329, 528373, 528383, 528391, 528401, 528403, 528413, 528419, 528433, 528469, 528487, 528491, 528509, 528511, 528527, 528559, 528611, 528623, 528629, 528631, 528659, 528667, 528673, 528679, 528691, 528707, 528709, 528719, 528763, 528779, 528791, 528799, 528811, 528821, 528823, 528833, 528863, 528877, 528881, 528883, 528911, 528929, 528947, 528967, 528971, 528973, 528991, 529003, 529007, 529027, 529033, 529037, 529043, 529049, 529051, 529097, 529103, 529117, 529121, 529127, 529129, 529153, 529157, 529181, 529183, 529213, 529229, 529237, 529241, 529259, 529271, 529273, 529301, 529307, 529313, 529327, 529343, 529349, 529357, 529381, 529393, 529411, 529421, 529423, 529471, 529489, 529513, 529517, 529519, 529531, 529547, 529577, 529579, 529603, 529619, 529637, 529649, 529657, 529673, 529681, 529687, 529691, 529693, 529709, 529723, 529741, 529747, 529751, 529807, 529811, 529813, 529819, 529829, 529847, 529871, 529927, 529933, 529939, 529957, 529961, 529973, 529979, 529981, 529987, 529999, 530017, 530021, 530027, 530041, 530051, 530063, 530087, 530093, 530129, 530137, 530143, 530177, 530183, 530197, 530203, 530209, 530227, 530237, 530249, 530251, 530261, 530267, 530279, 530293, 530297, 530303, 530329, 530333, 530339, 530353, 530359, 530389, 530393, 530401, 530429, 530443, 530447, 530501, 530507, 530513, 530527, 530531, 530533, 530539, 530549, 530567, 530597, 530599, 530603, 530609, 530641, 530653, 530659, 530669, 530693, 530701, 530711, 530713, 530731, 530741, 530743, 530753, 530767, 530773, 530797, 530807, 530833, 530837, 530843, 530851, 530857, 530861, 530869, 530897, 530911, 530947, 530969, 530977, 530983, 530989, 531017, 531023, 531043, 531071, 531079, 531101, 531103, 531121, 531133, 531143, 531163, 531169, 531173, 531197, 531203, 531229, 531239, 531253, 531263, 531281, 531287, 531299, 531331, 531337, 531343, 531347, 531353, 531359, 531383, 531457, 531481, 531497, 531521, 531547, 531551, 531569, 531571, 531581, 531589, 531611, 531613, 531623, 531631, 531637, 531667, 531673, 531689, 531701, 531731, 531793, 531799, 531821, 531823, 531827, 531833, 531841, 531847, 531857, 531863, 531871, 531877, 531901, 531911, 531919, 531977, 531983, 531989, 531997, 532001, 532009, 532027, 532033, 532061, 532069, 532093, 532099, 532141, 532153, 532159, 532163, 532183, 532187, 532193, 532199, 532241, 532249, 532261, 532267, 532277, 532283, 532307, 532313, 532327, 532331, 532333, 532349, 532373, 532379, 532391, 532403, 532417, 532421, 532439, 532447, 532451, 532453, 532489, 532501, 532523, 532529, 532531, 532537, 532547, 532561, 532601, 532603, 532607, 532619, 532621, 532633, 532639, 532663, 532669, 532687, 532691, 532709, 532733, 532739, 532751, 532757, 532771, 532781, 532783, 532789, 532801, 532811, 532823, 532849, 532853, 532867, 532907, 532919, 532949, 532951, 532981, 532993, 532999, 533003, 533009, 533011, 533033, 533051, 533053, 533063, 533077, 533089, 533111, 533129, 533149, 533167, 533177, 533189, 533191, 533213, 533219, 533227, 533237, 533249, 533257, 533261, 533263, 533297, 533303, 533317, 533321, 533327, 533353, 533363, 533371, 533389, 533399, 533413, 533447, 533453, 533459, 533509, 533543, 533549, 533573, 533581, 533593, 533633, 533641, 533671, 533693, 533711, 533713, 533719, 533723, 533737, 533747, 533777, 533801, 533809, 533821, 533831, 533837, 533857, 533879, 533887, 533893, 533909, 533921, 533927, 533959, 533963, 533969, 533971, 533989, 533993, 533999, 534007, 534013, 534019, 534029, 534043, 534047, 534049, 534059, 534073, 534077, 534091, 534101, 534113, 534137, 534167, 534173, 534199, 534203, 534211, 534229, 534241, 534253, 534283, 534301, 534307, 534311, 534323, 534329, 534341, 534367, 534371, 534403, 534407, 534431, 534439, 534473, 534491, 534511, 534529, 534553, 534571, 534577, 534581, 534601, 534607, 534617, 534629, 534631, 534637, 534647, 534649, 534659, 534661, 534671, 534697, 534707, 534739, 534799, 534811, 534827, 534839, 534841, 534851, 534857, 534883, 534889, 534913, 534923, 534931, 534943, 534949, 534971, 535013, 535019, 535033, 535037, 535061, 535099, 535103, 535123, 535133, 535151, 535159, 535169, 535181, 535193, 535207, 535219, 535229, 535237, 535243, 535273, 535303, 535319, 535333, 535349, 535351, 535361, 535387, 535391, 535399, 535481, 535487, 535489, 535499, 535511, 535523, 535529, 535547, 535571, 535573, 535589, 535607, 535609, 535627, 535637, 535663, 535669, 535673, 535679, 535697, 535709, 535727, 535741, 535751, 535757, 535771, 535783, 535793, 535811, 535849, 535859, 535861, 535879, 535919, 535937, 535939, 535943, 535957, 535967, 535973, 535991, 535999, 536017, 536023, 536051, 536057, 536059, 536069, 536087, 536099, 536101, 536111, 536141, 536147, 536149, 536189, 536191, 536203, 536213, 536219, 536227, 536233, 536243, 536267, 536273, 536279, 536281, 536287, 536293, 536311, 536323, 536353, 536357, 536377, 536399, 536407, 536423, 536441, 536443, 536447, 536449, 536453, 536461, 536467, 536479, 536491, 536509, 536513, 536531, 536533, 536561, 536563, 536593, 536609, 536621, 536633, 536651, 536671, 536677, 536687, 536699, 536717, 536719, 536729, 536743, 536749, 536771, 536773, 536777, 536779, 536791, 536801, 536803, 536839, 536849, 536857, 536867, 536869, 536891, 536909, 536917, 536923, 536929, 536933, 536947, 536953, 536971, 536989, 536999, 537001, 537007, 537011, 537023, 537029, 537037, 537041, 537067, 537071, 537079, 537091, 537127, 537133, 537143, 537157, 537169, 537181, 537191, 537197, 537221, 537233, 537241, 537269, 537281, 537287, 537307, 537331, 537343, 537347, 537373, 537379, 537401, 537403, 537413, 537497, 537527, 537547, 537569, 537583, 537587, 537599, 537611, 537637, 537661, 537673, 537679, 537703, 537709, 537739, 537743, 537749, 537769, 537773, 537781, 537787, 537793, 537811, 537841, 537847, 537853, 537877, 537883, 537899, 537913, 537919, 537941, 537991, 538001, 538019, 538049, 538051, 538073, 538079, 538093, 538117, 538121, 538123, 538127, 538147, 538151, 538157, 538159, 538163, 538199, 538201, 538247, 538249, 538259, 538267, 538283, 538297, 538301, 538303, 538309, 538331, 538333, 538357, 538367, 538397, 538399, 538411, 538423, 538457, 538471, 538481, 538487, 538511, 538513, 538519, 538523, 538529, 538553, 538561, 538567, 538579, 538589, 538597, 538621, 538649, 538651, 538697, 538709, 538711, 538721, 538723, 538739, 538751, 538763, 538771, 538777, 538789, 538799, 538801, 538817, 538823, 538829, 538841, 538871, 538877, 538921, 538927, 538931, 538939, 538943, 538987, 539003, 539009, 539039, 539047, 539089, 539093, 539101, 539107, 539111, 539113, 539129, 539141, 539153, 539159, 539167, 539171, 539207, 539219, 539233, 539237, 539261, 539267, 539269, 539293, 539303, 539309, 539311, 539321, 539323, 539339, 539347, 539351, 539389, 539401, 539447, 539449, 539479, 539501, 539503, 539507, 539509, 539533, 539573, 539621, 539629, 539633, 539639, 539641, 539653, 539663, 539677, 539687, 539711, 539713, 539723, 539729, 539743, 539761, 539783, 539797, 539837, 539839, 539843, 539849, 539863, 539881, 539897, 539899, 539921, 539947, 539993, 540041, 540061, 540079, 540101, 540119, 540121, 540139, 540149, 540157, 540167, 540173, 540179, 540181, 540187, 540203, 540217, 540233, 540251, 540269, 540271, 540283, 540301, 540307, 540343, 540347, 540349, 540367, 540373, 540377, 540383, 540389, 540391, 540433, 540437, 540461, 540469, 540509, 540511, 540517, 540539, 540541, 540557, 540559, 540577, 540587, 540599, 540611, 540613, 540619, 540629, 540677, 540679, 540689, 540691, 540697, 540703, 540713, 540751, 540769, 540773, 540779, 540781, 540803, 540809, 540823, 540851, 540863, 540871, 540877, 540901, 540907, 540961, 540989, 541001, 541007, 541027, 541049, 541061, 541087, 541097, 541129, 541133, 541141, 541153, 541181, 541193, 541201, 541217, 541231, 541237, 541249, 541267, 541271, 541283, 541301, 541309, 541339, 541349, 541361, 541363, 541369, 541381, 541391, 541417, 541439, 541447, 541469, 541483, 541507, 541511, 541523, 541529, 541531, 541537, 541543, 541547, 541549, 541571, 541577, 541579, 541589, 541613, 541631, 541657, 541661, 541669, 541693, 541699, 541711, 541721, 541727, 541759, 541763, 541771, 541777, 541781, 541799, 541817, 541831, 541837, 541859, 541889, 541901, 541927, 541951, 541967, 541987, 541991, 541993, 541999, 542021, 542023, 542027, 542053, 542063, 542071, 542081, 542083, 542093, 542111, 542117, 542119, 542123, 542131, 542141, 542149, 542153, 542167, 542183, 542189, 542197, 542207, 542219, 542237, 542251, 542261, 542263, 542281, 542293, 542299, 542323, 542371, 542401, 542441, 542447, 542461, 542467, 542483, 542489, 542497, 542519, 542533, 542537, 542539, 542551, 542557, 542567, 542579, 542587, 542599, 542603, 542683, 542687, 542693, 542713, 542719, 542723, 542747, 542761, 542771, 542783, 542791, 542797, 542821, 542831, 542837, 542873, 542891, 542911, 542921, 542923, 542933, 542939, 542947, 542951, 542981, 542987, 542999, 543017, 543019, 543029, 543061, 543097, 543113, 543131, 543139, 543143, 543149, 543157, 543161, 543163, 543187, 543203, 543217, 543223, 543227, 543233, 543241, 543253, 543259, 543281, 543287, 543289, 543299, 543307, 543311, 543313, 543341, 543349, 543353, 543359, 543379, 543383, 543407, 543427, 543463, 543497, 543503, 543509, 543539, 543551, 543553, 543593, 543601, 543607, 543611, 543617, 543637, 543659, 543661, 543671, 543679, 543689, 543703, 543707, 543713, 543769, 543773, 543787, 543791, 543793, 543797, 543811, 543827, 543841, 543853, 543857, 543859, 543871, 543877, 543883, 543887, 543889, 543901, 543911, 543929, 543967, 543971, 543997, 544001, 544007, 544009, 544013, 544021, 544031, 544097, 544099, 544109, 544123, 544129, 544133, 544139, 544171, 544177, 544183, 544199, 544223, 544259, 544273, 544277, 544279, 544367, 544373, 544399, 544403, 544429, 544451, 544471, 544477, 544487, 544501, 544513, 544517, 544543, 544549, 544601, 544613, 544627, 544631, 544651, 544667, 544699, 544717, 544721, 544723, 544727, 544757, 544759, 544771, 544781, 544793, 544807, 544813, 544837, 544861, 544877, 544879, 544883, 544889, 544897, 544903, 544919, 544927, 544937, 544961, 544963, 544979, 545023, 545029, 545033, 545057, 545063, 545087, 545089, 545093, 545117, 545131, 545141, 545143, 545161, 545189, 545203, 545213, 545231, 545239, 545257, 545267, 545291, 545329, 545371, 545387, 545429, 545437, 545443, 545449, 545473, 545477, 545483, 545497, 545521, 545527, 545533, 545543, 545549, 545551, 545579, 545599, 545609, 545617, 545621, 545641, 545647, 545651, 545663, 545711, 545723, 545731, 545747, 545749, 545759, 545773, 545789, 545791, 545827, 545843, 545863, 545873, 545893, 545899, 545911, 545917, 545929, 545933, 545939, 545947, 545959, 546001, 546017, 546019, 546031, 546047, 546053, 546067, 546071, 546097, 546101, 546103, 546109, 546137, 546149, 546151, 546173, 546179, 546197, 546211, 546233, 546239, 546241, 546253, 546263, 546283, 546289, 546317, 546323, 546341, 546349, 546353, 546361, 546367, 546373, 546391, 546461, 546467, 546479, 546509, 546523, 546547, 546569, 546583, 546587, 546599, 546613, 546617, 546619, 546631, 546643, 546661, 546671, 546677, 546683, 546691, 546709, 546719, 546731, 546739, 546781, 546841, 546859, 546863, 546869, 546881, 546893, 546919, 546937, 546943, 546947, 546961, 546967, 546977, 547007, 547021, 547037, 547061, 547087, 547093, 547097, 547103, 547121, 547133, 547139, 547171, 547223, 547229, 547237, 547241, 547249, 547271, 547273, 547291, 547301, 547321, 547357, 547361, 547363, 547369, 547373, 547387, 547397, 547399, 547411, 547441, 547453, 547471, 547483, 547487, 547493, 547499, 547501, 547513, 547529, 547537, 547559, 547567, 547577, 547583, 547601, 547609, 547619, 547627, 547639, 547643, 547661, 547663, 547681, 547709, 547727, 547741, 547747, 547753, 547763, 547769, 547787, 547817, 547819, 547823, 547831, 547849, 547853, 547871, 547889, 547901, 547909, 547951, 547957, 547999, 548003, 548039, 548059, 548069, 548083, 548089, 548099, 548117, 548123, 548143, 548153, 548189, 548201, 548213, 548221, 548227, 548239, 548243, 548263, 548291, 548309, 548323, 548347, 548351, 548363, 548371, 548393, 548399, 548407, 548417, 548423, 548441, 548453, 548459, 548461, 548489, 548501, 548503, 548519, 548521, 548533, 548543, 548557, 548567, 548579, 548591, 548623, 548629, 548657, 548671, 548677, 548687, 548693, 548707, 548719, 548749, 548753, 548761, 548771, 548783, 548791, 548827, 548831, 548833, 548837, 548843, 548851, 548861, 548869, 548893, 548897, 548903, 548909, 548927, 548953, 548957, 548963, 549001, 549011, 549013, 549019, 549023, 549037, 549071, 549089, 549091, 549097, 549121, 549139, 549149, 549161, 549163, 549167, 549169, 549193, 549203, 549221, 549229, 549247, 549257, 549259, 549281, 549313, 549319, 549323, 549331, 549379, 549391, 549403, 549421, 549431, 549443, 549449, 549481, 549503, 549509, 549511, 549517, 549533, 549547, 549551, 549553, 549569, 549587, 549589, 549607, 549623, 549641, 549643, 549649, 549667, 549683, 549691, 549701, 549707, 549713, 549719, 549733, 549737, 549739, 549749, 549751, 549767, 549817, 549833, 549839, 549863, 549877, 549883, 549911, 549937, 549943, 549949, 549977, 549979, 550007, 550009, 550027, 550049, 550061, 550063, 550073, 550111, 550117, 550127, 550129, 550139, 550163, 550169, 550177, 550181, 550189, 550211, 550213, 550241, 550267, 550279, 550283, 550289, 550309, 550337, 550351, 550369, 550379, 550427, 550439, 550441, 550447, 550457, 550469, 550471, 550489, 550513, 550519, 550531, 550541, 550553, 550577, 550607, 550609, 550621, 550631, 550637, 550651, 550657, 550661, 550663, 550679, 550691, 550703, 550717, 550721, 550733, 550757, 550763, 550789, 550801, 550811, 550813, 550831, 550841, 550843, 550859, 550861, 550903, 550909, 550937, 550939, 550951, 550961, 550969, 550973, 550993, 550997, 551003, 551017, 551027, 551039, 551059, 551063, 551069, 551093, 551099, 551107, 551113, 551129, 551143, 551179, 551197, 551207, 551219, 551231, 551233, 551269, 551281, 551297, 551311, 551321, 551339, 551347, 551363, 551381, 551387, 551407, 551423, 551443, 551461, 551483, 551489, 551503, 551519, 551539, 551543, 551549, 551557, 551569, 551581, 551587, 551597, 551651, 551653, 551659, 551671, 551689, 551693, 551713, 551717, 551723, 551729, 551731, 551743, 551753, 551767, 551773, 551801, 551809, 551813, 551843, 551849, 551861, 551909, 551911, 551917, 551927, 551933, 551951, 551959, 551963, 551981, 552001, 552011, 552029, 552031, 552047, 552053, 552059, 552089, 552091, 552103, 552107, 552113, 552127, 552137, 552179, 552193, 552217, 552239, 552241, 552259, 552263, 552271, 552283, 552301, 552317, 552341, 552353, 552379, 552397, 552401, 552403, 552469, 552473, 552481, 552491, 552493, 552511, 552523, 552527, 552553, 552581, 552583, 552589, 552611, 552649, 552659, 552677, 552703, 552707, 552709, 552731, 552749, 552751, 552757, 552787, 552791, 552793, 552809, 552821, 552833, 552841, 552847, 552859, 552883, 552887, 552899, 552913, 552917, 552971, 552983, 552991, 553013, 553037, 553043, 553051, 553057, 553067, 553073, 553093, 553097, 553099, 553103, 553123, 553139, 553141, 553153, 553171, 553181, 553193, 553207, 553211, 553229, 553249, 553253, 553277, 553279, 553309, 553351, 553363, 553369, 553411, 553417, 553433, 553439, 553447, 553457, 553463, 553471, 553481, 553507, 553513, 553517, 553529, 553543, 553549, 553561, 553573, 553583, 553589, 553591, 553601, 553607, 553627, 553643, 553649, 553667, 553681, 553687, 553699, 553703, 553727, 553733, 553747, 553757, 553759, 553769, 553789, 553811, 553837, 553849, 553867, 553873, 553897, 553901, 553919, 553921, 553933, 553961, 553963, 553981, 553991, 554003, 554011, 554017, 554051, 554077, 554087, 554089, 554117, 554123, 554129, 554137, 554167, 554171, 554179, 554189, 554207, 554209, 554233, 554237, 554263, 554269, 554293, 554299, 554303, 554317, 554347, 554377, 554383, 554417, 554419, 554431, 554447, 554453, 554467, 554503, 554527, 554531, 554569, 554573, 554597, 554611, 554627, 554633, 554639, 554641, 554663, 554669, 554677, 554699, 554707, 554711, 554731, 554747, 554753, 554759, 554767, 554779, 554789, 554791, 554797, 554803, 554821, 554833, 554837, 554839, 554843, 554849, 554887, 554891, 554893, 554899, 554923, 554927, 554951, 554959, 554969, 554977, 555029, 555041, 555043, 555053, 555073, 555077, 555083, 555091, 555097, 555109, 555119, 555143, 555167, 555209, 555221, 555251, 555253, 555257, 555277, 555287, 555293, 555301, 555307, 555337, 555349, 555361, 555383, 555391, 555419, 555421, 555439, 555461, 555487, 555491, 555521, 555523, 555557, 555589, 555593, 555637, 555661, 555671, 555677, 555683, 555691, 555697, 555707, 555739, 555743, 555761, 555767, 555823, 555827, 555829, 555853, 555857, 555871, 555931, 555941, 555953, 555967, 556007, 556021, 556027, 556037, 556043, 556051, 556067, 556069, 556093, 556103, 556123, 556159, 556177, 556181, 556211, 556219, 556229, 556243, 556253, 556261, 556267, 556271, 556273, 556279, 556289, 556313, 556321, 556327, 556331, 556343, 556351, 556373, 556399, 556403, 556441, 556459, 556477, 556483, 556487, 556513, 556519, 556537, 556559, 556573, 556579, 556583, 556601, 556607, 556609, 556613, 556627, 556639, 556651, 556679, 556687, 556691, 556693, 556697, 556709, 556723, 556727, 556741, 556753, 556763, 556769, 556781, 556789, 556793, 556799, 556811, 556817, 556819, 556823, 556841, 556849, 556859, 556861, 556867, 556883, 556891, 556931, 556939, 556943, 556957, 556967, 556981, 556987, 556999, 557017, 557021, 557027, 557033, 557041, 557057, 557059, 557069, 557087, 557093, 557153, 557159, 557197, 557201, 557261, 557269, 557273, 557281, 557303, 557309, 557321, 557329, 557339, 557369, 557371, 557377, 557423, 557443, 557449, 557461, 557483, 557489, 557519, 557521, 557533, 557537, 557551, 557567, 557573, 557591, 557611, 557633, 557639, 557663, 557671, 557693, 557717, 557729, 557731, 557741, 557743, 557747, 557759, 557761, 557779, 557789, 557801, 557803, 557831, 557857, 557861, 557863, 557891, 557899, 557903, 557927, 557981, 557987, 558007, 558017, 558029, 558053, 558067, 558083, 558091, 558109, 558113, 558121, 558139, 558149, 558167, 558179, 558197, 558203, 558209, 558223, 558241, 558251, 558253, 558287, 558289, 558307, 558319, 558343, 558401, 558413, 558421, 558427, 558431, 558457, 558469, 558473, 558479, 558491, 558497, 558499, 558521, 558529, 558533, 558539, 558541, 558563, 558583, 558587, 558599, 558611, 558629, 558643, 558661, 558683, 558703, 558721, 558731, 558757, 558769, 558781, 558787, 558791, 558793, 558827, 558829, 558863, 558869, 558881, 558893, 558913, 558931, 558937, 558947, 558973, 558979, 558997, 559001, 559049, 559051, 559067, 559081, 559093, 559099, 559123, 559133, 559157, 559177, 559183, 559201, 559211, 559213, 559217, 559219, 559231, 559243, 559259, 559277, 559297, 559313, 559319, 559343, 559357, 559367, 559369, 559397, 559421, 559451, 559459, 559469, 559483, 559511, 559513, 559523, 559529, 559541, 559547, 559549, 559561, 559571, 559577, 559583, 559591, 559597, 559631, 559633, 559639, 559649, 559667, 559673, 559679, 559687, 559703, 559709, 559739, 559747, 559777, 559781, 559799, 559807, 559813, 559831, 559841, 559849, 559859, 559877, 559883, 559901, 559907, 559913, 559939, 559967, 559973, 559991, 560017, 560023, 560029, 560039, 560047, 560081, 560083, 560089, 560093, 560107, 560113, 560117, 560123, 560137, 560149, 560159, 560171, 560173, 560179, 560191, 560207, 560213, 560221, 560227, 560233, 560237, 560239, 560243, 560249, 560281, 560293, 560297, 560299, 560311, 560317, 560341, 560353, 560393, 560411, 560437, 560447, 560459, 560471, 560477, 560479, 560489, 560491, 560501, 560503, 560531, 560543, 560551, 560561, 560597, 560617, 560621, 560639, 560641, 560653, 560669, 560683, 560689, 560701, 560719, 560737, 560753, 560761, 560767, 560771, 560783, 560797, 560803, 560827, 560837, 560863, 560869, 560873, 560887, 560891, 560893, 560897, 560929, 560939, 560941, 560969, 560977, 561019, 561047, 561053, 561059, 561061, 561079, 561083, 561091, 561097, 561101, 561103, 561109, 561161, 561173, 561181, 561191, 561199, 561229, 561251, 561277, 561307, 561313, 561343, 561347, 561359, 561367, 561373, 561377, 561389, 561409, 561419, 561439, 561461, 561521, 561529, 561551, 561553, 561559, 561599, 561607, 561667, 561703, 561713, 561733, 561761, 561767, 561787, 561797, 561809, 561829, 561839, 561907, 561917, 561923, 561931, 561943, 561947, 561961, 561973, 561983, 561997, 562007, 562019, 562021, 562043, 562091, 562103, 562129, 562147, 562169, 562181, 562193, 562201, 562231, 562259, 562271, 562273, 562283, 562291, 562297, 562301, 562307, 562313, 562333, 562337, 562349, 562351, 562357, 562361, 562399, 562403, 562409, 562417, 562421, 562427, 562439, 562459, 562477, 562493, 562501, 562517, 562519, 562537, 562577, 562579, 562589, 562591, 562607, 562613, 562621, 562631, 562633, 562651, 562663, 562669, 562673, 562691, 562693, 562699, 562703, 562711, 562721, 562739, 562753, 562759, 562763, 562781, 562789, 562813, 562831, 562841, 562871, 562897, 562901, 562909, 562931, 562943, 562949, 562963, 562967, 562973, 562979, 562987, 562997, 563009, 563011, 563021, 563039, 563041, 563047, 563051, 563077, 563081, 563099, 563113, 563117, 563119, 563131, 563149, 563153, 563183, 563197, 563219, 563249, 563263, 563287, 563327, 563351, 563357, 563359, 563377, 563401, 563411, 563413, 563417, 563419, 563447, 563449, 563467, 563489, 563501, 563503, 563543, 563551, 563561, 563587, 563593, 563599, 563623, 563657, 563663, 563723, 563743, 563747, 563777, 563809, 563813, 563821, 563831, 563837, 563851, 563869, 563881, 563887, 563897, 563929, 563933, 563947, 563971, 563987, 563999, 564013, 564017, 564041, 564049, 564059, 564061, 564089, 564097, 564103, 564127, 564133, 564149, 564163, 564173, 564191, 564197, 564227, 564229, 564233, 564251, 564257, 564269, 564271, 564299, 564301, 564307, 564313, 564323, 564353, 564359, 564367, 564371, 564373, 564391, 564401, 564407, 564409, 564419, 564437, 564449, 564457, 564463, 564467, 564491, 564497, 564523, 564533, 564593, 564607, 564617, 564643, 564653, 564667, 564671, 564679, 564701, 564703, 564709, 564713, 564761, 564779, 564793, 564797, 564827, 564871, 564881, 564899, 564917, 564919, 564923, 564937, 564959, 564973, 564979, 564983, 564989, 564997, 565013, 565039, 565049, 565057, 565069, 565109, 565111, 565127, 565163, 565171, 565177, 565183, 565189, 565207, 565237, 565241, 565247, 565259, 565261, 565273, 565283, 565289, 565303, 565319, 565333, 565337, 565343, 565361, 565379, 565381, 565387, 565391, 565393, 565427, 565429, 565441, 565451, 565463, 565469, 565483, 565489, 565507, 565511, 565517, 565519, 565549, 565553, 565559, 565567, 565571, 565583, 565589, 565597, 565603, 565613, 565637, 565651, 565661, 565667, 565723, 565727, 565769, 565771, 565787, 565793, 565813, 565849, 565867, 565889, 565891, 565907, 565909, 565919, 565921, 565937, 565973, 565979, 565997, 566011, 566023, 566047, 566057, 566077, 566089, 566101, 566107, 566131, 566149, 566161, 566173, 566179, 566183, 566201, 566213, 566227, 566231, 566233, 566273, 566311, 566323, 566347, 566387, 566393, 566413, 566417, 566429, 566431, 566437, 566441, 566443, 566453, 566521, 566537, 566539, 566543, 566549, 566551, 566557, 566563, 566567, 566617, 566633, 566639, 566653, 566659, 566677, 566681, 566693, 566701, 566707, 566717, 566719, 566723, 566737, 566759, 566767, 566791, 566821, 566833, 566851, 566857, 566879, 566911, 566939, 566947, 566963, 566971, 566977, 566987, 566999, 567011, 567013, 567031, 567053, 567059, 567067, 567097, 567101, 567107, 567121, 567143, 567179, 567181, 567187, 567209, 567257, 567263, 567277, 567319, 567323, 567367, 567377, 567383, 567389, 567401, 567407, 567439, 567449, 567451, 567467, 567487, 567493, 567499, 567527, 567529, 567533, 567569, 567601, 567607, 567631, 567649, 567653, 567659, 567661, 567667, 567673, 567689, 567719, 567737, 567751, 567761, 567767, 567779, 567793, 567811, 567829, 567841, 567857, 567863, 567871, 567877, 567881, 567883, 567899, 567937, 567943, 567947, 567949, 567961, 567979, 567991, 567997, 568019, 568027, 568033, 568049, 568069, 568091, 568097, 568109, 568133, 568151, 568153, 568163, 568171, 568177, 568187, 568189, 568193, 568201, 568207, 568231, 568237, 568241, 568273, 568279, 568289, 568303, 568349, 568363, 568367, 568387, 568391, 568433, 568439, 568441, 568453, 568471, 568481, 568493, 568523, 568541, 568549, 568577, 568609, 568619, 568627, 568643, 568657, 568669, 568679, 568691, 568699, 568709, 568723, 568751, 568783, 568787, 568807, 568823, 568831, 568853, 568877, 568891, 568903, 568907, 568913, 568921, 568963, 568979, 568987, 568991, 568999, 569003, 569011, 569021, 569047, 569053, 569057, 569071, 569077, 569081, 569083, 569111, 569117, 569137, 569141, 569159, 569161, 569189, 569197, 569201, 569209, 569213, 569237, 569243, 569249, 569251, 569263, 569267, 569269, 569321, 569323, 569369, 569417, 569419, 569423, 569431, 569447, 569461, 569479, 569497, 569507, 569533, 569573, 569579, 569581, 569599, 569603, 569609, 569617, 569623, 569659, 569663, 569671, 569683, 569711, 569713, 569717, 569729, 569731, 569747, 569759, 569771, 569773, 569797, 569809, 569813, 569819, 569831, 569839, 569843, 569851, 569861, 569869, 569887, 569893, 569897, 569903, 569927, 569939, 569957, 569983, 570001, 570013, 570029, 570041, 570043, 570047, 570049, 570071, 570077, 570079, 570083, 570091, 570107, 570109, 570113, 570131, 570139, 570161, 570173, 570181, 570191, 570217, 570221, 570233, 570253, 570329, 570359, 570373, 570379, 570389, 570391, 570403, 570407, 570413, 570419, 570421, 570461, 570463, 570467, 570487, 570491, 570497, 570499, 570509, 570511, 570527, 570529, 570539, 570547, 570553, 570569, 570587, 570601, 570613, 570637, 570643, 570649, 570659, 570667, 570671, 570677, 570683, 570697, 570719, 570733, 570737, 570743, 570781, 570821, 570827, 570839, 570841, 570851, 570853, 570859, 570881, 570887, 570901, 570919, 570937, 570949, 570959, 570961, 570967, 570991, 571001, 571019, 571031, 571037, 571049, 571069, 571093, 571099, 571111, 571133, 571147, 571157, 571163, 571199, 571201, 571211, 571223, 571229, 571231, 571261, 571267, 571279, 571303, 571321, 571331, 571339, 571369, 571381, 571397, 571399, 571409, 571433, 571453, 571471, 571477, 571531, 571541, 571579, 571583, 571589, 571601, 571603, 571633, 571657, 571673, 571679, 571699, 571709, 571717, 571721, 571741, 571751, 571759, 571777, 571783, 571789, 571799, 571801, 571811, 571841, 571847, 571853, 571861, 571867, 571871, 571873, 571877, 571903, 571933, 571939, 571969, 571973, 572023, 572027, 572041, 572051, 572053, 572059, 572063, 572069, 572087, 572093, 572107, 572137, 572161, 572177, 572179, 572183, 572207, 572233, 572239, 572251, 572269, 572281, 572303, 572311, 572321, 572323, 572329, 572333, 572357, 572387, 572399, 572417, 572419, 572423, 572437, 572449, 572461, 572471, 572479, 572491, 572497, 572519, 572521, 572549, 572567, 572573, 572581, 572587, 572597, 572599, 572609, 572629, 572633, 572639, 572651, 572653, 572657, 572659, 572683, 572687, 572699, 572707, 572711, 572749, 572777, 572791, 572801, 572807, 572813, 572821, 572827, 572833, 572843, 572867, 572879, 572881, 572903, 572909, 572927, 572933, 572939, 572941, 572963, 572969, 572993, 573007, 573031, 573047, 573101, 573107, 573109, 573119, 573143, 573161, 573163, 573179, 573197, 573247, 573253, 573263, 573277, 573289, 573299, 573317, 573329, 573341, 573343, 573371, 573379, 573383, 573409, 573437, 573451, 573457, 573473, 573479, 573481, 573487, 573493, 573497, 573509, 573511, 573523, 573527, 573557, 573569, 573571, 573637, 573647, 573673, 573679, 573691, 573719, 573737, 573739, 573757, 573761, 573763, 573787, 573791, 573809, 573817, 573829, 573847, 573851, 573863, 573871, 573883, 573887, 573899, 573901, 573929, 573941, 573953, 573967, 573973, 573977, 574003, 574031, 574033, 574051, 574061, 574081, 574099, 574109, 574127, 574157, 574159, 574163, 574169, 574181, 574183, 574201, 574219, 574261, 574279, 574283, 574289, 574297, 574307, 574309, 574363, 574367, 574373, 574393, 574423, 574429, 574433, 574439, 574477, 574489, 574493, 574501, 574507, 574529, 574543, 574547, 574597, 574619, 574621, 574627, 574631, 574643, 574657, 574667, 574687, 574699, 574703, 574711, 574723, 574727, 574733, 574741, 574789, 574799, 574801, 574813, 574817, 574859, 574907, 574913, 574933, 574939, 574949, 574963, 574967, 574969, 575009, 575027, 575033, 575053, 575063, 575077, 575087, 575119, 575123, 575129, 575131, 575137, 575153, 575173, 575177, 575203, 575213, 575219, 575231, 575243, 575249, 575251, 575257, 575261, 575303, 575317, 575359, 575369, 575371, 575401, 575417, 575429, 575431, 575441, 575473, 575479, 575489, 575503, 575513, 575551, 575557, 575573, 575579, 575581, 575591, 575593, 575611, 575623, 575647, 575651, 575669, 575677, 575689, 575693, 575699, 575711, 575717, 575723, 575747, 575753, 575777, 575791, 575821, 575837, 575849, 575857, 575863, 575867, 575893, 575903, 575921, 575923, 575941, 575957, 575959, 575963, 575987, 576001, 576013, 576019, 576029, 576031, 576041, 576049, 576089, 576101, 576119, 576131, 576151, 576161, 576167, 576179, 576193, 576203, 576211, 576217, 576221, 576223, 576227, 576287, 576293, 576299, 576313, 576319, 576341, 576377, 576379, 576391, 576421, 576427, 576431, 576439, 576461, 576469, 576473, 576493, 576509, 576523, 576529, 576533, 576539, 576551, 576553, 576577, 576581, 576613, 576617, 576637, 576647, 576649, 576659, 576671, 576677, 576683, 576689, 576701, 576703, 576721, 576727, 576731, 576739, 576743, 576749, 576757, 576769, 576787, 576791, 576881, 576883, 576889, 576899, 576943, 576949, 576967, 576977, 577007, 577009, 577033, 577043, 577063, 577067, 577069, 577081, 577097, 577111, 577123, 577147, 577151, 577153, 577169, 577177, 577193, 577219, 577249, 577259, 577271, 577279, 577307, 577327, 577331, 577333, 577349, 577351, 577363, 577387, 577397, 577399, 577427, 577453, 577457, 577463, 577471, 577483, 577513, 577517, 577523, 577529, 577531, 577537, 577547, 577559, 577573, 577589, 577601, 577613, 577627, 577637, 577639, 577667, 577721, 577739, 577751, 577757, 577781, 577799, 577807, 577817, 577831, 577849, 577867, 577873, 577879, 577897, 577901, 577909, 577919, 577931, 577937, 577939, 577957, 577979, 577981, 578021, 578029, 578041, 578047, 578063, 578077, 578093, 578117, 578131, 578167, 578183, 578191, 578203, 578209, 578213, 578251, 578267, 578297, 578299, 578309, 578311, 578317, 578327, 578353, 578363, 578371, 578399, 578401, 578407, 578419, 578441, 578453, 578467, 578477, 578483, 578489, 578497, 578503, 578509, 578533, 578537, 578563, 578573, 578581, 578587, 578597, 578603, 578609, 578621, 578647, 578659, 578687, 578689, 578693, 578701, 578719, 578729, 578741, 578777, 578779, 578789, 578803, 578819, 578821, 578827, 578839, 578843, 578857, 578861, 578881, 578917, 578923, 578957, 578959, 578971, 578999, 579011, 579017, 579023, 579053, 579079, 579083, 579107, 579113, 579119, 579133, 579179, 579197, 579199, 579239, 579251, 579259, 579263, 579277, 579281, 579283, 579287, 579311, 579331, 579353, 579379, 579407, 579409, 579427, 579433, 579451, 579473, 579497, 579499, 579503, 579517, 579521, 579529, 579533, 579539, 579541, 579563, 579569, 579571, 579583, 579587, 579611, 579613, 579629, 579637, 579641, 579643, 579653, 579673, 579701, 579707, 579713, 579721, 579737, 579757, 579763, 579773, 579779, 579809, 579829, 579851, 579869, 579877, 579881, 579883, 579893, 579907, 579947, 579949, 579961, 579967, 579973, 579983, 580001, 580031, 580033, 580079, 580081, 580093, 580133, 580163, 580169, 580183, 580187, 580201, 580213, 580219, 580231, 580259, 580291, 580301, 580303, 580331, 580339, 580343, 580357, 580361, 580373, 580379, 580381, 580409, 580417, 580471, 580477, 580487, 580513, 580529, 580549, 580553, 580561, 580577, 580607, 580627, 580631, 580633, 580639, 580663, 580673, 580687, 580691, 580693, 580711, 580717, 580733, 580747, 580757, 580759, 580763, 580787, 580793, 580807, 580813, 580837, 580843, 580859, 580871, 580889, 580891, 580901, 580913, 580919, 580927, 580939, 580969, 580981, 580997, 581029, 581041, 581047, 581069, 581071, 581089, 581099, 581101, 581137, 581143, 581149, 581171, 581173, 581177, 581183, 581197, 581201, 581227, 581237, 581239, 581261, 581263, 581293, 581303, 581311, 581323, 581333, 581341, 581351, 581353, 581369, 581377, 581393, 581407, 581411, 581429, 581443, 581447, 581459, 581473, 581491, 581521, 581527, 581549, 581551, 581557, 581573, 581597, 581599, 581617, 581639, 581657, 581663, 581683, 581687, 581699, 581701, 581729, 581731, 581743, 581753, 581767, 581773, 581797, 581809, 581821, 581843, 581857, 581863, 581869, 581873, 581891, 581909, 581921, 581941, 581947, 581953, 581981, 581983, 582011, 582013, 582017, 582031, 582037, 582067, 582083, 582119, 582137, 582139, 582157, 582161, 582167, 582173, 582181, 582203, 582209, 582221, 582223, 582227, 582247, 582251, 582299, 582317, 582319, 582371, 582391, 582409, 582419, 582427, 582433, 582451, 582457, 582469, 582499, 582509, 582511, 582541, 582551, 582563, 582587, 582601, 582623, 582643, 582649, 582677, 582689, 582691, 582719, 582721, 582727, 582731, 582737, 582761, 582763, 582767, 582773, 582781, 582793, 582809, 582821, 582851, 582853, 582859, 582887, 582899, 582931, 582937, 582949, 582961, 582971, 582973, 582983, 583007, 583013, 583019, 583021, 583031, 583069, 583087, 583127, 583139, 583147, 583153, 583169, 583171, 583181, 583189, 583207, 583213, 583229, 583237, 583249, 583267, 583273, 583279, 583291, 583301, 583337, 583339, 583351, 583367, 583391, 583397, 583403, 583409, 583417, 583421, 583447, 583459, 583469, 583481, 583493, 583501, 583511, 583519, 583523, 583537, 583543, 583577, 583603, 583613, 583619, 583621, 583631, 583651, 583657, 583669, 583673, 583697, 583727, 583733, 583753, 583769, 583777, 583783, 583789, 583801, 583841, 583853, 583859, 583861, 583873, 583879, 583903, 583909, 583937, 583969, 583981, 583991, 583997, 584011, 584027, 584033, 584053, 584057, 584063, 584081, 584099, 584141, 584153, 584167, 584183, 584203, 584249, 584261, 584279, 584281, 584303, 584347, 584357, 584359, 584377, 584387, 584393, 584399, 584411, 584417, 584429, 584447, 584471, 584473, 584509, 584531, 584557, 584561, 584587, 584593, 584599, 584603, 584609, 584621, 584627, 584659, 584663, 584677, 584693, 584699, 584707, 584713, 584719, 584723, 584737, 584767, 584777, 584789, 584791, 584809, 584849, 584863, 584869, 584873, 584879, 584897, 584911, 584917, 584923, 584951, 584963, 584971, 584981, 584993, 584999, 585019, 585023, 585031, 585037, 585041, 585043, 585049, 585061, 585071, 585073, 585077, 585107, 585113, 585119, 585131, 585149, 585163, 585199, 585217, 585251, 585269, 585271, 585283, 585289, 585313, 585317, 585337, 585341, 585367, 585383, 585391, 585413, 585437, 585443, 585461, 585467, 585493, 585503, 585517, 585547, 585551, 585569, 585577, 585581, 585587, 585593, 585601, 585619, 585643, 585653, 585671, 585677, 585691, 585721, 585727, 585733, 585737, 585743, 585749, 585757, 585779, 585791, 585799, 585839, 585841, 585847, 585853, 585857, 585863, 585877, 585881, 585883, 585889, 585899, 585911, 585913, 585917, 585919, 585953, 585989, 585997, 586009, 586037, 586051, 586057, 586067, 586073, 586087, 586111, 586121, 586123, 586129, 586139, 586147, 586153, 586189, 586213, 586237, 586273, 586277, 586291, 586301, 586309, 586319, 586349, 586361, 586363, 586367, 586387, 586403, 586429, 586433, 586457, 586459, 586463, 586471, 586493, 586499, 586501, 586541, 586543, 586567, 586571, 586577, 586589, 586601, 586603, 586609, 586627, 586631, 586633, 586667, 586679, 586693, 586711, 586723, 586741, 586769, 586787, 586793, 586801, 586811, 586813, 586819, 586837, 586841, 586849, 586871, 586897, 586903, 586909, 586919, 586921, 586933, 586939, 586951, 586961, 586973, 586979, 586981, 587017, 587021, 587033, 587051, 587053, 587057, 587063, 587087, 587101, 587107, 587117, 587123, 587131, 587137, 587143, 587149, 587173, 587179, 587189, 587201, 587219, 587263, 587267, 587269, 587281, 587287, 587297, 587303, 587341, 587371, 587381, 587387, 587413, 587417, 587429, 587437, 587441, 587459, 587467, 587473, 587497, 587513, 587519, 587527, 587533, 587539, 587549, 587551, 587563, 587579, 587599, 587603, 587617, 587621, 587623, 587633, 587659, 587669, 587677, 587687, 587693, 587711, 587731, 587737, 587747, 587749, 587753, 587771, 587773, 587789, 587813, 587827, 587833, 587849, 587863, 587887, 587891, 587897, 587927, 587933, 587947, 587959, 587969, 587971, 587987, 587989, 587999, 588011, 588019, 588037, 588043, 588061, 588073, 588079, 588083, 588097, 588113, 588121, 588131, 588151, 588167, 588169, 588173, 588191, 588199, 588229, 588239, 588241, 588257, 588277, 588293, 588311, 588347, 588359, 588361, 588383, 588389, 588397, 588403, 588433, 588437, 588463, 588481, 588493, 588503, 588509, 588517, 588521, 588529, 588569, 588571, 588619, 588631, 588641, 588647, 588649, 588667, 588673, 588683, 588703, 588733, 588737, 588743, 588767, 588773, 588779, 588811, 588827, 588839, 588871, 588877, 588881, 588893, 588911, 588937, 588941, 588947, 588949, 588953, 588977, 589021, 589027, 589049, 589063, 589109, 589111, 589123, 589139, 589159, 589163, 589181, 589187, 589189, 589207, 589213, 589219, 589231, 589241, 589243, 589273, 589289, 589291, 589297, 589327, 589331, 589349, 589357, 589387, 589409, 589439, 589451, 589453, 589471, 589481, 589493, 589507, 589529, 589531, 589579, 589583, 589591, 589601, 589607, 589609, 589639, 589643, 589681, 589711, 589717, 589751, 589753, 589759, 589763, 589783, 589793, 589807, 589811, 589829, 589847, 589859, 589861, 589873, 589877, 589903, 589921, 589933, 589993, 589997, 590021, 590027, 590033, 590041, 590071, 590077, 590099, 590119, 590123, 590129, 590131, 590137, 590141, 590153, 590171, 590201, 590207, 590243, 590251, 590263, 590267, 590269, 590279, 590309, 590321, 590323, 590327, 590357, 590363, 590377, 590383, 590389, 590399, 590407, 590431, 590437, 590489, 590537, 590543, 590567, 590573, 590593, 590599, 590609, 590627, 590641, 590647, 590657, 590659, 590669, 590713, 590717, 590719, 590741, 590753, 590771, 590797, 590809, 590813, 590819, 590833, 590839, 590867, 590899, 590921, 590923, 590929, 590959, 590963, 590983, 590987, 591023, 591053, 591061, 591067, 591079, 591089, 591091, 591113, 591127, 591131, 591137, 591161, 591163, 591181, 591193, 591233, 591259, 591271, 591287, 591289, 591301, 591317, 591319, 591341, 591377, 591391, 591403, 591407, 591421, 591431, 591443, 591457, 591469, 591499, 591509, 591523, 591553, 591559, 591581, 591599, 591601, 591611, 591623, 591649, 591653, 591659, 591673, 591691, 591709, 591739, 591743, 591749, 591751, 591757, 591779, 591791, 591827, 591841, 591847, 591863, 591881, 591887, 591893, 591901, 591937, 591959, 591973, 592019, 592027, 592049, 592057, 592061, 592073, 592087, 592099, 592121, 592129, 592133, 592139, 592157, 592199, 592217, 592219, 592223, 592237, 592261, 592289, 592303, 592307, 592309, 592321, 592337, 592343, 592351, 592357, 592367, 592369, 592387, 592391, 592393, 592429, 592451, 592453, 592463, 592469, 592483, 592489, 592507, 592517, 592531, 592547, 592561, 592577, 592589, 592597, 592601, 592609, 592621, 592639, 592643, 592649, 592661, 592663, 592681, 592693, 592723, 592727, 592741, 592747, 592759, 592763, 592793, 592843, 592849, 592853, 592861, 592873, 592877, 592897, 592903, 592919, 592931, 592939, 592967, 592973, 592987, 592993, 593003, 593029, 593041, 593051, 593059, 593071, 593081, 593083, 593111, 593119, 593141, 593143, 593149, 593171, 593179, 593183, 593207, 593209, 593213, 593227, 593231, 593233, 593251, 593261, 593273, 593291, 593293, 593297, 593321, 593323, 593353, 593381, 593387, 593399, 593401, 593407, 593429, 593447, 593449, 593473, 593479, 593491, 593497, 593501, 593507, 593513, 593519, 593531, 593539, 593573, 593587, 593597, 593603, 593627, 593629, 593633, 593641, 593647, 593651, 593689, 593707, 593711, 593767, 593777, 593783, 593839, 593851, 593863, 593869, 593899, 593903, 593933, 593951, 593969, 593977, 593987, 593993, 594023, 594037, 594047, 594091, 594103, 594107, 594119, 594137, 594151, 594157, 594161, 594163, 594179, 594193, 594203, 594211, 594227, 594241, 594271, 594281, 594283, 594287, 594299, 594311, 594313, 594329, 594359, 594367, 594379, 594397, 594401, 594403, 594421, 594427, 594449, 594457, 594467, 594469, 594499, 594511, 594521, 594523, 594533, 594551, 594563, 594569, 594571, 594577, 594617, 594637, 594641, 594653, 594667, 594679, 594697, 594709, 594721, 594739, 594749, 594751, 594773, 594793, 594821, 594823, 594827, 594829, 594857, 594889, 594899, 594911, 594917, 594929, 594931, 594953, 594959, 594961, 594977, 594989, 595003, 595037, 595039, 595043, 595057, 595069, 595073, 595081, 595087, 595093, 595097, 595117, 595123, 595129, 595139, 595141, 595157, 595159, 595181, 595183, 595201, 595207, 595229, 595247, 595253, 595261, 595267, 595271, 595277, 595291, 595303, 595313, 595319, 595333, 595339, 595351, 595363, 595373, 595379, 595381, 595411, 595451, 595453, 595481, 595513, 595519, 595523, 595547, 595549, 595571, 595577, 595579, 595613, 595627, 595687, 595703, 595709, 595711, 595717, 595733, 595741, 595801, 595807, 595817, 595843, 595873, 595877, 595927, 595939, 595943, 595949, 595951, 595957, 595961, 595963, 595967, 595981, 596009, 596021, 596027, 596047, 596053, 596059, 596069, 596081, 596083, 596093, 596117, 596119, 596143, 596147, 596159, 596179, 596209, 596227, 596231, 596243, 596251, 596257, 596261, 596273, 596279, 596291, 596293, 596317, 596341, 596363, 596369, 596399, 596419, 596423, 596461, 596489, 596503, 596507, 596537, 596569, 596573, 596579, 596587, 596593, 596599, 596611, 596623, 596633, 596653, 596663, 596669, 596671, 596693, 596707, 596737, 596741, 596749, 596767, 596779, 596789, 596803, 596821, 596831, 596839, 596851, 596857, 596861, 596863, 596879, 596899, 596917, 596927, 596929, 596933, 596941, 596963, 596977, 596983, 596987, 597031, 597049, 597053, 597059, 597073, 597127, 597131, 597133, 597137, 597169, 597209, 597221, 597239, 597253, 597263, 597269, 597271, 597301, 597307, 597349, 597353, 597361, 597367, 597383, 597391, 597403, 597407, 597409, 597419, 597433, 597437, 597451, 597473, 597497, 597521, 597523, 597539, 597551, 597559, 597577, 597581, 597589, 597593, 597599, 597613, 597637, 597643, 597659, 597671, 597673, 597677, 597679, 597689, 597697, 597757, 597761, 597767, 597769, 597781, 597803, 597823, 597827, 597833, 597853, 597859, 597869, 597889, 597899, 597901, 597923, 597929, 597967, 597997, 598007, 598049, 598051, 598057, 598079, 598093, 598099, 598123, 598127, 598141, 598151, 598159, 598163, 598187, 598189, 598193, 598219, 598229, 598261, 598303, 598307, 598333, 598363, 598369, 598379, 598387, 598399, 598421, 598427, 598439, 598447, 598457, 598463, 598487, 598489, 598501, 598537, 598541, 598571, 598613, 598643, 598649, 598651, 598657, 598669, 598681, 598687, 598691, 598711, 598721, 598727, 598729, 598777, 598783, 598789, 598799, 598817, 598841, 598853, 598867, 598877, 598883, 598891, 598903, 598931, 598933, 598963, 598967, 598973, 598981, 598987, 598999, 599003, 599009, 599021, 599023, 599069, 599087, 599117, 599143, 599147, 599149, 599153, 599191, 599213, 599231, 599243, 599251, 599273, 599281, 599303, 599309, 599321, 599341, 599353, 599359, 599371, 599383, 599387, 599399, 599407, 599413, 599419, 599429, 599477, 599479, 599491, 599513, 599519, 599537, 599551, 599561, 599591, 599597, 599603, 599611, 599623, 599629, 599657, 599663, 599681, 599693, 599699, 599701, 599713, 599719, 599741, 599759, 599779, 599783, 599803, 599831, 599843, 599857, 599869, 599891, 599899, 599927, 599933, 599939, 599941, 599959, 599983, 599993, 599999, 600011, 600043, 600053, 600071, 600073, 600091, 600101, 600109, 600167, 600169, 600203, 600217, 600221, 600233, 600239, 600241, 600247, 600269, 600283, 600289, 600293, 600307, 600311, 600317, 600319, 600337, 600359, 600361, 600367, 600371, 600401, 600403, 600407, 600421, 600433, 600449, 600451, 600463, 600469, 600487, 600517, 600529, 600557, 600569, 600577, 600601, 600623, 600631, 600641, 600659, 600673, 600689, 600697, 600701, 600703, 600727, 600751, 600791, 600823, 600827, 600833, 600841, 600857, 600877, 600881, 600883, 600889, 600893, 600931, 600947, 600949, 600959, 600961, 600973, 600979, 600983, 601021, 601031, 601037, 601039, 601043, 601061, 601067, 601079, 601093, 601127, 601147, 601187, 601189, 601193, 601201, 601207, 601219, 601231, 601241, 601247, 601259, 601267, 601283, 601291, 601297, 601309, 601313, 601319, 601333, 601339, 601357, 601379, 601397, 601411, 601423, 601439, 601451, 601457, 601487, 601507, 601541, 601543, 601589, 601591, 601607, 601631, 601651, 601669, 601687, 601697, 601717, 601747, 601751, 601759, 601763, 601771, 601801, 601807, 601813, 601819, 601823, 601831, 601849, 601873, 601883, 601889, 601897, 601903, 601943, 601949, 601961, 601969, 601981, 602029, 602033, 602039, 602047, 602057, 602081, 602083, 602087, 602093, 602099, 602111, 602137, 602141, 602143, 602153, 602179, 602197, 602201, 602221, 602227, 602233, 602257, 602267, 602269, 602279, 602297, 602309, 602311, 602317, 602321, 602333, 602341, 602351, 602377, 602383, 602401, 602411, 602431, 602453, 602461, 602477, 602479, 602489, 602501, 602513, 602521, 602543, 602551, 602593, 602597, 602603, 602621, 602627, 602639, 602647, 602677, 602687, 602689, 602711, 602713, 602717, 602729, 602743, 602753, 602759, 602773, 602779, 602801, 602821, 602831, 602839, 602867, 602873, 602887, 602891, 602909, 602929, 602947, 602951, 602971, 602977, 602983, 602999, 603011, 603013, 603023, 603047, 603077, 603091, 603101, 603103, 603131, 603133, 603149, 603173, 603191, 603203, 603209, 603217, 603227, 603257, 603283, 603311, 603319, 603349, 603389, 603391, 603401, 603431, 603443, 603457, 603467, 603487, 603503, 603521, 603523, 603529, 603541, 603553, 603557, 603563, 603569, 603607, 603613, 603623, 603641, 603667, 603679, 603689, 603719, 603731, 603739, 603749, 603761, 603769, 603781, 603791, 603793, 603817, 603821, 603833, 603847, 603851, 603853, 603859, 603881, 603893, 603899, 603901, 603907, 603913, 603917, 603919, 603923, 603931, 603937, 603947, 603949, 603989, 604001, 604007, 604013, 604031, 604057, 604063, 604069, 604073, 604171, 604189, 604223, 604237, 604243, 604249, 604259, 604277, 604291, 604309, 604313, 604319, 604339, 604343, 604349, 604361, 604369, 604379, 604397, 604411, 604427, 604433, 604441, 604477, 604481, 604517, 604529, 604547, 604559, 604579, 604589, 604603, 604609, 604613, 604619, 604649, 604651, 604661, 604697, 604699, 604711, 604727, 604729, 604733, 604753, 604759, 604781, 604787, 604801, 604811, 604819, 604823, 604829, 604837, 604859, 604861, 604867, 604883, 604907, 604931, 604939, 604949, 604957, 604973, 604997, 605009, 605021, 605023, 605039, 605051, 605069, 605071, 605113, 605117, 605123, 605147, 605167, 605173, 605177, 605191, 605221, 605233, 605237, 605239, 605249, 605257, 605261, 605309, 605323, 605329, 605333, 605347, 605369, 605393, 605401, 605411, 605413, 605443, 605471, 605477, 605497, 605503, 605509, 605531, 605533, 605543, 605551, 605573, 605593, 605597, 605599, 605603, 605609, 605617, 605629, 605639, 605641, 605687, 605707, 605719, 605779, 605789, 605809, 605837, 605849, 605861, 605867, 605873, 605879, 605887, 605893, 605909, 605921, 605933, 605947, 605953, 605977, 605987, 605993, 606017, 606029, 606031, 606037, 606041, 606049, 606059, 606077, 606079, 606083, 606091, 606113, 606121, 606131, 606173, 606181, 606223, 606241, 606247, 606251, 606299, 606301, 606311, 606313, 606323, 606341, 606379, 606383, 606413, 606433, 606443, 606449, 606493, 606497, 606503, 606521, 606527, 606539, 606559, 606569, 606581, 606587, 606589, 606607, 606643, 606649, 606653, 606659, 606673, 606721, 606731, 606733, 606737, 606743, 606757, 606791, 606811, 606829, 606833, 606839, 606847, 606857, 606863, 606899, 606913, 606919, 606943, 606959, 606961, 606967, 606971, 606997, 607001, 607003, 607007, 607037, 607043, 607049, 607063, 607067, 607081, 607091, 607093, 607097, 607109, 607127, 607129, 607147, 607151, 607153, 607157, 607163, 607181, 607199, 607213, 607219, 607249, 607253, 607261, 607301, 607303, 607307, 607309, 607319, 607331, 607337, 607339, 607349, 607357, 607363, 607417, 607421, 607423, 607471, 607493, 607517, 607531, 607549, 607573, 607583, 607619, 607627, 607667, 607669, 607681, 607697, 607703, 607721, 607723, 607727, 607741, 607769, 607813, 607819, 607823, 607837, 607843, 607861, 607883, 607889, 607909, 607921, 607931, 607933, 607939, 607951, 607961, 607967, 607991, 607993, 608011, 608029, 608033, 608087, 608089, 608099, 608117, 608123, 608129, 608131, 608147, 608161, 608177, 608191, 608207, 608213, 608269, 608273, 608297, 608299, 608303, 608339, 608347, 608357, 608359, 608369, 608371, 608383, 608389, 608393, 608401, 608411, 608423, 608429, 608431, 608459, 608471, 608483, 608497, 608519, 608521, 608527, 608581, 608591, 608593, 608609, 608611, 608633, 608653, 608659, 608669, 608677, 608693, 608701, 608737, 608743, 608749, 608759, 608767, 608789, 608819, 608831, 608843, 608851, 608857, 608863, 608873, 608887, 608897, 608899, 608903, 608941, 608947, 608953, 608977, 608987, 608989, 608999, 609043, 609047, 609067, 609071, 609079, 609101, 609107, 609113, 609143, 609149, 609163, 609173, 609179, 609199, 609209, 609221, 609227, 609233, 609241, 609253, 609269, 609277, 609283, 609289, 609307, 609313, 609337, 609359, 609361, 609373, 609379, 609391, 609397, 609403, 609407, 609421, 609437, 609443, 609461, 609487, 609503, 609509, 609517, 609527, 609533, 609541, 609571, 609589, 609593, 609599, 609601, 609607, 609613, 609617, 609619, 609641, 609673, 609683, 609701, 609709, 609743, 609751, 609757, 609779, 609781, 609803, 609809, 609821, 609859, 609877, 609887, 609907, 609911, 609913, 609923, 609929, 609979, 609989, 609991, 609997, 610031, 610063, 610081, 610123, 610157, 610163, 610187, 610193, 610199, 610217, 610219, 610229, 610243, 610271, 610279, 610289, 610301, 610327, 610331, 610339, 610391, 610409, 610417, 610429, 610439, 610447, 610457, 610469, 610501, 610523, 610541, 610543, 610553, 610559, 610567, 610579, 610583, 610619, 610633, 610639, 610651, 610661, 610667, 610681, 610699, 610703, 610721, 610733, 610739, 610741, 610763, 610781, 610783, 610787, 610801, 610817, 610823, 610829, 610837, 610843, 610847, 610849, 610867, 610877, 610879, 610891, 610913, 610919, 610921, 610933, 610957, 610969, 610993, 611011, 611027, 611033, 611057, 611069, 611071, 611081, 611101, 611111, 611113, 611131, 611137, 611147, 611189, 611207, 611213, 611257, 611263, 611279, 611293, 611297, 611323, 611333, 611389, 611393, 611411, 611419, 611441, 611449, 611453, 611459, 611467, 611483, 611497, 611531, 611543, 611549, 611551, 611557, 611561, 611587, 611603, 611621, 611641, 611657, 611671, 611693, 611707, 611729, 611753, 611791, 611801, 611803, 611827, 611833, 611837, 611839, 611873, 611879, 611887, 611903, 611921, 611927, 611939, 611951, 611953, 611957, 611969, 611977, 611993, 611999, 612011, 612023, 612037, 612041, 612043, 612049, 612061, 612067, 612071, 612083, 612107, 612109, 612113, 612133, 612137, 612149, 612169, 612173, 612181, 612193, 612217, 612223, 612229, 612259, 612263, 612301, 612307, 612317, 612319, 612331, 612341, 612349, 612371, 612373, 612377, 612383, 612401, 612407, 612439, 612481, 612497, 612511, 612553, 612583, 612589, 612611, 612613, 612637, 612643, 612649, 612671, 612679, 612713, 612719, 612727, 612737, 612751, 612763, 612791, 612797, 612809, 612811, 612817, 612823, 612841, 612847, 612853, 612869, 612877, 612889, 612923, 612929, 612947, 612967, 612971, 612977, 613007, 613009, 613013, 613049, 613061, 613097, 613099, 613141, 613153, 613163, 613169, 613177, 613181, 613189, 613199, 613213, 613219, 613229, 613231, 613243, 613247, 613253, 613267, 613279, 613289, 613297, 613337, 613357, 613363, 613367, 613381, 613421, 613427, 613439, 613441, 613447, 613451, 613463, 613469, 613471, 613493, 613499, 613507, 613523, 613549, 613559, 613573, 613577, 613597, 613607, 613609, 613633, 613637, 613651, 613661, 613667, 613673, 613699, 613733, 613741, 613747, 613759, 613763, 613807, 613813, 613817, 613829, 613841, 613849, 613861, 613883, 613889, 613903, 613957, 613967, 613969, 613981, 613993, 613999, 614041, 614051, 614063, 614071, 614093, 614101, 614113, 614129, 614143, 614147, 614153, 614167, 614177, 614179, 614183, 614219, 614267, 614279, 614291, 614293, 614297, 614321, 614333, 614377, 614387, 614413, 614417, 614437, 614477, 614483, 614503, 614527, 614531, 614543, 614561, 614563, 614569, 614609, 614611, 614617, 614623, 614633, 614639, 614657, 614659, 614671, 614683, 614687, 614693, 614701, 614717, 614729, 614741, 614743, 614749, 614753, 614759, 614773, 614827, 614843, 614849, 614851, 614863, 614881, 614893, 614909, 614917, 614927, 614963, 614981, 614983, 615019, 615031, 615047, 615053, 615067, 615101, 615103, 615107, 615137, 615151, 615161, 615187, 615229, 615233, 615253, 615259, 615269, 615289, 615299, 615313, 615337, 615341, 615343, 615367, 615379, 615389, 615401, 615403, 615413, 615427, 615431, 615437, 615449, 615473, 615479, 615491, 615493, 615497, 615509, 615521, 615539, 615557, 615577, 615599, 615607, 615617, 615623, 615661, 615677, 615679, 615709, 615721, 615731, 615739, 615743, 615749, 615751, 615761, 615767, 615773, 615793, 615799, 615821, 615827, 615829, 615833, 615869, 615883, 615887, 615907, 615919, 615941, 615949, 615971, 615997, 616003, 616027, 616051, 616069, 616073, 616079, 616103, 616111, 616117, 616129, 616139, 616141, 616153, 616157, 616169, 616171, 616181, 616207, 616211, 616219, 616223, 616229, 616243, 616261, 616277, 616289, 616307, 616313, 616321, 616327, 616361, 616367, 616387, 616391, 616393, 616409, 616411, 616433, 616439, 616459, 616463, 616481, 616489, 616501, 616507, 616513, 616519, 616523, 616529, 616537, 616547, 616579, 616589, 616597, 616639, 616643, 616669, 616673, 616703, 616717, 616723, 616729, 616741, 616757, 616769, 616783, 616787, 616789, 616793, 616799, 616829, 616841, 616843, 616849, 616871, 616877, 616897, 616909, 616933, 616943, 616951, 616961, 616991, 616997, 616999, 617011, 617027, 617039, 617051, 617053, 617059, 617077, 617087, 617107, 617119, 617129, 617131, 617147, 617153, 617161, 617189, 617191, 617231, 617233, 617237, 617249, 617257, 617269, 617273, 617293, 617311, 617327, 617333, 617339, 617341, 617359, 617363, 617369, 617387, 617401, 617411, 617429, 617447, 617453, 617467, 617471, 617473, 617479, 617509, 617521, 617531, 617537, 617579, 617587, 617647, 617651, 617657, 617677, 617681, 617689, 617693, 617699, 617707, 617717, 617719, 617723, 617731, 617759, 617761, 617767, 617777, 617791, 617801, 617809, 617819, 617843, 617857, 617873, 617879, 617887, 617917, 617951, 617959, 617963, 617971, 617983, 618029, 618031, 618041, 618049, 618053, 618083, 618119, 618131, 618161, 618173, 618199, 618227, 618229, 618253, 618257, 618269, 618271, 618287, 618301, 618311, 618323, 618329, 618337, 618347, 618349, 618361, 618377, 618407, 618413, 618421, 618437, 618439, 618463, 618509, 618521, 618547, 618559, 618571, 618577, 618581, 618587, 618589, 618593, 618619, 618637, 618643, 618671, 618679, 618703, 618707, 618719, 618799, 618823, 618833, 618841, 618847, 618857, 618859, 618869, 618883, 618913, 618929, 618941, 618971, 618979, 618991, 618997, 619007, 619009, 619019, 619027, 619033, 619057, 619061, 619067, 619079, 619111, 619117, 619139, 619159, 619169, 619181, 619187, 619189, 619207, 619247, 619253, 619261, 619273, 619277, 619279, 619303, 619309, 619313, 619331, 619363, 619373, 619391, 619397, 619471, 619477, 619511, 619537, 619543, 619561, 619573, 619583, 619589, 619603, 619607, 619613, 619621, 619657, 619669, 619681, 619687, 619693, 619711, 619739, 619741, 619753, 619763, 619771, 619793, 619807, 619811, 619813, 619819, 619831, 619841, 619849, 619867, 619897, 619909, 619921, 619967, 619979, 619981, 619987, 619999, 620003, 620029, 620033, 620051, 620099, 620111, 620117, 620159, 620161, 620171, 620183, 620197, 620201, 620227, 620233, 620237, 620239, 620251, 620261, 620297, 620303, 620311, 620317, 620329, 620351, 620359, 620363, 620377, 620383, 620393, 620401, 620413, 620429, 620437, 620441, 620461, 620467, 620491, 620507, 620519, 620531, 620549, 620561, 620567, 620569, 620579, 620603, 620623, 620639, 620647, 620657, 620663, 620671, 620689, 620693, 620717, 620731, 620743, 620759, 620771, 620773, 620777, 620813, 620821, 620827, 620831, 620849, 620869, 620887, 620909, 620911, 620929, 620933, 620947, 620957, 620981, 620999, 621007, 621013, 621017, 621029, 621031, 621043, 621059, 621083, 621097, 621113, 621133, 621139, 621143, 621217, 621223, 621227, 621239, 621241, 621259, 621289, 621301, 621317, 621337, 621343, 621347, 621353, 621359, 621371, 621389, 621419, 621427, 621431, 621443, 621451, 621461, 621473, 621521, 621527, 621541, 621583, 621611, 621617, 621619, 621629, 621631, 621641, 621671, 621679, 621697, 621701, 621703, 621721, 621739, 621749, 621757, 621769, 621779, 621799, 621821, 621833, 621869, 621871, 621883, 621893, 621913, 621923, 621937, 621941, 621983, 621997, 622009, 622019, 622043, 622049, 622051, 622067, 622073, 622091, 622103, 622109, 622123, 622129, 622133, 622151, 622157, 622159, 622177, 622187, 622189, 622241, 622243, 622247, 622249, 622277, 622301, 622313, 622331, 622333, 622337, 622351, 622367, 622397, 622399, 622423, 622477, 622481, 622483, 622493, 622513, 622519, 622529, 622547, 622549, 622561, 622571, 622577, 622603, 622607, 622613, 622619, 622621, 622637, 622639, 622663, 622669, 622709, 622723, 622729, 622751, 622777, 622781, 622793, 622813, 622849, 622861, 622879, 622889, 622901, 622927, 622943, 622957, 622967, 622987, 622997, 623003, 623009, 623017, 623023, 623041, 623057, 623059, 623071, 623107, 623171, 623209, 623221, 623261, 623263, 623269, 623279, 623281, 623291, 623299, 623303, 623321, 623327, 623341, 623351, 623353, 623383, 623387, 623393, 623401, 623417, 623423, 623431, 623437, 623477, 623521, 623531, 623537, 623563, 623591, 623617, 623621, 623633, 623641, 623653, 623669, 623671, 623677, 623681, 623683, 623699, 623717, 623719, 623723, 623729, 623743, 623759, 623767, 623771, 623803, 623839, 623851, 623867, 623869, 623879, 623881, 623893, 623923, 623929, 623933, 623947, 623957, 623963, 623977, 623983, 623989, 624007, 624031, 624037, 624047, 624049, 624067, 624089, 624097, 624119, 624133, 624139, 624149, 624163, 624191, 624199, 624203, 624209, 624229, 624233, 624241, 624251, 624259, 624271, 624277, 624311, 624313, 624319, 624329, 624331, 624347, 624391, 624401, 624419, 624443, 624451, 624467, 624469, 624479, 624487, 624497, 624509, 624517, 624521, 624539, 624541, 624577, 624593, 624599, 624601, 624607, 624643, 624649, 624667, 624683, 624707, 624709, 624721, 624727, 624731, 624737, 624763, 624769, 624787, 624791, 624797, 624803, 624809, 624829, 624839, 624847, 624851, 624859, 624917, 624961, 624973, 624977, 624983, 624997, 625007, 625033, 625057, 625063, 625087, 625103, 625109, 625111, 625129, 625133, 625169, 625171, 625181, 625187, 625199, 625213, 625231, 625237, 625253, 625267, 625279, 625283, 625307, 625319, 625343, 625351, 625367, 625369, 625397, 625409, 625451, 625477, 625483, 625489, 625507, 625517, 625529, 625543, 625589, 625591, 625609, 625621, 625627, 625631, 625637, 625643, 625657, 625661, 625663, 625697, 625699, 625763, 625777, 625789, 625811, 625819, 625831, 625837, 625861, 625871, 625883, 625909, 625913, 625927, 625939, 625943, 625969, 625979, 625997, 626009, 626011, 626033, 626051, 626063, 626113, 626117, 626147, 626159, 626173, 626177, 626189, 626191, 626201, 626207, 626239, 626251, 626261, 626317, 626323, 626333, 626341, 626347, 626363, 626377, 626389, 626393, 626443, 626477, 626489, 626519, 626533, 626539, 626581, 626597, 626599, 626609, 626611, 626617, 626621, 626623, 626627, 626629, 626663, 626683, 626687, 626693, 626701, 626711, 626713, 626723, 626741, 626749, 626761, 626771, 626783, 626797, 626809, 626833, 626837, 626861, 626887, 626917, 626921, 626929, 626947, 626953, 626959, 626963, 626987, 627017, 627041, 627059, 627071, 627073, 627083, 627089, 627091, 627101, 627119, 627131, 627139, 627163, 627169, 627191, 627197, 627217, 627227, 627251, 627257, 627269, 627271, 627293, 627301, 627329, 627349, 627353, 627377, 627379, 627383, 627391, 627433, 627449, 627479, 627481, 627491, 627511, 627541, 627547, 627559, 627593, 627611, 627617, 627619, 627637, 627643, 627659, 627661, 627667, 627673, 627709, 627721, 627733, 627749, 627773, 627787, 627791, 627797, 627799, 627811, 627841, 627859, 627901, 627911, 627919, 627943, 627947, 627953, 627961, 627973, 628013, 628021, 628037, 628049, 628051, 628057, 628063, 628093, 628097, 628127, 628139, 628171, 628183, 628189, 628193, 628207, 628213, 628217, 628219, 628231, 628261, 628267, 628289, 628301, 628319, 628357, 628363, 628373, 628379, 628391, 628399, 628423, 628427, 628447, 628477, 628487, 628493, 628499, 628547, 628561, 628583, 628591, 628651, 628673, 628679, 628681, 628687, 628699, 628709, 628721, 628753, 628757, 628759, 628781, 628783, 628787, 628799, 628801, 628811, 628819, 628841, 628861, 628877, 628909, 628913, 628921, 628937, 628939, 628973, 628993, 628997, 629003, 629009, 629011, 629023, 629029, 629059, 629081, 629113, 629137, 629143, 629171, 629177, 629203, 629243, 629249, 629263, 629281, 629311, 629339, 629341, 629351, 629371, 629381, 629383, 629401, 629411, 629417, 629429, 629449, 629467, 629483, 629491, 629509, 629513, 629537, 629567, 629569, 629591, 629593, 629609, 629611, 629617, 629623, 629653, 629683, 629687, 629689, 629701, 629711, 629723, 629737, 629743, 629747, 629767, 629773, 629779, 629803, 629807, 629819, 629843, 629857, 629861, 629873, 629891, 629897, 629899, 629903, 629921, 629927, 629929, 629939, 629963, 629977, 629987, 629989, 630017, 630023, 630029, 630043, 630067, 630101, 630107, 630127, 630151, 630163, 630167, 630169, 630181, 630193, 630197, 630229, 630247, 630263, 630281, 630299, 630307, 630319, 630349, 630353, 630391, 630433, 630451, 630467, 630473, 630481, 630493, 630521, 630523, 630529, 630559, 630577, 630583, 630587, 630589, 630593, 630607, 630613, 630659, 630677, 630689, 630701, 630709, 630713, 630719, 630733, 630737, 630797, 630803, 630823, 630827, 630841, 630863, 630871, 630893, 630899, 630901, 630907, 630911, 630919, 630941, 630967, 630997, 631003, 631013, 631039, 631061, 631121, 631133, 631139, 631151, 631153, 631157, 631171, 631181, 631187, 631223, 631229, 631247, 631249, 631259, 631271, 631273, 631291, 631307, 631339, 631357, 631361, 631387, 631391, 631399, 631409, 631429, 631453, 631457, 631459, 631469, 631471, 631483, 631487, 631507, 631513, 631529, 631531, 631537, 631549, 631559, 631573, 631577, 631583, 631597, 631613, 631619, 631643, 631667, 631679, 631681, 631711, 631717, 631723, 631733, 631739, 631751, 631753, 631789, 631817, 631819, 631843, 631847, 631853, 631859, 631861, 631867, 631889, 631901, 631903, 631913, 631927, 631931, 631937, 631979, 631987, 631991, 631993, 632029, 632041, 632053, 632081, 632083, 632087, 632089, 632101, 632117, 632123, 632141, 632147, 632153, 632189, 632209, 632221, 632227, 632231, 632251, 632257, 632267, 632273, 632297, 632299, 632321, 632323, 632327, 632329, 632347, 632351, 632353, 632363, 632371, 632381, 632389, 632393, 632447, 632459, 632473, 632483, 632497, 632501, 632503, 632521, 632557, 632561, 632591, 632609, 632623, 632627, 632629, 632647, 632669, 632677, 632683, 632699, 632713, 632717, 632743, 632747, 632773, 632777, 632813, 632839, 632843, 632851, 632857, 632881, 632897, 632911, 632923, 632939, 632941, 632971, 632977, 632987, 632993, 633001, 633013, 633037, 633053, 633067, 633079, 633091, 633133, 633151, 633161, 633187, 633197, 633209, 633221, 633253, 633257, 633263, 633271, 633287, 633307, 633317, 633337, 633359, 633377, 633379, 633383, 633401, 633407, 633427, 633449, 633461, 633463, 633467, 633469, 633473, 633487, 633497, 633559, 633569, 633571, 633583, 633599, 633613, 633623, 633629, 633649, 633653, 633667, 633739, 633751, 633757, 633767, 633781, 633791, 633793, 633797, 633799, 633803, 633823, 633833, 633877, 633883, 633923, 633931, 633937, 633943, 633953, 633961, 633967, 633991, 634003, 634013, 634031, 634061, 634079, 634091, 634097, 634103, 634141, 634157, 634159, 634169, 634177, 634181, 634187, 634199, 634211, 634223, 634237, 634241, 634247, 634261, 634267, 634273, 634279, 634301, 634307, 634313, 634327, 634331, 634343, 634367, 634373, 634397, 634421, 634441, 634471, 634483, 634493, 634499, 634511, 634519, 634523, 634531, 634541, 634567, 634573, 634577, 634597, 634603, 634609, 634643, 634649, 634651, 634679, 634681, 634687, 634703, 634709, 634717, 634727, 634741, 634747, 634757, 634759, 634793, 634807, 634817, 634841, 634853, 634859, 634861, 634871, 634891, 634901, 634903, 634927, 634937, 634939, 634943, 634969, 634979, 635003, 635021, 635039, 635051, 635057, 635087, 635119, 635147, 635149, 635197, 635203, 635207, 635249, 635251, 635263, 635267, 635279, 635287, 635291, 635293, 635309, 635317, 635333, 635339, 635347, 635351, 635353, 635359, 635363, 635387, 635389, 635413, 635423, 635431, 635441, 635449, 635461, 635471, 635483, 635507, 635519, 635527, 635533, 635563, 635567, 635599, 635603, 635617, 635639, 635653, 635659, 635689, 635707, 635711, 635729, 635731, 635737, 635777, 635801, 635809, 635813, 635821, 635837, 635849, 635867, 635879, 635891, 635893, 635909, 635917, 635923, 635939, 635959, 635969, 635977, 635981, 635983, 635989, 636017, 636023, 636043, 636059, 636061, 636071, 636073, 636107, 636109, 636133, 636137, 636149, 636193, 636211, 636217, 636241, 636247, 636257, 636263, 636277, 636283, 636287, 636301, 636313, 636319, 636331, 636343, 636353, 636359, 636403, 636407, 636409, 636421, 636469, 636473, 636499, 636533, 636539, 636541, 636547, 636553, 636563, 636569, 636613, 636619, 636631, 636653, 636673, 636697, 636719, 636721, 636731, 636739, 636749, 636761, 636763, 636773, 636781, 636809, 636817, 636821, 636829, 636851, 636863, 636877, 636917, 636919, 636931, 636947, 636953, 636967, 636983, 636997, 637001, 637003, 637067, 637073, 637079, 637097, 637129, 637139, 637157, 637163, 637171, 637199, 637201, 637229, 637243, 637271, 637277, 637283, 637291, 637297, 637309, 637319, 637321, 637327, 637337, 637339, 637349, 637369, 637379, 637409, 637421, 637423, 637447, 637459, 637463, 637471, 637489, 637499, 637513, 637519, 637529, 637531, 637543, 637573, 637597, 637601, 637603, 637607, 637627, 637657, 637669, 637691, 637699, 637709, 637711, 637717, 637723, 637727, 637729, 637751, 637771, 637781, 637783, 637787, 637817, 637829, 637831, 637841, 637873, 637883, 637909, 637933, 637937, 637939, 638023, 638047, 638051, 638059, 638063, 638081, 638117, 638123, 638147, 638159, 638161, 638171, 638177, 638179, 638201, 638233, 638263, 638269, 638303, 638317, 638327, 638347, 638359, 638371, 638423, 638431, 638437, 638453, 638459, 638467, 638489, 638501, 638527, 638567, 638581, 638587, 638621, 638629, 638633, 638663, 638669, 638689, 638699, 638717, 638719, 638767, 638801, 638819, 638839, 638857, 638861, 638893, 638923, 638933, 638959, 638971, 638977, 638993, 638999, 639007, 639011, 639043, 639049, 639053, 639083, 639091, 639137, 639143, 639151, 639157, 639167, 639169, 639181, 639211, 639253, 639257, 639259, 639263, 639269, 639299, 639307, 639311, 639329, 639337, 639361, 639371, 639391, 639433, 639439, 639451, 639487, 639491, 639493, 639511, 639517, 639533, 639547, 639563, 639571, 639577, 639589, 639599, 639601, 639631, 639637, 639647, 639671, 639677, 639679, 639689, 639697, 639701, 639703, 639713, 639719, 639731, 639739, 639757, 639833, 639839, 639851, 639853, 639857, 639907, 639911, 639937, 639941, 639949, 639959, 639983, 639997, 640007, 640009, 640019, 640027, 640039, 640043, 640049, 640061, 640069, 640099, 640109, 640121, 640127, 640139, 640151, 640153, 640163, 640193, 640219, 640223, 640229, 640231, 640247, 640249, 640259, 640261, 640267, 640279, 640303, 640307, 640333, 640363, 640369, 640411, 640421, 640457, 640463, 640477, 640483, 640499, 640529, 640531, 640579, 640583, 640589, 640613, 640621, 640631, 640649, 640663, 640667, 640669, 640687, 640691, 640727, 640733, 640741, 640771, 640777, 640793, 640837, 640847, 640853, 640859, 640873, 640891, 640901, 640907, 640919, 640933, 640943, 640949, 640957, 640963, 640967, 640973, 640993, 641051, 641057, 641077, 641083, 641089, 641093, 641101, 641129, 641131, 641143, 641167, 641197, 641203, 641213, 641227, 641239, 641261, 641279, 641287, 641299, 641317, 641327, 641371, 641387, 641411, 641413, 641419, 641437, 641441, 641453, 641467, 641471, 641479, 641491, 641513, 641519, 641521, 641549, 641551, 641579, 641581, 641623, 641633, 641639, 641681, 641701, 641713, 641747, 641749, 641761, 641789, 641791, 641803, 641813, 641819, 641821, 641827, 641833, 641843, 641863, 641867, 641873, 641881, 641891, 641897, 641909, 641923, 641929, 641959, 641969, 641981, 642011, 642013, 642049, 642071, 642077, 642079, 642113, 642121, 642133, 642149, 642151, 642157, 642163, 642197, 642199, 642211, 642217, 642223, 642233, 642241, 642247, 642253, 642281, 642359, 642361, 642373, 642403, 642407, 642419, 642427, 642457, 642487, 642517, 642527, 642529, 642533, 642547, 642557, 642563, 642581, 642613, 642623, 642673, 642683, 642701, 642737, 642739, 642769, 642779, 642791, 642797, 642799, 642809, 642833, 642853, 642869, 642871, 642877, 642881, 642899, 642907, 642931, 642937, 642947, 642953, 642973, 642977, 642997, 643009, 643021, 643031, 643039, 643043, 643051, 643061, 643073, 643081, 643087, 643099, 643121, 643129, 643183, 643187, 643199, 643213, 643217, 643231, 643243, 643273, 643301, 643303, 643369, 643373, 643403, 643421, 643429, 643439, 643453, 643457, 643463, 643469, 643493, 643507, 643523, 643547, 643553, 643567, 643583, 643589, 643619, 643633, 643639, 643649, 643651, 643661, 643681, 643691, 643693, 643697, 643703, 643723, 643729, 643751, 643781, 643847, 643849, 643859, 643873, 643879, 643883, 643889, 643919, 643927, 643949, 643957, 643961, 643969, 643991, 644009, 644029, 644047, 644051, 644053, 644057, 644089, 644101, 644107, 644117, 644123, 644129, 644131, 644141, 644143, 644153, 644159, 644173, 644191, 644197, 644201, 644227, 644239, 644257, 644261, 644291, 644297, 644327, 644341, 644353, 644359, 644363, 644377, 644381, 644383, 644401, 644411, 644431, 644443, 644447, 644489, 644491, 644507, 644513, 644519, 644531, 644549, 644557, 644563, 644569, 644593, 644597, 644599, 644617, 644629, 644647, 644653, 644669, 644671, 644687, 644701, 644717, 644729, 644731, 644747, 644753, 644767, 644783, 644789, 644797, 644801, 644837, 644843, 644857, 644863, 644867, 644869, 644881, 644899, 644909, 644911, 644923, 644933, 644951, 644977, 644999, 645011, 645013, 645019, 645023, 645037, 645041, 645049, 645067, 645077, 645083, 645091, 645097, 645131, 645137, 645149, 645179, 645187, 645233, 645257, 645313, 645329, 645347, 645353, 645367, 645383, 645397, 645409, 645419, 645431, 645433, 645443, 645467, 645481, 645493, 645497, 645499, 645503, 645521, 645527, 645529, 645571, 645577, 645581, 645583, 645599, 645611, 645629, 645641, 645647, 645649, 645661, 645683, 645691, 645703, 645713, 645727, 645737, 645739, 645751, 645763, 645787, 645803, 645833, 645839, 645851, 645857, 645877, 645889, 645893, 645901, 645907, 645937, 645941, 645973, 645979, 646003, 646013, 646027, 646039, 646067, 646073, 646099, 646103, 646147, 646157, 646159, 646169, 646181, 646183, 646189, 646193, 646199, 646237, 646253, 646259, 646267, 646271, 646273, 646291, 646301, 646307, 646309, 646339, 646379, 646397, 646403, 646411, 646421, 646423, 646433, 646453, 646519, 646523, 646537, 646543, 646549, 646571, 646573, 646577, 646609, 646619, 646631, 646637, 646643, 646669, 646687, 646721, 646757, 646771, 646781, 646823, 646831, 646837, 646843, 646859, 646873, 646879, 646883, 646889, 646897, 646909, 646913, 646927, 646937, 646957, 646979, 646981, 646991, 646993, 647011, 647033, 647039, 647047, 647057, 647069, 647081, 647099, 647111, 647113, 647117, 647131, 647147, 647161, 647189, 647201, 647209, 647219, 647261, 647263, 647293, 647303, 647321, 647327, 647333, 647341, 647357, 647359, 647363, 647371, 647399, 647401, 647417, 647429, 647441, 647453, 647477, 647489, 647503, 647509, 647527, 647531, 647551, 647557, 647579, 647587, 647593, 647609, 647617, 647627, 647641, 647651, 647659, 647663, 647687, 647693, 647719, 647723, 647741, 647743, 647747, 647753, 647771, 647783, 647789, 647809, 647821, 647837, 647839, 647851, 647861, 647891, 647893, 647909, 647917, 647951, 647953, 647963, 647987, 648007, 648019, 648029, 648041, 648047, 648059, 648061, 648073, 648079, 648097, 648101, 648107, 648119, 648133, 648173, 648181, 648191, 648199, 648211, 648217, 648229, 648239, 648257, 648259, 648269, 648283, 648289, 648293, 648317, 648331, 648341, 648343, 648371, 648377, 648379, 648383, 648391, 648433, 648437, 648449, 648481, 648509, 648563, 648607, 648617, 648619, 648629, 648631, 648649, 648653, 648671, 648677, 648689, 648709, 648719, 648731, 648763, 648779, 648803, 648841, 648859, 648863, 648871, 648887, 648889, 648911, 648917, 648931, 648937, 648953, 648961, 648971, 648997, 649001, 649007, 649039, 649063, 649069, 649073, 649079, 649081, 649087, 649093, 649123, 649141, 649147, 649151, 649157, 649183, 649217, 649261, 649273, 649277, 649279, 649283, 649291, 649307, 649321, 649361, 649379, 649381, 649403, 649421, 649423, 649427, 649457, 649469, 649471, 649483, 649487, 649499, 649501, 649507, 649511, 649529, 649541, 649559, 649567, 649573, 649577, 649613, 649619, 649631, 649633, 649639, 649643, 649651, 649657, 649661, 649697, 649709, 649717, 649739, 649751, 649769, 649771, 649777, 649783, 649787, 649793, 649799, 649801, 649813, 649829, 649843, 649849, 649867, 649871, 649877, 649879, 649897, 649907, 649921, 649937, 649969, 649981, 649991, 650011, 650017, 650059, 650071, 650081, 650099, 650107, 650179, 650183, 650189, 650213, 650227, 650261, 650269, 650281, 650291, 650317, 650327, 650329, 650347, 650359, 650387, 650401, 650413, 650449, 650477, 650479, 650483, 650519, 650537, 650543, 650549, 650563, 650567, 650581, 650591, 650599, 650609, 650623, 650627, 650669, 650701, 650759, 650761, 650779, 650813, 650821, 650827, 650833, 650851, 650861, 650863, 650869, 650873, 650911, 650917, 650927, 650933, 650953, 650971, 650987, 651017, 651019, 651029, 651043, 651067, 651071, 651097, 651103, 651109, 651127, 651139, 651143, 651169, 651179, 651181, 651191, 651193, 651221, 651223, 651239, 651247, 651251, 651257, 651271, 651281, 651289, 651293, 651323, 651331, 651347, 651361, 651397, 651401, 651437, 651439, 651461, 651473, 651481, 651487, 651503, 651509, 651517, 651587, 651617, 651641, 651647, 651649, 651667, 651683, 651689, 651697, 651727, 651731, 651733, 651767, 651769, 651793, 651803, 651809, 651811, 651821, 651839, 651841, 651853, 651857, 651863, 651869, 651877, 651881, 651901, 651913, 651943, 651971, 651997, 652019, 652033, 652039, 652063, 652079, 652081, 652087, 652117, 652121, 652153, 652189, 652207, 652217, 652229, 652237, 652241, 652243, 652261, 652279, 652283, 652291, 652319, 652321, 652331, 652339, 652343, 652357, 652361, 652369, 652373, 652381, 652411, 652417, 652429, 652447, 652451, 652453, 652493, 652499, 652507, 652541, 652543, 652549, 652559, 652567, 652573, 652577, 652591, 652601, 652607, 652609, 652621, 652627, 652651, 652657, 652667, 652699, 652723, 652727, 652733, 652739, 652741, 652747, 652753, 652759, 652787, 652811, 652831, 652837, 652849, 652853, 652871, 652903, 652909, 652913, 652921, 652931, 652933, 652937, 652943, 652957, 652969, 652991, 652997, 652999, 653033, 653057, 653083, 653111, 653113, 653117, 653143, 653153, 653197, 653203, 653207, 653209, 653243, 653267, 653273, 653281, 653311, 653321, 653339, 653357, 653363, 653431, 653461, 653473, 653491, 653501, 653503, 653507, 653519, 653537, 653539, 653561, 653563, 653579, 653593, 653617, 653621, 653623, 653641, 653647, 653651, 653659, 653687, 653693, 653707, 653711, 653713, 653743, 653749, 653761, 653777, 653789, 653797, 653801, 653819, 653831, 653879, 653881, 653893, 653899, 653903, 653927, 653929, 653941, 653951, 653963, 653969, 653977, 653993, 654001, 654011, 654019, 654023, 654029, 654047, 654053, 654067, 654089, 654107, 654127, 654149, 654161, 654163, 654167, 654169, 654187, 654191, 654209, 654221, 654223, 654229, 654233, 654257, 654293, 654301, 654307, 654323, 654343, 654349, 654371, 654397, 654413, 654421, 654427, 654439, 654491, 654499, 654509, 654527, 654529, 654539, 654541, 654553, 654571, 654587, 654593, 654601, 654611, 654613, 654623, 654629, 654671, 654679, 654697, 654701, 654727, 654739, 654743, 654749, 654767, 654779, 654781, 654799, 654803, 654817, 654821, 654827, 654839, 654853, 654877, 654889, 654917, 654923, 654931, 654943, 654967, 654991, 655001, 655003, 655013, 655021, 655033, 655037, 655043, 655069, 655087, 655103, 655111, 655121, 655157, 655181, 655211, 655219, 655223, 655229, 655241, 655243, 655261, 655267, 655273, 655283, 655289, 655301, 655331, 655337, 655351, 655357, 655373, 655379, 655387, 655399, 655439, 655453, 655471, 655489, 655507, 655511, 655517, 655531, 655541, 655547, 655559, 655561, 655579, 655583, 655597, 655601, 655637, 655643, 655649, 655651, 655657, 655687, 655693, 655717, 655723, 655727, 655757, 655807, 655847, 655849, 655859, 655883, 655901, 655909, 655913, 655927, 655943, 655961, 655987, 656023, 656039, 656063, 656077, 656113, 656119, 656129, 656141, 656147, 656153, 656171, 656221, 656237, 656263, 656267, 656273, 656291, 656297, 656303, 656311, 656321, 656323, 656329, 656333, 656347, 656371, 656377, 656389, 656407, 656423, 656429, 656459, 656471, 656479, 656483, 656519, 656527, 656561, 656587, 656597, 656599, 656603, 656609, 656651, 656657, 656671, 656681, 656683, 656687, 656701, 656707, 656737, 656741, 656749, 656753, 656771, 656783, 656791, 656809, 656819, 656833, 656839, 656891, 656917, 656923, 656939, 656951, 656959, 656977, 656989, 656993, 657017, 657029, 657047, 657049, 657061, 657071, 657079, 657089, 657091, 657113, 657121, 657127, 657131, 657187, 657193, 657197, 657233, 657257, 657269, 657281, 657289, 657299, 657311, 657313, 657323, 657347, 657361, 657383, 657403, 657413, 657431, 657439, 657451, 657469, 657473, 657491, 657493, 657497, 657499, 657523, 657529, 657539, 657557, 657581, 657583, 657589, 657607, 657617, 657649, 657653, 657659, 657661, 657703, 657707, 657719, 657743, 657779, 657793, 657809, 657827, 657841, 657863, 657893, 657911, 657929, 657931, 657947, 657959, 657973, 657983, 658001, 658043, 658051, 658057, 658069, 658079, 658111, 658117, 658123, 658127, 658139, 658153, 658159, 658169, 658187, 658199, 658211, 658219, 658247, 658253, 658261, 658277, 658279, 658303, 658309, 658319, 658321, 658327, 658349, 658351, 658367, 658379, 658391, 658403, 658417, 658433, 658447, 658453, 658477, 658487, 658507, 658547, 658549, 658573, 658579, 658589, 658591, 658601, 658607, 658613, 658633, 658639, 658643, 658649, 658663, 658681, 658703, 658751, 658753, 658783, 658807, 658817, 658831, 658837, 658841, 658871, 658873, 658883, 658897, 658907, 658913, 658919, 658943, 658961, 658963, 658969, 658979, 658991, 658997, 659011, 659023, 659047, 659059, 659063, 659069, 659077, 659101, 659137, 659159, 659171, 659173, 659177, 659189, 659221, 659231, 659237, 659251, 659279, 659299, 659317, 659327, 659333, 659353, 659371, 659419, 659423, 659437, 659453, 659467, 659473, 659497, 659501, 659513, 659521, 659531, 659539, 659563, 659569, 659591, 659597, 659609, 659611, 659621, 659629, 659639, 659653, 659657, 659669, 659671, 659689, 659693, 659713, 659723, 659741, 659759, 659761, 659783, 659819, 659831, 659843, 659849, 659863, 659873, 659881, 659899, 659917, 659941, 659947, 659951, 659963, 659983, 659999, 660001, 660013, 660029, 660047, 660053, 660061, 660067, 660071, 660073, 660097, 660103, 660119, 660131, 660137, 660157, 660167, 660181, 660197, 660199, 660217, 660227, 660241, 660251, 660271, 660277, 660281, 660299, 660329, 660337, 660347, 660349, 660367, 660377, 660379, 660391, 660403, 660409, 660449, 660493, 660503, 660509, 660521, 660529, 660547, 660557, 660559, 660563, 660589, 660593, 660599, 660601, 660607, 660617, 660619, 660643, 660659, 660661, 660683, 660719, 660727, 660731, 660733, 660757, 660769, 660787, 660791, 660799, 660809, 660811, 660817, 660833, 660851, 660853, 660887, 660893, 660899, 660901, 660917, 660923, 660941, 660949, 660973, 660983, 661009, 661019, 661027, 661049, 661061, 661091, 661093, 661097, 661099, 661103, 661109, 661117, 661121, 661139, 661183, 661187, 661189, 661201, 661217, 661231, 661237, 661253, 661259, 661267, 661321, 661327, 661343, 661361, 661373, 661393, 661417, 661421, 661439, 661459, 661477, 661481, 661483, 661513, 661517, 661541, 661547, 661553, 661603, 661607, 661613, 661621, 661663, 661673, 661679, 661697, 661721, 661741, 661769, 661777, 661823, 661849, 661873, 661877, 661879, 661883, 661889, 661897, 661909, 661931, 661939, 661949, 661951, 661961, 661987, 661993, 662003, 662021, 662029, 662047, 662059, 662063, 662083, 662107, 662111, 662141, 662143, 662149, 662177, 662203, 662227, 662231, 662251, 662261, 662267, 662281, 662287, 662309, 662323, 662327, 662339, 662351, 662353, 662357, 662369, 662401, 662407, 662443, 662449, 662477, 662483, 662491, 662513, 662527, 662531, 662537, 662539, 662551, 662567, 662591, 662617, 662639, 662647, 662657, 662671, 662681, 662689, 662693, 662713, 662719, 662743, 662771, 662773, 662789, 662797, 662819, 662833, 662839, 662843, 662867, 662897, 662899, 662917, 662939, 662941, 662947, 662951, 662953, 662957, 662999, 663001, 663007, 663031, 663037, 663049, 663053, 663071, 663097, 663127, 663149, 663161, 663163, 663167, 663191, 663203, 663209, 663239, 663241, 663263, 663269, 663281, 663283, 663301, 663319, 663331, 663349, 663359, 663371, 663407, 663409, 663437, 663463, 663517, 663529, 663539, 663541, 663547, 663557, 663563, 663569, 663571, 663581, 663583, 663587, 663589, 663599, 663601, 663631, 663653, 663659, 663661, 663683, 663709, 663713, 663737, 663763, 663787, 663797, 663821, 663823, 663827, 663853, 663857, 663869, 663881, 663893, 663907, 663937, 663959, 663961, 663967, 663973, 663977, 663979, 663983, 663991, 663997, 664009, 664019, 664043, 664061, 664067, 664091, 664099, 664109, 664117, 664121, 664123, 664133, 664141, 664151, 664177, 664193, 664199, 664211, 664243, 664253, 664271, 664273, 664289, 664319, 664331, 664357, 664369, 664379, 664381, 664403, 664421, 664427, 664441, 664459, 664471, 664507, 664511, 664529, 664537, 664549, 664561, 664571, 664579, 664583, 664589, 664597, 664603, 664613, 664619, 664621, 664633, 664661, 664663, 664667, 664669, 664679, 664687, 664691, 664693, 664711, 664739, 664757, 664771, 664777, 664789, 664793, 664799, 664843, 664847, 664849, 664879, 664891, 664933, 664949, 664967, 664973, 664997, 665011, 665017, 665029, 665039, 665047, 665051, 665053, 665069, 665089, 665111, 665113, 665117, 665123, 665131, 665141, 665153, 665177, 665179, 665201, 665207, 665213, 665221, 665233, 665239, 665251, 665267, 665279, 665293, 665299, 665303, 665311, 665351, 665359, 665369, 665381, 665387, 665419, 665429, 665447, 665479, 665501, 665503, 665507, 665527, 665549, 665557, 665563, 665569, 665573, 665591, 665603, 665617, 665629, 665633, 665659, 665677, 665713, 665719, 665723, 665747, 665761, 665773, 665783, 665789, 665801, 665803, 665813, 665843, 665857, 665897, 665921, 665923, 665947, 665953, 665981, 665983, 665993, 666013, 666019, 666023, 666031, 666041, 666067, 666073, 666079, 666089, 666091, 666109, 666119, 666139, 666143, 666167, 666173, 666187, 666191, 666203, 666229, 666233, 666269, 666277, 666301, 666329, 666353, 666403, 666427, 666431, 666433, 666437, 666439, 666461, 666467, 666493, 666511, 666527, 666529, 666541, 666557, 666559, 666599, 666607, 666637, 666643, 666647, 666649, 666667, 666671, 666683, 666697, 666707, 666727, 666733, 666737, 666749, 666751, 666769, 666773, 666811, 666821, 666823, 666829, 666857, 666871, 666889, 666901, 666929, 666937, 666959, 666979, 666983, 666989, 667013, 667019, 667021, 667081, 667091, 667103, 667123, 667127, 667129, 667141, 667171, 667181, 667211, 667229, 667241, 667243, 667273, 667283, 667309, 667321, 667333, 667351, 667361, 667363, 667367, 667379, 667417, 667421, 667423, 667427, 667441, 667463, 667477, 667487, 667501, 667507, 667519, 667531, 667547, 667549, 667553, 667559, 667561, 667577, 667631, 667643, 667649, 667657, 667673, 667687, 667691, 667697, 667699, 667727, 667741, 667753, 667769, 667781, 667801, 667817, 667819, 667829, 667837, 667859, 667861, 667867, 667883, 667903, 667921, 667949, 667963, 667987, 667991, 667999, 668009, 668029, 668033, 668047, 668051, 668069, 668089, 668093, 668111, 668141, 668153, 668159, 668179, 668201, 668203, 668209, 668221, 668243, 668273, 668303, 668347, 668407, 668417, 668471, 668509, 668513, 668527, 668531, 668533, 668539, 668543, 668567, 668579, 668581, 668599, 668609, 668611, 668617, 668623, 668671, 668677, 668687, 668699, 668713, 668719, 668737, 668741, 668747, 668761, 668791, 668803, 668813, 668821, 668851, 668867, 668869, 668873, 668879, 668903, 668929, 668939, 668947, 668959, 668963, 668989, 668999, 669023, 669029, 669049, 669077, 669089, 669091, 669107, 669113, 669121, 669127, 669133, 669167, 669173, 669181, 669241, 669247, 669271, 669283, 669287, 669289, 669301, 669311, 669329, 669359, 669371, 669377, 669379, 669391, 669401, 669413, 669419, 669433, 669437, 669451, 669463, 669479, 669481, 669527, 669551, 669577, 669607, 669611, 669637, 669649, 669659, 669661, 669667, 669673, 669677, 669679, 669689, 669701, 669707, 669733, 669763, 669787, 669791, 669839, 669847, 669853, 669857, 669859, 669863, 669869, 669887, 669901, 669913, 669923, 669931, 669937, 669943, 669947, 669971, 669989, 670001, 670031, 670037, 670039, 670049, 670051, 670097, 670099, 670129, 670139, 670147, 670177, 670193, 670199, 670211, 670217, 670223, 670231, 670237, 670249, 670261, 670279, 670297, 670303, 670321, 670333, 670343, 670349, 670363, 670379, 670399, 670409, 670447, 670457, 670471, 670487, 670489, 670493, 670507, 670511, 670517, 670541, 670543, 670559, 670577, 670583, 670597, 670613, 670619, 670627, 670639, 670669, 670673, 670693, 670711, 670727, 670729, 670739, 670763, 670777, 670781, 670811, 670823, 670849, 670853, 670867, 670877, 670897, 670903, 670919, 670931, 670951, 670963, 670987, 670991, 671003, 671017, 671029, 671039, 671059, 671063, 671081, 671087, 671093, 671123, 671131, 671141, 671159, 671161, 671189, 671201, 671219, 671233, 671249, 671257, 671261, 671269, 671287, 671299, 671303, 671323, 671339, 671353, 671357, 671369, 671383, 671401, 671417, 671431, 671443, 671467, 671471, 671477, 671501, 671519, 671533, 671537, 671557, 671581, 671591, 671603, 671609, 671633, 671647, 671651, 671681, 671701, 671717, 671729, 671743, 671753, 671777, 671779, 671791, 671831, 671837, 671851, 671887, 671893, 671903, 671911, 671917, 671921, 671933, 671939, 671941, 671947, 671969, 671971, 671981, 671999, 672019, 672029, 672041, 672043, 672059, 672073, 672079, 672097, 672103, 672107, 672127, 672131, 672137, 672143, 672151, 672167, 672169, 672181, 672193, 672209, 672223, 672227, 672229, 672251, 672271, 672283, 672289, 672293, 672311, 672317, 672323, 672341, 672349, 672377, 672379, 672439, 672443, 672473, 672493, 672499, 672521, 672557, 672577, 672587, 672593, 672629, 672641, 672643, 672653, 672667, 672703, 672743, 672757, 672767, 672779, 672781, 672787, 672799, 672803, 672811, 672817, 672823, 672827, 672863, 672869, 672871, 672883, 672901, 672913, 672937, 672943, 672949, 672953, 672967, 672977, 672983, 673019, 673039, 673063, 673069, 673073, 673091, 673093, 673109, 673111, 673117, 673121, 673129, 673157, 673193, 673199, 673201, 673207, 673223, 673241, 673247, 673271, 673273, 673291, 673297, 673313, 673327, 673339, 673349, 673381, 673391, 673397, 673399, 673403, 673411, 673427, 673429, 673441, 673447, 673451, 673457, 673459, 673469, 673487, 673499, 673513, 673529, 673549, 673553, 673567, 673573, 673579, 673609, 673613, 673619, 673637, 673639, 673643, 673649, 673667, 673669, 673747, 673769, 673781, 673787, 673793, 673801, 673811, 673817, 673837, 673879, 673891, 673921, 673943, 673951, 673961, 673979, 673991, 674017, 674057, 674059, 674071, 674083, 674099, 674117, 674123, 674131, 674159, 674161, 674173, 674183, 674189, 674227, 674231, 674239, 674249, 674263, 674269, 674273, 674299, 674321, 674347, 674357, 674363, 674371, 674393, 674419, 674431, 674449, 674461, 674483, 674501, 674533, 674537, 674551, 674563, 674603, 674647, 674669, 674677, 674683, 674693, 674699, 674701, 674711, 674717, 674719, 674731, 674741, 674749, 674759, 674761, 674767, 674771, 674789, 674813, 674827, 674831, 674833, 674837, 674851, 674857, 674867, 674879, 674903, 674929, 674941, 674953, 674957, 674977, 674987, 675029, 675067, 675071, 675079, 675083, 675097, 675109, 675113, 675131, 675133, 675151, 675161, 675163, 675173, 675179, 675187, 675197, 675221, 675239, 675247, 675251, 675253, 675263, 675271, 675299, 675313, 675319, 675341, 675347, 675391, 675407, 675413, 675419, 675449, 675457, 675463, 675481, 675511, 675539, 675541, 675551, 675553, 675559, 675569, 675581, 675593, 675601, 675607, 675611, 675617, 675629, 675643, 675713, 675739, 675743, 675751, 675781, 675797, 675817, 675823, 675827, 675839, 675841, 675859, 675863, 675877, 675881, 675889, 675923, 675929, 675931, 675959, 675973, 675977, 675979, 676007, 676009, 676031, 676037, 676043, 676051, 676057, 676061, 676069, 676099, 676103, 676111, 676129, 676147, 676171, 676211, 676217, 676219, 676241, 676253, 676259, 676279, 676289, 676297, 676337, 676339, 676349, 676363, 676373, 676387, 676391, 676409, 676411, 676421, 676427, 676463, 676469, 676493, 676523, 676573, 676589, 676597, 676601, 676649, 676661, 676679, 676703, 676717, 676721, 676727, 676733, 676747, 676751, 676763, 676771, 676807, 676829, 676859, 676861, 676883, 676891, 676903, 676909, 676919, 676927, 676931, 676937, 676943, 676961, 676967, 676979, 676981, 676987, 676993, 677011, 677021, 677029, 677041, 677057, 677077, 677081, 677107, 677111, 677113, 677119, 677147, 677167, 677177, 677213, 677227, 677231, 677233, 677239, 677309, 677311, 677321, 677323, 677333, 677357, 677371, 677387, 677423, 677441, 677447, 677459, 677461, 677471, 677473, 677531, 677533, 677539, 677543, 677561, 677563, 677587, 677627, 677639, 677647, 677657, 677681, 677683, 677687, 677717, 677737, 677767, 677779, 677783, 677791, 677813, 677827, 677857, 677891, 677927, 677947, 677953, 677959, 677983, 678023, 678037, 678047, 678061, 678077, 678101, 678103, 678133, 678157, 678169, 678179, 678191, 678199, 678203, 678211, 678217, 678221, 678229, 678253, 678289, 678299, 678329, 678341, 678343, 678367, 678371, 678383, 678401, 678407, 678409, 678413, 678421, 678437, 678451, 678463, 678479, 678481, 678493, 678499, 678533, 678541, 678553, 678563, 678577, 678581, 678593, 678599, 678607, 678611, 678631, 678637, 678641, 678647, 678649, 678653, 678659, 678719, 678721, 678731, 678739, 678749, 678757, 678761, 678763, 678767, 678773, 678779, 678809, 678823, 678829, 678833, 678859, 678871, 678883, 678901, 678907, 678941, 678943, 678949, 678959, 678971, 678989, 679033, 679037, 679039, 679051, 679067, 679087, 679111, 679123, 679127, 679153, 679157, 679169, 679171, 679183, 679207, 679219, 679223, 679229, 679249, 679277, 679279, 679297, 679309, 679319, 679333, 679361, 679363, 679369, 679373, 679381, 679403, 679409, 679417, 679423, 679433, 679451, 679463, 679487, 679501, 679517, 679519, 679531, 679537, 679561, 679597, 679603, 679607, 679633, 679639, 679669, 679681, 679691, 679699, 679709, 679733, 679741, 679747, 679751, 679753, 679781, 679793, 679807, 679823, 679829, 679837, 679843, 679859, 679867, 679879, 679883, 679891, 679897, 679907, 679909, 679919, 679933, 679951, 679957, 679961, 679969, 679981, 679993, 679999, 680003, 680027, 680039, 680059, 680077, 680081, 680083, 680107, 680123, 680129, 680159, 680161, 680177, 680189, 680203, 680209, 680213, 680237, 680249, 680263, 680291, 680293, 680297, 680299, 680321, 680327, 680341, 680347, 680353, 680377, 680387, 680399, 680401, 680411, 680417, 680431, 680441, 680443, 680453, 680489, 680503, 680507, 680509, 680531, 680539, 680567, 680569, 680587, 680597, 680611, 680623, 680633, 680651, 680657, 680681, 680707, 680749, 680759, 680767, 680783, 680803, 680809, 680831, 680857, 680861, 680873, 680879, 680881, 680917, 680929, 680959, 680971, 680987, 680989, 680993, 681001, 681011, 681019, 681041, 681047, 681049, 681061, 681067, 681089, 681091, 681113, 681127, 681137, 681151, 681167, 681179, 681221, 681229, 681251, 681253, 681257, 681259, 681271, 681293, 681311, 681337, 681341, 681361, 681367, 681371, 681403, 681407, 681409, 681419, 681427, 681449, 681451, 681481, 681487, 681493, 681497, 681521, 681523, 681539, 681557, 681563, 681589, 681607, 681613, 681623, 681631, 681647, 681673, 681677, 681689, 681719, 681727, 681731, 681763, 681773, 681781, 681787, 681809, 681823, 681833, 681839, 681841, 681883, 681899, 681913, 681931, 681943, 681949, 681971, 681977, 681979, 681983, 681997, 682001, 682009, 682037, 682049, 682063, 682069, 682079, 682141, 682147, 682151, 682153, 682183, 682207, 682219, 682229, 682237, 682247, 682259, 682277, 682289, 682291, 682303, 682307, 682321, 682327, 682333, 682337, 682361, 682373, 682411, 682417, 682421, 682427, 682439, 682447, 682463, 682471, 682483, 682489, 682511, 682519, 682531, 682547, 682597, 682607, 682637, 682657, 682673, 682679, 682697, 682699, 682723, 682729, 682733, 682739, 682751, 682763, 682777, 682789, 682811, 682819, 682901, 682933, 682943, 682951, 682967, 683003, 683021, 683041, 683047, 683071, 683083, 683087, 683119, 683129, 683143, 683149, 683159, 683201, 683231, 683251, 683257, 683273, 683299, 683303, 683317, 683323, 683341, 683351, 683357, 683377, 683381, 683401, 683407, 683437, 683447, 683453, 683461, 683471, 683477, 683479, 683483, 683489, 683503, 683513, 683567, 683591, 683597, 683603, 683651, 683653, 683681, 683687, 683693, 683699, 683701, 683713, 683719, 683731, 683737, 683747, 683759, 683777, 683783, 683789, 683807, 683819, 683821, 683831, 683833, 683843, 683857, 683861, 683863, 683873, 683887, 683899, 683909, 683911, 683923, 683933, 683939, 683957, 683983, 684007, 684017, 684037, 684053, 684091, 684109, 684113, 684119, 684121, 684127, 684157, 684163, 684191, 684217, 684221, 684239, 684269, 684287, 684289, 684293, 684311, 684329, 684337, 684347, 684349, 684373, 684379, 684407, 684419, 684427, 684433, 684443, 684451, 684469, 684473, 684493, 684527, 684547, 684557, 684559, 684569, 684581, 684587, 684599, 684617, 684637, 684643, 684647, 684683, 684713, 684727, 684731, 684751, 684757, 684767, 684769, 684773, 684791, 684793, 684799, 684809, 684829, 684841, 684857, 684869, 684889, 684923, 684949, 684961, 684973, 684977, 684989, 685001, 685019, 685031, 685039, 685051, 685057, 685063, 685073, 685081, 685093, 685099, 685103, 685109, 685123, 685141, 685169, 685177, 685199, 685231, 685247, 685249, 685271, 685297, 685301, 685319, 685337, 685339, 685361, 685367, 685369, 685381, 685393, 685417, 685427, 685429, 685453, 685459, 685471, 685493, 685511, 685513, 685519, 685537, 685541, 685547, 685591, 685609, 685613, 685621, 685631, 685637, 685649, 685669, 685679, 685697, 685717, 685723, 685733, 685739, 685747, 685753, 685759, 685781, 685793, 685819, 685849, 685859, 685907, 685939, 685963, 685969, 685973, 685987, 685991, 686003, 686009, 686011, 686027, 686029, 686039, 686041, 686051, 686057, 686087, 686089, 686099, 686117, 686131, 686141, 686143, 686149, 686173, 686177, 686197, 686201, 686209, 686267, 686269, 686293, 686317, 686321, 686333, 686339, 686353, 686359, 686363, 686417, 686423, 686437, 686449, 686453, 686473, 686479, 686503, 686513, 686519, 686551, 686563, 686593, 686611, 686639, 686669, 686671, 686687, 686723, 686729, 686731, 686737, 686761, 686773, 686789, 686797, 686801, 686837, 686843, 686863, 686879, 686891, 686893, 686897, 686911, 686947, 686963, 686969, 686971, 686977, 686989, 686993, 687007, 687013, 687017, 687019, 687023, 687031, 687041, 687061, 687073, 687083, 687101, 687107, 687109, 687121, 687131, 687139, 687151, 687161, 687163, 687179, 687223, 687233, 687277, 687289, 687299, 687307, 687311, 687317, 687331, 687341, 687343, 687359, 687383, 687389, 687397, 687403, 687413, 687431, 687433, 687437, 687443, 687457, 687461, 687473, 687481, 687499, 687517, 687521, 687523, 687541, 687551, 687559, 687581, 687593, 687623, 687637, 687641, 687647, 687679, 687683, 687691, 687707, 687721, 687737, 687749, 687767, 687773, 687779, 687787, 687809, 687823, 687829, 687839, 687847, 687893, 687901, 687917, 687923, 687931, 687949, 687961, 687977, 688003, 688013, 688027, 688031, 688063, 688067, 688073, 688087, 688097, 688111, 688133, 688139, 688147, 688159, 688187, 688201, 688217, 688223, 688249, 688253, 688277, 688297, 688309, 688333, 688339, 688357, 688379, 688393, 688397, 688403, 688411, 688423, 688433, 688447, 688451, 688453, 688477, 688511, 688531, 688543, 688561, 688573, 688591, 688621, 688627, 688631, 688637, 688657, 688661, 688669, 688679, 688697, 688717, 688729, 688733, 688741, 688747, 688757, 688763, 688777, 688783, 688799, 688813, 688861, 688867, 688871, 688889, 688907, 688939, 688951, 688957, 688969, 688979, 688999, 689021, 689033, 689041, 689063, 689071, 689077, 689081, 689089, 689093, 689107, 689113, 689131, 689141, 689167, 689201, 689219, 689233, 689237, 689257, 689261, 689267, 689279, 689291, 689309, 689317, 689321, 689341, 689357, 689369, 689383, 689389, 689393, 689411, 689431, 689441, 689459, 689461, 689467, 689509, 689551, 689561, 689581, 689587, 689597, 689599, 689603, 689621, 689629, 689641, 689693, 689699, 689713, 689723, 689761, 689771, 689779, 689789, 689797, 689803, 689807, 689827, 689831, 689851, 689867, 689869, 689873, 689879, 689891, 689893, 689903, 689917, 689921, 689929, 689951, 689957, 689959, 689963, 689981, 689987, 690037, 690059, 690073, 690089, 690103, 690119, 690127, 690139, 690143, 690163, 690187, 690233, 690259, 690269, 690271, 690281, 690293, 690323, 690341, 690367, 690377, 690397, 690407, 690419, 690427, 690433, 690439, 690449, 690467, 690491, 690493, 690509, 690511, 690533, 690541, 690553, 690583, 690589, 690607, 690611, 690629, 690661, 690673, 690689, 690719, 690721, 690757, 690787, 690793, 690817, 690839, 690841, 690869, 690871, 690887, 690889, 690919, 690929, 690953, 690997, 691001, 691037, 691051, 691063, 691079, 691109, 691111, 691121, 691129, 691147, 691151, 691153, 691181, 691183, 691189, 691193, 691199, 691231, 691241, 691267, 691289, 691297, 691309, 691333, 691337, 691343, 691349, 691363, 691381, 691399, 691409, 691433, 691451, 691463, 691489, 691499, 691531, 691553, 691573, 691583, 691589, 691591, 691631, 691637, 691651, 691661, 691681, 691687, 691693, 691697, 691709, 691721, 691723, 691727, 691729, 691739, 691759, 691763, 691787, 691799, 691813, 691829, 691837, 691841, 691843, 691871, 691877, 691891, 691897, 691903, 691907, 691919, 691921, 691931, 691949, 691973, 691979, 691991, 691997, 692009, 692017, 692051, 692059, 692063, 692071, 692089, 692099, 692117, 692141, 692147, 692149, 692161, 692191, 692221, 692239, 692249, 692269, 692273, 692281, 692287, 692297, 692299, 692309, 692327, 692333, 692347, 692353, 692371, 692387, 692389, 692399, 692401, 692407, 692413, 692423, 692431, 692441, 692453, 692459, 692467, 692513, 692521, 692537, 692539, 692543, 692567, 692581, 692591, 692621, 692641, 692647, 692651, 692663, 692689, 692707, 692711, 692717, 692729, 692743, 692753, 692761, 692771, 692779, 692789, 692821, 692851, 692863, 692893, 692917, 692927, 692929, 692933, 692957, 692963, 692969, 692983, 693019, 693037, 693041, 693061, 693079, 693089, 693097, 693103, 693127, 693137, 693149, 693157, 693167, 693169, 693179, 693223, 693257, 693283, 693317, 693323, 693337, 693353, 693359, 693373, 693397, 693401, 693403, 693409, 693421, 693431, 693437, 693487, 693493, 693503, 693523, 693527, 693529, 693533, 693569, 693571, 693601, 693607, 693619, 693629, 693659, 693661, 693677, 693683, 693689, 693691, 693697, 693701, 693727, 693731, 693733, 693739, 693743, 693757, 693779, 693793, 693799, 693809, 693827, 693829, 693851, 693859, 693871, 693877, 693881, 693943, 693961, 693967, 693989, 694019, 694033, 694039, 694061, 694069, 694079, 694081, 694087, 694091, 694123, 694189, 694193, 694201, 694207, 694223, 694259, 694261, 694271, 694273, 694277, 694313, 694319, 694327, 694333, 694339, 694349, 694357, 694361, 694367, 694373, 694381, 694387, 694391, 694409, 694427, 694457, 694471, 694481, 694483, 694487, 694511, 694513, 694523, 694541, 694549, 694559, 694567, 694571, 694591, 694597, 694609, 694619, 694633, 694649, 694651, 694717, 694721, 694747, 694763, 694781, 694783, 694789, 694829, 694831, 694867, 694871, 694873, 694879, 694901, 694919, 694951, 694957, 694979, 694987, 694997, 694999, 695003, 695017, 695021, 695047, 695059, 695069, 695081, 695087, 695089, 695099, 695111, 695117, 695131, 695141, 695171, 695207, 695239, 695243, 695257, 695263, 695269, 695281, 695293, 695297, 695309, 695323, 695327, 695329, 695347, 695369, 695371, 695377, 695389, 695407, 695411, 695441, 695447, 695467, 695477, 695491, 695503, 695509, 695561, 695567, 695573, 695581, 695593, 695599, 695603, 695621, 695627, 695641, 695659, 695663, 695677, 695687, 695689, 695701, 695719, 695743, 695749, 695771, 695777, 695791, 695801, 695809, 695839, 695843, 695867, 695873, 695879, 695881, 695899, 695917, 695927, 695939, 695999, 696019, 696053, 696061, 696067, 696077, 696079, 696083, 696107, 696109, 696119, 696149, 696181, 696239, 696253, 696257, 696263, 696271, 696281, 696313, 696317, 696323, 696343, 696349, 696359, 696361, 696373, 696379, 696403, 696413, 696427, 696433, 696457, 696481, 696491, 696497, 696503, 696517, 696523, 696533, 696547, 696569, 696607, 696611, 696617, 696623, 696629, 696653, 696659, 696679, 696691, 696719, 696721, 696737, 696743, 696757, 696763, 696793, 696809, 696811, 696823, 696827, 696833, 696851, 696853, 696887, 696889, 696893, 696907, 696929, 696937, 696961, 696989, 696991, 697009, 697013, 697019, 697033, 697049, 697063, 697069, 697079, 697087, 697093, 697111, 697121, 697127, 697133, 697141, 697157, 697181, 697201, 697211, 697217, 697259, 697261, 697267, 697271, 697303, 697327, 697351, 697373, 697379, 697381, 697387, 697397, 697399, 697409, 697423, 697441, 697447, 697453, 697457, 697481, 697507, 697511, 697513, 697519, 697523, 697553, 697579, 697583, 697591, 697601, 697603, 697637, 697643, 697673, 697681, 697687, 697691, 697693, 697703, 697727, 697729, 697733, 697757, 697759, 697787, 697819, 697831, 697877, 697891, 697897, 697909, 697913, 697937, 697951, 697967, 697973, 697979, 697993, 697999, 698017, 698021, 698039, 698051, 698053, 698077, 698083, 698111, 698171, 698183, 698239, 698249, 698251, 698261, 698263, 698273, 698287, 698293, 698297, 698311, 698329, 698339, 698359, 698371, 698387, 698393, 698413, 698417, 698419, 698437, 698447, 698471, 698483, 698491, 698507, 698521, 698527, 698531, 698539, 698543, 698557, 698567, 698591, 698641, 698653, 698669, 698701, 698713, 698723, 698729, 698773, 698779, 698821, 698827, 698849, 698891, 698899, 698903, 698923, 698939, 698977, 698983, 699001, 699007, 699037, 699053, 699059, 699073, 699077, 699089, 699113, 699119, 699133, 699151, 699157, 699169, 699187, 699191, 699197, 699211, 699217, 699221, 699241, 699253, 699271, 699287, 699289, 699299, 699319, 699323, 699343, 699367, 699373, 699379, 699383, 699401, 699427, 699437, 699443, 699449, 699463, 699469, 699493, 699511, 699521, 699527, 699529, 699539, 699541, 699557, 699571, 699581, 699617, 699631, 699641, 699649, 699697, 699709, 699719, 699733, 699757, 699761, 699767, 699791, 699793, 699817, 699823, 699863, 699931, 699943, 699947, 699953, 699961, 699967, 700001, 700027, 700057, 700067, 700079, 700081, 700087, 700099, 700103, 700109, 700127, 700129, 700171, 700199, 700201, 700211, 700223, 700229, 700237, 700241, 700277, 700279, 700303, 700307, 700319, 700331, 700339, 700361, 700363, 700367, 700387, 700391, 700393, 700423, 700429, 700433, 700459, 700471, 700499, 700523, 700537, 700561, 700571, 700573, 700577, 700591, 700597, 700627, 700633, 700639, 700643, 700673, 700681, 700703, 700717, 700751, 700759, 700781, 700789, 700801, 700811, 700831, 700837, 700849, 700871, 700877, 700883, 700897, 700907, 700919, 700933, 700937, 700949, 700963, 700993, 701009, 701011, 701023, 701033, 701047, 701089, 701117, 701147, 701159, 701177, 701179, 701209, 701219, 701221, 701227, 701257, 701279, 701291, 701299, 701329, 701341, 701357, 701359, 701377, 701383, 701399, 701401, 701413, 701417, 701419, 701443, 701447, 701453, 701473, 701479, 701489, 701497, 701507, 701509, 701527, 701531, 701549, 701579, 701581, 701593, 701609, 701611, 701621, 701627, 701629, 701653, 701669, 701671, 701681, 701699, 701711, 701719, 701731, 701741, 701761, 701783, 701791, 701819, 701837, 701863, 701881, 701903, 701951, 701957, 701963, 701969, 702007, 702011, 702017, 702067, 702077, 702101, 702113, 702127, 702131, 702137, 702139, 702173, 702179, 702193, 702199, 702203, 702211, 702239, 702257, 702269, 702281, 702283, 702311, 702313, 702323, 702329, 702337, 702341, 702347, 702349, 702353, 702379, 702391, 702407, 702413, 702431, 702433, 702439, 702451, 702469, 702497, 702503, 702511, 702517, 702523, 702529, 702539, 702551, 702557, 702587, 702589, 702599, 702607, 702613, 702623, 702671, 702679, 702683, 702701, 702707, 702721, 702731, 702733, 702743, 702773, 702787, 702803, 702809, 702817, 702827, 702847, 702851, 702853, 702869, 702881, 702887, 702893, 702913, 702937, 702983, 702991, 703013, 703033, 703039, 703081, 703117, 703121, 703123, 703127, 703139, 703141, 703169, 703193, 703211, 703217, 703223, 703229, 703231, 703243, 703249, 703267, 703277, 703301, 703309, 703321, 703327, 703331, 703349, 703357, 703379, 703393, 703411, 703441, 703447, 703459, 703463, 703471, 703489, 703499, 703531, 703537, 703559, 703561, 703631, 703643, 703657, 703663, 703673, 703679, 703691, 703699, 703709, 703711, 703721, 703733, 703753, 703763, 703789, 703819, 703837, 703849, 703861, 703873, 703883, 703897, 703903, 703907, 703943, 703949, 703957, 703981, 703991, 704003, 704009, 704017, 704023, 704027, 704029, 704059, 704069, 704087, 704101, 704111, 704117, 704131, 704141, 704153, 704161, 704177, 704183, 704189, 704213, 704219, 704233, 704243, 704251, 704269, 704279, 704281, 704287, 704299, 704303, 704309, 704321, 704357, 704393, 704399, 704419, 704441, 704447, 704449, 704453, 704461, 704477, 704507, 704521, 704527, 704549, 704551, 704567, 704569, 704579, 704581, 704593, 704603, 704617, 704647, 704657, 704663, 704681, 704687, 704713, 704719, 704731, 704747, 704761, 704771, 704777, 704779, 704783, 704797, 704801, 704807, 704819, 704833, 704839, 704849, 704857, 704861, 704863, 704867, 704897, 704929, 704933, 704947, 704983, 704989, 704993, 704999, 705011, 705013, 705017, 705031, 705043, 705053, 705073, 705079, 705097, 705113, 705119, 705127, 705137, 705161, 705163, 705167, 705169, 705181, 705191, 705197, 705209, 705247, 705259, 705269, 705277, 705293, 705307, 705317, 705389, 705403, 705409, 705421, 705427, 705437, 705461, 705491, 705493, 705499, 705521, 705533, 705559, 705613, 705631, 705643, 705689, 705713, 705737, 705751, 705763, 705769, 705779, 705781, 705787, 705821, 705827, 705829, 705833, 705841, 705863, 705871, 705883, 705899, 705919, 705937, 705949, 705967, 705973, 705989, 706001, 706003, 706009, 706019, 706033, 706039, 706049, 706051, 706067, 706099, 706109, 706117, 706133, 706141, 706151, 706157, 706159, 706183, 706193, 706201, 706207, 706213, 706229, 706253, 706267, 706283, 706291, 706297, 706301, 706309, 706313, 706337, 706357, 706369, 706373, 706403, 706417, 706427, 706463, 706481, 706487, 706499, 706507, 706523, 706547, 706561, 706597, 706603, 706613, 706621, 706631, 706633, 706661, 706669, 706679, 706703, 706709, 706729, 706733, 706747, 706751, 706753, 706757, 706763, 706787, 706793, 706801, 706829, 706837, 706841, 706847, 706883, 706897, 706907, 706913, 706919, 706921, 706943, 706961, 706973, 706987, 706999, 707011, 707027, 707029, 707053, 707071, 707099, 707111, 707117, 707131, 707143, 707153, 707159, 707177, 707191, 707197, 707219, 707249, 707261, 707279, 707293, 707299, 707321, 707341, 707359, 707383, 707407, 707429, 707431, 707437, 707459, 707467, 707501, 707527, 707543, 707561, 707563, 707573, 707627, 707633, 707647, 707653, 707669, 707671, 707677, 707683, 707689, 707711, 707717, 707723, 707747, 707753, 707767, 707789, 707797, 707801, 707813, 707827, 707831, 707849, 707857, 707869, 707873, 707887, 707911, 707923, 707929, 707933, 707939, 707951, 707953, 707957, 707969, 707981, 707983, 708007, 708011, 708017, 708023, 708031, 708041, 708047, 708049, 708053, 708061, 708091, 708109, 708119, 708131, 708137, 708139, 708161, 708163, 708179, 708199, 708221, 708223, 708229, 708251, 708269, 708283, 708287, 708293, 708311, 708329, 708343, 708347, 708353, 708359, 708361, 708371, 708403, 708437, 708457, 708473, 708479, 708481, 708493, 708497, 708517, 708527, 708559, 708563, 708569, 708583, 708593, 708599, 708601, 708641, 708647, 708667, 708689, 708703, 708733, 708751, 708803, 708823, 708839, 708857, 708859, 708893, 708899, 708907, 708913, 708923, 708937, 708943, 708959, 708979, 708989, 708991, 708997, 709043, 709057, 709097, 709117, 709123, 709139, 709141, 709151, 709153, 709157, 709201, 709211, 709217, 709231, 709237, 709271, 709273, 709279, 709283, 709307, 709321, 709337, 709349, 709351, 709381, 709409, 709417, 709421, 709433, 709447, 709451, 709453, 709469, 709507, 709519, 709531, 709537, 709547, 709561, 709589, 709603, 709607, 709609, 709649, 709651, 709663, 709673, 709679, 709691, 709693, 709703, 709729, 709739, 709741, 709769, 709777, 709789, 709799, 709817, 709823, 709831, 709843, 709847, 709853, 709861, 709871, 709879, 709901, 709909, 709913, 709921, 709927, 709957, 709963, 709967, 709981, 709991, 710009, 710023, 710027, 710051, 710053, 710081, 710089, 710119, 710189, 710207, 710219, 710221, 710257, 710261, 710273, 710293, 710299, 710321, 710323, 710327, 710341, 710351, 710371, 710377, 710383, 710389, 710399, 710441, 710443, 710449, 710459, 710473, 710483, 710491, 710503, 710513, 710519, 710527, 710531, 710557, 710561, 710569, 710573, 710599, 710603, 710609, 710621, 710623, 710627, 710641, 710663, 710683, 710693, 710713, 710777, 710779, 710791, 710813, 710837, 710839, 710849, 710851, 710863, 710867, 710873, 710887, 710903, 710909, 710911, 710917, 710929, 710933, 710951, 710959, 710971, 710977, 710987, 710989, 711001, 711017, 711019, 711023, 711041, 711049, 711089, 711097, 711121, 711131, 711133, 711143, 711163, 711173, 711181, 711187, 711209, 711223, 711259, 711287, 711299, 711307, 711317, 711329, 711353, 711371, 711397, 711409, 711427, 711437, 711463, 711479, 711497, 711499, 711509, 711517, 711523, 711539, 711563, 711577, 711583, 711589, 711617, 711629, 711649, 711653, 711679, 711691, 711701, 711707, 711709, 711713, 711727, 711731, 711749, 711751, 711757, 711793, 711811, 711817, 711829, 711839, 711847, 711859, 711877, 711889, 711899, 711913, 711923, 711929, 711937, 711947, 711959, 711967, 711973, 711983, 712007, 712021, 712051, 712067, 712093, 712109, 712121, 712133, 712157, 712169, 712171, 712183, 712199, 712219, 712237, 712279, 712289, 712301, 712303, 712319, 712321, 712331, 712339, 712357, 712409, 712417, 712427, 712429, 712433, 712447, 712477, 712483, 712489, 712493, 712499, 712507, 712511, 712531, 712561, 712571, 712573, 712601, 712603, 712631, 712651, 712669, 712681, 712687, 712693, 712697, 712711, 712717, 712739, 712781, 712807, 712819, 712837, 712841, 712843, 712847, 712883, 712889, 712891, 712909, 712913, 712927, 712939, 712951, 712961, 712967, 712973, 712981, 713021, 713039, 713059, 713077, 713107, 713117, 713129, 713147, 713149, 713159, 713171, 713177, 713183, 713189, 713191, 713227, 713233, 713239, 713243, 713261, 713267, 713281, 713287, 713309, 713311, 713329, 713347, 713351, 713353, 713357, 713381, 713389, 713399, 713407, 713411, 713417, 713467, 713477, 713491, 713497, 713501, 713509, 713533, 713563, 713569, 713597, 713599, 713611, 713627, 713653, 713663, 713681, 713737, 713743, 713747, 713753, 713771, 713807, 713827, 713831, 713833, 713861, 713863, 713873, 713891, 713903, 713917, 713927, 713939, 713941, 713957, 713981, 713987, 714029, 714037, 714061, 714073, 714107, 714113, 714139, 714143, 714151, 714163, 714169, 714199, 714223, 714227, 714247, 714257, 714283, 714341, 714349, 714361, 714377, 714443, 714463, 714479, 714481, 714487, 714503, 714509, 714517, 714521, 714529, 714551, 714557, 714563, 714569, 714577, 714601, 714619, 714673, 714677, 714691, 714719, 714739, 714751, 714773, 714781, 714787, 714797, 714809, 714827, 714839, 714841, 714851, 714853, 714869, 714881, 714887, 714893, 714907, 714911, 714919, 714943, 714947, 714949, 714971, 714991, 715019, 715031, 715049, 715063, 715069, 715073, 715087, 715109, 715123, 715151, 715153, 715157, 715159, 715171, 715189, 715193, 715223, 715229, 715237, 715243, 715249, 715259, 715289, 715301, 715303, 715313, 715339, 715357, 715361, 715373, 715397, 715417, 715423, 715439, 715441, 715453, 715457, 715489, 715499, 715523, 715537, 715549, 715567, 715571, 715577, 715579, 715613, 715621, 715639, 715643, 715651, 715657, 715679, 715681, 715699, 715727, 715739, 715753, 715777, 715789, 715801, 715811, 715817, 715823, 715843, 715849, 715859, 715867, 715873, 715877, 715879, 715889, 715903, 715909, 715919, 715927, 715943, 715961, 715963, 715969, 715973, 715991, 715999, 716003, 716033, 716063, 716087, 716117, 716123, 716137, 716143, 716161, 716171, 716173, 716249, 716257, 716279, 716291, 716299, 716321, 716351, 716383, 716389, 716399, 716411, 716413, 716447, 716449, 716453, 716459, 716477, 716479, 716483, 716491, 716501, 716531, 716543, 716549, 716563, 716581, 716591, 716621, 716629, 716633, 716659, 716663, 716671, 716687, 716693, 716707, 716713, 716731, 716741, 716743, 716747, 716783, 716789, 716809, 716819, 716827, 716857, 716861, 716869, 716897, 716899, 716917, 716929, 716951, 716953, 716959, 716981, 716987, 717001, 717011, 717047, 717089, 717091, 717103, 717109, 717113, 717127, 717133, 717139, 717149, 717151, 717161, 717191, 717229, 717259, 717271, 717289, 717293, 717317, 717323, 717331, 717341, 717397, 717413, 717419, 717427, 717443, 717449, 717463, 717491, 717511, 717527, 717529, 717533, 717539, 717551, 717559, 717581, 717589, 717593, 717631, 717653, 717659, 717667, 717679, 717683, 717697, 717719, 717751, 717797, 717803, 717811, 717817, 717841, 717851, 717883, 717887, 717917, 717919, 717923, 717967, 717979, 717989, 718007, 718043, 718049, 718051, 718087, 718093, 718121, 718139, 718163, 718169, 718171, 718183, 718187, 718241, 718259, 718271, 718303, 718321, 718331, 718337, 718343, 718349, 718357, 718379, 718381, 718387, 718391, 718411, 718423, 718427, 718433, 718453, 718457, 718463, 718493, 718511, 718513, 718541, 718547, 718559, 718579, 718603, 718621, 718633, 718657, 718661, 718691, 718703, 718717, 718723, 718741, 718747, 718759, 718801, 718807, 718813, 718841, 718847, 718871, 718897, 718901, 718919, 718931, 718937, 718943, 718973, 718999, 719009, 719011, 719027, 719041, 719057, 719063, 719071, 719101, 719119, 719143, 719149, 719153, 719167, 719177, 719179, 719183, 719189, 719197, 719203, 719227, 719237, 719239, 719267, 719281, 719297, 719333, 719351, 719353, 719377, 719393, 719413, 719419, 719441, 719447, 719483, 719503, 719533, 719557, 719567, 719569, 719573, 719597, 719599, 719633, 719639, 719659, 719671, 719681, 719683, 719689, 719699, 719713, 719717, 719723, 719731, 719749, 719753, 719773, 719779, 719791, 719801, 719813, 719821, 719833, 719839, 719893, 719903, 719911, 719941, 719947, 719951, 719959, 719981, 719989, 720007, 720019, 720023, 720053, 720059, 720089, 720091, 720101, 720127, 720133, 720151, 720173, 720179, 720193, 720197, 720211, 720221, 720229, 720241, 720253, 720257, 720281, 720283, 720289, 720299, 720301, 720311, 720319, 720359, 720361, 720367, 720373, 720397, 720403, 720407, 720413, 720439, 720481, 720491, 720497, 720527, 720547, 720569, 720571, 720607, 720611, 720617, 720619, 720653, 720661, 720677, 720683, 720697, 720703, 720743, 720763, 720767, 720773, 720779, 720791, 720793, 720829, 720847, 720857, 720869, 720877, 720887, 720899, 720901, 720913, 720931, 720943, 720947, 720961, 720971, 720983, 720991, 720997, 721003, 721013, 721037, 721043, 721051, 721057, 721079, 721087, 721109, 721111, 721117, 721129, 721139, 721141, 721159, 721163, 721169, 721177, 721181, 721199, 721207, 721213, 721219, 721223, 721229, 721243, 721261, 721267, 721283, 721291, 721307, 721319, 721321, 721333, 721337, 721351, 721363, 721379, 721381, 721387, 721397, 721439, 721451, 721481, 721499, 721529, 721547, 721561, 721571, 721577, 721597, 721613, 721619, 721621, 721631, 721661, 721663, 721687, 721697, 721703, 721709, 721733, 721739, 721783, 721793, 721843, 721849, 721859, 721883, 721891, 721909, 721921, 721951, 721961, 721979, 721991, 721997, 722011, 722023, 722027, 722047, 722063, 722069, 722077, 722093, 722119, 722123, 722147, 722149, 722153, 722159, 722167, 722173, 722213, 722237, 722243, 722257, 722273, 722287, 722291, 722299, 722311, 722317, 722321, 722333, 722341, 722353, 722363, 722369, 722377, 722389, 722411, 722417, 722431, 722459, 722467, 722479, 722489, 722509, 722521, 722537, 722539, 722563, 722581, 722599, 722611, 722633, 722639, 722663, 722669, 722713, 722723, 722737, 722749, 722783, 722791, 722797, 722807, 722819, 722833, 722849, 722881, 722899, 722903, 722921, 722933, 722963, 722971, 722977, 722983, 723029, 723031, 723043, 723049, 723053, 723067, 723071, 723089, 723101, 723103, 723109, 723113, 723119, 723127, 723133, 723157, 723161, 723167, 723169, 723181, 723193, 723209, 723221, 723227, 723257, 723259, 723263, 723269, 723271, 723287, 723293, 723319, 723337, 723353, 723361, 723379, 723391, 723407, 723409, 723413, 723421, 723439, 723451, 723467, 723473, 723479, 723491, 723493, 723529, 723551, 723553, 723559, 723563, 723587, 723589, 723601, 723607, 723617, 723623, 723661, 723721, 723727, 723739, 723761, 723791, 723797, 723799, 723803, 723823, 723829, 723839, 723851, 723857, 723859, 723893, 723901, 723907, 723913, 723917, 723923, 723949, 723959, 723967, 723973, 723977, 723997, 724001, 724007, 724021, 724079, 724093, 724099, 724111, 724117, 724121, 724123, 724153, 724187, 724211, 724219, 724259, 724267, 724277, 724291, 724303, 724309, 724313, 724331, 724393, 724403, 724433, 724441, 724447, 724453, 724459, 724469, 724481, 724487, 724499, 724513, 724517, 724519, 724531, 724547, 724553, 724567, 724573, 724583, 724597, 724601, 724609, 724621, 724627, 724631, 724639, 724643, 724651, 724721, 724723, 724729, 724733, 724747, 724751, 724769, 724777, 724781, 724783, 724807, 724813, 724837, 724847, 724853, 724879, 724901, 724903, 724939, 724949, 724961, 724967, 724991, 724993, 725009, 725041, 725057, 725071, 725077, 725099, 725111, 725113, 725119, 725147, 725149, 725159, 725161, 725189, 725201, 725209, 725273, 725293, 725303, 725317, 725321, 725323, 725327, 725341, 725357, 725359, 725371, 725381, 725393, 725399, 725423, 725437, 725447, 725449, 725479, 725507, 725519, 725531, 725537, 725579, 725587, 725597, 725603, 725639, 725653, 725663, 725671, 725687, 725723, 725731, 725737, 725749, 725789, 725801, 725807, 725827, 725861, 725863, 725867, 725891, 725897, 725909, 725929, 725939, 725953, 725981, 725983, 725993, 725999, 726007, 726013, 726023, 726043, 726071, 726091, 726097, 726101, 726107, 726109, 726137, 726139, 726149, 726157, 726163, 726169, 726181, 726191, 726221, 726287, 726289, 726301, 726307, 726331, 726337, 726367, 726371, 726377, 726379, 726391, 726413, 726419, 726431, 726457, 726463, 726469, 726487, 726497, 726521, 726527, 726533, 726559, 726589, 726599, 726601, 726611, 726619, 726623, 726629, 726641, 726647, 726659, 726679, 726689, 726697, 726701, 726707, 726751, 726779, 726787, 726797, 726809, 726811, 726839, 726841, 726853, 726893, 726899, 726911, 726917, 726923, 726941, 726953, 726983, 726989, 726991, 727003, 727009, 727019, 727021, 727049, 727061, 727063, 727079, 727121, 727123, 727157, 727159, 727169, 727183, 727189, 727201, 727211, 727241, 727247, 727249, 727261, 727267, 727271, 727273, 727289, 727297, 727313, 727327, 727343, 727351, 727369, 727399, 727409, 727427, 727451, 727459, 727471, 727483, 727487, 727499, 727501, 727541, 727561, 727577, 727589, 727613, 727621, 727633, 727667, 727673, 727691, 727703, 727711, 727717, 727729, 727733, 727747, 727759, 727763, 727777, 727781, 727799, 727807, 727817, 727823, 727843, 727847, 727877, 727879, 727891, 727933, 727939, 727949, 727981, 727997, 728003, 728017, 728027, 728047, 728069, 728087, 728113, 728129, 728131, 728173, 728191, 728207, 728209, 728261, 728267, 728269, 728281, 728293, 728303, 728317, 728333, 728369, 728381, 728383, 728417, 728423, 728437, 728471, 728477, 728489, 728521, 728527, 728537, 728551, 728557, 728561, 728573, 728579, 728627, 728639, 728647, 728659, 728681, 728687, 728699, 728701, 728713, 728723, 728729, 728731, 728743, 728747, 728771, 728809, 728813, 728831, 728837, 728839, 728843, 728851, 728867, 728869, 728873, 728881, 728891, 728899, 728911, 728921, 728927, 728929, 728941, 728947, 728953, 728969, 728971, 728993, 729019, 729023, 729037, 729041, 729059, 729073, 729139, 729143, 729173, 729187, 729191, 729199, 729203, 729217, 729257, 729269, 729271, 729293, 729301, 729329, 729331, 729359, 729367, 729371, 729373, 729389, 729403, 729413, 729451, 729457, 729473, 729493, 729497, 729503, 729511, 729527, 729551, 729557, 729559, 729569, 729571, 729577, 729587, 729601, 729607, 729613, 729637, 729643, 729649, 729661, 729671, 729679, 729689, 729713, 729719, 729737, 729749, 729761, 729779, 729787, 729791, 729821, 729851, 729871, 729877, 729907, 729913, 729919, 729931, 729941, 729943, 729947, 729977, 729979, 729991, 730003, 730021, 730033, 730049, 730069, 730091, 730111, 730139, 730157, 730187, 730199, 730217, 730237, 730253, 730277, 730283, 730297, 730321, 730339, 730363, 730397, 730399, 730421, 730447, 730451, 730459, 730469, 730487, 730537, 730553, 730559, 730567, 730571, 730573, 730589, 730591, 730603, 730619, 730633, 730637, 730663, 730669, 730679, 730727, 730747, 730753, 730757, 730777, 730781, 730783, 730789, 730799, 730811, 730819, 730823, 730837, 730843, 730853, 730867, 730879, 730889, 730901, 730909, 730913, 730943, 730969, 730973, 730993, 730999, 731033, 731041, 731047, 731053, 731057, 731113, 731117, 731141, 731173, 731183, 731189, 731191, 731201, 731209, 731219, 731233, 731243, 731249, 731251, 731257, 731261, 731267, 731287, 731299, 731327, 731333, 731359, 731363, 731369, 731389, 731413, 731447, 731483, 731501, 731503, 731509, 731531, 731539, 731567, 731587, 731593, 731597, 731603, 731611, 731623, 731639, 731651, 731681, 731683, 731711, 731713, 731719, 731729, 731737, 731741, 731761, 731767, 731779, 731803, 731807, 731821, 731827, 731831, 731839, 731851, 731869, 731881, 731893, 731909, 731911, 731921, 731923, 731933, 731957, 731981, 731999, 732023, 732029, 732041, 732073, 732077, 732079, 732097, 732101, 732133, 732157, 732169, 732181, 732187, 732191, 732197, 732209, 732211, 732217, 732229, 732233, 732239, 732257, 732271, 732283, 732287, 732293, 732299, 732311, 732323, 732331, 732373, 732439, 732449, 732461, 732467, 732491, 732493, 732497, 732509, 732521, 732533, 732541, 732601, 732617, 732631, 732653, 732673, 732689, 732703, 732709, 732713, 732731, 732749, 732761, 732769, 732799, 732817, 732827, 732829, 732833, 732841, 732863, 732877, 732889, 732911, 732923, 732943, 732959, 732967, 732971, 732997, 733003, 733009, 733067, 733097, 733099, 733111, 733123, 733127, 733133, 733141, 733147, 733157, 733169, 733177, 733189, 733237, 733241, 733273, 733277, 733283, 733289, 733301, 733307, 733321, 733331, 733333, 733339, 733351, 733373, 733387, 733391, 733393, 733399, 733409, 733427, 733433, 733459, 733477, 733489, 733511, 733517, 733519, 733559, 733561, 733591, 733619, 733639, 733651, 733687, 733697, 733741, 733751, 733753, 733757, 733793, 733807, 733813, 733823, 733829, 733841, 733847, 733849, 733867, 733871, 733879, 733883, 733919, 733921, 733937, 733939, 733949, 733963, 733973, 733981, 733991, 734003, 734017, 734021, 734047, 734057, 734087, 734113, 734131, 734143, 734159, 734171, 734177, 734189, 734197, 734203, 734207, 734221, 734233, 734263, 734267, 734273, 734291, 734303, 734329, 734347, 734381, 734389, 734401, 734411, 734423, 734429, 734431, 734443, 734471, 734473, 734477, 734479, 734497, 734537, 734543, 734549, 734557, 734567, 734627, 734647, 734653, 734659, 734663, 734687, 734693, 734707, 734717, 734729, 734737, 734743, 734759, 734771, 734803, 734807, 734813, 734819, 734837, 734849, 734869, 734879, 734887, 734897, 734911, 734933, 734941, 734953, 734957, 734959, 734971, 735001, 735019, 735043, 735061, 735067, 735071, 735073, 735083, 735107, 735109, 735113, 735139, 735143, 735157, 735169, 735173, 735181, 735187, 735193, 735209, 735211, 735239, 735247, 735263, 735271, 735283, 735307, 735311, 735331, 735337, 735341, 735359, 735367, 735373, 735389, 735391, 735419, 735421, 735431, 735439, 735443, 735451, 735461, 735467, 735473, 735479, 735491, 735529, 735533, 735557, 735571, 735617, 735649, 735653, 735659, 735673, 735689, 735697, 735719, 735731, 735733, 735739, 735751, 735781, 735809, 735821, 735829, 735853, 735871, 735877, 735883, 735901, 735919, 735937, 735949, 735953, 735979, 735983, 735997, 736007, 736013, 736027, 736037, 736039, 736051, 736061, 736063, 736091, 736093, 736097, 736111, 736121, 736147, 736159, 736181, 736187, 736243, 736247, 736249, 736259, 736273, 736277, 736279, 736357, 736361, 736363, 736367, 736369, 736381, 736387, 736399, 736403, 736409, 736429, 736433, 736441, 736447, 736469, 736471, 736511, 736577, 736607, 736639, 736657, 736679, 736691, 736699, 736717, 736721, 736741, 736787, 736793, 736817, 736823, 736843, 736847, 736867, 736871, 736889, 736903, 736921, 736927, 736937, 736951, 736961, 736973, 736987, 736993, 737017, 737039, 737041, 737047, 737053, 737059, 737083, 737089, 737111, 737119, 737129, 737131, 737147, 737159, 737179, 737183, 737203, 737207, 737251, 737263, 737279, 737281, 737287, 737291, 737293, 737309, 737327, 737339, 737351, 737353, 737411, 737413, 737423, 737431, 737479, 737483, 737497, 737501, 737507, 737509, 737531, 737533, 737537, 737563, 737567, 737573, 737591, 737593, 737617, 737629, 737641, 737657, 737663, 737683, 737687, 737717, 737719, 737729, 737747, 737753, 737767, 737773, 737797, 737801, 737809, 737819, 737843, 737857, 737861, 737873, 737887, 737897, 737921, 737927, 737929, 737969, 737981, 737999, 738011, 738029, 738043, 738053, 738071, 738083, 738107, 738109, 738121, 738151, 738163, 738173, 738197, 738211, 738217, 738223, 738247, 738263, 738301, 738313, 738317, 738319, 738341, 738349, 738373, 738379, 738383, 738391, 738401, 738403, 738421, 738443, 738457, 738469, 738487, 738499, 738509, 738523, 738539, 738547, 738581, 738583, 738589, 738623, 738643, 738677, 738707, 738713, 738721, 738743, 738757, 738781, 738791, 738797, 738811, 738827, 738839, 738847, 738851, 738863, 738877, 738889, 738917, 738919, 738923, 738937, 738953, 738961, 738977, 738989, 739003, 739021, 739027, 739031, 739051, 739061, 739069, 739087, 739099, 739103, 739111, 739117, 739121, 739153, 739163, 739171, 739183, 739187, 739199, 739201, 739217, 739241, 739253, 739273, 739283, 739301, 739303, 739307, 739327, 739331, 739337, 739351, 739363, 739369, 739373, 739379, 739391, 739393, 739397, 739399, 739433, 739439, 739463, 739469, 739493, 739507, 739511, 739513, 739523, 739549, 739553, 739579, 739601, 739603, 739621, 739631, 739633, 739637, 739649, 739693, 739699, 739723, 739751, 739759, 739771, 739777, 739787, 739799, 739813, 739829, 739847, 739853, 739859, 739861, 739909, 739931, 739943, 739951, 739957, 739967, 739969, 740011, 740021, 740023, 740041, 740053, 740059, 740087, 740099, 740123, 740141, 740143, 740153, 740161, 740171, 740189, 740191, 740227, 740237, 740279, 740287, 740303, 740321, 740323, 740329, 740351, 740359, 740371, 740387, 740423, 740429, 740461, 740473, 740477, 740483, 740513, 740521, 740527, 740533, 740549, 740561, 740581, 740591, 740599, 740603, 740651, 740653, 740659, 740671, 740681, 740687, 740693, 740711, 740713, 740717, 740737, 740749, 740801, 740849, 740891, 740893, 740897, 740903, 740923, 740939, 740951, 740969, 740989, 741001, 741007, 741011, 741031, 741043, 741053, 741061, 741071, 741077, 741079, 741101, 741119, 741121, 741127, 741131, 741137, 741163, 741187, 741193, 741227, 741229, 741233, 741253, 741283, 741337, 741341, 741343, 741347, 741373, 741401, 741409, 741413, 741431, 741457, 741467, 741469, 741473, 741479, 741491, 741493, 741509, 741541, 741547, 741563, 741569, 741593, 741599, 741641, 741661, 741667, 741677, 741679, 741683, 741691, 741709, 741721, 741781, 741787, 741803, 741809, 741827, 741833, 741847, 741857, 741859, 741869, 741877, 741883, 741913, 741929, 741941, 741967, 741973, 741991, 742009, 742031, 742037, 742057, 742069, 742073, 742111, 742117, 742127, 742151, 742153, 742193, 742199, 742201, 742211, 742213, 742219, 742229, 742241, 742243, 742253, 742277, 742283, 742289, 742307, 742327, 742333, 742351, 742369, 742381, 742393, 742409, 742439, 742457, 742499, 742507, 742513, 742519, 742531, 742537, 742541, 742549, 742559, 742579, 742591, 742607, 742619, 742657, 742663, 742673, 742681, 742697, 742699, 742711, 742717, 742723, 742757, 742759, 742783, 742789, 742801, 742817, 742891, 742897, 742909, 742913, 742943, 742949, 742967, 742981, 742991, 742993, 742999, 743027, 743047, 743059, 743069, 743089, 743111, 743123, 743129, 743131, 743137, 743143, 743159, 743161, 743167, 743173, 743177, 743179, 743203, 743209, 743221, 743251, 743263, 743269, 743273, 743279, 743297, 743321, 743333, 743339, 743363, 743377, 743401, 743423, 743447, 743507, 743549, 743551, 743573, 743579, 743591, 743609, 743657, 743669, 743671, 743689, 743693, 743711, 743731, 743747, 743777, 743779, 743791, 743803, 743819, 743833, 743837, 743849, 743851, 743881, 743891, 743917, 743921, 743923, 743933, 743947, 743987, 743989, 744019, 744043, 744071, 744077, 744083, 744113, 744127, 744137, 744179, 744187, 744199, 744203, 744221, 744239, 744251, 744253, 744283, 744301, 744313, 744353, 744371, 744377, 744389, 744391, 744397, 744407, 744409, 744431, 744451, 744493, 744503, 744511, 744539, 744547, 744559, 744599, 744607, 744637, 744641, 744649, 744659, 744661, 744677, 744701, 744707, 744721, 744727, 744739, 744761, 744767, 744791, 744811, 744817, 744823, 744829, 744833, 744859, 744893, 744911, 744917, 744941, 744949, 744959, 744977, 745001, 745013, 745027, 745033, 745037, 745051, 745067, 745103, 745117, 745133, 745141, 745181, 745187, 745189, 745201, 745231, 745243, 745247, 745249, 745273, 745301, 745307, 745337, 745343, 745357, 745369, 745379, 745391, 745397, 745471, 745477, 745517, 745529, 745531, 745543, 745567, 745573, 745601, 745609, 745621, 745631, 745649, 745673, 745697, 745699, 745709, 745711, 745727, 745733, 745741, 745747, 745751, 745753, 745757, 745817, 745837, 745859, 745873, 745903, 745931, 745933, 745939, 745951, 745973, 745981, 745993, 745999, 746017, 746023, 746033, 746041, 746047, 746069, 746099, 746101, 746107, 746117, 746129, 746153, 746167, 746171, 746177, 746183, 746191, 746197, 746203, 746209, 746227, 746231, 746233, 746243, 746267, 746287, 746303, 746309, 746329, 746353, 746363, 746371, 746411, 746413, 746429, 746477, 746479, 746483, 746497, 746503, 746507, 746509, 746531, 746533, 746561, 746563, 746597, 746653, 746659, 746671, 746677, 746723, 746737, 746743, 746747, 746749, 746773, 746777, 746791, 746797, 746807, 746813, 746839, 746843, 746869, 746873, 746891, 746899, 746903, 746939, 746951, 746957, 746959, 746969, 746981, 746989, 747037, 747049, 747053, 747073, 747107, 747113, 747139, 747157, 747161, 747199, 747203, 747223, 747239, 747259, 747277, 747283, 747287, 747319, 747323, 747343, 747361, 747377, 747391, 747401, 747407, 747421, 747427, 747449, 747451, 747457, 747463, 747493, 747497, 747499, 747521, 747529, 747547, 747557, 747563, 747583, 747587, 747599, 747611, 747619, 747647, 747673, 747679, 747713, 747731, 747737, 747743, 747763, 747781, 747811, 747827, 747829, 747833, 747839, 747841, 747853, 747863, 747869, 747871, 747889, 747917, 747919, 747941, 747953, 747977, 747979, 747991, 748003, 748019, 748021, 748039, 748057, 748091, 748093, 748133, 748169, 748183, 748199, 748207, 748211, 748217, 748219, 748249, 748271, 748273, 748283, 748301, 748331, 748337, 748339, 748343, 748361, 748379, 748387, 748441, 748453, 748463, 748471, 748481, 748487, 748499, 748513, 748523, 748541, 748567, 748589, 748597, 748603, 748609, 748613, 748633, 748637, 748639, 748669, 748687, 748691, 748703, 748711, 748717, 748723, 748729, 748763, 748777, 748789, 748801, 748807, 748817, 748819, 748823, 748829, 748831, 748849, 748861, 748871, 748877, 748883, 748889, 748921, 748933, 748963, 748973, 748981, 748987, 749011, 749027, 749051, 749069, 749081, 749083, 749093, 749129, 749137, 749143, 749149, 749153, 749167, 749171, 749183, 749197, 749209, 749219, 749237, 749249, 749257, 749267, 749279, 749297, 749299, 749323, 749339, 749347, 749351, 749383, 749393, 749401, 749423, 749429, 749431, 749443, 749449, 749453, 749461, 749467, 749471, 749543, 749557, 749587, 749641, 749653, 749659, 749677, 749701, 749711, 749729, 749741, 749747, 749761, 749773, 749779, 749803, 749807, 749809, 749843, 749851, 749863, 749891, 749893, 749899, 749909, 749923, 749927, 749939, 749941, 749971, 749993, 750019, 750037, 750059, 750077, 750083, 750097, 750119, 750121, 750131, 750133, 750137, 750151, 750157, 750161, 750163, 750173, 750179, 750203, 750209, 750223, 750229, 750287, 750311, 750313, 750353, 750383, 750401, 750413, 750419, 750437, 750457, 750473, 750487, 750509, 750517, 750521, 750553, 750571, 750599, 750613, 750641, 750653, 750661, 750667, 750679, 750691, 750707, 750713, 750719, 750721, 750749, 750769, 750787, 750791, 750797, 750803, 750809, 750817, 750829, 750853, 750857, 750863, 750917, 750929, 750943, 750961, 750977, 750983, 751001, 751007, 751021, 751027, 751057, 751061, 751087, 751103, 751123, 751133, 751139, 751141, 751147, 751151, 751181, 751183, 751189, 751193, 751199, 751207, 751217, 751237, 751259, 751273, 751277, 751291, 751297, 751301, 751307, 751319, 751321, 751327, 751343, 751351, 751357, 751363, 751367, 751379, 751411, 751423, 751447, 751453, 751463, 751481, 751523, 751529, 751549, 751567, 751579, 751609, 751613, 751627, 751631, 751633, 751637, 751643, 751661, 751669, 751691, 751711, 751717, 751727, 751739, 751747, 751753, 751759, 751763, 751787, 751799, 751813, 751823, 751841, 751853, 751867, 751871, 751879, 751901, 751909, 751913, 751921, 751943, 751957, 751969, 751987, 751997, 752009, 752023, 752033, 752053, 752083, 752093, 752107, 752111, 752117, 752137, 752149, 752177, 752183, 752189, 752197, 752201, 752203, 752207, 752251, 752263, 752273, 752281, 752287, 752291, 752293, 752299, 752303, 752351, 752359, 752383, 752413, 752431, 752447, 752449, 752459, 752483, 752489, 752503, 752513, 752519, 752527, 752569, 752581, 752593, 752603, 752627, 752639, 752651, 752681, 752683, 752699, 752701, 752707, 752747, 752771, 752789, 752797, 752803, 752809, 752819, 752821, 752831, 752833, 752861, 752867, 752881, 752891, 752903, 752911, 752929, 752933, 752977, 752993, 753001, 753007, 753019, 753023, 753031, 753079, 753091, 753127, 753133, 753139, 753143, 753161, 753187, 753191, 753197, 753229, 753257, 753307, 753329, 753341, 753353, 753367, 753373, 753383, 753409, 753421, 753427, 753437, 753439, 753461, 753463, 753497, 753499, 753527, 753547, 753569, 753583, 753587, 753589, 753611, 753617, 753619, 753631, 753647, 753659, 753677, 753679, 753689, 753691, 753707, 753719, 753721, 753737, 753743, 753751, 753773, 753793, 753799, 753803, 753811, 753821, 753839, 753847, 753859, 753931, 753937, 753941, 753947, 753959, 753979, 753983, 754003, 754027, 754037, 754043, 754057, 754067, 754073, 754081, 754093, 754099, 754109, 754111, 754121, 754123, 754133, 754153, 754157, 754181, 754183, 754207, 754211, 754217, 754223, 754241, 754249, 754267, 754279, 754283, 754289, 754297, 754301, 754333, 754337, 754343, 754367, 754373, 754379, 754381, 754399, 754417, 754421, 754427, 754451, 754463, 754483, 754489, 754513, 754531, 754549, 754573, 754577, 754583, 754597, 754627, 754639, 754651, 754703, 754709, 754711, 754717, 754723, 754739, 754751, 754771, 754781, 754811, 754829, 754861, 754877, 754891, 754903, 754907, 754921, 754931, 754937, 754939, 754967, 754969, 754973, 754979, 754981, 754991, 754993, 755009, 755033, 755057, 755071, 755077, 755081, 755087, 755107, 755137, 755143, 755147, 755171, 755173, 755203, 755213, 755233, 755239, 755257, 755267, 755273, 755309, 755311, 755317, 755329, 755333, 755351, 755357, 755371, 755387, 755393, 755399, 755401, 755413, 755437, 755441, 755449, 755473, 755483, 755509, 755539, 755551, 755561, 755567, 755569, 755593, 755597, 755617, 755627, 755663, 755681, 755707, 755717, 755719, 755737, 755759, 755767, 755771, 755789, 755791, 755809, 755813, 755861, 755863, 755869, 755879, 755899, 755903, 755959, 755969, 755977, 756011, 756023, 756043, 756053, 756097, 756101, 756127, 756131, 756139, 756149, 756167, 756179, 756191, 756199, 756227, 756247, 756251, 756253, 756271, 756281, 756289, 756293, 756319, 756323, 756331, 756373, 756403, 756419, 756421, 756433, 756443, 756463, 756467, 756527, 756533, 756541, 756563, 756571, 756593, 756601, 756607, 756629, 756641, 756649, 756667, 756673, 756683, 756689, 756703, 756709, 756719, 756727, 756739, 756773, 756799, 756829, 756839, 756853, 756869, 756881, 756887, 756919, 756923, 756961, 756967, 756971, 757019, 757039, 757063, 757067, 757109, 757111, 757151, 757157, 757171, 757181, 757201, 757241, 757243, 757247, 757259, 757271, 757291, 757297, 757307, 757319, 757327, 757331, 757343, 757363, 757381, 757387, 757403, 757409, 757417, 757429, 757433, 757457, 757481, 757487, 757507, 757513, 757517, 757543, 757553, 757577, 757579, 757583, 757607, 757633, 757651, 757661, 757693, 757699, 757709, 757711, 757727, 757751, 757753, 757763, 757793, 757807, 757811, 757819, 757829, 757879, 757903, 757909, 757927, 757937, 757943, 757951, 757993, 757997, 758003, 758029, 758041, 758053, 758071, 758083, 758099, 758101, 758111, 758137, 758141, 758159, 758179, 758189, 758201, 758203, 758227, 758231, 758237, 758243, 758267, 758269, 758273, 758279, 758299, 758323, 758339, 758341, 758357, 758363, 758383, 758393, 758411, 758431, 758441, 758449, 758453, 758491, 758501, 758503, 758519, 758521, 758551, 758561, 758573, 758579, 758599, 758617, 758629, 758633, 758671, 758687, 758699, 758707, 758711, 758713, 758729, 758731, 758741, 758743, 758753, 758767, 758783, 758789, 758819, 758827, 758837, 758851, 758867, 758887, 758893, 758899, 758929, 758941, 758957, 758963, 758969, 758971, 758987, 759001, 759019, 759029, 759037, 759047, 759053, 759089, 759103, 759113, 759131, 759149, 759167, 759173, 759179, 759181, 759193, 759223, 759229, 759263, 759287, 759293, 759301, 759313, 759329, 759359, 759371, 759377, 759397, 759401, 759431, 759433, 759457, 759463, 759467, 759491, 759503, 759523, 759547, 759553, 759557, 759559, 759569, 759571, 759581, 759589, 759599, 759617, 759623, 759631, 759637, 759641, 759653, 759659, 759673, 759691, 759697, 759701, 759709, 759719, 759727, 759739, 759757, 759763, 759797, 759799, 759821, 759833, 759881, 759893, 759911, 759923, 759929, 759947, 759953, 759959, 759961, 759973, 760007, 760043, 760063, 760079, 760093, 760103, 760117, 760129, 760141, 760147, 760153, 760163, 760169, 760183, 760187, 760211, 760229, 760231, 760237, 760241, 760261, 760267, 760273, 760289, 760297, 760301, 760321, 760343, 760367, 760373, 760411, 760423, 760433, 760447, 760453, 760457, 760477, 760489, 760499, 760511, 760519, 760531, 760537, 760549, 760553, 760561, 760567, 760579, 760607, 760619, 760621, 760637, 760649, 760657, 760693, 760723, 760729, 760759, 760769, 760783, 760807, 760813, 760841, 760843, 760847, 760871, 760891, 760897, 760901, 760913, 760927, 760933, 760939, 760951, 760961, 760993, 760997, 761003, 761009, 761023, 761051, 761069, 761087, 761113, 761119, 761129, 761153, 761161, 761177, 761179, 761183, 761203, 761207, 761213, 761227, 761249, 761251, 761261, 761263, 761291, 761297, 761347, 761351, 761357, 761363, 761377, 761381, 761389, 761393, 761399, 761407, 761417, 761429, 761437, 761441, 761443, 761459, 761471, 761477, 761483, 761489, 761521, 761531, 761533, 761543, 761561, 761567, 761591, 761597, 761603, 761611, 761623, 761633, 761669, 761671, 761681, 761689, 761711, 761713, 761731, 761773, 761777, 761779, 761807, 761809, 761833, 761861, 761863, 761869, 761879, 761897, 761927, 761939, 761963, 761977, 761983, 761993, 762001, 762007, 762017, 762031, 762037, 762049, 762053, 762061, 762101, 762121, 762187, 762211, 762227, 762233, 762239, 762241, 762253, 762257, 762277, 762319, 762329, 762367, 762371, 762373, 762379, 762389, 762397, 762401, 762407, 762409, 762479, 762491, 762499, 762529, 762539, 762547, 762557, 762563, 762571, 762577, 762583, 762599, 762647, 762653, 762659, 762667, 762721, 762737, 762743, 762761, 762779, 762791, 762809, 762821, 762823, 762847, 762871, 762877, 762893, 762899, 762901, 762913, 762917, 762919, 762959, 762967, 762973, 762989, 763001, 763013, 763027, 763031, 763039, 763043, 763067, 763073, 763093, 763111, 763123, 763141, 763157, 763159, 763183, 763201, 763223, 763237, 763261, 763267, 763271, 763303, 763307, 763339, 763349, 763369, 763381, 763391, 763403, 763409, 763417, 763423, 763429, 763447, 763457, 763471, 763481, 763493, 763513, 763523, 763549, 763559, 763573, 763579, 763583, 763597, 763601, 763613, 763619, 763621, 763627, 763649, 763663, 763673, 763699, 763739, 763751, 763753, 763757, 763771, 763787, 763801, 763811, 763823, 763843, 763859, 763879, 763883, 763897, 763901, 763907, 763913, 763921, 763927, 763937, 763943, 763957, 763967, 763999, 764003, 764011, 764017, 764021, 764041, 764051, 764053, 764059, 764081, 764089, 764111, 764131, 764143, 764149, 764171, 764189, 764209, 764233, 764249, 764251, 764261, 764273, 764293, 764317, 764321, 764327, 764339, 764341, 764369, 764381, 764399, 764431, 764447, 764459, 764471, 764501, 764521, 764539, 764551, 764563, 764587, 764591, 764593, 764611, 764623, 764627, 764629, 764657, 764683, 764689, 764717, 764719, 764723, 764783, 764789, 764809, 764837, 764839, 764849, 764857, 764887, 764891, 764893, 764899, 764903, 764947, 764969, 764971, 764977, 764989, 764993, 764999, 765007, 765031, 765041, 765043, 765047, 765059, 765091, 765097, 765103, 765109, 765131, 765137, 765139, 765143, 765151, 765169, 765181, 765199, 765203, 765209, 765211, 765227, 765229, 765241, 765251, 765257, 765283, 765287, 765293, 765307, 765313, 765319, 765329, 765353, 765379, 765383, 765389, 765409, 765437, 765439, 765461, 765467, 765487, 765497, 765503, 765521, 765533, 765539, 765577, 765581, 765587, 765613, 765619, 765623, 765649, 765659, 765673, 765707, 765727, 765749, 765763, 765767, 765773, 765781, 765823, 765827, 765847, 765851, 765857, 765859, 765881, 765889, 765893, 765899, 765907, 765913, 765931, 765949, 765953, 765971, 765983, 765991, 766021, 766039, 766049, 766067, 766079, 766091, 766097, 766109, 766111, 766127, 766163, 766169, 766177, 766187, 766211, 766223, 766229, 766231, 766237, 766247, 766261, 766273, 766277, 766301, 766313, 766321, 766333, 766357, 766361, 766369, 766373, 766387, 766393, 766399, 766421, 766439, 766453, 766457, 766471, 766477, 766487, 766501, 766511, 766531, 766541, 766543, 766553, 766559, 766583, 766609, 766637, 766639, 766651, 766679, 766687, 766721, 766739, 766757, 766763, 766769, 766793, 766807, 766811, 766813, 766817, 766861, 766867, 766873, 766877, 766891, 766901, 766907, 766937, 766939, 766943, 766957, 766967, 766999, 767017, 767029, 767051, 767071, 767089, 767093, 767101, 767111, 767131, 767147, 767153, 767161, 767167, 767203, 767243, 767279, 767287, 767293, 767309, 767317, 767321, 767323, 767339, 767357, 767359, 767381, 767399, 767423, 767443, 767471, 767489, 767509, 767513, 767521, 767527, 767537, 767539, 767549, 767551, 767587, 767597, 767603, 767617, 767623, 767633, 767647, 767677, 767681, 767707, 767729, 767747, 767749, 767759, 767761, 767773, 767783, 767813, 767827, 767831, 767843, 767857, 767863, 767867, 767869, 767881, 767909, 767951, 767957, 768013, 768029, 768041, 768049, 768059, 768073, 768101, 768107, 768127, 768133, 768139, 768161, 768167, 768169, 768191, 768193, 768197, 768199, 768203, 768221, 768241, 768259, 768263, 768301, 768319, 768323, 768329, 768343, 768347, 768353, 768359, 768371, 768373, 768377, 768389, 768401, 768409, 768419, 768431, 768437, 768457, 768461, 768479, 768491, 768503, 768541, 768563, 768571, 768589, 768613, 768623, 768629, 768631, 768641, 768643, 768653, 768671, 768727, 768751, 768767, 768773, 768787, 768793, 768799, 768811, 768841, 768851, 768853, 768857, 768869, 768881, 768923, 768931, 768941, 768953, 768979, 768983, 769003, 769007, 769019, 769033, 769039, 769057, 769073, 769081, 769091, 769117, 769123, 769147, 769151, 769159, 769169, 769207, 769231, 769243, 769247, 769259, 769261, 769273, 769289, 769297, 769309, 769319, 769339, 769357, 769387, 769411, 769421, 769423, 769429, 769453, 769459, 769463, 769469, 769487, 769541, 769543, 769547, 769553, 769577, 769579, 769589, 769591, 769597, 769619, 769627, 769661, 769663, 769673, 769687, 769723, 769729, 769733, 769739, 769751, 769781, 769789, 769799, 769807, 769837, 769871, 769903, 769919, 769927, 769943, 769961, 769963, 769973, 769987, 769997, 769999, 770027, 770039, 770041, 770047, 770053, 770057, 770059, 770069, 770101, 770111, 770113, 770123, 770129, 770167, 770177, 770179, 770183, 770191, 770207, 770227, 770233, 770239, 770261, 770281, 770291, 770309, 770311, 770353, 770359, 770387, 770401, 770417, 770437, 770447, 770449, 770459, 770503, 770519, 770527, 770533, 770537, 770551, 770557, 770573, 770579, 770587, 770591, 770597, 770611, 770639, 770641, 770647, 770657, 770663, 770669, 770741, 770761, 770767, 770771, 770789, 770801, 770813, 770837, 770839, 770843, 770863, 770867, 770873, 770881, 770897, 770909, 770927, 770929, 770951, 770971, 770981, 770993, 771011, 771013, 771019, 771031, 771037, 771047, 771049, 771073, 771079, 771091, 771109, 771143, 771163, 771179, 771181, 771209, 771217, 771227, 771233, 771269, 771283, 771289, 771293, 771299, 771301, 771349, 771359, 771389, 771401, 771403, 771427, 771431, 771437, 771439, 771461, 771473, 771481, 771499, 771503, 771509, 771517, 771527, 771553, 771569, 771583, 771587, 771607, 771619, 771623, 771629, 771637, 771643, 771653, 771679, 771691, 771697, 771703, 771739, 771763, 771769, 771781, 771809, 771853, 771863, 771877, 771887, 771889, 771899, 771917, 771937, 771941, 771961, 771971, 771973, 771997, 772001, 772003, 772019, 772061, 772073, 772081, 772091, 772097, 772127, 772139, 772147, 772159, 772169, 772181, 772207, 772229, 772231, 772273, 772279, 772297, 772313, 772333, 772339, 772349, 772367, 772379, 772381, 772391, 772393, 772403, 772439, 772441, 772451, 772459, 772477, 772493, 772517, 772537, 772567, 772571, 772573, 772591, 772619, 772631, 772649, 772657, 772661, 772663, 772669, 772691, 772697, 772703, 772721, 772757, 772771, 772789, 772843, 772847, 772853, 772859, 772867, 772903, 772907, 772909, 772913, 772921, 772949, 772963, 772987, 772991, 773021, 773023, 773027, 773029, 773039, 773057, 773063, 773081, 773083, 773093, 773117, 773147, 773153, 773159, 773207, 773209, 773231, 773239, 773249, 773251, 773273, 773287, 773299, 773317, 773341, 773363, 773371, 773387, 773393, 773407, 773417, 773447, 773453, 773473, 773491, 773497, 773501, 773533, 773537, 773561, 773567, 773569, 773579, 773599, 773603, 773609, 773611, 773657, 773659, 773681, 773683, 773693, 773713, 773719, 773723, 773767, 773777, 773779, 773803, 773821, 773831, 773837, 773849, 773863, 773867, 773869, 773879, 773897, 773909, 773933, 773939, 773951, 773953, 773987, 773989, 773999, 774001, 774017, 774023, 774047, 774071, 774073, 774083, 774107, 774119, 774127, 774131, 774133, 774143, 774149, 774161, 774173, 774181, 774199, 774217, 774223, 774229, 774233, 774239, 774283, 774289, 774313, 774317, 774337, 774343, 774377, 774427, 774439, 774463, 774467, 774491, 774511, 774523, 774541, 774551, 774577, 774583, 774589, 774593, 774601, 774629, 774643, 774661, 774667, 774671, 774679, 774691, 774703, 774733, 774757, 774773, 774779, 774791, 774797, 774799, 774803, 774811, 774821, 774833, 774853, 774857, 774863, 774901, 774919, 774929, 774931, 774959, 774997, 775007, 775037, 775043, 775057, 775063, 775079, 775087, 775091, 775097, 775121, 775147, 775153, 775157, 775163, 775189, 775193, 775237, 775241, 775259, 775267, 775273, 775309, 775343, 775349, 775361, 775363, 775367, 775393, 775417, 775441, 775451, 775477, 775507, 775513, 775517, 775531, 775553, 775573, 775601, 775603, 775613, 775627, 775633, 775639, 775661, 775669, 775681, 775711, 775729, 775739, 775741, 775757, 775777, 775787, 775807, 775811, 775823, 775861, 775871, 775889, 775919, 775933, 775937, 775939, 775949, 775963, 775987, 776003, 776029, 776047, 776057, 776059, 776077, 776099, 776117, 776119, 776137, 776143, 776159, 776173, 776177, 776179, 776183, 776201, 776219, 776221, 776233, 776249, 776257, 776267, 776287, 776317, 776327, 776357, 776389, 776401, 776429, 776449, 776453, 776467, 776471, 776483, 776497, 776507, 776513, 776521, 776551, 776557, 776561, 776563, 776569, 776599, 776627, 776651, 776683, 776693, 776719, 776729, 776749, 776753, 776759, 776801, 776813, 776819, 776837, 776851, 776861, 776869, 776879, 776887, 776899, 776921, 776947, 776969, 776977, 776983, 776987, 777001, 777011, 777013, 777031, 777041, 777071, 777097, 777103, 777109, 777137, 777143, 777151, 777167, 777169, 777173, 777181, 777187, 777191, 777199, 777209, 777221, 777241, 777247, 777251, 777269, 777277, 777313, 777317, 777349, 777353, 777373, 777383, 777389, 777391, 777419, 777421, 777431, 777433, 777437, 777451, 777463, 777473, 777479, 777541, 777551, 777571, 777583, 777589, 777617, 777619, 777641, 777643, 777661, 777671, 777677, 777683, 777731, 777737, 777743, 777761, 777769, 777781, 777787, 777817, 777839, 777857, 777859, 777863, 777871, 777877, 777901, 777911, 777919, 777977, 777979, 777989, 778013, 778027, 778049, 778051, 778061, 778079, 778081, 778091, 778097, 778109, 778111, 778121, 778123, 778153, 778163, 778187, 778201, 778213, 778223, 778237, 778241, 778247, 778301, 778307, 778313, 778319, 778333, 778357, 778361, 778363, 778391, 778397, 778403, 778409, 778417, 778439, 778469, 778507, 778511, 778513, 778523, 778529, 778537, 778541, 778553, 778559, 778567, 778579, 778597, 778633, 778643, 778663, 778667, 778681, 778693, 778697, 778699, 778709, 778717, 778727, 778733, 778759, 778763, 778769, 778777, 778793, 778819, 778831, 778847, 778871, 778873, 778879, 778903, 778907, 778913, 778927, 778933, 778951, 778963, 778979, 778993, 779003, 779011, 779021, 779039, 779063, 779069, 779081, 779101, 779111, 779131, 779137, 779159, 779173, 779189, 779221, 779231, 779239, 779249, 779267, 779327, 779329, 779341, 779347, 779351, 779353, 779357, 779377, 779413, 779477, 779489, 779507, 779521, 779531, 779543, 779561, 779563, 779573, 779579, 779591, 779593, 779599, 779609, 779617, 779621, 779657, 779659, 779663, 779693, 779699, 779707, 779731, 779747, 779749, 779761, 779767, 779771, 779791, 779797, 779827, 779837, 779869, 779873, 779879, 779887, 779899, 779927, 779939, 779971, 779981, 779983, 779993, 780029, 780037, 780041, 780047, 780049, 780061, 780119, 780127, 780163, 780173, 780179, 780191, 780193, 780211, 780223, 780233, 780253, 780257, 780287, 780323, 780343, 780347, 780371, 780379, 780383, 780389, 780397, 780401, 780421, 780433, 780457, 780469, 780499, 780523, 780553, 780583, 780587, 780601, 780613, 780631, 780649, 780667, 780671, 780679, 780683, 780697, 780707, 780719, 780721, 780733, 780799, 780803, 780809, 780817, 780823, 780833, 780841, 780851, 780853, 780869, 780877, 780887, 780889, 780917, 780931, 780953, 780961, 780971, 780973, 780991, 781003, 781007, 781021, 781043, 781051, 781063, 781069, 781087, 781111, 781117, 781127, 781129, 781139, 781163, 781171, 781199, 781211, 781217, 781229, 781243, 781247, 781271, 781283, 781301, 781307, 781309, 781321, 781327, 781351, 781357, 781367, 781369, 781387, 781397, 781399, 781409, 781423, 781427, 781433, 781453, 781481, 781483, 781493, 781511, 781513, 781519, 781523, 781531, 781559, 781567, 781589, 781601, 781607, 781619, 781631, 781633, 781661, 781673, 781681, 781721, 781733, 781741, 781771, 781799, 781801, 781817, 781819, 781853, 781861, 781867, 781883, 781889, 781897, 781919, 781951, 781961, 781967, 781969, 781973, 781987, 781997, 781999, 782003, 782009, 782011, 782053, 782057, 782071, 782083, 782087, 782107, 782113, 782123, 782129, 782137, 782141, 782147, 782149, 782183, 782189, 782191, 782209, 782219, 782231, 782251, 782263, 782267, 782297, 782311, 782329, 782339, 782371, 782381, 782387, 782389, 782393, 782429, 782443, 782461, 782473, 782489, 782497, 782501, 782519, 782539, 782581, 782611, 782641, 782659, 782669, 782671, 782687, 782689, 782707, 782711, 782723, 782777, 782783, 782791, 782839, 782849, 782861, 782891, 782911, 782921, 782941, 782963, 782981, 782983, 782993, 783007, 783011, 783019, 783023, 783043, 783077, 783089, 783119, 783121, 783131, 783137, 783143, 783149, 783151, 783191, 783193, 783197, 783227, 783247, 783257, 783259, 783269, 783283, 783317, 783323, 783329, 783337, 783359, 783361, 783373, 783379, 783407, 783413, 783421, 783473, 783487, 783527, 783529, 783533, 783553, 783557, 783569, 783571, 783599, 783613, 783619, 783641, 783647, 783661, 783677, 783689, 783691, 783701, 783703, 783707, 783719, 783721, 783733, 783737, 783743, 783749, 783763, 783767, 783779, 783781, 783787, 783791, 783793, 783799, 783803, 783829, 783869, 783877, 783931, 783953, 784009, 784039, 784061, 784081, 784087, 784097, 784103, 784109, 784117, 784129, 784153, 784171, 784181, 784183, 784211, 784213, 784219, 784229, 784243, 784249, 784283, 784307, 784309, 784313, 784321, 784327, 784349, 784351, 784367, 784373, 784379, 784387, 784409, 784411, 784423, 784447, 784451, 784457, 784463, 784471, 784481, 784489, 784501, 784513, 784541, 784543, 784547, 784561, 784573, 784577, 784583, 784603, 784627, 784649, 784661, 784687, 784697, 784717, 784723, 784727, 784753, 784789, 784799, 784831, 784837, 784841, 784859, 784867, 784897, 784913, 784919, 784939, 784957, 784961, 784981, 785003, 785017, 785033, 785053, 785093, 785101, 785107, 785119, 785123, 785129, 785143, 785153, 785159, 785167, 785203, 785207, 785219, 785221, 785227, 785249, 785269, 785287, 785293, 785299, 785303, 785311, 785321, 785329, 785333, 785341, 785347, 785353, 785357, 785363, 785377, 785413, 785423, 785431, 785459, 785461, 785483, 785501, 785503, 785527, 785537, 785549, 785569, 785573, 785579, 785591, 785597, 785623, 785627, 785641, 785651, 785671, 785693, 785717, 785731, 785737, 785753, 785773, 785777, 785779, 785801, 785803, 785809, 785839, 785857, 785861, 785879, 785903, 785921, 785923, 785947, 785951, 785963, 786001, 786013, 786017, 786031, 786047, 786053, 786059, 786061, 786077, 786109, 786127, 786151, 786167, 786173, 786179, 786197, 786211, 786223, 786241, 786251, 786271, 786307, 786311, 786319, 786329, 786337, 786349, 786371, 786407, 786419, 786431, 786433, 786449, 786469, 786491, 786547, 786551, 786553, 786587, 786589, 786613, 786629, 786659, 786661, 786673, 786691, 786697, 786701, 786703, 786707, 786719, 786739, 786763, 786803, 786823, 786829, 786833, 786859, 786881, 786887, 786889, 786901, 786931, 786937, 786941, 786949, 786959, 786971, 786979, 786983, 787021, 787043, 787051, 787057, 787067, 787069, 787079, 787091, 787099, 787123, 787139, 787153, 787181, 787187, 787207, 787217, 787243, 787261, 787277, 787289, 787309, 787331, 787333, 787337, 787357, 787361, 787427, 787429, 787433, 787439, 787447, 787469, 787477, 787483, 787489, 787513, 787517, 787519, 787529, 787537, 787541, 787547, 787573, 787601, 787609, 787621, 787639, 787649, 787667, 787697, 787711, 787747, 787751, 787757, 787769, 787771, 787777, 787783, 787793, 787807, 787811, 787817, 787823, 787837, 787879, 787883, 787903, 787907, 787939, 787973, 787981, 787993, 787999, 788009, 788023, 788027, 788033, 788041, 788071, 788077, 788087, 788089, 788093, 788107, 788129, 788153, 788159, 788167, 788173, 788189, 788209, 788213, 788231, 788261, 788267, 788287, 788309, 788317, 788321, 788351, 788353, 788357, 788363, 788369, 788377, 788383, 788387, 788393, 788399, 788413, 788419, 788429, 788449, 788467, 788479, 788497, 788521, 788527, 788531, 788537, 788549, 788561, 788563, 788569, 788603, 788621, 788651, 788659, 788677, 788687, 788701, 788719, 788761, 788779, 788789, 788813, 788819, 788849, 788863, 788867, 788869, 788873, 788891, 788897, 788903, 788927, 788933, 788941, 788947, 788959, 788971, 788993, 788999, 789001, 789017, 789029, 789031, 789067, 789077, 789091, 789097, 789101, 789109, 789121, 789133, 789137, 789149, 789169, 789181, 789221, 789227, 789251, 789311, 789323, 789331, 789343, 789367, 789377, 789389, 789391, 789407, 789419, 789443, 789473, 789491, 789493, 789511, 789527, 789533, 789557, 789571, 789577, 789587, 789589, 789611, 789623, 789631, 789653, 789671, 789673, 789683, 789689, 789709, 789713, 789721, 789731, 789739, 789749, 789793, 789823, 789829, 789847, 789851, 789857, 789883, 789941, 789959, 789961, 789967, 789977, 789979, 790003, 790021, 790033, 790043, 790051, 790057, 790063, 790087, 790093, 790099, 790121, 790169, 790171, 790189, 790199, 790201, 790219, 790241, 790261, 790271, 790277, 790289, 790291, 790327, 790331, 790333, 790351, 790369, 790379, 790397, 790403, 790417, 790421, 790429, 790451, 790459, 790481, 790501, 790513, 790519, 790523, 790529, 790547, 790567, 790583, 790589, 790607, 790613, 790633, 790637, 790649, 790651, 790693, 790697, 790703, 790709, 790733, 790739, 790747, 790753, 790781, 790793, 790817, 790819, 790831, 790843, 790861, 790871, 790879, 790883, 790897, 790927, 790957, 790961, 790967, 790969, 790991, 790997, 791003, 791009, 791017, 791029, 791047, 791053, 791081, 791093, 791099, 791111, 791117, 791137, 791159, 791191, 791201, 791209, 791227, 791233, 791251, 791257, 791261, 791291, 791309, 791311, 791317, 791321, 791347, 791363, 791377, 791387, 791411, 791419, 791431, 791443, 791447, 791473, 791489, 791519, 791543, 791561, 791563, 791569, 791573, 791599, 791627, 791629, 791657, 791663, 791677, 791699, 791773, 791783, 791789, 791797, 791801, 791803, 791827, 791849, 791851, 791887, 791891, 791897, 791899, 791909, 791927, 791929, 791933, 791951, 791969, 791971, 791993, 792023, 792031, 792037, 792041, 792049, 792061, 792067, 792073, 792101, 792107, 792109, 792119, 792131, 792151, 792163, 792179, 792223, 792227, 792229, 792241, 792247, 792257, 792263, 792277, 792283, 792293, 792299, 792301, 792307, 792317, 792359, 792371, 792377, 792383, 792397, 792413, 792443, 792461, 792479, 792481, 792487, 792521, 792529, 792551, 792553, 792559, 792563, 792581, 792593, 792601, 792613, 792629, 792637, 792641, 792643, 792647, 792667, 792679, 792689, 792691, 792697, 792703, 792709, 792713, 792731, 792751, 792769, 792793, 792797, 792821, 792871, 792881, 792893, 792907, 792919, 792929, 792941, 792959, 792973, 792983, 792989, 792991, 793043, 793069, 793099, 793103, 793123, 793129, 793139, 793159, 793181, 793187, 793189, 793207, 793229, 793253, 793279, 793297, 793301, 793327, 793333, 793337, 793343, 793379, 793399, 793439, 793447, 793453, 793487, 793489, 793493, 793511, 793517, 793519, 793537, 793547, 793553, 793561, 793591, 793601, 793607, 793621, 793627, 793633, 793669, 793673, 793691, 793699, 793711, 793717, 793721, 793733, 793739, 793757, 793769, 793777, 793787, 793789, 793813, 793841, 793843, 793853, 793867, 793889, 793901, 793927, 793931, 793939, 793957, 793967, 793979, 793981, 793999, 794009, 794011, 794023, 794033, 794039, 794041, 794063, 794071, 794077, 794089, 794111, 794113, 794119, 794137, 794141, 794149, 794153, 794161, 794173, 794179, 794191, 794201, 794203, 794207, 794221, 794231, 794239, 794249, 794327, 794341, 794363, 794383, 794389, 794399, 794407, 794413, 794449, 794471, 794473, 794477, 794483, 794491, 794509, 794531, 794537, 794543, 794551, 794557, 794569, 794579, 794587, 794593, 794641, 794653, 794657, 794659, 794669, 794693, 794711, 794741, 794743, 794749, 794779, 794831, 794879, 794881, 794887, 794921, 794923, 794953, 794957, 794993, 794999, 795001, 795007, 795023, 795071, 795077, 795079, 795083, 795097, 795101, 795103, 795121, 795127, 795139, 795149, 795161, 795187, 795203, 795211, 795217, 795233, 795239, 795251, 795253, 795299, 795307, 795323, 795329, 795337, 795343, 795349, 795427, 795449, 795461, 795467, 795479, 795493, 795503, 795517, 795527, 795533, 795539, 795551, 795581, 795589, 795601, 795643, 795647, 795649, 795653, 795659, 795661, 795667, 795679, 795703, 795709, 795713, 795727, 795737, 795761, 795763, 795791, 795793, 795797, 795799, 795803, 795827, 795829, 795871, 795877, 795913, 795917, 795931, 795937, 795941, 795943, 795947, 795979, 795983, 795997, 796001, 796009, 796063, 796067, 796091, 796121, 796139, 796141, 796151, 796171, 796177, 796181, 796189, 796193, 796217, 796247, 796259, 796267, 796291, 796303, 796307, 796337, 796339, 796361, 796363, 796373, 796379, 796387, 796391, 796409, 796447, 796451, 796459, 796487, 796493, 796517, 796531, 796541, 796553, 796561, 796567, 796571, 796583, 796591, 796619, 796633, 796657, 796673, 796687, 796693, 796699, 796709, 796711, 796751, 796759, 796769, 796777, 796781, 796799, 796801, 796813, 796819, 796847, 796849, 796853, 796867, 796871, 796877, 796889, 796921, 796931, 796933, 796937, 796951, 796967, 796969, 796981, 797003, 797009, 797021, 797029, 797033, 797039, 797051, 797053, 797057, 797063, 797077, 797119, 797131, 797143, 797161, 797171, 797201, 797207, 797273, 797281, 797287, 797309, 797311, 797333, 797353, 797359, 797383, 797389, 797399, 797417, 797429, 797473, 797497, 797507, 797509, 797539, 797549, 797551, 797557, 797561, 797567, 797569, 797579, 797581, 797591, 797593, 797611, 797627, 797633, 797647, 797681, 797689, 797701, 797711, 797729, 797743, 797747, 797767, 797773, 797813, 797833, 797851, 797869, 797887, 797897, 797911, 797917, 797933, 797947, 797957, 797977, 797987, 798023, 798043, 798059, 798067, 798071, 798079, 798089, 798097, 798101, 798121, 798131, 798139, 798143, 798151, 798173, 798179, 798191, 798197, 798199, 798221, 798223, 798227, 798251, 798257, 798263, 798271, 798293, 798319, 798331, 798373, 798383, 798397, 798403, 798409, 798443, 798451, 798461, 798481, 798487, 798503, 798517, 798521, 798527, 798533, 798569, 798599, 798613, 798641, 798647, 798649, 798667, 798691, 798697, 798701, 798713, 798727, 798737, 798751, 798757, 798773, 798781, 798799, 798823, 798871, 798887, 798911, 798923, 798929, 798937, 798943, 798961, 799003, 799021, 799031, 799061, 799063, 799091, 799093, 799103, 799147, 799151, 799171, 799217, 799219, 799223, 799259, 799291, 799301, 799303, 799307, 799313, 799333, 799343, 799361, 799363, 799369, 799417, 799427, 799441, 799453, 799471, 799481, 799483, 799489, 799507, 799523, 799529, 799543, 799553, 799573, 799609, 799613, 799619, 799621, 799633, 799637, 799651, 799657, 799661, 799679, 799723, 799727, 799739, 799741, 799753, 799759, 799789, 799801, 799807, 799817, 799837, 799853, 799859, 799873, 799891, 799921, 799949, 799961, 799979, 799991, 799993, 799999, 800011, 800029, 800053, 800057, 800077, 800083, 800089, 800113, 800117, 800119, 800123, 800131, 800143, 800159, 800161, 800171, 800209, 800213, 800221, 800231, 800237, 800243, 800281, 800287, 800291, 800311, 800329, 800333, 800351, 800357, 800399, 800407, 800417, 800419, 800441, 800447, 800473, 800477, 800483, 800497, 800509, 800519, 800521, 800533, 800537, 800539, 800549, 800557, 800573, 800587, 800593, 800599, 800621, 800623, 800647, 800651, 800659, 800663, 800669, 800677, 800687, 800693, 800707, 800711, 800729, 800731, 800741, 800743, 800759, 800773, 800783, 800801, 800861, 800873, 800879, 800897, 800903, 800909, 800923, 800953, 800959, 800971, 800977, 800993, 800999, 801001, 801007, 801011, 801019, 801037, 801061, 801077, 801079, 801103, 801107, 801127, 801137, 801179, 801187, 801197, 801217, 801247, 801277, 801289, 801293, 801301, 801331, 801337, 801341, 801349, 801371, 801379, 801403, 801407, 801419, 801421, 801461, 801469, 801487, 801503, 801517, 801539, 801551, 801557, 801569, 801571, 801607, 801611, 801617, 801631, 801641, 801677, 801683, 801701, 801707, 801709, 801733, 801761, 801791, 801809, 801811, 801817, 801833, 801841, 801859, 801883, 801947, 801949, 801959, 801973, 801989, 802007, 802019, 802027, 802031, 802037, 802073, 802103, 802121, 802127, 802129, 802133, 802141, 802147, 802159, 802163, 802177, 802181, 802183, 802189, 802231, 802253, 802279, 802283, 802297, 802331, 802339, 802357, 802387, 802421, 802441, 802453, 802463, 802471, 802499, 802511, 802523, 802531, 802573, 802583, 802589, 802597, 802603, 802609, 802643, 802649, 802651, 802661, 802667, 802709, 802721, 802729, 802733, 802751, 802759, 802777, 802783, 802787, 802793, 802799, 802811, 802829, 802831, 802873, 802909, 802913, 802933, 802951, 802969, 802979, 802987, 803027, 803041, 803053, 803057, 803059, 803087, 803093, 803119, 803141, 803171, 803189, 803207, 803227, 803237, 803251, 803269, 803273, 803287, 803311, 803323, 803333, 803347, 803359, 803389, 803393, 803399, 803417, 803441, 803443, 803447, 803449, 803461, 803479, 803483, 803497, 803501, 803513, 803519, 803549, 803587, 803591, 803609, 803611, 803623, 803629, 803651, 803659, 803669, 803687, 803717, 803729, 803731, 803741, 803749, 803813, 803819, 803849, 803857, 803867, 803893, 803897, 803911, 803921, 803927, 803939, 803963, 803977, 803987, 803989, 804007, 804017, 804031, 804043, 804059, 804073, 804077, 804091, 804107, 804113, 804119, 804127, 804157, 804161, 804179, 804191, 804197, 804203, 804211, 804239, 804259, 804281, 804283, 804313, 804317, 804329, 804337, 804341, 804367, 804371, 804383, 804409, 804443, 804449, 804473, 804493, 804497, 804511, 804521, 804523, 804541, 804553, 804571, 804577, 804581, 804589, 804607, 804611, 804613, 804619, 804653, 804689, 804697, 804703, 804709, 804743, 804751, 804757, 804761, 804767, 804803, 804823, 804829, 804833, 804847, 804857, 804877, 804889, 804893, 804901, 804913, 804919, 804929, 804941, 804943, 804983, 804989, 804997, 805019, 805027, 805031, 805033, 805037, 805061, 805067, 805073, 805081, 805097, 805099, 805109, 805111, 805121, 805153, 805159, 805177, 805187, 805213, 805219, 805223, 805241, 805249, 805267, 805271, 805279, 805289, 805297, 805309, 805313, 805327, 805331, 805333, 805339, 805369, 805381, 805397, 805403, 805421, 805451, 805463, 805471, 805487, 805499, 805501, 805507, 805517, 805523, 805531, 805537, 805559, 805573, 805583, 805589, 805633, 805639, 805687, 805703, 805711, 805723, 805729, 805741, 805757, 805789, 805799, 805807, 805811, 805843, 805853, 805859, 805867, 805873, 805877, 805891, 805901, 805913, 805933, 805967, 805991, 806009, 806011, 806017, 806023, 806027, 806033, 806041, 806051, 806059, 806087, 806107, 806111, 806129, 806137, 806153, 806159, 806177, 806203, 806213, 806233, 806257, 806261, 806263, 806269, 806291, 806297, 806317, 806329, 806363, 806369, 806371, 806381, 806383, 806389, 806447, 806453, 806467, 806483, 806503, 806513, 806521, 806543, 806549, 806579, 806581, 806609, 806639, 806657, 806671, 806719, 806737, 806761, 806783, 806789, 806791, 806801, 806807, 806821, 806857, 806893, 806903, 806917, 806929, 806941, 806947, 806951, 806977, 806999, 807011, 807017, 807071, 807077, 807083, 807089, 807097, 807113, 807119, 807127, 807151, 807181, 807187, 807193, 807197, 807203, 807217, 807221, 807241, 807251, 807259, 807281, 807299, 807337, 807371, 807379, 807383, 807403, 807407, 807409, 807419, 807427, 807463, 807473, 807479, 807487, 807491, 807493, 807509, 807511, 807523, 807539, 807559, 807571, 807607, 807613, 807629, 807637, 807647, 807689, 807707, 807731, 807733, 807749, 807757, 807787, 807797, 807809, 807817, 807869, 807871, 807901, 807907, 807923, 807931, 807941, 807943, 807949, 807973, 807997, 808019, 808021, 808039, 808081, 808097, 808111, 808147, 808153, 808169, 808177, 808187, 808211, 808217, 808229, 808237, 808261, 808267, 808307, 808309, 808343, 808349, 808351, 808361, 808363, 808369, 808373, 808391, 808399, 808417, 808421, 808439, 808441, 808459, 808481, 808517, 808523, 808553, 808559, 808579, 808589, 808597, 808601, 808603, 808627, 808637, 808651, 808679, 808681, 808693, 808699, 808721, 808733, 808739, 808747, 808751, 808771, 808777, 808789, 808793, 808837, 808853, 808867, 808919, 808937, 808957, 808961, 808981, 808991, 808993, 809023, 809041, 809051, 809063, 809087, 809093, 809101, 809141, 809143, 809147, 809173, 809177, 809189, 809201, 809203, 809213, 809231, 809239, 809243, 809261, 809269, 809273, 809297, 809309, 809323, 809339, 809357, 809359, 809377, 809383, 809399, 809401, 809407, 809423, 809437, 809443, 809447, 809453, 809461, 809491, 809507, 809521, 809527, 809563, 809569, 809579, 809581, 809587, 809603, 809629, 809701, 809707, 809719, 809729, 809737, 809741, 809747, 809749, 809759, 809771, 809779, 809797, 809801, 809803, 809821, 809827, 809833, 809839, 809843, 809869, 809891, 809903, 809909, 809917, 809929, 809981, 809983, 809993, 810013, 810023, 810049, 810053, 810059, 810071, 810079, 810091, 810109, 810137, 810149, 810151, 810191, 810193, 810209, 810223, 810239, 810253, 810259, 810269, 810281, 810307, 810319, 810343, 810349, 810353, 810361, 810367, 810377, 810379, 810389, 810391, 810401, 810409, 810419, 810427, 810437, 810443, 810457, 810473, 810487, 810493, 810503, 810517, 810533, 810539, 810541, 810547, 810553, 810571, 810581, 810583, 810587, 810643, 810653, 810659, 810671, 810697, 810737, 810757, 810763, 810769, 810791, 810809, 810839, 810853, 810871, 810881, 810893, 810907, 810913, 810923, 810941, 810949, 810961, 810967, 810973, 810989, 811037, 811039, 811067, 811081, 811099, 811123, 811127, 811147, 811157, 811163, 811171, 811183, 811193, 811199, 811207, 811231, 811241, 811253, 811259, 811273, 811277, 811289, 811297, 811337, 811351, 811379, 811387, 811411, 811429, 811441, 811457, 811469, 811493, 811501, 811511, 811519, 811523, 811553, 811561, 811583, 811607, 811619, 811627, 811637, 811649, 811651, 811667, 811691, 811697, 811703, 811709, 811729, 811747, 811753, 811757, 811763, 811771, 811777, 811799, 811819, 811861, 811871, 811879, 811897, 811919, 811931, 811933, 811957, 811961, 811981, 811991, 811997, 812011, 812033, 812047, 812051, 812057, 812081, 812101, 812129, 812137, 812167, 812173, 812179, 812183, 812191, 812213, 812221, 812233, 812249, 812257, 812267, 812281, 812297, 812299, 812309, 812341, 812347, 812351, 812353, 812359, 812363, 812381, 812387, 812393, 812401, 812431, 812443, 812467, 812473, 812477, 812491, 812501, 812503, 812519, 812527, 812587, 812597, 812599, 812627, 812633, 812639, 812641, 812671, 812681, 812689, 812699, 812701, 812711, 812717, 812731, 812759, 812761, 812807, 812849, 812857, 812869, 812921, 812939, 812963, 812969, 813013, 813017, 813023, 813041, 813049, 813061, 813083, 813089, 813091, 813097, 813107, 813121, 813133, 813157, 813167, 813199, 813203, 813209, 813217, 813221, 813227, 813251, 813269, 813277, 813283, 813287, 813299, 813301, 813311, 813343, 813361, 813367, 813377, 813383, 813401, 813419, 813427, 813443, 813493, 813499, 813503, 813511, 813529, 813541, 813559, 813577, 813583, 813601, 813613, 813623, 813647, 813677, 813697, 813707, 813721, 813749, 813767, 813797, 813811, 813817, 813829, 813833, 813847, 813863, 813871, 813893, 813907, 813931, 813961, 813971, 813991, 813997, 814003, 814007, 814013, 814019, 814031, 814043, 814049, 814061, 814063, 814067, 814069, 814081, 814097, 814127, 814129, 814139, 814171, 814183, 814193, 814199, 814211, 814213, 814237, 814241, 814243, 814279, 814309, 814327, 814337, 814367, 814379, 814381, 814393, 814399, 814403, 814423, 814447, 814469, 814477, 814493, 814501, 814531, 814537, 814543, 814559, 814577, 814579, 814601, 814603, 814609, 814631, 814633, 814643, 814687, 814699, 814717, 814741, 814747, 814763, 814771, 814783, 814789, 814799, 814823, 814829, 814841, 814859, 814873, 814883, 814889, 814901, 814903, 814927, 814937, 814939, 814943, 814949, 814991, 815029, 815033, 815047, 815053, 815063, 815123, 815141, 815149, 815159, 815173, 815197, 815209, 815231, 815251, 815257, 815261, 815273, 815279, 815291, 815317, 815333, 815341, 815351, 815389, 815401, 815411, 815413, 815417, 815431, 815453, 815459, 815471, 815491, 815501, 815519, 815527, 815533, 815539, 815543, 815569, 815587, 815599, 815621, 815623, 815627, 815653, 815663, 815669, 815671, 815681, 815687, 815693, 815713, 815729, 815809, 815819, 815821, 815831, 815851, 815869, 815891, 815897, 815923, 815933, 815939, 815953, 815963, 815977, 815989, 816019, 816037, 816043, 816047, 816077, 816091, 816103, 816113, 816121, 816131, 816133, 816157, 816161, 816163, 816169, 816191, 816203, 816209, 816217, 816223, 816227, 816239, 816251, 816271, 816317, 816329, 816341, 816353, 816367, 816377, 816401, 816427, 816443, 816451, 816469, 816499, 816521, 816539, 816547, 816559, 816581, 816587, 816589, 816593, 816649, 816653, 816667, 816689, 816691, 816703, 816709, 816743, 816763, 816769, 816779, 816811, 816817, 816821, 816839, 816841, 816847, 816857, 816859, 816869, 816883, 816887, 816899, 816911, 816917, 816919, 816929, 816941, 816947, 816961, 816971, 817013, 817027, 817039, 817049, 817051, 817073, 817081, 817087, 817093, 817111, 817123, 817127, 817147, 817151, 817153, 817163, 817169, 817183, 817211, 817237, 817273, 817277, 817279, 817291, 817303, 817319, 817321, 817331, 817337, 817357, 817379, 817403, 817409, 817433, 817457, 817463, 817483, 817519, 817529, 817549, 817561, 817567, 817603, 817637, 817651, 817669, 817679, 817697, 817709, 817711, 817721, 817723, 817727, 817757, 817769, 817777, 817783, 817787, 817793, 817823, 817837, 817841, 817867, 817871, 817877, 817889, 817891, 817897, 817907, 817913, 817919, 817933, 817951, 817979, 817987, 818011, 818017, 818021, 818093, 818099, 818101, 818113, 818123, 818143, 818171, 818173, 818189, 818219, 818231, 818239, 818249, 818281, 818287, 818291, 818303, 818309, 818327, 818339, 818341, 818347, 818353, 818359, 818371, 818383, 818393, 818399, 818413, 818429, 818453, 818473, 818509, 818561, 818569, 818579, 818581, 818603, 818621, 818659, 818683, 818687, 818689, 818707, 818717, 818723, 818813, 818819, 818821, 818827, 818837, 818887, 818897, 818947, 818959, 818963, 818969, 818977, 818999, 819001, 819017, 819029, 819031, 819037, 819061, 819073, 819083, 819101, 819131, 819149, 819157, 819167, 819173, 819187, 819229, 819239, 819241, 819251, 819253, 819263, 819271, 819289, 819307, 819311, 819317, 819319, 819367, 819373, 819389, 819391, 819407, 819409, 819419, 819431, 819437, 819443, 819449, 819457, 819463, 819473, 819487, 819491, 819493, 819499, 819503, 819509, 819523, 819563, 819583, 819593, 819607, 819617, 819619, 819629, 819647, 819653, 819659, 819673, 819691, 819701, 819719, 819737, 819739, 819761, 819769, 819773, 819781, 819787, 819799, 819811, 819823, 819827, 819829, 819853, 819899, 819911, 819913, 819937, 819943, 819977, 819989, 819991, 820037, 820051, 820067, 820073, 820093, 820109, 820117, 820129, 820133, 820163, 820177, 820187, 820201, 820213, 820223, 820231, 820241, 820243, 820247, 820271, 820273, 820279, 820319, 820321, 820331, 820333, 820343, 820349, 820361, 820367, 820399, 820409, 820411, 820427, 820429, 820441, 820459, 820481, 820489, 820537, 820541, 820559, 820577, 820597, 820609, 820619, 820627, 820637, 820643, 820649, 820657, 820679, 820681, 820691, 820711, 820723, 820733, 820747, 820753, 820759, 820763, 820789, 820793, 820837, 820873, 820891, 820901, 820907, 820909, 820921, 820927, 820957, 820969, 820991, 820997, 821003, 821027, 821039, 821053, 821057, 821063, 821069, 821081, 821089, 821099, 821101, 821113, 821131, 821143, 821147, 821153, 821167, 821173, 821207, 821209, 821263, 821281, 821291, 821297, 821311, 821329, 821333, 821377, 821383, 821411, 821441, 821449, 821459, 821461, 821467, 821477, 821479, 821489, 821497, 821507, 821519, 821551, 821573, 821603, 821641, 821647, 821651, 821663, 821677, 821741, 821747, 821753, 821759, 821771, 821801, 821803, 821809, 821819, 821827, 821833, 821851, 821857, 821861, 821869, 821879, 821897, 821911, 821939, 821941, 821971, 821993, 821999, 822007, 822011, 822013, 822037, 822049, 822067, 822079, 822113, 822131, 822139, 822161, 822163, 822167, 822169, 822191, 822197, 822221, 822223, 822229, 822233, 822253, 822259, 822277, 822293, 822299, 822313, 822317, 822323, 822329, 822343, 822347, 822361, 822379, 822383, 822389, 822391, 822407, 822431, 822433, 822517, 822539, 822541, 822551, 822553, 822557, 822571, 822581, 822587, 822589, 822599, 822607, 822611, 822631, 822667, 822671, 822673, 822683, 822691, 822697, 822713, 822721, 822727, 822739, 822743, 822761, 822763, 822781, 822791, 822793, 822803, 822821, 822823, 822839, 822853, 822881, 822883, 822889, 822893, 822901, 822907, 822949, 822971, 822973, 822989, 823001, 823003, 823013, 823033, 823051, 823117, 823127, 823129, 823153, 823169, 823177, 823183, 823201, 823219, 823231, 823237, 823241, 823243, 823261, 823271, 823283, 823309, 823337, 823349, 823351, 823357, 823373, 823399, 823421, 823447, 823451, 823457, 823481, 823483, 823489, 823499, 823519, 823541, 823547, 823553, 823573, 823591, 823601, 823619, 823621, 823637, 823643, 823651, 823663, 823679, 823703, 823709, 823717, 823721, 823723, 823727, 823729, 823741, 823747, 823759, 823777, 823787, 823789, 823799, 823819, 823829, 823831, 823841, 823843, 823877, 823903, 823913, 823961, 823967, 823969, 823981, 823993, 823997, 824017, 824029, 824039, 824063, 824069, 824077, 824081, 824099, 824123, 824137, 824147, 824179, 824183, 824189, 824191, 824227, 824231, 824233, 824269, 824281, 824287, 824339, 824393, 824399, 824401, 824413, 824419, 824437, 824443, 824459, 824477, 824489, 824497, 824501, 824513, 824531, 824539, 824563, 824591, 824609, 824641, 824647, 824651, 824669, 824671, 824683, 824699, 824701, 824723, 824741, 824749, 824753, 824773, 824777, 824779, 824801, 824821, 824833, 824843, 824861, 824893, 824899, 824911, 824921, 824933, 824939, 824947, 824951, 824977, 824981, 824983, 825001, 825007, 825017, 825029, 825047, 825049, 825059, 825067, 825073, 825101, 825107, 825109, 825131, 825161, 825191, 825193, 825199, 825203, 825229, 825241, 825247, 825259, 825277, 825281, 825283, 825287, 825301, 825329, 825337, 825343, 825347, 825353, 825361, 825389, 825397, 825403, 825413, 825421, 825439, 825443, 825467, 825479, 825491, 825509, 825527, 825533, 825547, 825551, 825553, 825577, 825593, 825611, 825613, 825637, 825647, 825661, 825679, 825689, 825697, 825701, 825709, 825733, 825739, 825749, 825763, 825779, 825791, 825821, 825827, 825829, 825857, 825883, 825889, 825919, 825947, 825959, 825961, 825971, 825983, 825991, 825997, 826019, 826037, 826039, 826051, 826061, 826069, 826087, 826093, 826097, 826129, 826151, 826153, 826169, 826171, 826193, 826201, 826211, 826271, 826283, 826289, 826303, 826313, 826333, 826339, 826349, 826351, 826363, 826379, 826381, 826391, 826393, 826403, 826411, 826453, 826477, 826493, 826499, 826541, 826549, 826559, 826561, 826571, 826583, 826603, 826607, 826613, 826621, 826663, 826667, 826669, 826673, 826681, 826697, 826699, 826711, 826717, 826723, 826729, 826753, 826759, 826783, 826799, 826807, 826811, 826831, 826849, 826867, 826879, 826883, 826907, 826921, 826927, 826939, 826957, 826963, 826967, 826979, 826997, 827009, 827023, 827039, 827041, 827063, 827087, 827129, 827131, 827143, 827147, 827161, 827213, 827227, 827231, 827251, 827269, 827293, 827303, 827311, 827327, 827347, 827369, 827389, 827417, 827423, 827429, 827443, 827447, 827461, 827473, 827501, 827521, 827537, 827539, 827549, 827581, 827591, 827599, 827633, 827639, 827677, 827681, 827693, 827699, 827719, 827737, 827741, 827767, 827779, 827791, 827803, 827809, 827821, 827833, 827837, 827843, 827851, 827857, 827867, 827873, 827899, 827903, 827923, 827927, 827929, 827941, 827969, 827987, 827989, 828007, 828011, 828013, 828029, 828043, 828059, 828067, 828071, 828101, 828109, 828119, 828127, 828131, 828133, 828169, 828199, 828209, 828221, 828239, 828277, 828349, 828361, 828371, 828379, 828383, 828397, 828407, 828409, 828431, 828449, 828517, 828523, 828547, 828557, 828577, 828587, 828601, 828637, 828643, 828649, 828673, 828677, 828691, 828697, 828701, 828703, 828721, 828731, 828743, 828757, 828787, 828797, 828809, 828811, 828823, 828829, 828833, 828859, 828871, 828881, 828889, 828899, 828901, 828917, 828923, 828941, 828953, 828967, 828977, 829001, 829013, 829057, 829063, 829069, 829093, 829097, 829111, 829121, 829123, 829151, 829159, 829177, 829187, 829193, 829211, 829223, 829229, 829237, 829249, 829267, 829273, 829289, 829319, 829349, 829399, 829453, 829457, 829463, 829469, 829501, 829511, 829519, 829537, 829547, 829561, 829601, 829613, 829627, 829637, 829639, 829643, 829657, 829687, 829693, 829709, 829721, 829723, 829727, 829729, 829733, 829757, 829789, 829811, 829813, 829819, 829831, 829841, 829847, 829849, 829867, 829877, 829883, 829949, 829967, 829979, 829987, 829993, 830003, 830017, 830041, 830051, 830099, 830111, 830117, 830131, 830143, 830153, 830173, 830177, 830191, 830233, 830237, 830257, 830267, 830279, 830293, 830309, 830311, 830327, 830329, 830339, 830341, 830353, 830359, 830363, 830383, 830387, 830411, 830413, 830419, 830441, 830447, 830449, 830477, 830483, 830497, 830503, 830513, 830549, 830551, 830561, 830567, 830579, 830587, 830591, 830597, 830617, 830639, 830657, 830677, 830693, 830719, 830729, 830741, 830743, 830777, 830789, 830801, 830827, 830833, 830839, 830849, 830861, 830873, 830887, 830891, 830899, 830911, 830923, 830939, 830957, 830981, 830989, 831023, 831031, 831037, 831043, 831067, 831071, 831073, 831091, 831109, 831139, 831161, 831163, 831167, 831191, 831217, 831221, 831239, 831253, 831287, 831301, 831323, 831329, 831361, 831367, 831371, 831373, 831407, 831409, 831431, 831433, 831437, 831443, 831461, 831503, 831529, 831539, 831541, 831547, 831553, 831559, 831583, 831587, 831599, 831617, 831619, 831631, 831643, 831647, 831653, 831659, 831661, 831679, 831683, 831697, 831707, 831709, 831713, 831731, 831739, 831751, 831757, 831769, 831781, 831799, 831811, 831821, 831829, 831847, 831851, 831863, 831881, 831889, 831893, 831899, 831911, 831913, 831917, 831967, 831983, 832003, 832063, 832079, 832081, 832103, 832109, 832121, 832123, 832129, 832141, 832151, 832157, 832159, 832189, 832211, 832217, 832253, 832291, 832297, 832309, 832327, 832331, 832339, 832361, 832367, 832369, 832373, 832379, 832399, 832411, 832421, 832427, 832451, 832457, 832477, 832483, 832487, 832493, 832499, 832519, 832583, 832591, 832597, 832607, 832613, 832621, 832627, 832631, 832633, 832639, 832673, 832679, 832681, 832687, 832693, 832703, 832709, 832717, 832721, 832729, 832747, 832757, 832763, 832771, 832787, 832801, 832837, 832841, 832861, 832879, 832883, 832889, 832913, 832919, 832927, 832933, 832943, 832957, 832963, 832969, 832973, 832987, 833009, 833023, 833033, 833047, 833057, 833099, 833101, 833117, 833171, 833177, 833179, 833191, 833197, 833201, 833219, 833251, 833269, 833281, 833293, 833299, 833309, 833347, 833353, 833363, 833377, 833389, 833429, 833449, 833453, 833461, 833467, 833477, 833479, 833491, 833509, 833537, 833557, 833563, 833593, 833597, 833617, 833633, 833659, 833669, 833689, 833711, 833713, 833717, 833719, 833737, 833747, 833759, 833783, 833801, 833821, 833839, 833843, 833857, 833873, 833887, 833893, 833897, 833923, 833927, 833933, 833947, 833977, 833999, 834007, 834013, 834023, 834059, 834107, 834131, 834133, 834137, 834143, 834149, 834151, 834181, 834199, 834221, 834257, 834259, 834269, 834277, 834283, 834287, 834299, 834311, 834341, 834367, 834433, 834439, 834469, 834487, 834497, 834503, 834511, 834523, 834527, 834569, 834571, 834593, 834599, 834607, 834611, 834623, 834629, 834641, 834643, 834653, 834671, 834703, 834709, 834721, 834761, 834773, 834781, 834787, 834797, 834809, 834811, 834829, 834857, 834859, 834893, 834913, 834941, 834947, 834949, 834959, 834961, 834983, 834991, 835001, 835013, 835019, 835033, 835039, 835097, 835099, 835117, 835123, 835139, 835141, 835207, 835213, 835217, 835249, 835253, 835271, 835313, 835319, 835321, 835327, 835369, 835379, 835391, 835399, 835421, 835427, 835441, 835451, 835453, 835459, 835469, 835489, 835511, 835531, 835553, 835559, 835591, 835603, 835607, 835609, 835633, 835643, 835661, 835663, 835673, 835687, 835717, 835721, 835733, 835739, 835759, 835789, 835811, 835817, 835819, 835823, 835831, 835841, 835847, 835859, 835897, 835909, 835927, 835931, 835937, 835951, 835957, 835973, 835979, 835987, 835993, 835997, 836047, 836063, 836071, 836107, 836117, 836131, 836137, 836149, 836153, 836159, 836161, 836183, 836189, 836191, 836203, 836219, 836233, 836239, 836243, 836267, 836291, 836299, 836317, 836327, 836347, 836351, 836369, 836377, 836387, 836413, 836449, 836471, 836477, 836491, 836497, 836501, 836509, 836567, 836569, 836573, 836609, 836611, 836623, 836657, 836663, 836677, 836683, 836699, 836701, 836707, 836713, 836729, 836747, 836749, 836753, 836761, 836789, 836807, 836821, 836833, 836839, 836861, 836863, 836873, 836879, 836881, 836917, 836921, 836939, 836951, 836971, 837017, 837043, 837047, 837059, 837071, 837073, 837077, 837079, 837107, 837113, 837139, 837149, 837157, 837191, 837203, 837257, 837271, 837283, 837293, 837307, 837313, 837359, 837367, 837373, 837377, 837379, 837409, 837413, 837439, 837451, 837461, 837467, 837497, 837503, 837509, 837521, 837533, 837583, 837601, 837611, 837619, 837631, 837659, 837667, 837673, 837677, 837679, 837721, 837731, 837737, 837773, 837779, 837797, 837817, 837833, 837847, 837853, 837887, 837923, 837929, 837931, 837937, 837943, 837979, 838003, 838021, 838037, 838039, 838043, 838063, 838069, 838091, 838093, 838099, 838133, 838139, 838141, 838153, 838157, 838169, 838171, 838193, 838207, 838247, 838249, 838349, 838351, 838363, 838367, 838379, 838391, 838393, 838399, 838403, 838421, 838429, 838441, 838447, 838459, 838463, 838471, 838483, 838517, 838547, 838553, 838561, 838571, 838583, 838589, 838597, 838601, 838609, 838613, 838631, 838633, 838657, 838667, 838687, 838693, 838711, 838751, 838757, 838769, 838771, 838777, 838781, 838807, 838813, 838837, 838853, 838889, 838897, 838909, 838913, 838919, 838927, 838931, 838939, 838949, 838951, 838963, 838969, 838991, 838993, 839009, 839029, 839051, 839071, 839087, 839117, 839131, 839161, 839203, 839207, 839221, 839227, 839261, 839269, 839303, 839323, 839327, 839351, 839353, 839369, 839381, 839413, 839429, 839437, 839441, 839453, 839459, 839471, 839473, 839483, 839491, 839497, 839519, 839539, 839551, 839563, 839599, 839603, 839609, 839611, 839617, 839621, 839633, 839651, 839653, 839669, 839693, 839723, 839731, 839767, 839771, 839791, 839801, 839809, 839831, 839837, 839873, 839879, 839887, 839897, 839899, 839903, 839911, 839921, 839957, 839959, 839963, 839981, 839999, 840023, 840053, 840061, 840067, 840083, 840109, 840137, 840139, 840149, 840163, 840179, 840181, 840187, 840197, 840223, 840239, 840241, 840253, 840269, 840277, 840289, 840299, 840319, 840331, 840341, 840347, 840353, 840439, 840451, 840457, 840467, 840473, 840479, 840491, 840523, 840547, 840557, 840571, 840589, 840601, 840611, 840643, 840661, 840683, 840703, 840709, 840713, 840727, 840733, 840743, 840757, 840761, 840767, 840817, 840821, 840823, 840839, 840841, 840859, 840863, 840907, 840911, 840923, 840929, 840941, 840943, 840967, 840979, 840989, 840991, 841003, 841013, 841019, 841021, 841063, 841069, 841079, 841081, 841091, 841097, 841103, 841147, 841157, 841189, 841193, 841207, 841213, 841219, 841223, 841231, 841237, 841241, 841259, 841273, 841277, 841283, 841289, 841297, 841307, 841327, 841333, 841349, 841369, 841391, 841397, 841411, 841427, 841447, 841457, 841459, 841541, 841549, 841559, 841573, 841597, 841601, 841637, 841651, 841661, 841663, 841691, 841697, 841727, 841741, 841751, 841793, 841801, 841849, 841859, 841873, 841879, 841889, 841913, 841921, 841927, 841931, 841933, 841979, 841987, 842003, 842021, 842041, 842047, 842063, 842071, 842077, 842081, 842087, 842089, 842111, 842113, 842141, 842147, 842159, 842161, 842167, 842173, 842183, 842203, 842209, 842249, 842267, 842279, 842291, 842293, 842311, 842321, 842323, 842339, 842341, 842351, 842353, 842371, 842383, 842393, 842399, 842407, 842417, 842419, 842423, 842447, 842449, 842473, 842477, 842483, 842489, 842497, 842507, 842519, 842521, 842531, 842551, 842581, 842587, 842599, 842617, 842623, 842627, 842657, 842701, 842729, 842747, 842759, 842767, 842771, 842791, 842801, 842813, 842819, 842857, 842869, 842879, 842887, 842923, 842939, 842951, 842957, 842969, 842977, 842981, 842987, 842993, 843043, 843067, 843079, 843091, 843103, 843113, 843127, 843131, 843137, 843173, 843179, 843181, 843209, 843211, 843229, 843253, 843257, 843289, 843299, 843301, 843307, 843331, 843347, 843361, 843371, 843377, 843379, 843383, 843397, 843443, 843449, 843457, 843461, 843473, 843487, 843497, 843503, 843527, 843539, 843553, 843559, 843587, 843589, 843607, 843613, 843629, 843643, 843649, 843677, 843679, 843701, 843737, 843757, 843763, 843779, 843781, 843793, 843797, 843811, 843823, 843833, 843841, 843881, 843883, 843889, 843901, 843907, 843911, 844001, 844013, 844043, 844061, 844069, 844087, 844093, 844111, 844117, 844121, 844127, 844139, 844141, 844153, 844157, 844163, 844183, 844187, 844199, 844201, 844243, 844247, 844253, 844279, 844289, 844297, 844309, 844321, 844351, 844369, 844421, 844427, 844429, 844433, 844439, 844447, 844453, 844457, 844463, 844469, 844483, 844489, 844499, 844507, 844511, 844513, 844517, 844523, 844549, 844553, 844601, 844603, 844609, 844619, 844621, 844631, 844639, 844643, 844651, 844709, 844717, 844733, 844757, 844763, 844769, 844771, 844777, 844841, 844847, 844861, 844867, 844891, 844897, 844903, 844913, 844927, 844957, 844999, 845003, 845017, 845021, 845027, 845041, 845069, 845083, 845099, 845111, 845129, 845137, 845167, 845179, 845183, 845197, 845203, 845209, 845219, 845231, 845237, 845261, 845279, 845287, 845303, 845309, 845333, 845347, 845357, 845363, 845371, 845381, 845387, 845431, 845441, 845447, 845459, 845489, 845491, 845531, 845567, 845599, 845623, 845653, 845657, 845659, 845683, 845717, 845723, 845729, 845749, 845753, 845771, 845777, 845809, 845833, 845849, 845863, 845879, 845881, 845893, 845909, 845921, 845927, 845941, 845951, 845969, 845981, 845983, 845987, 845989, 846037, 846059, 846061, 846067, 846113, 846137, 846149, 846161, 846179, 846187, 846217, 846229, 846233, 846247, 846259, 846271, 846323, 846341, 846343, 846353, 846359, 846361, 846383, 846389, 846397, 846401, 846403, 846407, 846421, 846427, 846437, 846457, 846487, 846493, 846499, 846529, 846563, 846577, 846589, 846647, 846661, 846667, 846673, 846689, 846721, 846733, 846739, 846749, 846751, 846757, 846779, 846823, 846841, 846851, 846869, 846871, 846877, 846913, 846917, 846919, 846931, 846943, 846949, 846953, 846961, 846973, 846977, 846983, 846997, 847009, 847031, 847037, 847043, 847051, 847069, 847073, 847079, 847097, 847103, 847109, 847129, 847139, 847151, 847157, 847163, 847169, 847193, 847201, 847213, 847219, 847237, 847247, 847271, 847277, 847279, 847283, 847309, 847321, 847339, 847361, 847367, 847373, 847393, 847423, 847453, 847477, 847493, 847499, 847507, 847519, 847531, 847537, 847543, 847549, 847577, 847589, 847601, 847607, 847621, 847657, 847663, 847673, 847681, 847687, 847697, 847703, 847727, 847729, 847741, 847787, 847789, 847813, 847817, 847853, 847871, 847883, 847901, 847919, 847933, 847937, 847949, 847967, 847969, 847991, 847993, 847997, 848017, 848051, 848087, 848101, 848119, 848123, 848131, 848143, 848149, 848173, 848201, 848203, 848213, 848227, 848251, 848269, 848273, 848297, 848321, 848359, 848363, 848383, 848387, 848399, 848417, 848423, 848429, 848443, 848461, 848467, 848473, 848489, 848531, 848537, 848557, 848567, 848579, 848591, 848593, 848599, 848611, 848629, 848633, 848647, 848651, 848671, 848681, 848699, 848707, 848713, 848737, 848747, 848761, 848779, 848789, 848791, 848797, 848803, 848807, 848839, 848843, 848849, 848851, 848857, 848879, 848893, 848909, 848921, 848923, 848927, 848933, 848941, 848959, 848983, 848993, 849019, 849047, 849049, 849061, 849083, 849097, 849103, 849119, 849127, 849131, 849143, 849161, 849179, 849197, 849203, 849217, 849221, 849223, 849241, 849253, 849271, 849301, 849311, 849347, 849349, 849353, 849383, 849391, 849419, 849427, 849461, 849467, 849481, 849523, 849533, 849539, 849571, 849581, 849587, 849593, 849599, 849601, 849649, 849691, 849701, 849703, 849721, 849727, 849731, 849733, 849743, 849763, 849767, 849773, 849829, 849833, 849839, 849857, 849869, 849883, 849917, 849923, 849931, 849943, 849967, 849973, 849991, 849997, 850009, 850021, 850027, 850033, 850043, 850049, 850061, 850063, 850081, 850093, 850121, 850133, 850139, 850147, 850177, 850181, 850189, 850207, 850211, 850229, 850243, 850247, 850253, 850261, 850271, 850273, 850301, 850303, 850331, 850337, 850349, 850351, 850373, 850387, 850393, 850397, 850403, 850417, 850427, 850433, 850439, 850453, 850457, 850481, 850529, 850537, 850567, 850571, 850613, 850631, 850637, 850673, 850679, 850691, 850711, 850727, 850753, 850781, 850807, 850823, 850849, 850853, 850879, 850891, 850897, 850933, 850943, 850951, 850973, 850979, 851009, 851017, 851033, 851041, 851051, 851057, 851087, 851093, 851113, 851117, 851131, 851153, 851159, 851171, 851177, 851197, 851203, 851209, 851231, 851239, 851251, 851261, 851267, 851273, 851293, 851297, 851303, 851321, 851327, 851351, 851359, 851363, 851381, 851387, 851393, 851401, 851413, 851419, 851423, 851449, 851471, 851491, 851507, 851519, 851537, 851549, 851569, 851573, 851597, 851603, 851623, 851633, 851639, 851647, 851659, 851671, 851677, 851689, 851723, 851731, 851749, 851761, 851797, 851801, 851803, 851813, 851821, 851831, 851839, 851843, 851863, 851881, 851891, 851899, 851953, 851957, 851971, 852011, 852013, 852031, 852037, 852079, 852101, 852121, 852139, 852143, 852149, 852151, 852167, 852179, 852191, 852197, 852199, 852211, 852233, 852239, 852253, 852259, 852263, 852287, 852289, 852301, 852323, 852347, 852367, 852391, 852409, 852427, 852437, 852457, 852463, 852521, 852557, 852559, 852563, 852569, 852581, 852583, 852589, 852613, 852617, 852623, 852641, 852661, 852671, 852673, 852689, 852749, 852751, 852757, 852763, 852769, 852793, 852799, 852809, 852827, 852829, 852833, 852847, 852851, 852857, 852871, 852881, 852889, 852893, 852913, 852937, 852953, 852959, 852989, 852997, 853007, 853031, 853033, 853049, 853057, 853079, 853091, 853103, 853123, 853133, 853159, 853187, 853189, 853211, 853217, 853241, 853283, 853289, 853291, 853319, 853339, 853357, 853387, 853403, 853427, 853429, 853439, 853477, 853481, 853493, 853529, 853543, 853547, 853571, 853577, 853597, 853637, 853663, 853667, 853669, 853687, 853693, 853703, 853717, 853733, 853739, 853759, 853763, 853793, 853799, 853807, 853813, 853819, 853823, 853837, 853843, 853873, 853889, 853901, 853903, 853913, 853933, 853949, 853969, 853981, 853999, 854017, 854033, 854039, 854041, 854047, 854053, 854083, 854089, 854093, 854099, 854111, 854123, 854129, 854141, 854149, 854159, 854171, 854213, 854257, 854263, 854299, 854303, 854323, 854327, 854333, 854351, 854353, 854363, 854383, 854387, 854407, 854417, 854419, 854423, 854431, 854443, 854459, 854461, 854467, 854479, 854527, 854533, 854569, 854587, 854593, 854599, 854617, 854621, 854629, 854647, 854683, 854713, 854729, 854747, 854771, 854801, 854807, 854849, 854869, 854881, 854897, 854899, 854921, 854923, 854927, 854929, 854951, 854957, 854963, 854993, 854999, 855031, 855059, 855061, 855067, 855079, 855089, 855119, 855131, 855143, 855187, 855191, 855199, 855203, 855221, 855229, 855241, 855269, 855271, 855277, 855293, 855307, 855311, 855317, 855331, 855359, 855373, 855377, 855391, 855397, 855401, 855419, 855427, 855431, 855461, 855467, 855499, 855511, 855521, 855527, 855581, 855601, 855607, 855619, 855641, 855667, 855671, 855683, 855697, 855709, 855713, 855719, 855721, 855727, 855731, 855733, 855737, 855739, 855781, 855787, 855821, 855851, 855857, 855863, 855887, 855889, 855901, 855919, 855923, 855937, 855947, 855983, 855989, 855997, 856021, 856043, 856057, 856061, 856073, 856081, 856099, 856111, 856117, 856133, 856139, 856147, 856153, 856169, 856181, 856187, 856213, 856237, 856241, 856249, 856277, 856279, 856301, 856309, 856333, 856343, 856351, 856369, 856381, 856391, 856393, 856411, 856417, 856421, 856441, 856459, 856469, 856483, 856487, 856507, 856519, 856529, 856547, 856549, 856553, 856567, 856571, 856627, 856637, 856649, 856693, 856697, 856699, 856703, 856711, 856717, 856721, 856733, 856759, 856787, 856789, 856799, 856811, 856813, 856831, 856841, 856847, 856853, 856897, 856901, 856903, 856909, 856927, 856939, 856943, 856949, 856969, 856993, 857009, 857011, 857027, 857029, 857039, 857047, 857053, 857069, 857081, 857083, 857099, 857107, 857137, 857161, 857167, 857201, 857203, 857221, 857249, 857267, 857273, 857281, 857287, 857309, 857321, 857333, 857341, 857347, 857357, 857369, 857407, 857411, 857419, 857431, 857453, 857459, 857471, 857513, 857539, 857551, 857567, 857569, 857573, 857579, 857581, 857629, 857653, 857663, 857669, 857671, 857687, 857707, 857711, 857713, 857723, 857737, 857741, 857743, 857749, 857809, 857821, 857827, 857839, 857851, 857867, 857873, 857897, 857903, 857929, 857951, 857953, 857957, 857959, 857963, 857977, 857981, 858001, 858029, 858043, 858073, 858083, 858101, 858103, 858113, 858127, 858149, 858161, 858167, 858217, 858223, 858233, 858239, 858241, 858251, 858259, 858269, 858281, 858293, 858301, 858307, 858311, 858317, 858373, 858397, 858427, 858433, 858457, 858463, 858467, 858479, 858497, 858503, 858527, 858563, 858577, 858589, 858623, 858631, 858673, 858691, 858701, 858707, 858709, 858713, 858749, 858757, 858763, 858769, 858787, 858817, 858821, 858833, 858841, 858859, 858877, 858883, 858899, 858911, 858919, 858931, 858943, 858953, 858961, 858989, 858997, 859003, 859031, 859037, 859049, 859051, 859057, 859081, 859091, 859093, 859109, 859121, 859181, 859189, 859213, 859223, 859249, 859259, 859267, 859273, 859277, 859279, 859297, 859321, 859361, 859363, 859373, 859381, 859393, 859423, 859433, 859447, 859459, 859477, 859493, 859513, 859553, 859559, 859561, 859567, 859577, 859601, 859603, 859609, 859619, 859633, 859657, 859667, 859669, 859679, 859681, 859697, 859709, 859751, 859783, 859787, 859799, 859801, 859823, 859841, 859849, 859853, 859861, 859891, 859913, 859919, 859927, 859933, 859939, 859973, 859981, 859987, 860009, 860011, 860029, 860051, 860059, 860063, 860071, 860077, 860087, 860089, 860107, 860113, 860117, 860143, 860239, 860257, 860267, 860291, 860297, 860309, 860311, 860317, 860323, 860333, 860341, 860351, 860357, 860369, 860381, 860383, 860393, 860399, 860413, 860417, 860423, 860441, 860479, 860501, 860507, 860513, 860533, 860543, 860569, 860579, 860581, 860593, 860599, 860609, 860623, 860641, 860647, 860663, 860689, 860701, 860747, 860753, 860759, 860779, 860789, 860791, 860809, 860813, 860819, 860843, 860861, 860887, 860891, 860911, 860917, 860921, 860927, 860929, 860939, 860941, 860957, 860969, 860971, 861001, 861013, 861019, 861031, 861037, 861043, 861053, 861059, 861079, 861083, 861089, 861109, 861121, 861131, 861139, 861163, 861167, 861191, 861199, 861221, 861239, 861293, 861299, 861317, 861347, 861353, 861361, 861391, 861433, 861437, 861439, 861491, 861493, 861499, 861541, 861547, 861551, 861559, 861563, 861571, 861589, 861599, 861613, 861617, 861647, 861659, 861691, 861701, 861703, 861719, 861733, 861739, 861743, 861761, 861797, 861799, 861803, 861823, 861829, 861853, 861857, 861871, 861877, 861881, 861899, 861901, 861907, 861929, 861937, 861941, 861947, 861977, 861979, 861997, 862009, 862013, 862031, 862033, 862061, 862067, 862097, 862117, 862123, 862129, 862139, 862157, 862159, 862171, 862177, 862181, 862187, 862207, 862219, 862229, 862231, 862241, 862249, 862259, 862261, 862273, 862283, 862289, 862297, 862307, 862319, 862331, 862343, 862369, 862387, 862397, 862399, 862409, 862417, 862423, 862441, 862447, 862471, 862481, 862483, 862487, 862493, 862501, 862541, 862553, 862559, 862567, 862571, 862573, 862583, 862607, 862627, 862633, 862649, 862651, 862669, 862703, 862727, 862739, 862769, 862777, 862783, 862789, 862811, 862819, 862861, 862879, 862907, 862909, 862913, 862919, 862921, 862943, 862957, 862973, 862987, 862991, 862997, 863003, 863017, 863047, 863081, 863087, 863119, 863123, 863131, 863143, 863153, 863179, 863197, 863231, 863251, 863279, 863287, 863299, 863309, 863323, 863363, 863377, 863393, 863479, 863491, 863497, 863509, 863521, 863537, 863539, 863561, 863593, 863609, 863633, 863641, 863671, 863689, 863693, 863711, 863729, 863743, 863749, 863767, 863771, 863783, 863801, 863803, 863833, 863843, 863851, 863867, 863869, 863879, 863887, 863897, 863899, 863909, 863917, 863921, 863959, 863983, 864007, 864011, 864013, 864029, 864037, 864047, 864049, 864053, 864077, 864079, 864091, 864103, 864107, 864119, 864121, 864131, 864137, 864151, 864167, 864169, 864191, 864203, 864211, 864221, 864223, 864251, 864277, 864289, 864299, 864301, 864307, 864319, 864323, 864341, 864359, 864361, 864379, 864407, 864419, 864427, 864439, 864449, 864491, 864503, 864509, 864511, 864533, 864541, 864551, 864581, 864583, 864587, 864613, 864623, 864629, 864631, 864641, 864673, 864679, 864691, 864707, 864733, 864737, 864757, 864781, 864793, 864803, 864811, 864817, 864883, 864887, 864901, 864911, 864917, 864947, 864953, 864959, 864967, 864979, 864989, 865001, 865003, 865043, 865049, 865057, 865061, 865069, 865087, 865091, 865103, 865121, 865153, 865159, 865177, 865201, 865211, 865213, 865217, 865231, 865247, 865253, 865259, 865261, 865301, 865307, 865313, 865321, 865327, 865339, 865343, 865349, 865357, 865363, 865379, 865409, 865457, 865477, 865481, 865483, 865493, 865499, 865511, 865537, 865577, 865591, 865597, 865609, 865619, 865637, 865639, 865643, 865661, 865681, 865687, 865717, 865721, 865729, 865741, 865747, 865751, 865757, 865769, 865771, 865783, 865801, 865807, 865817, 865819, 865829, 865847, 865859, 865867, 865871, 865877, 865889, 865933, 865937, 865957, 865979, 865993, 866003, 866009, 866011, 866029, 866051, 866053, 866057, 866081, 866083, 866087, 866093, 866101, 866119, 866123, 866161, 866183, 866197, 866213, 866221, 866231, 866279, 866293, 866309, 866311, 866329, 866353, 866389, 866399, 866417, 866431, 866443, 866461, 866471, 866477, 866513, 866519, 866573, 866581, 866623, 866629, 866639, 866641, 866653, 866683, 866689, 866693, 866707, 866713, 866717, 866737, 866743, 866759, 866777, 866783, 866819, 866843, 866849, 866851, 866857, 866869, 866909, 866917, 866927, 866933, 866941, 866953, 866963, 866969, 867001, 867007, 867011, 867023, 867037, 867059, 867067, 867079, 867091, 867121, 867131, 867143, 867151, 867161, 867173, 867203, 867211, 867227, 867233, 867253, 867257, 867259, 867263, 867271, 867281, 867301, 867319, 867337, 867343, 867371, 867389, 867397, 867401, 867409, 867413, 867431, 867443, 867457, 867463, 867467, 867487, 867509, 867511, 867541, 867547, 867553, 867563, 867571, 867577, 867589, 867617, 867619, 867623, 867631, 867641, 867653, 867677, 867679, 867689, 867701, 867719, 867733, 867743, 867773, 867781, 867793, 867803, 867817, 867827, 867829, 867857, 867871, 867887, 867913, 867943, 867947, 867959, 867991, 868019, 868033, 868039, 868051, 868069, 868073, 868081, 868103, 868111, 868121, 868123, 868151, 868157, 868171, 868177, 868199, 868211, 868229, 868249, 868267, 868271, 868277, 868291, 868313, 868327, 868331, 868337, 868349, 868369, 868379, 868381, 868397, 868409, 868423, 868451, 868453, 868459, 868487, 868489, 868493, 868529, 868531, 868537, 868559, 868561, 868577, 868583, 868603, 868613, 868639, 868663, 868669, 868691, 868697, 868727, 868739, 868741, 868771, 868783, 868787, 868793, 868799, 868801, 868817, 868841, 868849, 868867, 868873, 868877, 868883, 868891, 868909, 868937, 868939, 868943, 868951, 868957, 868993, 868997, 868999, 869017, 869021, 869039, 869053, 869059, 869069, 869081, 869119, 869131, 869137, 869153, 869173, 869179, 869203, 869233, 869249, 869251, 869257, 869273, 869291, 869293, 869299, 869303, 869317, 869321, 869339, 869369, 869371, 869381, 869399, 869413, 869419, 869437, 869443, 869461, 869467, 869471, 869489, 869501, 869521, 869543, 869551, 869563, 869579, 869587, 869597, 869599, 869657, 869663, 869683, 869689, 869707, 869717, 869747, 869753, 869773, 869777, 869779, 869807, 869809, 869819, 869849, 869863, 869879, 869887, 869893, 869899, 869909, 869927, 869951, 869959, 869983, 869989, 870007, 870013, 870031, 870047, 870049, 870059, 870083, 870097, 870109, 870127, 870131, 870137, 870151, 870161, 870169, 870173, 870197, 870211, 870223, 870229, 870239, 870241, 870253, 870271, 870283, 870301, 870323, 870329, 870341, 870367, 870391, 870403, 870407, 870413, 870431, 870433, 870437, 870461, 870479, 870491, 870497, 870517, 870533, 870547, 870577, 870589, 870593, 870601, 870613, 870629, 870641, 870643, 870679, 870691, 870703, 870731, 870739, 870743, 870773, 870787, 870809, 870811, 870823, 870833, 870847, 870853, 870871, 870889, 870901, 870907, 870911, 870917, 870929, 870931, 870953, 870967, 870977, 870983, 870997, 871001, 871021, 871027, 871037, 871061, 871103, 871147, 871159, 871163, 871177, 871181, 871229, 871231, 871249, 871259, 871271, 871289, 871303, 871337, 871349, 871393, 871439, 871459, 871463, 871477, 871513, 871517, 871531, 871553, 871571, 871589, 871597, 871613, 871621, 871639, 871643, 871649, 871657, 871679, 871681, 871687, 871727, 871763, 871771, 871789, 871817, 871823, 871837, 871867, 871883, 871901, 871919, 871931, 871957, 871963, 871973, 871987, 871993, 872017, 872023, 872033, 872041, 872057, 872071, 872077, 872089, 872099, 872107, 872129, 872141, 872143, 872149, 872159, 872161, 872173, 872177, 872189, 872203, 872227, 872231, 872237, 872243, 872251, 872257, 872269, 872281, 872317, 872323, 872351, 872353, 872369, 872381, 872383, 872387, 872393, 872411, 872419, 872429, 872437, 872441, 872453, 872471, 872477, 872479, 872533, 872549, 872561, 872563, 872567, 872587, 872609, 872611, 872621, 872623, 872647, 872657, 872659, 872671, 872687, 872731, 872737, 872747, 872749, 872761, 872789, 872791, 872843, 872863, 872923, 872947, 872951, 872953, 872959, 872999, 873017, 873043, 873049, 873073, 873079, 873083, 873091, 873109, 873113, 873121, 873133, 873139, 873157, 873209, 873247, 873251, 873263, 873293, 873317, 873319, 873331, 873343, 873349, 873359, 873403, 873407, 873419, 873421, 873427, 873437, 873461, 873463, 873469, 873497, 873527, 873529, 873539, 873541, 873553, 873569, 873571, 873617, 873619, 873641, 873643, 873659, 873667, 873671, 873689, 873707, 873709, 873721, 873727, 873739, 873767, 873773, 873781, 873787, 873863, 873877, 873913, 873959, 873979, 873989, 873991, 874001, 874009, 874037, 874063, 874087, 874091, 874099, 874103, 874109, 874117, 874121, 874127, 874151, 874193, 874213, 874217, 874229, 874249, 874267, 874271, 874277, 874301, 874303, 874331, 874337, 874343, 874351, 874373, 874387, 874397, 874403, 874409, 874427, 874457, 874459, 874477, 874487, 874537, 874543, 874547, 874567, 874583, 874597, 874619, 874637, 874639, 874651, 874661, 874673, 874681, 874693, 874697, 874711, 874721, 874723, 874729, 874739, 874763, 874771, 874777, 874799, 874807, 874813, 874823, 874831, 874847, 874859, 874873, 874879, 874889, 874891, 874919, 874957, 874967, 874987, 875011, 875027, 875033, 875089, 875107, 875113, 875117, 875129, 875141, 875183, 875201, 875209, 875213, 875233, 875239, 875243, 875261, 875263, 875267, 875269, 875297, 875299, 875317, 875323, 875327, 875333, 875339, 875341, 875363, 875377, 875389, 875393, 875417, 875419, 875429, 875443, 875447, 875477, 875491, 875503, 875509, 875513, 875519, 875521, 875543, 875579, 875591, 875593, 875617, 875621, 875627, 875629, 875647, 875659, 875663, 875681, 875683, 875689, 875701, 875711, 875717, 875731, 875741, 875759, 875761, 875773, 875779, 875783, 875803, 875821, 875837, 875851, 875893, 875923, 875929, 875933, 875947, 875969, 875981, 875983, 876011, 876013, 876017, 876019, 876023, 876041, 876067, 876077, 876079, 876097, 876103, 876107, 876121, 876131, 876137, 876149, 876181, 876191, 876193, 876199, 876203, 876229, 876233, 876257, 876263, 876287, 876301, 876307, 876311, 876329, 876331, 876341, 876349, 876371, 876373, 876431, 876433, 876443, 876479, 876481, 876497, 876523, 876529, 876569, 876581, 876593, 876607, 876611, 876619, 876643, 876647, 876653, 876661, 876677, 876719, 876721, 876731, 876749, 876751, 876761, 876769, 876787, 876791, 876797, 876817, 876823, 876833, 876851, 876853, 876871, 876893, 876913, 876929, 876947, 876971, 877003, 877027, 877043, 877057, 877073, 877091, 877109, 877111, 877117, 877133, 877169, 877181, 877187, 877199, 877213, 877223, 877237, 877267, 877291, 877297, 877301, 877313, 877321, 877333, 877343, 877351, 877361, 877367, 877379, 877397, 877399, 877403, 877411, 877423, 877463, 877469, 877531, 877543, 877567, 877573, 877577, 877601, 877609, 877619, 877621, 877651, 877661, 877699, 877739, 877771, 877783, 877817, 877823, 877837, 877843, 877853, 877867, 877871, 877873, 877879, 877883, 877907, 877909, 877937, 877939, 877949, 877997, 878011, 878021, 878023, 878039, 878041, 878077, 878083, 878089, 878099, 878107, 878113, 878131, 878147, 878153, 878159, 878167, 878173, 878183, 878191, 878197, 878201, 878221, 878239, 878279, 878287, 878291, 878299, 878309, 878359, 878377, 878387, 878411, 878413, 878419, 878443, 878453, 878467, 878489, 878513, 878539, 878551, 878567, 878573, 878593, 878597, 878609, 878621, 878629, 878641, 878651, 878659, 878663, 878677, 878681, 878699, 878719, 878737, 878743, 878749, 878777, 878783, 878789, 878797, 878821, 878831, 878833, 878837, 878851, 878863, 878869, 878873, 878893, 878929, 878939, 878953, 878957, 878987, 878989, 879001, 879007, 879023, 879031, 879061, 879089, 879097, 879103, 879113, 879119, 879133, 879143, 879167, 879169, 879181, 879199, 879227, 879239, 879247, 879259, 879269, 879271, 879283, 879287, 879299, 879331, 879341, 879343, 879353, 879371, 879391, 879401, 879413, 879449, 879457, 879493, 879523, 879533, 879539, 879553, 879581, 879583, 879607, 879617, 879623, 879629, 879649, 879653, 879661, 879667, 879673, 879679, 879689, 879691, 879701, 879707, 879709, 879713, 879721, 879743, 879797, 879799, 879817, 879821, 879839, 879859, 879863, 879881, 879917, 879919, 879941, 879953, 879961, 879973, 879979, 880001, 880007, 880021, 880027, 880031, 880043, 880057, 880067, 880069, 880091, 880097, 880109, 880127, 880133, 880151, 880153, 880199, 880211, 880219, 880223, 880247, 880249, 880259, 880283, 880301, 880303, 880331, 880337, 880343, 880349, 880361, 880367, 880409, 880421, 880423, 880427, 880483, 880487, 880513, 880519, 880531, 880541, 880543, 880553, 880559, 880571, 880573, 880589, 880603, 880661, 880667, 880673, 880681, 880687, 880699, 880703, 880709, 880723, 880727, 880729, 880751, 880793, 880799, 880801, 880813, 880819, 880823, 880853, 880861, 880871, 880883, 880903, 880907, 880909, 880939, 880949, 880951, 880961, 880981, 880993, 881003, 881009, 881017, 881029, 881057, 881071, 881077, 881099, 881119, 881141, 881143, 881147, 881159, 881171, 881173, 881191, 881197, 881207, 881219, 881233, 881249, 881269, 881273, 881311, 881317, 881327, 881333, 881351, 881357, 881369, 881393, 881407, 881411, 881417, 881437, 881449, 881471, 881473, 881477, 881479, 881509, 881527, 881533, 881537, 881539, 881591, 881597, 881611, 881641, 881663, 881669, 881681, 881707, 881711, 881729, 881743, 881779, 881813, 881833, 881849, 881897, 881899, 881911, 881917, 881939, 881953, 881963, 881983, 881987, 882017, 882019, 882029, 882031, 882047, 882061, 882067, 882071, 882083, 882103, 882139, 882157, 882169, 882173, 882179, 882187, 882199, 882239, 882241, 882247, 882251, 882253, 882263, 882289, 882313, 882359, 882367, 882377, 882389, 882391, 882433, 882439, 882449, 882451, 882461, 882481, 882491, 882517, 882529, 882551, 882571, 882577, 882587, 882593, 882599, 882617, 882631, 882653, 882659, 882697, 882701, 882703, 882719, 882727, 882733, 882751, 882773, 882779, 882823, 882851, 882863, 882877, 882881, 882883, 882907, 882913, 882923, 882943, 882953, 882961, 882967, 882979, 883013, 883049, 883061, 883073, 883087, 883093, 883109, 883111, 883117, 883121, 883163, 883187, 883193, 883213, 883217, 883229, 883231, 883237, 883241, 883247, 883249, 883273, 883279, 883307, 883327, 883331, 883339, 883343, 883357, 883391, 883397, 883409, 883411, 883423, 883429, 883433, 883451, 883471, 883483, 883489, 883517, 883537, 883549, 883577, 883579, 883613, 883621, 883627, 883639, 883661, 883667, 883691, 883697, 883699, 883703, 883721, 883733, 883739, 883763, 883777, 883781, 883783, 883807, 883871, 883877, 883889, 883921, 883933, 883963, 883969, 883973, 883979, 883991, 884003, 884011, 884029, 884057, 884069, 884077, 884087, 884111, 884129, 884131, 884159, 884167, 884171, 884183, 884201, 884227, 884231, 884243, 884251, 884267, 884269, 884287, 884293, 884309, 884311, 884321, 884341, 884353, 884363, 884369, 884371, 884417, 884423, 884437, 884441, 884453, 884483, 884489, 884491, 884497, 884501, 884537, 884573, 884579, 884591, 884593, 884617, 884651, 884669, 884693, 884699, 884717, 884743, 884789, 884791, 884803, 884813, 884827, 884831, 884857, 884881, 884899, 884921, 884951, 884959, 884977, 884981, 884987, 884999, 885023, 885041, 885061, 885083, 885091, 885097, 885103, 885107, 885127, 885133, 885161, 885163, 885169, 885187, 885217, 885223, 885233, 885239, 885251, 885257, 885263, 885289, 885301, 885307, 885331, 885359, 885371, 885383, 885389, 885397, 885403, 885421, 885427, 885449, 885473, 885487, 885497, 885503, 885509, 885517, 885529, 885551, 885553, 885589, 885607, 885611, 885623, 885679, 885713, 885721, 885727, 885733, 885737, 885769, 885791, 885793, 885803, 885811, 885821, 885823, 885839, 885869, 885881, 885883, 885889, 885893, 885919, 885923, 885931, 885943, 885947, 885959, 885961, 885967, 885971, 885977, 885991, 886007, 886013, 886019, 886021, 886031, 886043, 886069, 886097, 886117, 886129, 886163, 886177, 886181, 886183, 886189, 886199, 886241, 886243, 886247, 886271, 886283, 886307, 886313, 886337, 886339, 886349, 886367, 886381, 886387, 886421, 886427, 886429, 886433, 886453, 886463, 886469, 886471, 886493, 886511, 886517, 886519, 886537, 886541, 886547, 886549, 886583, 886591, 886607, 886609, 886619, 886643, 886651, 886663, 886667, 886741, 886747, 886751, 886759, 886777, 886793, 886799, 886807, 886819, 886859, 886867, 886891, 886909, 886913, 886967, 886969, 886973, 886979, 886981, 886987, 886993, 886999, 887017, 887057, 887059, 887069, 887093, 887101, 887113, 887141, 887143, 887153, 887171, 887177, 887191, 887203, 887233, 887261, 887267, 887269, 887291, 887311, 887323, 887333, 887377, 887387, 887399, 887401, 887423, 887441, 887449, 887459, 887479, 887483, 887503, 887533, 887543, 887567, 887569, 887573, 887581, 887599, 887617, 887629, 887633, 887641, 887651, 887657, 887659, 887669, 887671, 887681, 887693, 887701, 887707, 887717, 887743, 887749, 887759, 887819, 887827, 887837, 887839, 887849, 887867, 887903, 887911, 887921, 887923, 887941, 887947, 887987, 887989, 888001, 888011, 888047, 888059, 888061, 888077, 888091, 888103, 888109, 888133, 888143, 888157, 888161, 888163, 888179, 888203, 888211, 888247, 888257, 888263, 888271, 888287, 888313, 888319, 888323, 888359, 888361, 888373, 888389, 888397, 888409, 888413, 888427, 888431, 888443, 888451, 888457, 888469, 888479, 888493, 888499, 888533, 888541, 888557, 888623, 888631, 888637, 888653, 888659, 888661, 888683, 888689, 888691, 888721, 888737, 888751, 888761, 888773, 888779, 888781, 888793, 888799, 888809, 888827, 888857, 888869, 888871, 888887, 888917, 888919, 888931, 888959, 888961, 888967, 888983, 888989, 888997, 889001, 889027, 889037, 889039, 889043, 889051, 889069, 889081, 889087, 889123, 889139, 889171, 889177, 889211, 889237, 889247, 889261, 889271, 889279, 889289, 889309, 889313, 889327, 889337, 889349, 889351, 889363, 889367, 889373, 889391, 889411, 889429, 889439, 889453, 889481, 889489, 889501, 889519, 889579, 889589, 889597, 889631, 889639, 889657, 889673, 889687, 889697, 889699, 889703, 889727, 889747, 889769, 889783, 889829, 889871, 889873, 889877, 889879, 889891, 889901, 889907, 889909, 889921, 889937, 889951, 889957, 889963, 889997, 890003, 890011, 890027, 890053, 890063, 890083, 890107, 890111, 890117, 890119, 890129, 890147, 890159, 890161, 890177, 890221, 890231, 890237, 890287, 890291, 890303, 890317, 890333, 890371, 890377, 890419, 890429, 890437, 890441, 890459, 890467, 890501, 890531, 890543, 890551, 890563, 890597, 890609, 890653, 890657, 890671, 890683, 890707, 890711, 890717, 890737, 890761, 890789, 890797, 890803, 890809, 890821, 890833, 890843, 890861, 890863, 890867, 890881, 890887, 890893, 890927, 890933, 890941, 890957, 890963, 890969, 890993, 890999, 891001, 891017, 891047, 891049, 891061, 891067, 891091, 891101, 891103, 891133, 891151, 891161, 891173, 891179, 891223, 891239, 891251, 891277, 891287, 891311, 891323, 891329, 891349, 891377, 891379, 891389, 891391, 891409, 891421, 891427, 891439, 891481, 891487, 891491, 891493, 891509, 891521, 891523, 891551, 891557, 891559, 891563, 891571, 891577, 891587, 891593, 891601, 891617, 891629, 891643, 891647, 891659, 891661, 891677, 891679, 891707, 891743, 891749, 891763, 891767, 891797, 891799, 891809, 891817, 891823, 891827, 891829, 891851, 891859, 891887, 891889, 891893, 891899, 891907, 891923, 891929, 891967, 891983, 891991, 891997, 892019, 892027, 892049, 892057, 892079, 892091, 892093, 892097, 892103, 892123, 892141, 892153, 892159, 892169, 892189, 892219, 892237, 892249, 892253, 892261, 892267, 892271, 892291, 892321, 892351, 892357, 892387, 892391, 892421, 892433, 892439, 892457, 892471, 892481, 892513, 892523, 892531, 892547, 892553, 892559, 892579, 892597, 892603, 892609, 892627, 892643, 892657, 892663, 892667, 892709, 892733, 892747, 892757, 892763, 892777, 892781, 892783, 892817, 892841, 892849, 892861, 892877, 892901, 892919, 892933, 892951, 892973, 892987, 892999, 893003, 893023, 893029, 893033, 893041, 893051, 893059, 893093, 893099, 893107, 893111, 893117, 893119, 893131, 893147, 893149, 893161, 893183, 893213, 893219, 893227, 893237, 893257, 893261, 893281, 893317, 893339, 893341, 893351, 893359, 893363, 893381, 893383, 893407, 893413, 893419, 893429, 893441, 893449, 893479, 893489, 893509, 893521, 893549, 893567, 893591, 893603, 893609, 893653, 893657, 893671, 893681, 893701, 893719, 893723, 893743, 893777, 893797, 893821, 893839, 893857, 893863, 893873, 893881, 893897, 893903, 893917, 893929, 893933, 893939, 893989, 893999, 894011, 894037, 894059, 894067, 894073, 894097, 894109, 894119, 894137, 894139, 894151, 894161, 894167, 894181, 894191, 894193, 894203, 894209, 894211, 894221, 894227, 894233, 894239, 894247, 894259, 894277, 894281, 894287, 894301, 894329, 894343, 894371, 894391, 894403, 894407, 894409, 894419, 894427, 894431, 894449, 894451, 894503, 894511, 894521, 894527, 894541, 894547, 894559, 894581, 894589, 894611, 894613, 894637, 894643, 894667, 894689, 894709, 894713, 894721, 894731, 894749, 894763, 894779, 894791, 894793, 894811, 894869, 894871, 894893, 894917, 894923, 894947, 894973, 894997, 895003, 895007, 895009, 895039, 895049, 895051, 895079, 895087, 895127, 895133, 895151, 895157, 895159, 895171, 895189, 895211, 895231, 895241, 895243, 895247, 895253, 895277, 895283, 895291, 895309, 895313, 895319, 895333, 895343, 895351, 895357, 895361, 895387, 895393, 895421, 895423, 895457, 895463, 895469, 895471, 895507, 895529, 895553, 895571, 895579, 895591, 895613, 895627, 895633, 895649, 895651, 895667, 895669, 895673, 895681, 895691, 895703, 895709, 895721, 895729, 895757, 895771, 895777, 895787, 895789, 895799, 895801, 895813, 895823, 895841, 895861, 895879, 895889, 895901, 895903, 895913, 895927, 895933, 895957, 895987, 896003, 896009, 896047, 896069, 896101, 896107, 896111, 896113, 896123, 896143, 896167, 896191, 896201, 896263, 896281, 896293, 896297, 896299, 896323, 896327, 896341, 896347, 896353, 896369, 896381, 896417, 896443, 896447, 896449, 896453, 896479, 896491, 896509, 896521, 896531, 896537, 896543, 896549, 896557, 896561, 896573, 896587, 896617, 896633, 896647, 896669, 896677, 896681, 896717, 896719, 896723, 896771, 896783, 896803, 896837, 896867, 896879, 896897, 896921, 896927, 896947, 896953, 896963, 896983, 897007, 897011, 897019, 897049, 897053, 897059, 897067, 897077, 897101, 897103, 897119, 897133, 897137, 897157, 897163, 897191, 897223, 897229, 897241, 897251, 897263, 897269, 897271, 897301, 897307, 897317, 897319, 897329, 897349, 897359, 897373, 897401, 897433, 897443, 897461, 897467, 897469, 897473, 897497, 897499, 897517, 897527, 897553, 897557, 897563, 897571, 897577, 897581, 897593, 897601, 897607, 897629, 897647, 897649, 897671, 897691, 897703, 897707, 897709, 897727, 897751, 897779, 897781, 897817, 897829, 897847, 897877, 897881, 897887, 897899, 897907, 897931, 897947, 897971, 897983, 898013, 898019, 898033, 898063, 898067, 898069, 898091, 898097, 898109, 898129, 898133, 898147, 898153, 898171, 898181, 898189, 898199, 898211, 898213, 898223, 898231, 898241, 898243, 898253, 898259, 898279, 898283, 898291, 898307, 898319, 898327, 898361, 898369, 898409, 898421, 898423, 898427, 898439, 898459, 898477, 898481, 898483, 898493, 898519, 898523, 898543, 898549, 898553, 898561, 898607, 898613, 898621, 898661, 898663, 898669, 898673, 898691, 898717, 898727, 898753, 898763, 898769, 898787, 898813, 898819, 898823, 898853, 898867, 898873, 898889, 898897, 898921, 898927, 898951, 898981, 898987, 899009, 899051, 899057, 899069, 899123, 899149, 899153, 899159, 899161, 899177, 899179, 899183, 899189, 899209, 899221, 899233, 899237, 899263, 899273, 899291, 899309, 899321, 899387, 899401, 899413, 899429, 899447, 899467, 899473, 899477, 899491, 899519, 899531, 899537, 899611, 899617, 899659, 899671, 899681, 899687, 899693, 899711, 899719, 899749, 899753, 899761, 899779, 899791, 899807, 899831, 899849, 899851, 899863, 899881, 899891, 899893, 899903, 899917, 899939, 899971, 899981, 900001, 900007, 900019, 900037, 900061, 900089, 900091, 900103, 900121, 900139, 900143, 900149, 900157, 900161, 900169, 900187, 900217, 900233, 900241, 900253, 900259, 900283, 900287, 900293, 900307, 900329, 900331, 900349, 900397, 900409, 900443, 900461, 900481, 900491, 900511, 900539, 900551, 900553, 900563, 900569, 900577, 900583, 900587, 900589, 900593, 900607, 900623, 900649, 900659, 900671, 900673, 900689, 900701, 900719, 900737, 900743, 900751, 900761, 900763, 900773, 900797, 900803, 900817, 900821, 900863, 900869, 900917, 900929, 900931, 900937, 900959, 900971, 900973, 900997, 901007, 901009, 901013, 901063, 901067, 901079, 901093, 901097, 901111, 901133, 901141, 901169, 901171, 901177, 901183, 901193, 901207, 901211, 901213, 901247, 901249, 901253, 901273, 901279, 901309, 901333, 901339, 901367, 901399, 901403, 901423, 901427, 901429, 901441, 901447, 901451, 901457, 901471, 901489, 901499, 901501, 901513, 901517, 901529, 901547, 901567, 901591, 901613, 901643, 901657, 901679, 901687, 901709, 901717, 901739, 901741, 901751, 901781, 901787, 901811, 901819, 901841, 901861, 901891, 901907, 901909, 901919, 901931, 901937, 901963, 901973, 901993, 901997, 902009, 902017, 902029, 902039, 902047, 902053, 902087, 902089, 902119, 902137, 902141, 902179, 902191, 902201, 902227, 902261, 902263, 902281, 902299, 902303, 902311, 902333, 902347, 902351, 902357, 902389, 902401, 902413, 902437, 902449, 902471, 902477, 902483, 902501, 902507, 902521, 902563, 902569, 902579, 902591, 902597, 902599, 902611, 902639, 902653, 902659, 902669, 902677, 902687, 902719, 902723, 902753, 902761, 902767, 902771, 902777, 902789, 902807, 902821, 902827, 902849, 902873, 902903, 902933, 902953, 902963, 902971, 902977, 902981, 902987, 903017, 903029, 903037, 903073, 903079, 903103, 903109, 903143, 903151, 903163, 903179, 903197, 903211, 903223, 903251, 903257, 903269, 903311, 903323, 903337, 903347, 903359, 903367, 903389, 903391, 903403, 903407, 903421, 903443, 903449, 903451, 903457, 903479, 903493, 903527, 903541, 903547, 903563, 903569, 903607, 903613, 903641, 903649, 903673, 903677, 903691, 903701, 903709, 903751, 903757, 903761, 903781, 903803, 903827, 903841, 903871, 903883, 903899, 903913, 903919, 903949, 903967, 903979, 904019, 904027, 904049, 904067, 904069, 904073, 904087, 904093, 904097, 904103, 904117, 904121, 904147, 904157, 904181, 904193, 904201, 904207, 904217, 904219, 904261, 904283, 904289, 904297, 904303, 904357, 904361, 904369, 904399, 904441, 904459, 904483, 904489, 904499, 904511, 904513, 904517, 904523, 904531, 904559, 904573, 904577, 904601, 904619, 904627, 904633, 904637, 904643, 904661, 904663, 904667, 904679, 904681, 904693, 904697, 904721, 904727, 904733, 904759, 904769, 904777, 904781, 904789, 904793, 904801, 904811, 904823, 904847, 904861, 904867, 904873, 904879, 904901, 904903, 904907, 904919, 904931, 904933, 904987, 904997, 904999, 905011, 905053, 905059, 905071, 905083, 905087, 905111, 905123, 905137, 905143, 905147, 905161, 905167, 905171, 905189, 905197, 905207, 905209, 905213, 905227, 905249, 905269, 905291, 905297, 905299, 905329, 905339, 905347, 905381, 905413, 905449, 905453, 905461, 905477, 905491, 905497, 905507, 905551, 905581, 905587, 905599, 905617, 905621, 905629, 905647, 905651, 905659, 905677, 905683, 905687, 905693, 905701, 905713, 905719, 905759, 905761, 905767, 905783, 905803, 905819, 905833, 905843, 905897, 905909, 905917, 905923, 905951, 905959, 905963, 905999, 906007, 906011, 906013, 906023, 906029, 906043, 906089, 906107, 906119, 906121, 906133, 906179, 906187, 906197, 906203, 906211, 906229, 906233, 906259, 906263, 906289, 906293, 906313, 906317, 906329, 906331, 906343, 906349, 906371, 906377, 906383, 906391, 906403, 906421, 906427, 906431, 906461, 906473, 906481, 906487, 906497, 906517, 906523, 906539, 906541, 906557, 906589, 906601, 906613, 906617, 906641, 906649, 906673, 906679, 906691, 906701, 906707, 906713, 906727, 906749, 906751, 906757, 906767, 906779, 906793, 906809, 906817, 906823, 906839, 906847, 906869, 906881, 906901, 906911, 906923, 906929, 906931, 906943, 906949, 906973, 907019, 907021, 907031, 907063, 907073, 907099, 907111, 907133, 907139, 907141, 907163, 907169, 907183, 907199, 907211, 907213, 907217, 907223, 907229, 907237, 907259, 907267, 907279, 907297, 907301, 907321, 907331, 907363, 907367, 907369, 907391, 907393, 907397, 907399, 907427, 907433, 907447, 907457, 907469, 907471, 907481, 907493, 907507, 907513, 907549, 907561, 907567, 907583, 907589, 907637, 907651, 907657, 907663, 907667, 907691, 907693, 907703, 907717, 907723, 907727, 907733, 907757, 907759, 907793, 907807, 907811, 907813, 907831, 907843, 907849, 907871, 907891, 907909, 907913, 907927, 907957, 907967, 907969, 907997, 907999, 908003, 908041, 908053, 908057, 908071, 908081, 908101, 908113, 908129, 908137, 908153, 908179, 908183, 908197, 908213, 908221, 908233, 908249, 908287, 908317, 908321, 908353, 908359, 908363, 908377, 908381, 908417, 908419, 908441, 908449, 908459, 908471, 908489, 908491, 908503, 908513, 908521, 908527, 908533, 908539, 908543, 908549, 908573, 908581, 908591, 908597, 908603, 908617, 908623, 908627, 908653, 908669, 908671, 908711, 908723, 908731, 908741, 908749, 908759, 908771, 908797, 908807, 908813, 908819, 908821, 908849, 908851, 908857, 908861, 908863, 908879, 908881, 908893, 908909, 908911, 908927, 908953, 908959, 908993, 909019, 909023, 909031, 909037, 909043, 909047, 909061, 909071, 909089, 909091, 909107, 909113, 909119, 909133, 909151, 909173, 909203, 909217, 909239, 909241, 909247, 909253, 909281, 909287, 909289, 909299, 909301, 909317, 909319, 909329, 909331, 909341, 909343, 909371, 909379, 909383, 909401, 909409, 909437, 909451, 909457, 909463, 909481, 909521, 909529, 909539, 909541, 909547, 909577, 909599, 909611, 909613, 909631, 909637, 909679, 909683, 909691, 909697, 909731, 909737, 909743, 909761, 909767, 909773, 909787, 909791, 909803, 909809, 909829, 909833, 909859, 909863, 909877, 909889, 909899, 909901, 909907, 909911, 909917, 909971, 909973, 909977, 910003, 910031, 910051, 910069, 910093, 910097, 910099, 910103, 910109, 910121, 910127, 910139, 910141, 910171, 910177, 910199, 910201, 910207, 910213, 910219, 910229, 910277, 910279, 910307, 910361, 910369, 910421, 910447, 910451, 910453, 910457, 910471, 910519, 910523, 910561, 910577, 910583, 910603, 910619, 910621, 910627, 910631, 910643, 910661, 910691, 910709, 910711, 910747, 910751, 910771, 910781, 910787, 910799, 910807, 910817, 910849, 910853, 910883, 910909, 910939, 910957, 910981, 911003, 911011, 911023, 911033, 911039, 911063, 911077, 911087, 911089, 911101, 911111, 911129, 911147, 911159, 911161, 911167, 911171, 911173, 911179, 911201, 911219, 911227, 911231, 911233, 911249, 911269, 911291, 911293, 911303, 911311, 911321, 911327, 911341, 911357, 911359, 911363, 911371, 911413, 911419, 911437, 911453, 911459, 911503, 911507, 911527, 911549, 911593, 911597, 911621, 911633, 911657, 911663, 911671, 911681, 911683, 911689, 911707, 911719, 911723, 911737, 911749, 911773, 911777, 911783, 911819, 911831, 911837, 911839, 911851, 911861, 911873, 911879, 911893, 911899, 911903, 911917, 911947, 911951, 911957, 911959, 911969, 912007, 912031, 912047, 912049, 912053, 912061, 912083, 912089, 912103, 912167, 912173, 912187, 912193, 912211, 912217, 912227, 912239, 912251, 912269, 912287, 912337, 912343, 912349, 912367, 912391, 912397, 912403, 912409, 912413, 912449, 912451, 912463, 912467, 912469, 912481, 912487, 912491, 912497, 912511, 912521, 912523, 912533, 912539, 912559, 912581, 912631, 912647, 912649, 912727, 912763, 912773, 912797, 912799, 912809, 912823, 912829, 912839, 912851, 912853, 912859, 912869, 912871, 912911, 912929, 912941, 912953, 912959, 912971, 912973, 912979, 912991, 913013, 913027, 913037, 913039, 913063, 913067, 913103, 913139, 913151, 913177, 913183, 913217, 913247, 913259, 913279, 913309, 913321, 913327, 913331, 913337, 913373, 913397, 913417, 913421, 913433, 913441, 913447, 913457, 913483, 913487, 913513, 913571, 913573, 913579, 913589, 913637, 913639, 913687, 913709, 913723, 913739, 913753, 913771, 913799, 913811, 913853, 913873, 913889, 913907, 913921, 913933, 913943, 913981, 913999, 914021, 914027, 914041, 914047, 914117, 914131, 914161, 914189, 914191, 914213, 914219, 914237, 914239, 914257, 914269, 914279, 914293, 914321, 914327, 914339, 914351, 914357, 914359, 914363, 914369, 914371, 914429, 914443, 914449, 914461, 914467, 914477, 914491, 914513, 914519, 914521, 914533, 914561, 914569, 914579, 914581, 914591, 914597, 914609, 914611, 914629, 914647, 914657, 914701, 914713, 914723, 914731, 914737, 914777, 914783, 914789, 914791, 914801, 914813, 914819, 914827, 914843, 914857, 914861, 914867, 914873, 914887, 914891, 914897, 914941, 914951, 914971, 914981, 915007, 915017, 915029, 915041, 915049, 915053, 915067, 915071, 915113, 915139, 915143, 915157, 915181, 915191, 915197, 915199, 915203, 915221, 915223, 915247, 915251, 915253, 915259, 915283, 915301, 915311, 915353, 915367, 915379, 915391, 915437, 915451, 915479, 915487, 915527, 915533, 915539, 915547, 915557, 915587, 915589, 915601, 915611, 915613, 915623, 915631, 915641, 915659, 915683, 915697, 915703, 915727, 915731, 915737, 915757, 915763, 915769, 915799, 915839, 915851, 915869, 915881, 915911, 915917, 915919, 915947, 915949, 915961, 915973, 915991, 916031, 916033, 916049, 916057, 916061, 916073, 916099, 916103, 916109, 916121, 916127, 916129, 916141, 916169, 916177, 916183, 916187, 916189, 916213, 916217, 916219, 916259, 916261, 916273, 916291, 916319, 916337, 916339, 916361, 916367, 916387, 916411, 916417, 916441, 916451, 916457, 916463, 916469, 916471, 916477, 916501, 916507, 916511, 916537, 916561, 916571, 916583, 916613, 916621, 916633, 916649, 916651, 916679, 916703, 916733, 916771, 916781, 916787, 916831, 916837, 916841, 916859, 916871, 916879, 916907, 916913, 916931, 916933, 916939, 916961, 916973, 916999, 917003, 917039, 917041, 917051, 917053, 917083, 917089, 917093, 917101, 917113, 917117, 917123, 917141, 917153, 917159, 917173, 917179, 917209, 917219, 917227, 917237, 917239, 917243, 917251, 917281, 917291, 917317, 917327, 917333, 917353, 917363, 917381, 917407, 917443, 917459, 917461, 917471, 917503, 917513, 917519, 917549, 917557, 917573, 917591, 917593, 917611, 917617, 917629, 917633, 917641, 917659, 917669, 917687, 917689, 917713, 917729, 917737, 917753, 917759, 917767, 917771, 917773, 917783, 917789, 917803, 917809, 917827, 917831, 917837, 917843, 917849, 917869, 917887, 917893, 917923, 917927, 917951, 917971, 917993, 918011, 918019, 918041, 918067, 918079, 918089, 918103, 918109, 918131, 918139, 918143, 918149, 918157, 918161, 918173, 918193, 918199, 918209, 918223, 918257, 918259, 918263, 918283, 918301, 918319, 918329, 918341, 918347, 918353, 918361, 918371, 918389, 918397, 918431, 918433, 918439, 918443, 918469, 918481, 918497, 918529, 918539, 918563, 918581, 918583, 918587, 918613, 918641, 918647, 918653, 918677, 918679, 918683, 918733, 918737, 918751, 918763, 918767, 918779, 918787, 918793, 918823, 918829, 918839, 918857, 918877, 918889, 918899, 918913, 918943, 918947, 918949, 918959, 918971, 918989, 919013, 919019, 919021, 919031, 919033, 919063, 919067, 919081, 919109, 919111, 919129, 919147, 919153, 919169, 919183, 919189, 919223, 919229, 919231, 919249, 919253, 919267, 919301, 919313, 919319, 919337, 919349, 919351, 919381, 919393, 919409, 919417, 919421, 919423, 919427, 919447, 919511, 919519, 919531, 919559, 919571, 919591, 919613, 919621, 919631, 919679, 919691, 919693, 919703, 919729, 919757, 919759, 919769, 919781, 919799, 919811, 919817, 919823, 919859, 919871, 919883, 919901, 919903, 919913, 919927, 919937, 919939, 919949, 919951, 919969, 919979, 920011, 920021, 920039, 920053, 920107, 920123, 920137, 920147, 920149, 920167, 920197, 920201, 920203, 920209, 920219, 920233, 920263, 920267, 920273, 920279, 920281, 920291, 920323, 920333, 920357, 920371, 920377, 920393, 920399, 920407, 920411, 920419, 920441, 920443, 920467, 920473, 920477, 920497, 920509, 920519, 920539, 920561, 920609, 920641, 920651, 920653, 920677, 920687, 920701, 920707, 920729, 920741, 920743, 920753, 920761, 920783, 920789, 920791, 920807, 920827, 920833, 920849, 920863, 920869, 920891, 920921, 920947, 920951, 920957, 920963, 920971, 920999, 921001, 921007, 921013, 921029, 921031, 921073, 921079, 921091, 921121, 921133, 921143, 921149, 921157, 921169, 921191, 921197, 921199, 921203, 921223, 921233, 921241, 921257, 921259, 921287, 921293, 921331, 921353, 921373, 921379, 921407, 921409, 921457, 921463, 921467, 921491, 921497, 921499, 921517, 921523, 921563, 921581, 921589, 921601, 921611, 921629, 921637, 921643, 921647, 921667, 921677, 921703, 921733, 921737, 921743, 921749, 921751, 921761, 921779, 921787, 921821, 921839, 921841, 921871, 921887, 921889, 921901, 921911, 921913, 921919, 921931, 921959, 921989, 922021, 922027, 922037, 922039, 922043, 922057, 922067, 922069, 922073, 922079, 922081, 922087, 922099, 922123, 922169, 922211, 922217, 922223, 922237, 922247, 922261, 922283, 922289, 922291, 922303, 922309, 922321, 922331, 922333, 922351, 922357, 922367, 922391, 922423, 922451, 922457, 922463, 922487, 922489, 922499, 922511, 922513, 922517, 922531, 922549, 922561, 922601, 922613, 922619, 922627, 922631, 922637, 922639, 922643, 922667, 922679, 922681, 922699, 922717, 922729, 922739, 922741, 922781, 922807, 922813, 922853, 922861, 922897, 922907, 922931, 922973, 922993, 923017, 923023, 923029, 923047, 923051, 923053, 923107, 923123, 923129, 923137, 923141, 923147, 923171, 923177, 923179, 923183, 923201, 923203, 923227, 923233, 923239, 923249, 923309, 923311, 923333, 923341, 923347, 923369, 923371, 923387, 923399, 923407, 923411, 923437, 923441, 923449, 923453, 923467, 923471, 923501, 923509, 923513, 923539, 923543, 923551, 923561, 923567, 923579, 923581, 923591, 923599, 923603, 923617, 923641, 923653, 923687, 923693, 923701, 923711, 923719, 923743, 923773, 923789, 923809, 923833, 923849, 923851, 923861, 923869, 923903, 923917, 923929, 923939, 923947, 923953, 923959, 923963, 923971, 923977, 923983, 923987, 924019, 924023, 924031, 924037, 924041, 924043, 924059, 924073, 924083, 924097, 924101, 924109, 924139, 924151, 924173, 924191, 924197, 924241, 924269, 924281, 924283, 924299, 924323, 924337, 924359, 924361, 924383, 924397, 924401, 924403, 924419, 924421, 924431, 924437, 924463, 924493, 924499, 924503, 924523, 924527, 924529, 924551, 924557, 924601, 924617, 924641, 924643, 924659, 924661, 924683, 924697, 924709, 924713, 924719, 924727, 924731, 924743, 924751, 924757, 924769, 924773, 924779, 924793, 924809, 924811, 924827, 924829, 924841, 924871, 924877, 924881, 924907, 924929, 924961, 924967, 924997, 925019, 925027, 925033, 925039, 925051, 925063, 925073, 925079, 925081, 925087, 925097, 925103, 925109, 925117, 925121, 925147, 925153, 925159, 925163, 925181, 925189, 925193, 925217, 925237, 925241, 925271, 925273, 925279, 925291, 925307, 925339, 925349, 925369, 925373, 925387, 925391, 925399, 925409, 925423, 925447, 925469, 925487, 925499, 925501, 925513, 925517, 925523, 925559, 925577, 925579, 925597, 925607, 925619, 925621, 925637, 925649, 925663, 925669, 925679, 925697, 925721, 925733, 925741, 925783, 925789, 925823, 925831, 925843, 925849, 925891, 925901, 925913, 925921, 925937, 925943, 925949, 925961, 925979, 925987, 925997, 926017, 926027, 926033, 926077, 926087, 926089, 926099, 926111, 926113, 926129, 926131, 926153, 926161, 926171, 926179, 926183, 926203, 926227, 926239, 926251, 926273, 926293, 926309, 926327, 926351, 926353, 926357, 926377, 926389, 926399, 926411, 926423, 926437, 926461, 926467, 926489, 926503, 926507, 926533, 926537, 926557, 926561, 926567, 926581, 926587, 926617, 926623, 926633, 926657, 926659, 926669, 926671, 926689, 926701, 926707, 926741, 926747, 926767, 926777, 926797, 926803, 926819, 926843, 926851, 926867, 926879, 926899, 926903, 926921, 926957, 926963, 926971, 926977, 926983, 927001, 927007, 927013, 927049, 927077, 927083, 927089, 927097, 927137, 927149, 927161, 927167, 927187, 927191, 927229, 927233, 927259, 927287, 927301, 927313, 927317, 927323, 927361, 927373, 927397, 927403, 927431, 927439, 927491, 927497, 927517, 927529, 927533, 927541, 927557, 927569, 927587, 927629, 927631, 927643, 927649, 927653, 927671, 927677, 927683, 927709, 927727, 927743, 927763, 927769, 927779, 927791, 927803, 927821, 927833, 927841, 927847, 927853, 927863, 927869, 927961, 927967, 927973, 928001, 928043, 928051, 928063, 928079, 928097, 928099, 928111, 928139, 928141, 928153, 928157, 928159, 928163, 928177, 928223, 928231, 928253, 928267, 928271, 928273, 928289, 928307, 928313, 928331, 928337, 928351, 928399, 928409, 928423, 928427, 928429, 928453, 928457, 928463, 928469, 928471, 928513, 928547, 928559, 928561, 928597, 928607, 928619, 928621, 928637, 928643, 928649, 928651, 928661, 928679, 928699, 928703, 928769, 928771, 928787, 928793, 928799, 928813, 928817, 928819, 928849, 928859, 928871, 928883, 928903, 928913, 928927, 928933, 928979, 929003, 929009, 929011, 929023, 929029, 929051, 929057, 929059, 929063, 929069, 929077, 929083, 929087, 929113, 929129, 929141, 929153, 929161, 929171, 929197, 929207, 929209, 929239, 929251, 929261, 929281, 929293, 929303, 929311, 929323, 929333, 929381, 929389, 929393, 929399, 929417, 929419, 929431, 929459, 929483, 929497, 929501, 929507, 929527, 929549, 929557, 929561, 929573, 929581, 929587, 929609, 929623, 929627, 929629, 929639, 929641, 929647, 929671, 929693, 929717, 929737, 929741, 929743, 929749, 929777, 929791, 929807, 929809, 929813, 929843, 929861, 929869, 929881, 929891, 929897, 929941, 929953, 929963, 929977, 929983, 930011, 930043, 930071, 930073, 930077, 930079, 930089, 930101, 930113, 930119, 930157, 930173, 930179, 930187, 930191, 930197, 930199, 930211, 930229, 930269, 930277, 930283, 930287, 930289, 930301, 930323, 930337, 930379, 930389, 930409, 930437, 930467, 930469, 930481, 930491, 930499, 930509, 930547, 930551, 930569, 930571, 930583, 930593, 930617, 930619, 930637, 930653, 930667, 930689, 930707, 930719, 930737, 930749, 930763, 930773, 930779, 930817, 930827, 930841, 930847, 930859, 930863, 930889, 930911, 930931, 930973, 930977, 930989, 930991, 931003, 931013, 931067, 931087, 931097, 931123, 931127, 931129, 931153, 931163, 931169, 931181, 931193, 931199, 931213, 931237, 931241, 931267, 931289, 931303, 931309, 931313, 931319, 931351, 931363, 931387, 931417, 931421, 931487, 931499, 931517, 931529, 931537, 931543, 931571, 931573, 931577, 931597, 931621, 931639, 931657, 931691, 931709, 931727, 931729, 931739, 931747, 931751, 931757, 931781, 931783, 931789, 931811, 931837, 931849, 931859, 931873, 931877, 931883, 931901, 931907, 931913, 931921, 931933, 931943, 931949, 931967, 931981, 931999, 932003, 932021, 932039, 932051, 932081, 932101, 932117, 932119, 932131, 932149, 932153, 932177, 932189, 932203, 932207, 932209, 932219, 932221, 932227, 932231, 932257, 932303, 932317, 932333, 932341, 932353, 932357, 932413, 932417, 932419, 932431, 932441, 932447, 932471, 932473, 932483, 932497, 932513, 932521, 932537, 932549, 932557, 932563, 932567, 932579, 932587, 932593, 932597, 932609, 932647, 932651, 932663, 932677, 932681, 932683, 932749, 932761, 932779, 932783, 932801, 932803, 932819, 932839, 932863, 932879, 932887, 932917, 932923, 932927, 932941, 932947, 932951, 932963, 932969, 932983, 932999, 933001, 933019, 933047, 933059, 933061, 933067, 933073, 933151, 933157, 933173, 933199, 933209, 933217, 933221, 933241, 933259, 933263, 933269, 933293, 933301, 933313, 933319, 933329, 933349, 933389, 933397, 933403, 933407, 933421, 933433, 933463, 933479, 933497, 933523, 933551, 933553, 933563, 933601, 933607, 933613, 933643, 933649, 933671, 933677, 933703, 933707, 933739, 933761, 933781, 933787, 933797, 933809, 933811, 933817, 933839, 933847, 933851, 933853, 933883, 933893, 933923, 933931, 933943, 933949, 933953, 933967, 933973, 933979, 934001, 934009, 934033, 934039, 934049, 934051, 934057, 934067, 934069, 934079, 934111, 934117, 934121, 934127, 934151, 934159, 934187, 934223, 934229, 934243, 934253, 934259, 934277, 934291, 934301, 934319, 934343, 934387, 934393, 934399, 934403, 934429, 934441, 934463, 934469, 934481, 934487, 934489, 934499, 934517, 934523, 934537, 934543, 934547, 934561, 934567, 934579, 934597, 934603, 934607, 934613, 934639, 934669, 934673, 934693, 934721, 934723, 934733, 934753, 934763, 934771, 934793, 934799, 934811, 934831, 934837, 934853, 934861, 934883, 934889, 934891, 934897, 934907, 934909, 934919, 934939, 934943, 934951, 934961, 934979, 934981, 935003, 935021, 935023, 935059, 935063, 935071, 935093, 935107, 935113, 935147, 935149, 935167, 935183, 935189, 935197, 935201, 935213, 935243, 935257, 935261, 935303, 935339, 935353, 935359, 935377, 935381, 935393, 935399, 935413, 935423, 935443, 935447, 935461, 935489, 935507, 935513, 935531, 935537, 935581, 935587, 935591, 935593, 935603, 935621, 935639, 935651, 935653, 935677, 935687, 935689, 935699, 935707, 935717, 935719, 935761, 935771, 935777, 935791, 935813, 935819, 935827, 935839, 935843, 935861, 935899, 935903, 935971, 935999, 936007, 936029, 936053, 936097, 936113, 936119, 936127, 936151, 936161, 936179, 936181, 936197, 936203, 936223, 936227, 936233, 936253, 936259, 936281, 936283, 936311, 936319, 936329, 936361, 936379, 936391, 936401, 936407, 936413, 936437, 936451, 936469, 936487, 936493, 936499, 936511, 936521, 936527, 936539, 936557, 936577, 936587, 936599, 936619, 936647, 936659, 936667, 936673, 936679, 936697, 936709, 936713, 936731, 936737, 936739, 936769, 936773, 936779, 936797, 936811, 936827, 936869, 936889, 936907, 936911, 936917, 936919, 936937, 936941, 936953, 936967, 937003, 937007, 937009, 937031, 937033, 937049, 937067, 937121, 937127, 937147, 937151, 937171, 937187, 937207, 937229, 937231, 937241, 937243, 937253, 937331, 937337, 937351, 937373, 937379, 937421, 937429, 937459, 937463, 937477, 937481, 937501, 937511, 937537, 937571, 937577, 937589, 937591, 937613, 937627, 937633, 937637, 937639, 937661, 937663, 937667, 937679, 937681, 937693, 937709, 937721, 937747, 937751, 937777, 937789, 937801, 937813, 937819, 937823, 937841, 937847, 937877, 937883, 937891, 937901, 937903, 937919, 937927, 937943, 937949, 937969, 937991, 938017, 938023, 938027, 938033, 938051, 938053, 938057, 938059, 938071, 938083, 938089, 938099, 938107, 938117, 938129, 938183, 938207, 938219, 938233, 938243, 938251, 938257, 938263, 938279, 938293, 938309, 938323, 938341, 938347, 938351, 938359, 938369, 938387, 938393, 938437, 938447, 938453, 938459, 938491, 938507, 938533, 938537, 938563, 938569, 938573, 938591, 938611, 938617, 938659, 938677, 938681, 938713, 938747, 938761, 938803, 938807, 938827, 938831, 938843, 938857, 938869, 938879, 938881, 938921, 938939, 938947, 938953, 938963, 938969, 938981, 938983, 938989, 939007, 939011, 939019, 939061, 939089, 939091, 939109, 939119, 939121, 939157, 939167, 939179, 939181, 939193, 939203, 939229, 939247, 939287, 939293, 939299, 939317, 939347, 939349, 939359, 939361, 939373, 939377, 939391, 939413, 939431, 939439, 939443, 939451, 939469, 939487, 939511, 939551, 939581, 939599, 939611, 939613, 939623, 939649, 939661, 939677, 939707, 939713, 939737, 939739, 939749, 939767, 939769, 939773, 939791, 939793, 939823, 939839, 939847, 939853, 939871, 939881, 939901, 939923, 939931, 939971, 939973, 939989, 939997, 940001, 940003, 940019, 940031, 940067, 940073, 940087, 940097, 940127, 940157, 940169, 940183, 940189, 940201, 940223, 940229, 940241, 940249, 940259, 940271, 940279, 940297, 940301, 940319, 940327, 940349, 940351, 940361, 940369, 940399, 940403, 940421, 940469, 940477, 940483, 940501, 940523, 940529, 940531, 940543, 940547, 940549, 940553, 940573, 940607, 940619, 940649, 940669, 940691, 940703, 940721, 940727, 940733, 940739, 940759, 940781, 940783, 940787, 940801, 940813, 940817, 940829, 940853, 940871, 940879, 940889, 940903, 940913, 940921, 940931, 940949, 940957, 940981, 940993, 941009, 941011, 941023, 941027, 941041, 941093, 941099, 941117, 941119, 941123, 941131, 941153, 941159, 941167, 941179, 941201, 941207, 941209, 941221, 941249, 941251, 941263, 941267, 941299, 941309, 941323, 941329, 941351, 941359, 941383, 941407, 941429, 941441, 941449, 941453, 941461, 941467, 941471, 941489, 941491, 941503, 941509, 941513, 941519, 941537, 941557, 941561, 941573, 941593, 941599, 941609, 941617, 941641, 941653, 941663, 941669, 941671, 941683, 941701, 941723, 941737, 941741, 941747, 941753, 941771, 941791, 941813, 941839, 941861, 941879, 941903, 941911, 941929, 941933, 941947, 941971, 941981, 941989, 941999, 942013, 942017, 942031, 942037, 942041, 942043, 942049, 942061, 942079, 942091, 942101, 942113, 942143, 942163, 942167, 942169, 942187, 942199, 942217, 942223, 942247, 942257, 942269, 942301, 942311, 942313, 942317, 942341, 942367, 942371, 942401, 942433, 942437, 942439, 942449, 942479, 942509, 942521, 942527, 942541, 942569, 942577, 942583, 942593, 942607, 942637, 942653, 942659, 942661, 942691, 942709, 942719, 942727, 942749, 942763, 942779, 942787, 942811, 942827, 942847, 942853, 942857, 942859, 942869, 942883, 942889, 942899, 942901, 942917, 942943, 942979, 942983, 943003, 943009, 943013, 943031, 943043, 943057, 943073, 943079, 943081, 943091, 943097, 943127, 943139, 943153, 943157, 943183, 943199, 943213, 943219, 943231, 943249, 943273, 943277, 943289, 943301, 943303, 943307, 943321, 943343, 943357, 943363, 943367, 943373, 943387, 943403, 943409, 943421, 943429, 943471, 943477, 943499, 943511, 943541, 943543, 943567, 943571, 943589, 943601, 943603, 943637, 943651, 943693, 943699, 943729, 943741, 943751, 943757, 943763, 943769, 943777, 943781, 943783, 943799, 943801, 943819, 943837, 943841, 943843, 943849, 943871, 943903, 943909, 943913, 943931, 943951, 943967, 944003, 944017, 944029, 944039, 944071, 944077, 944123, 944137, 944143, 944147, 944149, 944161, 944179, 944191, 944233, 944239, 944257, 944261, 944263, 944297, 944309, 944329, 944369, 944387, 944389, 944393, 944399, 944417, 944429, 944431, 944453, 944467, 944473, 944491, 944497, 944519, 944521, 944527, 944533, 944543, 944551, 944561, 944563, 944579, 944591, 944609, 944621, 944651, 944659, 944677, 944687, 944689, 944701, 944711, 944717, 944729, 944731, 944773, 944777, 944803, 944821, 944833, 944857, 944873, 944887, 944893, 944897, 944899, 944929, 944953, 944963, 944969, 944987, 945031, 945037, 945059, 945089, 945103, 945143, 945151, 945179, 945209, 945211, 945227, 945233, 945289, 945293, 945331, 945341, 945349, 945359, 945367, 945377, 945389, 945391, 945397, 945409, 945431, 945457, 945463, 945473, 945479, 945481, 945521, 945547, 945577, 945587, 945589, 945601, 945629, 945631, 945647, 945671, 945673, 945677, 945701, 945731, 945733, 945739, 945767, 945787, 945799, 945809, 945811, 945817, 945823, 945851, 945881, 945883, 945887, 945899, 945907, 945929, 945937, 945941, 945943, 945949, 945961, 945983, 946003, 946021, 946031, 946037, 946079, 946081, 946091, 946093, 946109, 946111, 946123, 946133, 946163, 946177, 946193, 946207, 946223, 946249, 946273, 946291, 946307, 946327, 946331, 946367, 946369, 946391, 946397, 946411, 946417, 946453, 946459, 946469, 946487, 946489, 946507, 946511, 946513, 946549, 946573, 946579, 946607, 946661, 946663, 946667, 946669, 946681, 946697, 946717, 946727, 946733, 946741, 946753, 946769, 946783, 946801, 946819, 946823, 946853, 946859, 946861, 946873, 946877, 946901, 946919, 946931, 946943, 946949, 946961, 946969, 946987, 946993, 946997, 947027, 947033, 947083, 947119, 947129, 947137, 947171, 947183, 947197, 947203, 947239, 947263, 947299, 947327, 947341, 947351, 947357, 947369, 947377, 947381, 947383, 947389, 947407, 947411, 947413, 947417, 947423, 947431, 947449, 947483, 947501, 947509, 947539, 947561, 947579, 947603, 947621, 947627, 947641, 947647, 947651, 947659, 947707, 947711, 947719, 947729, 947741, 947743, 947747, 947753, 947773, 947783, 947803, 947819, 947833, 947851, 947857, 947861, 947873, 947893, 947911, 947917, 947927, 947959, 947963, 947987, 948007, 948019, 948029, 948041, 948049, 948053, 948061, 948067, 948089, 948091, 948133, 948139, 948149, 948151, 948169, 948173, 948187, 948247, 948253, 948263, 948281, 948287, 948293, 948317, 948331, 948349, 948377, 948391, 948401, 948403, 948407, 948427, 948439, 948443, 948449, 948457, 948469, 948487, 948517, 948533, 948547, 948551, 948557, 948581, 948593, 948659, 948671, 948707, 948713, 948721, 948749, 948767, 948797, 948799, 948839, 948847, 948853, 948877, 948887, 948901, 948907, 948929, 948943, 948947, 948971, 948973, 948989, 949001, 949019, 949021, 949033, 949037, 949043, 949051, 949111, 949121, 949129, 949147, 949153, 949159, 949171, 949211, 949213, 949241, 949243, 949253, 949261, 949303, 949307, 949381, 949387, 949391, 949409, 949423, 949427, 949439, 949441, 949451, 949453, 949471, 949477, 949513, 949517, 949523, 949567, 949583, 949589, 949607, 949609, 949621, 949631, 949633, 949643, 949649, 949651, 949667, 949673, 949687, 949691, 949699, 949733, 949759, 949771, 949777, 949789, 949811, 949849, 949853, 949889, 949891, 949903, 949931, 949937, 949939, 949951, 949957, 949961, 949967, 949973, 949979, 949987, 949997, 950009, 950023, 950029, 950039, 950041, 950071, 950083, 950099, 950111, 950149, 950161, 950177, 950179, 950207, 950221, 950227, 950231, 950233, 950239, 950251, 950269, 950281, 950329, 950333, 950347, 950357, 950363, 950393, 950401, 950423, 950447, 950459, 950461, 950473, 950479, 950483, 950497, 950501, 950507, 950519, 950527, 950531, 950557, 950569, 950611, 950617, 950633, 950639, 950647, 950671, 950681, 950689, 950693, 950699, 950717, 950723, 950737, 950743, 950753, 950783, 950791, 950809, 950813, 950819, 950837, 950839, 950867, 950869, 950879, 950921, 950927, 950933, 950947, 950953, 950959, 950993, 951001, 951019, 951023, 951029, 951047, 951053, 951059, 951061, 951079, 951089, 951091, 951101, 951107, 951109, 951131, 951151, 951161, 951193, 951221, 951259, 951277, 951281, 951283, 951299, 951331, 951341, 951343, 951361, 951367, 951373, 951389, 951407, 951413, 951427, 951437, 951449, 951469, 951479, 951491, 951497, 951553, 951557, 951571, 951581, 951583, 951589, 951623, 951637, 951641, 951647, 951649, 951659, 951689, 951697, 951749, 951781, 951787, 951791, 951803, 951829, 951851, 951859, 951887, 951893, 951911, 951941, 951943, 951959, 951967, 951997, 952001, 952009, 952037, 952057, 952073, 952087, 952097, 952111, 952117, 952123, 952129, 952141, 952151, 952163, 952169, 952183, 952199, 952207, 952219, 952229, 952247, 952253, 952277, 952279, 952291, 952297, 952313, 952349, 952363, 952379, 952381, 952397, 952423, 952429, 952439, 952481, 952487, 952507, 952513, 952541, 952547, 952559, 952573, 952583, 952597, 952619, 952649, 952657, 952667, 952669, 952681, 952687, 952691, 952709, 952739, 952741, 952753, 952771, 952789, 952811, 952813, 952823, 952829, 952843, 952859, 952873, 952877, 952883, 952921, 952927, 952933, 952937, 952943, 952957, 952967, 952979, 952981, 952997, 953023, 953039, 953041, 953053, 953077, 953081, 953093, 953111, 953131, 953149, 953171, 953179, 953191, 953221, 953237, 953243, 953261, 953273, 953297, 953321, 953333, 953341, 953347, 953399, 953431, 953437, 953443, 953473, 953483, 953497, 953501, 953503, 953507, 953521, 953539, 953543, 953551, 953567, 953593, 953621, 953639, 953647, 953651, 953671, 953681, 953699, 953707, 953731, 953747, 953773, 953789, 953791, 953831, 953851, 953861, 953873, 953881, 953917, 953923, 953929, 953941, 953969, 953977, 953983, 953987, 954001, 954007, 954011, 954043, 954067, 954097, 954103, 954131, 954133, 954139, 954157, 954167, 954181, 954203, 954209, 954221, 954229, 954253, 954257, 954259, 954263, 954269, 954277, 954287, 954307, 954319, 954323, 954367, 954377, 954379, 954391, 954409, 954433, 954451, 954461, 954469, 954491, 954497, 954509, 954517, 954539, 954571, 954599, 954619, 954623, 954641, 954649, 954671, 954677, 954697, 954713, 954719, 954727, 954743, 954757, 954763, 954827, 954829, 954847, 954851, 954853, 954857, 954869, 954871, 954911, 954917, 954923, 954929, 954971, 954973, 954977, 954979, 954991, 955037, 955039, 955051, 955061, 955063, 955091, 955093, 955103, 955127, 955139, 955147, 955153, 955183, 955193, 955211, 955217, 955223, 955243, 955261, 955267, 955271, 955277, 955307, 955309, 955313, 955319, 955333, 955337, 955363, 955379, 955391, 955433, 955439, 955441, 955457, 955469, 955477, 955481, 955483, 955501, 955511, 955541, 955601, 955607, 955613, 955649, 955657, 955693, 955697, 955709, 955711, 955727, 955729, 955769, 955777, 955781, 955793, 955807, 955813, 955819, 955841, 955853, 955879, 955883, 955891, 955901, 955919, 955937, 955939, 955951, 955957, 955963, 955967, 955987, 955991, 955993, 956003, 956051, 956057, 956083, 956107, 956113, 956119, 956143, 956147, 956177, 956231, 956237, 956261, 956269, 956273, 956281, 956303, 956311, 956341, 956353, 956357, 956377, 956383, 956387, 956393, 956399, 956401, 956429, 956477, 956503, 956513, 956521, 956569, 956587, 956617, 956633, 956689, 956699, 956713, 956723, 956749, 956759, 956789, 956801, 956831, 956843, 956849, 956861, 956881, 956903, 956909, 956929, 956941, 956951, 956953, 956987, 956993, 956999, 957031, 957037, 957041, 957043, 957059, 957071, 957091, 957097, 957107, 957109, 957119, 957133, 957139, 957161, 957169, 957181, 957193, 957211, 957221, 957241, 957247, 957263, 957289, 957317, 957331, 957337, 957349, 957361, 957403, 957409, 957413, 957419, 957431, 957433, 957499, 957529, 957547, 957553, 957557, 957563, 957587, 957599, 957601, 957611, 957641, 957643, 957659, 957701, 957703, 957709, 957721, 957731, 957751, 957769, 957773, 957811, 957821, 957823, 957851, 957871, 957877, 957889, 957917, 957937, 957949, 957953, 957959, 957977, 957991, 958007, 958021, 958039, 958043, 958049, 958051, 958057, 958063, 958121, 958123, 958141, 958159, 958163, 958183, 958193, 958213, 958259, 958261, 958289, 958313, 958319, 958327, 958333, 958339, 958343, 958351, 958357, 958361, 958367, 958369, 958381, 958393, 958423, 958439, 958459, 958481, 958487, 958499, 958501, 958519, 958523, 958541, 958543, 958547, 958549, 958553, 958577, 958609, 958627, 958637, 958667, 958669, 958673, 958679, 958687, 958693, 958729, 958739, 958777, 958787, 958807, 958819, 958829, 958843, 958849, 958871, 958877, 958883, 958897, 958901, 958921, 958931, 958933, 958957, 958963, 958967, 958973, 959009, 959083, 959093, 959099, 959131, 959143, 959149, 959159, 959173, 959183, 959207, 959209, 959219, 959227, 959237, 959263, 959267, 959269, 959279, 959323, 959333, 959339, 959351, 959363, 959369, 959377, 959383, 959389, 959449, 959461, 959467, 959471, 959473, 959477, 959479, 959489, 959533, 959561, 959579, 959597, 959603, 959617, 959627, 959659, 959677, 959681, 959689, 959719, 959723, 959737, 959759, 959773, 959779, 959801, 959809, 959831, 959863, 959867, 959869, 959873, 959879, 959887, 959911, 959921, 959927, 959941, 959947, 959953, 959969, 960017, 960019, 960031, 960049, 960053, 960059, 960077, 960119, 960121, 960131, 960137, 960139, 960151, 960173, 960191, 960199, 960217, 960229, 960251, 960259, 960293, 960299, 960329, 960331, 960341, 960353, 960373, 960383, 960389, 960419, 960467, 960493, 960497, 960499, 960521, 960523, 960527, 960569, 960581, 960587, 960593, 960601, 960637, 960643, 960647, 960649, 960667, 960677, 960691, 960703, 960709, 960737, 960763, 960793, 960803, 960809, 960829, 960833, 960863, 960889, 960931, 960937, 960941, 960961, 960977, 960983, 960989, 960991, 961003, 961021, 961033, 961063, 961067, 961069, 961073, 961087, 961091, 961097, 961099, 961109, 961117, 961123, 961133, 961139, 961141, 961151, 961157, 961159, 961183, 961187, 961189, 961201, 961241, 961243, 961273, 961277, 961283, 961313, 961319, 961339, 961393, 961397, 961399, 961427, 961447, 961451, 961453, 961459, 961487, 961507, 961511, 961529, 961531, 961547, 961549, 961567, 961601, 961613, 961619, 961627, 961633, 961637, 961643, 961657, 961661, 961663, 961679, 961687, 961691, 961703, 961729, 961733, 961739, 961747, 961757, 961769, 961777, 961783, 961789, 961811, 961813, 961817, 961841, 961847, 961853, 961861, 961871, 961879, 961927, 961937, 961943, 961957, 961973, 961981, 961991, 961993, 962009, 962011, 962033, 962041, 962051, 962063, 962077, 962099, 962119, 962131, 962161, 962177, 962197, 962233, 962237, 962243, 962257, 962267, 962303, 962309, 962341, 962363, 962413, 962417, 962431, 962441, 962447, 962459, 962461, 962471, 962477, 962497, 962503, 962509, 962537, 962543, 962561, 962569, 962587, 962603, 962609, 962617, 962623, 962627, 962653, 962669, 962671, 962677, 962681, 962683, 962737, 962743, 962747, 962779, 962783, 962789, 962791, 962807, 962837, 962839, 962861, 962867, 962869, 962903, 962909, 962911, 962921, 962959, 962963, 962971, 962993, 963019, 963031, 963043, 963047, 963097, 963103, 963121, 963143, 963163, 963173, 963181, 963187, 963191, 963211, 963223, 963227, 963239, 963241, 963253, 963283, 963299, 963301, 963311, 963323, 963331, 963341, 963343, 963349, 963367, 963379, 963397, 963419, 963427, 963461, 963481, 963491, 963497, 963499, 963559, 963581, 963601, 963607, 963629, 963643, 963653, 963659, 963667, 963689, 963691, 963701, 963707, 963709, 963719, 963731, 963751, 963761, 963763, 963779, 963793, 963799, 963811, 963817, 963839, 963841, 963847, 963863, 963871, 963877, 963899, 963901, 963913, 963943, 963973, 963979, 964009, 964021, 964027, 964039, 964049, 964081, 964097, 964133, 964151, 964153, 964199, 964207, 964213, 964217, 964219, 964253, 964259, 964261, 964267, 964283, 964289, 964297, 964303, 964309, 964333, 964339, 964351, 964357, 964363, 964373, 964417, 964423, 964433, 964463, 964499, 964501, 964507, 964517, 964519, 964531, 964559, 964571, 964577, 964583, 964589, 964609, 964637, 964661, 964679, 964693, 964697, 964703, 964721, 964753, 964757, 964783, 964787, 964793, 964823, 964829, 964861, 964871, 964879, 964883, 964889, 964897, 964913, 964927, 964933, 964939, 964967, 964969, 964973, 964981, 965023, 965047, 965059, 965087, 965089, 965101, 965113, 965117, 965131, 965147, 965161, 965171, 965177, 965179, 965189, 965191, 965197, 965201, 965227, 965233, 965249, 965267, 965291, 965303, 965317, 965329, 965357, 965369, 965399, 965401, 965407, 965411, 965423, 965429, 965443, 965453, 965467, 965483, 965491, 965507, 965519, 965533, 965551, 965567, 965603, 965611, 965621, 965623, 965639, 965647, 965659, 965677, 965711, 965749, 965759, 965773, 965777, 965779, 965791, 965801, 965843, 965851, 965857, 965893, 965927, 965953, 965963, 965969, 965983, 965989, 966011, 966013, 966029, 966041, 966109, 966113, 966139, 966149, 966157, 966191, 966197, 966209, 966211, 966221, 966227, 966233, 966241, 966257, 966271, 966293, 966307, 966313, 966319, 966323, 966337, 966347, 966353, 966373, 966377, 966379, 966389, 966401, 966409, 966419, 966431, 966439, 966463, 966481, 966491, 966499, 966509, 966521, 966527, 966547, 966557, 966583, 966613, 966617, 966619, 966631, 966653, 966659, 966661, 966677, 966727, 966751, 966781, 966803, 966817, 966863, 966869, 966871, 966883, 966893, 966907, 966913, 966919, 966923, 966937, 966961, 966971, 966991, 966997, 967003, 967019, 967049, 967061, 967111, 967129, 967139, 967171, 967201, 967229, 967259, 967261, 967289, 967297, 967319, 967321, 967327, 967333, 967349, 967361, 967363, 967391, 967397, 967427, 967429, 967441, 967451, 967459, 967481, 967493, 967501, 967507, 967511, 967529, 967567, 967583, 967607, 967627, 967663, 967667, 967693, 967699, 967709, 967721, 967739, 967751, 967753, 967763, 967781, 967787, 967819, 967823, 967831, 967843, 967847, 967859, 967873, 967877, 967903, 967919, 967931, 967937, 967951, 967961, 967979, 967999, 968003, 968017, 968021, 968027, 968041, 968063, 968089, 968101, 968111, 968113, 968117, 968137, 968141, 968147, 968159, 968173, 968197, 968213, 968237, 968239, 968251, 968263, 968267, 968273, 968291, 968299, 968311, 968321, 968329, 968333, 968353, 968377, 968381, 968389, 968419, 968423, 968431, 968437, 968459, 968467, 968479, 968501, 968503, 968519, 968521, 968537, 968557, 968567, 968573, 968593, 968641, 968647, 968659, 968663, 968689, 968699, 968713, 968729, 968731, 968761, 968801, 968809, 968819, 968827, 968831, 968857, 968879, 968897, 968909, 968911, 968917, 968939, 968959, 968963, 968971, 969011, 969037, 969041, 969049, 969071, 969083, 969097, 969109, 969113, 969131, 969139, 969167, 969179, 969181, 969233, 969239, 969253, 969257, 969259, 969271, 969301, 969341, 969343, 969347, 969359, 969377, 969403, 969407, 969421, 969431, 969433, 969443, 969457, 969461, 969467, 969481, 969497, 969503, 969509, 969533, 969559, 969569, 969593, 969599, 969637, 969641, 969667, 969671, 969677, 969679, 969713, 969719, 969721, 969743, 969757, 969763, 969767, 969791, 969797, 969809, 969821, 969851, 969863, 969869, 969877, 969889, 969907, 969911, 969919, 969923, 969929, 969977, 969989, 970027, 970031, 970043, 970051, 970061, 970063, 970069, 970087, 970091, 970111, 970133, 970147, 970201, 970213, 970217, 970219, 970231, 970237, 970247, 970259, 970261, 970267, 970279, 970297, 970303, 970313, 970351, 970391, 970421, 970423, 970433, 970441, 970447, 970457, 970469, 970481, 970493, 970537, 970549, 970561, 970573, 970583, 970603, 970633, 970643, 970657, 970667, 970687, 970699, 970721, 970747, 970777, 970787, 970789, 970793, 970799, 970813, 970817, 970829, 970847, 970859, 970861, 970867, 970877, 970883, 970903, 970909, 970927, 970939, 970943, 970961, 970967, 970969, 970987, 970997, 970999, 971021, 971027, 971029, 971039, 971051, 971053, 971063, 971077, 971093, 971099, 971111, 971141, 971143, 971149, 971153, 971171, 971177, 971197, 971207, 971237, 971251, 971263, 971273, 971279, 971281, 971291, 971309, 971339, 971353, 971357, 971371, 971381, 971387, 971389, 971401, 971419, 971429, 971441, 971473, 971479, 971483, 971491, 971501, 971513, 971521, 971549, 971561, 971563, 971569, 971591, 971639, 971651, 971653, 971683, 971693, 971699, 971713, 971723, 971753, 971759, 971767, 971783, 971821, 971833, 971851, 971857, 971863, 971899, 971903, 971917, 971921, 971933, 971939, 971951, 971959, 971977, 971981, 971989, 972001, 972017, 972029, 972031, 972047, 972071, 972079, 972091, 972113, 972119, 972121, 972131, 972133, 972137, 972161, 972163, 972197, 972199, 972221, 972227, 972229, 972259, 972263, 972271, 972277, 972313, 972319, 972329, 972337, 972343, 972347, 972353, 972373, 972403, 972407, 972409, 972427, 972431, 972443, 972469, 972473, 972481, 972493, 972533, 972557, 972577, 972581, 972599, 972611, 972613, 972623, 972637, 972649, 972661, 972679, 972683, 972701, 972721, 972787, 972793, 972799, 972823, 972827, 972833, 972847, 972869, 972887, 972899, 972901, 972941, 972943, 972967, 972977, 972991, 973001, 973003, 973031, 973033, 973051, 973057, 973067, 973069, 973073, 973081, 973099, 973129, 973151, 973169, 973177, 973187, 973213, 973253, 973277, 973279, 973283, 973289, 973321, 973331, 973333, 973367, 973373, 973387, 973397, 973409, 973411, 973421, 973439, 973459, 973487, 973523, 973529, 973537, 973547, 973561, 973591, 973597, 973631, 973657, 973669, 973681, 973691, 973727, 973757, 973759, 973781, 973787, 973789, 973801, 973813, 973823, 973837, 973853, 973891, 973897, 973901, 973919, 973957, 974003, 974009, 974033, 974041, 974053, 974063, 974089, 974107, 974123, 974137, 974143, 974147, 974159, 974161, 974167, 974177, 974179, 974189, 974213, 974249, 974261, 974269, 974273, 974279, 974293, 974317, 974329, 974359, 974383, 974387, 974401, 974411, 974417, 974419, 974431, 974437, 974443, 974459, 974473, 974489, 974497, 974507, 974513, 974531, 974537, 974539, 974551, 974557, 974563, 974581, 974591, 974599, 974651, 974653, 974657, 974707, 974711, 974713, 974737, 974747, 974749, 974761, 974773, 974803, 974819, 974821, 974837, 974849, 974861, 974863, 974867, 974873, 974879, 974887, 974891, 974923, 974927, 974957, 974959, 974969, 974971, 974977, 974983, 974989, 974999, 975011, 975017, 975049, 975053, 975071, 975083, 975089, 975133, 975151, 975157, 975181, 975187, 975193, 975199, 975217, 975257, 975259, 975263, 975277, 975281, 975287, 975313, 975323, 975343, 975367, 975379, 975383, 975389, 975421, 975427, 975433, 975439, 975463, 975493, 975497, 975509, 975521, 975523, 975551, 975553, 975581, 975599, 975619, 975629, 975643, 975649, 975661, 975671, 975691, 975701, 975731, 975739, 975743, 975797, 975803, 975811, 975823, 975827, 975847, 975857, 975869, 975883, 975899, 975901, 975907, 975941, 975943, 975967, 975977, 975991, 976009, 976013, 976033, 976039, 976091, 976093, 976103, 976109, 976117, 976127, 976147, 976177, 976187, 976193, 976211, 976231, 976253, 976271, 976279, 976301, 976303, 976307, 976309, 976351, 976369, 976403, 976411, 976439, 976447, 976453, 976457, 976471, 976477, 976483, 976489, 976501, 976513, 976537, 976553, 976559, 976561, 976571, 976601, 976607, 976621, 976637, 976639, 976643, 976669, 976699, 976709, 976721, 976727, 976777, 976799, 976817, 976823, 976849, 976853, 976883, 976909, 976919, 976933, 976951, 976957, 976991, 977021, 977023, 977047, 977057, 977069, 977087, 977107, 977147, 977149, 977167, 977183, 977191, 977203, 977209, 977233, 977239, 977243, 977257, 977269, 977299, 977323, 977351, 977357, 977359, 977363, 977369, 977407, 977411, 977413, 977437, 977447, 977507, 977513, 977521, 977539, 977567, 977591, 977593, 977609, 977611, 977629, 977671, 977681, 977693, 977719, 977723, 977747, 977761, 977791, 977803, 977813, 977819, 977831, 977849, 977861, 977881, 977897, 977923, 977927, 977971, 978001, 978007, 978011, 978017, 978031, 978037, 978041, 978049, 978053, 978067, 978071, 978073, 978077, 978079, 978091, 978113, 978149, 978151, 978157, 978179, 978181, 978203, 978209, 978217, 978223, 978233, 978239, 978269, 978277, 978283, 978287, 978323, 978337, 978343, 978347, 978349, 978359, 978389, 978403, 978413, 978427, 978449, 978457, 978463, 978473, 978479, 978491, 978511, 978521, 978541, 978569, 978599, 978611, 978617, 978619, 978643, 978647, 978683, 978689, 978697, 978713, 978727, 978743, 978749, 978773, 978797, 978799, 978821, 978839, 978851, 978853, 978863, 978871, 978883, 978907, 978917, 978931, 978947, 978973, 978997, 979001, 979009, 979031, 979037, 979061, 979063, 979093, 979103, 979109, 979117, 979159, 979163, 979171, 979177, 979189, 979201, 979207, 979211, 979219, 979229, 979261, 979273, 979283, 979291, 979313, 979327, 979333, 979337, 979343, 979361, 979369, 979373, 979379, 979403, 979423, 979439, 979457, 979471, 979481, 979519, 979529, 979541, 979543, 979549, 979553, 979567, 979651, 979691, 979709, 979717, 979747, 979757, 979787, 979807, 979819, 979831, 979873, 979883, 979889, 979907, 979919, 979921, 979949, 979969, 979987, 980027, 980047, 980069, 980071, 980081, 980107, 980117, 980131, 980137, 980149, 980159, 980173, 980179, 980197, 980219, 980249, 980261, 980293, 980299, 980321, 980327, 980363, 980377, 980393, 980401, 980417, 980423, 980431, 980449, 980459, 980471, 980489, 980491, 980503, 980549, 980557, 980579, 980587, 980591, 980593, 980599, 980621, 980641, 980677, 980687, 980689, 980711, 980717, 980719, 980729, 980731, 980773, 980801, 980803, 980827, 980831, 980851, 980887, 980893, 980897, 980899, 980909, 980911, 980921, 980957, 980963, 980999, 981011, 981017, 981023, 981037, 981049, 981061, 981067, 981073, 981077, 981091, 981133, 981137, 981139, 981151, 981173, 981187, 981199, 981209, 981221, 981241, 981263, 981271, 981283, 981287, 981289, 981301, 981311, 981319, 981373, 981377, 981391, 981397, 981419, 981437, 981439, 981443, 981451, 981467, 981473, 981481, 981493, 981517, 981523, 981527, 981569, 981577, 981587, 981599, 981601, 981623, 981637, 981653, 981683, 981691, 981697, 981703, 981707, 981713, 981731, 981769, 981797, 981809, 981811, 981817, 981823, 981887, 981889, 981913, 981919, 981941, 981947, 981949, 981961, 981979, 981983, 982021, 982057, 982061, 982063, 982067, 982087, 982097, 982099, 982103, 982117, 982133, 982147, 982151, 982171, 982183, 982187, 982211, 982213, 982217, 982231, 982271, 982273, 982301, 982321, 982337, 982339, 982343, 982351, 982363, 982381, 982393, 982403, 982453, 982489, 982493, 982559, 982571, 982573, 982577, 982589, 982603, 982613, 982621, 982633, 982643, 982687, 982693, 982697, 982703, 982741, 982759, 982769, 982777, 982783, 982789, 982801, 982819, 982829, 982841, 982843, 982847, 982867, 982871, 982903, 982909, 982931, 982939, 982967, 982973, 982981, 983063, 983069, 983083, 983113, 983119, 983123, 983131, 983141, 983149, 983153, 983173, 983179, 983189, 983197, 983209, 983233, 983239, 983243, 983261, 983267, 983299, 983317, 983327, 983329, 983347, 983363, 983371, 983377, 983407, 983429, 983431, 983441, 983443, 983447, 983449, 983461, 983491, 983513, 983519, 983527, 983531, 983533, 983557, 983579, 983581, 983597, 983617, 983659, 983699, 983701, 983737, 983771, 983777, 983783, 983789, 983791, 983803, 983809, 983813, 983819, 983849, 983861, 983863, 983881, 983911, 983923, 983929, 983951, 983987, 983993, 984007, 984017, 984037, 984047, 984059, 984083, 984091, 984119, 984121, 984127, 984149, 984167, 984199, 984211, 984241, 984253, 984299, 984301, 984307, 984323, 984329, 984337, 984341, 984349, 984353, 984359, 984367, 984383, 984391, 984397, 984407, 984413, 984421, 984427, 984437, 984457, 984461, 984481, 984491, 984497, 984539, 984541, 984563, 984583, 984587, 984593, 984611, 984617, 984667, 984689, 984701, 984703, 984707, 984733, 984749, 984757, 984761, 984817, 984847, 984853, 984859, 984877, 984881, 984911, 984913, 984917, 984923, 984931, 984947, 984959, 985003, 985007, 985013, 985027, 985057, 985063, 985079, 985097, 985109, 985121, 985129, 985151, 985177, 985181, 985213, 985219, 985253, 985277, 985279, 985291, 985301, 985307, 985331, 985339, 985351, 985379, 985399, 985403, 985417, 985433, 985447, 985451, 985463, 985471, 985483, 985487, 985493, 985499, 985519, 985529, 985531, 985547, 985571, 985597, 985601, 985613, 985631, 985639, 985657, 985667, 985679, 985703, 985709, 985723, 985729, 985741, 985759, 985781, 985783, 985799, 985807, 985819, 985867, 985871, 985877, 985903, 985921, 985937, 985951, 985969, 985973, 985979, 985981, 985991, 985993, 985997, 986023, 986047, 986053, 986071, 986101, 986113, 986131, 986137, 986143, 986147, 986149, 986177, 986189, 986191, 986197, 986207, 986213, 986239, 986257, 986267, 986281, 986287, 986333, 986339, 986351, 986369, 986411, 986417, 986429, 986437, 986471, 986477, 986497, 986507, 986509, 986519, 986533, 986543, 986563, 986567, 986569, 986581, 986593, 986597, 986599, 986617, 986633, 986641, 986659, 986693, 986707, 986717, 986719, 986729, 986737, 986749, 986759, 986767, 986779, 986801, 986813, 986819, 986837, 986849, 986851, 986857, 986903, 986927, 986929, 986933, 986941, 986959, 986963, 986981, 986983, 986989, 987013, 987023, 987029, 987043, 987053, 987061, 987067, 987079, 987083, 987089, 987097, 987101, 987127, 987143, 987191, 987193, 987199, 987209, 987211, 987227, 987251, 987293, 987299, 987313, 987353, 987361, 987383, 987391, 987433, 987457, 987463, 987473, 987491, 987509, 987523, 987533, 987541, 987559, 987587, 987593, 987599, 987607, 987631, 987659, 987697, 987713, 987739, 987793, 987797, 987803, 987809, 987821, 987851, 987869, 987911, 987913, 987929, 987941, 987971, 987979, 987983, 987991, 987997, 988007, 988021, 988033, 988051, 988061, 988067, 988069, 988093, 988109, 988111, 988129, 988147, 988157, 988199, 988213, 988217, 988219, 988231, 988237, 988243, 988271, 988279, 988297, 988313, 988319, 988321, 988343, 988357, 988367, 988409, 988417, 988439, 988453, 988459, 988483, 988489, 988501, 988511, 988541, 988549, 988571, 988577, 988579, 988583, 988591, 988607, 988643, 988649, 988651, 988661, 988681, 988693, 988711, 988727, 988733, 988759, 988763, 988783, 988789, 988829, 988837, 988849, 988859, 988861, 988877, 988901, 988909, 988937, 988951, 988963, 988979, 989011, 989029, 989059, 989071, 989081, 989099, 989119, 989123, 989171, 989173, 989231, 989239, 989249, 989251, 989279, 989293, 989309, 989321, 989323, 989327, 989341, 989347, 989353, 989377, 989381, 989411, 989419, 989423, 989441, 989467, 989477, 989479, 989507, 989533, 989557, 989561, 989579, 989581, 989623, 989629, 989641, 989647, 989663, 989671, 989687, 989719, 989743, 989749, 989753, 989761, 989777, 989783, 989797, 989803, 989827, 989831, 989837, 989839, 989869, 989873, 989887, 989909, 989917, 989921, 989929, 989939, 989951, 989959, 989971, 989977, 989981, 989999, 990001, 990013, 990023, 990037, 990043, 990053, 990137, 990151, 990163, 990169, 990179, 990181, 990211, 990239, 990259, 990277, 990281, 990287, 990289, 990293, 990307, 990313, 990323, 990329, 990331, 990349, 990359, 990361, 990371, 990377, 990383, 990389, 990397, 990463, 990469, 990487, 990497, 990503, 990511, 990523, 990529, 990547, 990559, 990589, 990593, 990599, 990631, 990637, 990643, 990673, 990707, 990719, 990733, 990761, 990767, 990797, 990799, 990809, 990841, 990851, 990881, 990887, 990889, 990893, 990917, 990923, 990953, 990961, 990967, 990973, 990989, 991009, 991027, 991031, 991037, 991043, 991057, 991063, 991069, 991073, 991079, 991091, 991127, 991129, 991147, 991171, 991181, 991187, 991201, 991217, 991223, 991229, 991261, 991273, 991313, 991327, 991343, 991357, 991381, 991387, 991409, 991427, 991429, 991447, 991453, 991483, 991493, 991499, 991511, 991531, 991541, 991547, 991567, 991579, 991603, 991607, 991619, 991621, 991633, 991643, 991651, 991663, 991693, 991703, 991717, 991723, 991733, 991741, 991751, 991777, 991811, 991817, 991867, 991871, 991873, 991883, 991889, 991901, 991909, 991927, 991931, 991943, 991951, 991957, 991961, 991973, 991979, 991981, 991987, 991999, 992011, 992021, 992023, 992051, 992087, 992111, 992113, 992129, 992141, 992153, 992179, 992183, 992219, 992231, 992249, 992263, 992267, 992269, 992281, 992309, 992317, 992357, 992359, 992363, 992371, 992393, 992417, 992429, 992437, 992441, 992449, 992461, 992513, 992521, 992539, 992549, 992561, 992591, 992603, 992609, 992623, 992633, 992659, 992689, 992701, 992707, 992723, 992737, 992777, 992801, 992809, 992819, 992843, 992857, 992861, 992863, 992867, 992891, 992903, 992917, 992923, 992941, 992947, 992963, 992983, 993001, 993011, 993037, 993049, 993053, 993079, 993103, 993107, 993121, 993137, 993169, 993197, 993199, 993203, 993211, 993217, 993233, 993241, 993247, 993253, 993269, 993283, 993287, 993319, 993323, 993341, 993367, 993397, 993401, 993407, 993431, 993437, 993451, 993467, 993479, 993481, 993493, 993527, 993541, 993557, 993589, 993611, 993617, 993647, 993679, 993683, 993689, 993703, 993763, 993779, 993781, 993793, 993821, 993823, 993827, 993841, 993851, 993869, 993887, 993893, 993907, 993913, 993919, 993943, 993961, 993977, 993983, 993997, 994013, 994027, 994039, 994051, 994067, 994069, 994073, 994087, 994093, 994141, 994163, 994181, 994183, 994193, 994199, 994229, 994237, 994241, 994247, 994249, 994271, 994297, 994303, 994307, 994309, 994319, 994321, 994337, 994339, 994363, 994369, 994391, 994393, 994417, 994447, 994453, 994457, 994471, 994489, 994501, 994549, 994559, 994561, 994571, 994579, 994583, 994603, 994621, 994657, 994663, 994667, 994691, 994699, 994709, 994711, 994717, 994723, 994751, 994769, 994793, 994811, 994813, 994817, 994831, 994837, 994853, 994867, 994871, 994879, 994901, 994907, 994913, 994927, 994933, 994949, 994963, 994991, 994997, 995009, 995023, 995051, 995053, 995081, 995117, 995119, 995147, 995167, 995173, 995219, 995227, 995237, 995243, 995273, 995303, 995327, 995329, 995339, 995341, 995347, 995363, 995369, 995377, 995381, 995387, 995399, 995431, 995443, 995447, 995461, 995471, 995513, 995531, 995539, 995549, 995551, 995567, 995573, 995587, 995591, 995593, 995611, 995623, 995641, 995651, 995663, 995669, 995677, 995699, 995713, 995719, 995737, 995747, 995783, 995791, 995801, 995833, 995881, 995887, 995903, 995909, 995927, 995941, 995957, 995959, 995983, 995987, 995989, 996001, 996011, 996019, 996049, 996067, 996103, 996109, 996119, 996143, 996157, 996161, 996167, 996169, 996173, 996187, 996197, 996209, 996211, 996253, 996257, 996263, 996271, 996293, 996301, 996311, 996323, 996329, 996361, 996367, 996403, 996407, 996409, 996431, 996461, 996487, 996511, 996529, 996539, 996551, 996563, 996571, 996599, 996601, 996617, 996629, 996631, 996637, 996647, 996649, 996689, 996703, 996739, 996763, 996781, 996803, 996811, 996841, 996847, 996857, 996859, 996871, 996881, 996883, 996887, 996899, 996953, 996967, 996973, 996979, 997001, 997013, 997019, 997021, 997037, 997043, 997057, 997069, 997081, 997091, 997097, 997099, 997103, 997109, 997111, 997121, 997123, 997141, 997147, 997151, 997153, 997163, 997201, 997207, 997219, 997247, 997259, 997267, 997273, 997279, 997307, 997309, 997319, 997327, 997333, 997343, 997357, 997369, 997379, 997391, 997427, 997433, 997439, 997453, 997463, 997511, 997541, 997547, 997553, 997573, 997583, 997589, 997597, 997609, 997627, 997637, 997649, 997651, 997663, 997681, 997693, 997699, 997727, 997739, 997741, 997751, 997769, 997783, 997793, 997807, 997811, 997813, 997877, 997879, 997889, 997891, 997897, 997933, 997949, 997961, 997963, 997973, 997991, 998009, 998017, 998027, 998029, 998069, 998071, 998077, 998083, 998111, 998117, 998147, 998161, 998167, 998197, 998201, 998213, 998219, 998237, 998243, 998273, 998281, 998287, 998311, 998329, 998353, 998377, 998381, 998399, 998411, 998419, 998423, 998429, 998443, 998471, 998497, 998513, 998527, 998537, 998539, 998551, 998561, 998617, 998623, 998629, 998633, 998651, 998653, 998681, 998687, 998689, 998717, 998737, 998743, 998749, 998759, 998779, 998813, 998819, 998831, 998839, 998843, 998857, 998861, 998897, 998909, 998917, 998927, 998941, 998947, 998951, 998957, 998969, 998983, 998989, 999007, 999023, 999029, 999043, 999049, 999067, 999083, 999091, 999101, 999133, 999149, 999169, 999181, 999199, 999217, 999221, 999233, 999239, 999269, 999287, 999307, 999329, 999331, 999359, 999371, 999377, 999389, 999431, 999433, 999437, 999451, 999491, 999499, 999521, 999529, 999541, 999553, 999563, 999599, 999611, 999613, 999623, 999631, 999653, 999667, 999671, 999683, 999721, 999727, 999749, 999763, 999769, 999773, 999809, 999853, 999863, 999883, 999907, 999917, 999931, 999953, 999959, 999961, 999979, 999983, 1000003,1000033,1000037,1000039,1000081,1000099,1000117,1000121,1000133, 1000151,1000159,1000171,1000183,1000187,1000193,1000199,1000211,1000213, 1000231,1000249,1000253,1000273,1000289,1000291,1000303,1000313,1000333, 1000357,1000367,1000381,1000393,1000397,1000403,1000409,1000423,1000427, 1000429,1000453,1000457,1000507,1000537,1000541,1000547,1000577,1000579, 1000589,1000609,1000619,1000621,1000639,1000651,1000667,1000669,1000679, 1000691,1000697,1000721,1000723,1000763,1000777,1000793,1000829,1000847, 1000849,1000859,1000861,1000889,1000907,1000919,1000921,1000931,1000969, 1000973,1000981,1000999,1001003,1001017,1001023,1001027,1001041,1001069, 1001081,1001087,1001089,1001093,1001107,1001123,1001153,1001159,1001173, 1001177,1001191,1001197,1001219,1001237,1001267,1001279,1001291,1001303, 1001311,1001321,1001323,1001327,1001347,1001353,1001369,1001381,1001387, 1001389,1001401,1001411,1001431,1001447,1001459,1001467,1001491,1001501, 1001527,1001531,1001549,1001551,1001563,1001569,1001587,1001593,1001621, 1001629,1001639,1001659,1001669,1001683,1001687,1001713,1001723,1001743, 1001783,1001797,1001801,1001807,1001809,1001821,1001831,1001839,1001911, 1001933,1001941,1001947,1001953,1001977,1001981,1001983,1001989,1002017, 1002049,1002061,1002073,1002077,1002083,1002091,1002101,1002109,1002121, 1002143,1002149,1002151,1002173,1002191,1002227,1002241,1002247,1002257, 1002259,1002263,1002289,1002299,1002341,1002343,1002347,1002349,1002359, 1002361,1002377,1002403,1002427,1002433,1002451,1002457,1002467,1002481, 1002487,1002493,1002503,1002511,1002517,1002523,1002527,1002553,1002569, 1002577,1002583,1002619,1002623,1002647,1002653,1002679,1002709,1002713, 1002719,1002721,1002739,1002751,1002767,1002769,1002773,1002787,1002797, 1002809,1002817,1002821,1002851,1002853,1002857,1002863,1002871,1002887, 1002893,1002899,1002913,1002917,1002929,1002931,1002973,1002979,1003001, 1003003,1003019,1003039,1003049,1003087,1003091,1003097,1003103,1003109, 1003111,1003133,1003141,1003193,1003199,1003201,1003241,1003259,1003273, 1003279,1003291,1003307,1003337,1003349,1003351,1003361,1003363,1003367, 1003369,1003381,1003397,1003411,1003417,1003433,1003463,1003469,1003507, 1003517,1003543,1003549,1003589,1003601,1003609,1003619,1003621,1003627, 1003631,1003679,1003693,1003711,1003729,1003733,1003741,1003747,1003753, 1003757,1003763,1003771,1003787,1003817,1003819,1003841,1003879,1003889, 1003897,1003907,1003909,1003913,1003931,1003943,1003957,1003963,1004027, 1004033,1004053,1004057,1004063,1004077,1004089,1004117,1004119,1004137, 1004141,1004161,1004167,1004209,1004221,1004233,1004273,1004279,1004287, 1004293,1004303,1004317,1004323,1004363,1004371,1004401,1004429,1004441, 1004449,1004453,1004461,1004477,1004483,1004501,1004527,1004537,1004551, 1004561,1004567,1004599,1004651,1004657,1004659,1004669,1004671,1004677, 1004687,1004723,1004737,1004743,1004747,1004749,1004761,1004779,1004797, 1004873,1004903,1004911,1004917,1004963,1004977,1004981,1004987,1005007, 1005013,1005019,1005029,1005041,1005049,1005071,1005073,1005079,1005101, 1005107,1005131,1005133,1005143,1005161,1005187,1005203,1005209,1005217, 1005223,1005229,1005239,1005241,1005269,1005287,1005293,1005313,1005317, 1005331,1005349,1005359,1005371,1005373,1005391,1005409,1005413,1005427, 1005437,1005439,1005457,1005467,1005481,1005493,1005503,1005527,1005541, 1005551,1005553,1005581,1005593,1005617,1005619,1005637,1005643,1005647, 1005661,1005677,1005679,1005701,1005709,1005751,1005761,1005821,1005827, 1005833,1005883,1005911,1005913,1005931,1005937,1005959,1005971,1005989, 1006003,1006007,1006021,1006037,1006063,1006087,1006091,1006123,1006133, 1006147,1006151,1006153,1006163,1006169,1006171,1006177,1006189,1006193, 1006217,1006219,1006231,1006237,1006241,1006249,1006253,1006267,1006279, 1006301,1006303,1006307,1006309,1006331,1006333,1006337,1006339,1006351, 1006361,1006367,1006391,1006393,1006433,1006441,1006463,1006469,1006471, 1006493,1006507,1006513,1006531,1006543,1006547,1006559,1006583,1006589, 1006609,1006613,1006633,1006637,1006651,1006711,1006721,1006739,1006751, 1006769,1006781,1006783,1006799,1006847,1006853,1006861,1006877,1006879, 1006883,1006891,1006897,1006933,1006937,1006949,1006969,1006979,1006987, 1006991,1007021,1007023,1007047,1007059,1007081,1007089,1007099,1007117, 1007119,1007129,1007137,1007161,1007173,1007179,1007203,1007231,1007243, 1007249,1007297,1007299,1007309,1007317,1007339,1007353,1007359,1007381, 1007387,1007401,1007417,1007429,1007441,1007459,1007467,1007483,1007497, 1007519,1007527,1007549,1007557,1007597,1007599,1007609,1007647,1007651, 1007681,1007683,1007693,1007701,1007711,1007719,1007723,1007729,1007731, 1007749,1007753,1007759,1007767,1007771,1007789,1007801,1007807,1007813, 1007819,1007827,1007857,1007861,1007873,1007887,1007891,1007921,1007933, 1007939,1007957,1007959,1007971,1007977,1008001,1008013,1008017,1008031, 1008037,1008041,1008043,1008101,1008131,1008157,1008181,1008187,1008193, 1008199,1008209,1008223,1008229,1008233,1008239,1008247,1008257,1008263, 1008317,1008323,1008331,1008347,1008353,1008373,1008379,1008401,1008407, 1008409,1008419,1008421,1008433,1008437,1008451,1008467,1008493,1008499, 1008503,1008517,1008541,1008547,1008563,1008571,1008587,1008589,1008607, 1008611,1008613,1008617,1008659,1008701,1008719,1008743,1008773,1008779, 1008781,1008793,1008809,1008817,1008829,1008851,1008853,1008857,1008859, 1008863,1008871,1008901,1008911,1008913,1008923,1008937,1008947,1008979, 1008983,1008989,1008991,1009007,1009037,1009049,1009061,1009097,1009121, 1009139,1009153,1009157,1009159,1009163,1009189,1009193,1009199,1009201, 1009207,1009237,1009243,1009247,1009259,1009289,1009291,1009301,1009303, 1009319,1009321,1009343,1009357,1009361,1009369,1009373,1009387,1009399, 1009417,1009433,1009439,1009457,1009483,1009487,1009499,1009501,1009507, 1009531,1009537,1009559,1009573,1009601,1009609,1009621,1009627,1009637, 1009643,1009649,1009651,1009669,1009727,1009741,1009747,1009781,1009787, 1009807,1009819,1009837,1009843,1009859,1009873,1009901,1009909,1009927, 1009937,1009951,1009963,1009991,1009993,1009997,1010003,1010033,1010069, 1010081,1010083,1010129,1010131,1010143,1010167,1010179,1010201,1010203, 1010237,1010263,1010291,1010297,1010329,1010353,1010357,1010381,1010407, 1010411,1010419,1010423,1010431,1010461,1010467,1010473,1010491,1010501, 1010509,1010519,1010549,1010567,1010579,1010617,1010623,1010627,1010671, 1010683,1010687,1010717,1010719,1010747,1010749,1010753,1010759,1010767, 1010771,1010783,1010791,1010797,1010809,1010833,1010843,1010861,1010881, 1010897,1010899,1010903,1010917,1010929,1010957,1010981,1010983,1010993, 1011001,1011013,1011029,1011037,1011067,1011071,1011077,1011079,1011091, 1011107,1011137,1011139,1011163,1011167,1011191,1011217,1011221,1011229, 1011233,1011239,1011271,1011277,1011281,1011289,1011331,1011343,1011349, 1011359,1011371,1011377,1011391,1011397,1011407,1011431,1011443,1011509, 1011539,1011553,1011559,1011583,1011587,1011589,1011599,1011601,1011631, 1011641,1011649,1011667,1011671,1011677,1011697,1011719,1011733,1011737, 1011749,1011763,1011779,1011797,1011799,1011817,1011827,1011889,1011893, 1011917,1011937,1011943,1011947,1011961,1011973,1011979,1012007,1012009, 1012031,1012043,1012049,1012079,1012087,1012093,1012097,1012103,1012133, 1012147,1012159,1012171,1012183,1012189,1012201,1012213,1012217,1012229, 1012241,1012259,1012261,1012267,1012279,1012289,1012307,1012321,1012369, 1012373,1012379,1012397,1012399,1012411,1012421,1012423,1012433,1012439, 1012447,1012457,1012463,1012481,1012489,1012507,1012513,1012519,1012523, 1012547,1012549,1012559,1012573,1012591,1012597,1012601,1012619,1012631, 1012633,1012637,1012657,1012663,1012679,1012691,1012699,1012703,1012717, 1012721,1012733,1012751,1012763,1012769,1012771,1012789,1012811,1012829, 1012831,1012861,1012903,1012919,1012931,1012967,1012981,1012993,1012997, 1013003,1013009,1013029,1013041,1013053,1013063,1013143,1013153,1013197, 1013203,1013227,1013237,1013239,1013249,1013263,1013267,1013279,1013291, 1013321,1013329,1013377,1013399,1013401,1013429,1013431,1013471,1013477, 1013501,1013503,1013527,1013531,1013533,1013563,1013569,1013581,1013603, 1013609,1013627,1013629,1013641,1013671,1013681,1013687,1013699,1013711, 1013713,1013717,1013729,1013741,1013767,1013773,1013791,1013813,1013819, 1013827,1013833,1013839,1013843,1013851,1013879,1013891,1013893,1013899, 1013921,1013923,1013933,1013993,1014007,1014029,1014037,1014061,1014089, 1014113,1014121,1014127,1014131,1014137,1014149,1014157,1014161,1014173, 1014193,1014197,1014199,1014229,1014257,1014259,1014263,1014287,1014301, 1014317,1014319,1014331,1014337,1014341,1014359,1014361,1014371,1014389, 1014397,1014451,1014457,1014469,1014487,1014493,1014521,1014539,1014547, 1014557,1014571,1014593,1014617,1014631,1014641,1014649,1014677,1014697, 1014719,1014721,1014731,1014743,1014749,1014763,1014779,1014787,1014817, 1014821,1014833,1014863,1014869,1014877,1014887,1014889,1014907,1014941, 1014953,1014973,1014989,1015009,1015039,1015043,1015051,1015057,1015061, 1015067,1015073,1015081,1015093,1015097,1015123,1015127,1015139,1015159, 1015163,1015171,1015199,1015207,1015277,1015309,1015349,1015361,1015363, 1015367,1015369,1015403,1015409,1015423,1015433,1015451,1015453,1015459, 1015463,1015471,1015481,1015499,1015501,1015507,1015517,1015523,1015541, 1015549,1015559,1015561,1015571,1015601,1015603,1015627,1015661,1015691, 1015697,1015709,1015723,1015727,1015739,1015747,1015753,1015769,1015813, 1015823,1015829,1015843,1015853,1015871,1015877,1015891,1015897,1015907, 1015913,1015919,1015967,1015981,1015991,1016009,1016011,1016023,1016027, 1016033,1016051,1016053,1016069,1016083,1016089,1016111,1016123,1016137, 1016143,1016153,1016159,1016173,1016201,1016203,1016221,1016227,1016231, 1016237,1016263,1016303,1016339,1016341,1016357,1016359,1016371,1016399, 1016401,1016419,1016423,1016441,1016453,1016489,1016497,1016527,1016567, 1016569,1016573,1016581,1016597,1016599,1016611,1016621,1016641,1016663, 1016681,1016689,1016731,1016737,1016749,1016773,1016777,1016783,1016789, 1016839,1016843,1016849,1016879,1016881,1016891,1016909,1016921,1016927, 1016929,1016941,1016947,1016959,1016971,1017007,1017011,1017031,1017041, 1017043,1017061,1017077,1017097,1017119,1017131,1017139,1017157,1017173, 1017179,1017193,1017199,1017209,1017227,1017277,1017293,1017299,1017301, 1017307,1017311,1017319,1017323,1017329,1017347,1017353,1017361,1017371, 1017377,1017383,1017391,1017437,1017439,1017449,1017473,1017479,1017481, 1017539,1017551,1017553,1017559,1017607,1017613,1017617,1017623,1017647, 1017649,1017673,1017683,1017703,1017713,1017719,1017721,1017749,1017781, 1017787,1017799,1017817,1017827,1017847,1017851,1017857,1017859,1017881, 1017889,1017923,1017953,1017959,1017997,1018007,1018019,1018021,1018057, 1018091,1018097,1018109,1018123,1018177,1018201,1018207,1018217,1018223, 1018247,1018253,1018271,1018291,1018301,1018309,1018313,1018337,1018357, 1018411,1018421,1018429,1018439,1018447,1018471,1018477,1018489,1018513, 1018543,1018559,1018583,1018613,1018621,1018643,1018649,1018651,1018669, 1018673,1018679,1018697,1018709,1018711,1018729,1018733,1018763,1018769, 1018777,1018789,1018807,1018811,1018813,1018817,1018859,1018873,1018879, 1018889,1018903,1018907,1018931,1018937,1018949,1018957,1018967,1018981, 1018987,1018993,1018999,1019023,1019033,1019059,1019069,1019071,1019077, 1019093,1019119,1019129,1019173,1019177,1019197,1019209,1019237,1019251, 1019257,1019261,1019267,1019273,1019281,1019297,1019329,1019339,1019351, 1019353,1019357,1019377,1019399,1019411,1019413,1019423,1019443,1019449, 1019453,1019467,1019471,1019479,1019503,1019509,1019531,1019533,1019537, 1019549,1019563,1019617,1019639,1019647,1019657,1019663,1019687,1019693, 1019699,1019701,1019713,1019717,1019723,1019729,1019731,1019741,1019747, 1019771,1019783,1019801,1019819,1019827,1019839,1019849,1019857,1019861, 1019873,1019899,1019903,1019927,1019971,1020001,1020007,1020011,1020013, 1020023,1020037,1020043,1020049,1020059,1020077,1020079,1020101,1020109, 1020113,1020137,1020143,1020157,1020163,1020223,1020233,1020247,1020259, 1020269,1020293,1020301,1020329,1020337,1020353,1020361,1020379,1020389, 1020401,1020407,1020413,1020419,1020431,1020451,1020457,1020491,1020517, 1020529,1020541,1020557,1020583,1020589,1020599,1020619,1020631,1020667, 1020683,1020689,1020707,1020709,1020743,1020751,1020757,1020779,1020797, 1020821,1020823,1020827,1020839,1020841,1020847,1020853,1020881,1020893, 1020907,1020913,1020931,1020959,1020961,1020967,1020973,1020977,1020979, 1020989,1020991,1020997,1021001,1021019,1021043,1021067,1021073,1021081, 1021087,1021091,1021093,1021123,1021127,1021129,1021157,1021159,1021183, 1021199,1021217,1021243,1021253,1021259,1021261,1021271,1021283,1021289, 1021291,1021297,1021301,1021303,1021327,1021331,1021333,1021367,1021369, 1021373,1021381,1021387,1021403,1021417,1021429,1021441,1021457,1021463, 1021483,1021487,1021541,1021561,1021571,1021577,1021621,1021627,1021651, 1021661,1021663,1021673,1021697,1021711,1021747,1021753,1021759,1021777, 1021793,1021799,1021807,1021831,1021837,1021849,1021861,1021879,1021897, 1021907,1021919,1021961,1021963,1021973,1022011,1022017,1022033,1022053, 1022059,1022071,1022083,1022113,1022123,1022129,1022137,1022141,1022167, 1022179,1022183,1022191,1022201,1022209,1022237,1022243,1022249,1022251, 1022291,1022303,1022341,1022377,1022381,1022383,1022387,1022389,1022429, 1022443,1022449,1022467,1022491,1022501,1022503,1022507,1022509,1022513, 1022519,1022531,1022573,1022591,1022611,1022629,1022633,1022639,1022653, 1022677,1022683,1022689,1022701,1022719,1022729,1022761,1022773,1022797, 1022821,1022837,1022843,1022849,1022869,1022881,1022891,1022899,1022911, 1022929,1022933,1022963,1022977,1022981,1023019,1023037,1023041,1023047, 1023067,1023079,1023083,1023101,1023107,1023133,1023163,1023167,1023173, 1023199,1023203,1023221,1023227,1023229,1023257,1023259,1023263,1023277, 1023289,1023299,1023301,1023311,1023313,1023317,1023329,1023353,1023361, 1023367,1023389,1023391,1023409,1023413,1023419,1023461,1023467,1023487, 1023499,1023521,1023541,1023551,1023557,1023571,1023577,1023601,1023643, 1023653,1023697,1023719,1023721,1023731,1023733,1023751,1023769,1023821, 1023833,1023839,1023851,1023857,1023871,1023941,1023943,1023947,1023949, 1023973,1023977,1023991,1024021,1024031,1024061,1024073,1024087,1024091, 1024099,1024103,1024151,1024159,1024171,1024183,1024189,1024207,1024249, 1024277,1024307,1024313,1024319,1024321,1024327,1024337,1024339,1024357, 1024379,1024391,1024399,1024411,1024421,1024427,1024433,1024477,1024481, 1024511,1024523,1024547,1024559,1024577,1024579,1024589,1024591,1024609, 1024633,1024663,1024669,1024693,1024697,1024703,1024711,1024721,1024729, 1024757,1024783,1024799,1024823,1024843,1024853,1024871,1024883,1024901, 1024909,1024921,1024931,1024939,1024943,1024951,1024957,1024963,1024987, 1024997,1025009,1025021,1025029,1025039,1025047,1025081,1025093,1025099, 1025111,1025113,1025119,1025137,1025147,1025149,1025153,1025161,1025197, 1025203,1025209,1025231,1025239,1025257,1025261,1025267,1025273,1025279, 1025281,1025303,1025327,1025333,1025347,1025351,1025383,1025393,1025407, 1025413,1025417,1025419,1025443,1025459,1025477,1025483,1025503,1025509, 1025513,1025537,1025543,1025551,1025561,1025579,1025611,1025621,1025623, 1025641,1025653,1025659,1025669,1025693,1025707,1025741,1025747,1025749, 1025767,1025789,1025803,1025807,1025819,1025839,1025873,1025887,1025891, 1025897,1025909,1025911,1025917,1025929,1025939,1025957,1026029,1026031, 1026037,1026041,1026043,1026061,1026073,1026101,1026119,1026127,1026139, 1026143,1026167,1026197,1026199,1026217,1026227,1026229,1026251,1026253, 1026257,1026293,1026299,1026313,1026331,1026359,1026371,1026383,1026391, 1026401,1026407,1026413,1026427,1026439,1026449,1026457,1026479,1026481, 1026521,1026547,1026563,1026577,1026581,1026583,1026587,1026593,1026661, 1026667,1026673,1026677,1026679,1026709,1026733,1026757,1026761,1026791, 1026799,1026811,1026829,1026833,1026847,1026853,1026859,1026887,1026899, 1026911,1026913,1026917,1026941,1026943,1026947,1026979,1026989,1027001, 1027003,1027027,1027031,1027051,1027067,1027097,1027127,1027129,1027139, 1027153,1027163,1027181,1027189,1027199,1027207,1027211,1027223,1027241, 1027261,1027277,1027289,1027319,1027321,1027331,1027357,1027391,1027409, 1027417,1027421,1027427,1027459,1027471,1027483,1027487,1027489,1027493, 1027519,1027547,1027549,1027567,1027591,1027597,1027613,1027643,1027679, 1027687,1027693,1027703,1027717,1027727,1027739,1027751,1027753,1027757, 1027759,1027777,1027783,1027787,1027799,1027841,1027853,1027883,1027891, 1027931,1027969,1027987,1028003,1028011,1028017,1028023,1028029,1028047, 1028051,1028063,1028081,1028089,1028099,1028101,1028107,1028113,1028117, 1028129,1028141,1028149,1028189,1028191,1028201,1028207,1028213,1028221, 1028231,1028243,1028263,1028273,1028303,1028309,1028317,1028327,1028329, 1028333,1028389,1028393,1028411,1028437,1028471,1028473,1028479,1028509, 1028557,1028561,1028569,1028579,1028581,1028597,1028617,1028647,1028663, 1028669,1028681,1028683,1028737,1028747,1028749,1028761,1028773,1028777, 1028803,1028809,1028837,1028843,1028873,1028893,1028903,1028939,1028941, 1028953,1028957,1028969,1028981,1028999,1029001,1029013,1029023,1029037, 1029103,1029109,1029113,1029139,1029151,1029157,1029167,1029179,1029191, 1029199,1029209,1029247,1029251,1029263,1029277,1029289,1029307,1029323, 1029331,1029337,1029341,1029349,1029359,1029361,1029383,1029403,1029407, 1029409,1029433,1029467,1029473,1029481,1029487,1029499,1029517,1029521, 1029527,1029533,1029547,1029563,1029569,1029577,1029583,1029593,1029601, 1029617,1029643,1029647,1029653,1029689,1029697,1029731,1029751,1029757, 1029767,1029803,1029823,1029827,1029839,1029841,1029859,1029881,1029883, 1029907,1029929,1029937,1029943,1029953,1029967,1029983,1029989,1030019, 1030021,1030027,1030031,1030033,1030039,1030049,1030061,1030067,1030069, 1030091,1030111,1030121,1030153,1030157,1030181,1030201,1030213,1030219, 1030241,1030247,1030291,1030297,1030307,1030349,1030357,1030361,1030369, 1030411,1030417,1030429,1030439,1030441,1030451,1030493,1030511,1030529, 1030537,1030543,1030571,1030583,1030619,1030637,1030639,1030643,1030681, 1030703,1030723,1030739,1030741,1030751,1030759,1030763,1030787,1030793, 1030801,1030811,1030817,1030823,1030831,1030847,1030867,1030873,1030889, 1030919,1030933,1030949,1030951,1030957,1030987,1030993,1031003,1031047, 1031053,1031057,1031081,1031117,1031119,1031137,1031141,1031161,1031189, 1031231,1031267,1031279,1031281,1031291,1031299,1031309,1031323,1031347, 1031357,1031399,1031411,1031413,1031423,1031431,1031447,1031461,1031477, 1031479,1031483,1031489,1031507,1031521,1031531,1031533,1031549,1031561, 1031593,1031609,1031623,1031629,1031633,1031669,1031677,1031707,1031717, 1031729,1031731,1031741,1031753,1031759,1031761,1031809,1031813,1031831, 1031837,1031869,1031911,1031923,1031981,1031999,1032007,1032047,1032049, 1032067,1032071,1032107,1032131,1032151,1032191,1032193,1032211,1032221, 1032233,1032259,1032287,1032299,1032307,1032319,1032329,1032341,1032347, 1032349,1032373,1032377,1032391,1032397,1032407,1032419,1032433,1032457, 1032463,1032467,1032491,1032497,1032509,1032511,1032527,1032541,1032571, 1032583,1032601,1032607,1032613,1032617,1032643,1032649,1032679,1032683, 1032697,1032701,1032709,1032721,1032727,1032739,1032751,1032763,1032793, 1032799,1032803,1032833,1032839,1032841,1032847,1032851,1032853,1032881, 1032887,1032901,1032943,1032949,1032959,1032961,1033001,1033007,1033027, 1033033,1033037,1033057,1033061,1033063,1033069,1033079,1033099,1033127, 1033139,1033171,1033181,1033189,1033223,1033271,1033273,1033289,1033297, 1033303,1033309,1033313,1033337,1033339,1033343,1033349,1033363,1033369, 1033381,1033387,1033393,1033421,1033423,1033427,1033441,1033451,1033457, 1033463,1033469,1033489,1033493,1033499,1033507,1033517,1033537,1033541, 1033559,1033567,1033601,1033603,1033631,1033661,1033663,1033667,1033679, 1033687,1033693,1033741,1033751,1033759,1033777,1033783,1033789,1033793, 1033801,1033807,1033829,1033841,1033843,1033867,1033927,1033951,1033987, 1034003,1034009,1034027,1034029,1034069,1034071,1034101,1034119,1034123, 1034147,1034167,1034171,1034177,1034183,1034197,1034207,1034219,1034221, 1034233,1034237,1034239,1034249,1034251,1034281,1034309,1034317,1034323, 1034339,1034353,1034357,1034359,1034381,1034387,1034419,1034443,1034461, 1034477,1034479,1034489,1034491,1034503,1034513,1034549,1034567,1034581, 1034591,1034597,1034599,1034617,1034639,1034651,1034653,1034659,1034707, 1034729,1034731,1034767,1034771,1034783,1034791,1034809,1034827,1034833, 1034837,1034849,1034857,1034861,1034863,1034867,1034879,1034903,1034941, 1034951,1034953,1034959,1034983,1034989,1034993,1035007,1035019,1035043, 1035061,1035077,1035107,1035131,1035163,1035187,1035191,1035197,1035211, 1035241,1035247,1035257,1035263,1035277,1035301,1035313,1035323,1035341, 1035343,1035361,1035379,1035383,1035403,1035409,1035413,1035427,1035449, 1035451,1035467,1035469,1035473,1035479,1035499,1035527,1035533,1035547, 1035563,1035571,1035581,1035599,1035607,1035613,1035631,1035637,1035641, 1035649,1035659,1035707,1035733,1035743,1035761,1035763,1035781,1035791, 1035829,1035869,1035893,1035917,1035949,1035953,1035959,1035973,1035977, 1036001,1036003,1036027,1036039,1036067,1036069,1036073,1036093,1036109, 1036117,1036121,1036129,1036153,1036163,1036183,1036213,1036223,1036229, 1036247,1036249,1036253,1036261,1036267,1036271,1036291,1036297,1036307, 1036319,1036327,1036331,1036339,1036349,1036351,1036363,1036367,1036369, 1036391,1036411,1036459,1036471,1036493,1036499,1036513,1036531,1036537, 1036561,1036579,1036613,1036619,1036631,1036649,1036661,1036667,1036669, 1036681,1036729,1036747,1036751,1036757,1036759,1036769,1036787,1036793, 1036799,1036829,1036831,1036853,1036873,1036877,1036883,1036913,1036921, 1036943,1036951,1036957,1036979,1036991,1036993,1037041,1037053,1037059, 1037081,1037087,1037089,1037123,1037129,1037137,1037143,1037213,1037233, 1037249,1037261,1037273,1037293,1037297,1037303,1037317,1037327,1037329, 1037339,1037347,1037401,1037411,1037437,1037441,1037447,1037471,1037479, 1037489,1037497,1037503,1037537,1037557,1037563,1037567,1037593,1037611, 1037627,1037653,1037657,1037677,1037681,1037683,1037741,1037747,1037753, 1037759,1037767,1037791,1037801,1037819,1037831,1037857,1037873,1037879, 1037893,1037903,1037917,1037929,1037941,1037957,1037963,1037983,1038001, 1038017,1038019,1038029,1038041,1038043,1038047,1038073,1038077,1038119, 1038127,1038143,1038157,1038187,1038199,1038203,1038209,1038211,1038227, 1038251,1038253,1038259,1038263,1038269,1038307,1038311,1038319,1038329, 1038337,1038383,1038391,1038409,1038421,1038449,1038463,1038487,1038497, 1038503,1038523,1038529,1038539,1038563,1038589,1038599,1038601,1038617, 1038619,1038623,1038629,1038637,1038643,1038671,1038689,1038691,1038707, 1038721,1038727,1038731,1038757,1038797,1038803,1038811,1038823,1038827, 1038833,1038881,1038913,1038937,1038941,1038953,1039001,1039007,1039021, 1039033,1039037,1039039,1039043,1039067,1039069,1039081,1039109,1039111, 1039127,1039139,1039153,1039169,1039187,1039229,1039249,1039279,1039289, 1039307,1039321,1039327,1039343,1039349,1039351,1039387,1039421,1039427, 1039429,1039463,1039469,1039477,1039481,1039513,1039517,1039537,1039543, 1039553,1039603,1039607,1039631,1039651,1039657,1039667,1039681,1039733, 1039763,1039769,1039789,1039799,1039817,1039823,1039837,1039891,1039897, 1039901,1039921,1039931,1039943,1039949,1039979,1039999,1040021,1040029, 1040051,1040057,1040059,1040069,1040071,1040089,1040093,1040101,1040113, 1040119,1040141,1040153,1040159,1040161,1040167,1040183,1040189,1040191, 1040203,1040219,1040227,1040311,1040327,1040339,1040353,1040371,1040381, 1040387,1040407,1040411,1040419,1040447,1040449,1040483,1040489,1040503, 1040521,1040531,1040563,1040579,1040581,1040597,1040629,1040651,1040657, 1040659,1040671,1040717,1040731,1040747,1040749,1040771,1040777,1040779, 1040783,1040797,1040803,1040807,1040813,1040821,1040827,1040833,1040857, 1040861,1040873,1040881,1040891,1040899,1040929,1040939,1040947,1040951, 1040959,1040981,1040989,1041041,1041077,1041083,1041091,1041109,1041119, 1041121,1041127,1041137,1041149,1041151,1041163,1041167,1041169,1041203, 1041221,1041223,1041239,1041241,1041253,1041269,1041281,1041283,1041289, 1041307,1041311,1041317,1041329,1041343,1041349,1041373,1041421,1041427, 1041449,1041451,1041461,1041497,1041511,1041517,1041529,1041553,1041559, 1041563,1041571,1041577,1041583,1041617,1041619,1041643,1041653,1041671, 1041673,1041701,1041731,1041737,1041757,1041779,1041787,1041793,1041823, 1041829,1041841,1041853,1041857,1041863,1041869,1041889,1041893,1041907, 1041919,1041949,1041961,1041983,1041991,1042001,1042021,1042039,1042043, 1042081,1042087,1042091,1042099,1042103,1042109,1042121,1042123,1042133, 1042141,1042183,1042187,1042193,1042211,1042241,1042243,1042259,1042267, 1042271,1042273,1042309,1042331,1042333,1042357,1042369,1042373,1042381, 1042399,1042427,1042439,1042451,1042469,1042487,1042519,1042523,1042529, 1042571,1042577,1042583,1042597,1042607,1042609,1042619,1042631,1042633, 1042681,1042687,1042693,1042703,1042709,1042733,1042759,1042781,1042799, 1042819,1042829,1042837,1042849,1042861,1042897,1042901,1042903,1042931, 1042949,1042961,1042997,1043011,1043023,1043047,1043083,1043089,1043111, 1043113,1043117,1043131,1043167,1043173,1043177,1043183,1043191,1043201, 1043209,1043213,1043221,1043279,1043291,1043293,1043299,1043311,1043323, 1043351,1043369,1043377,1043401,1043453,1043467,1043479,1043489,1043501, 1043513,1043521,1043531,1043543,1043557,1043587,1043591,1043593,1043597, 1043599,1043617,1043639,1043657,1043663,1043683,1043701,1043723,1043743, 1043747,1043753,1043759,1043761,1043767,1043773,1043831,1043837,1043839, 1043843,1043849,1043857,1043869,1043873,1043897,1043899,1043921,1043923, 1043929,1043951,1043969,1043981,1044019,1044023,1044041,1044053,1044079, 1044091,1044097,1044133,1044139,1044149,1044161,1044167,1044179,1044181, 1044187,1044193,1044209,1044217,1044227,1044247,1044257,1044271,1044283, 1044287,1044289,1044299,1044343,1044347,1044353,1044367,1044371,1044383, 1044391,1044397,1044409,1044437,1044443,1044451,1044457,1044479,1044509, 1044517,1044529,1044559,1044569,1044583,1044587,1044613,1044619,1044629, 1044653,1044689,1044697,1044727,1044733,1044737,1044739,1044749,1044751, 1044761,1044767,1044779,1044781,1044809,1044811,1044833,1044839,1044847, 1044851,1044859,1044877,1044889,1044893,1044931,1044941,1044971,1044997, 1045003,1045013,1045021,1045027,1045043,1045061,1045063,1045081,1045111, 1045117,1045123,1045129,1045151,1045153,1045157,1045183,1045193,1045199, 1045223,1045229,1045237,1045241,1045273,1045277,1045307,1045309,1045321, 1045349,1045367,1045391,1045393,1045397,1045409,1045411,1045423,1045427, 1045469,1045487,1045493,1045507,1045523,1045529,1045543,1045547,1045549, 1045559,1045571,1045573,1045607,1045621,1045633,1045643,1045651,1045663, 1045679,1045691,1045727,1045729,1045739,1045763,1045799,1045801,1045819, 1045829,1045841,1045859,1045903,1045907,1045963,1045981,1045987,1045997, 1046029,1046047,1046051,1046053,1046069,1046077,1046081,1046113,1046119, 1046179,1046183,1046189,1046191,1046203,1046207,1046237,1046239,1046257, 1046263,1046329,1046347,1046351,1046369,1046371,1046389,1046393,1046399, 1046413,1046447,1046449,1046459,1046497,1046519,1046527,1046557,1046579, 1046587,1046597,1046599,1046627,1046641,1046657,1046659,1046677,1046681, 1046687,1046701,1046711,1046779,1046791,1046797,1046807,1046827,1046833, 1046849,1046863,1046867,1046897,1046917,1046933,1046951,1046959,1046977, 1046993,1046999,1047031,1047041,1047043,1047061,1047077,1047089,1047097, 1047107,1047119,1047127,1047131,1047133,1047139,1047157,1047173,1047197, 1047199,1047229,1047239,1047247,1047271,1047281,1047283,1047289,1047307, 1047311,1047313,1047317,1047323,1047341,1047367,1047373,1047379,1047391, 1047419,1047467,1047469,1047479,1047491,1047499,1047511,1047533,1047539, 1047551,1047559,1047587,1047589,1047647,1047649,1047653,1047667,1047671, 1047689,1047691,1047701,1047703,1047713,1047721,1047737,1047751,1047763, 1047773,1047779,1047821,1047833,1047841,1047859,1047881,1047883,1047887, 1047923,1047929,1047941,1047961,1047971,1047979,1047989,1047997,1048007, 1048009,1048013,1048027,1048043,1048049,1048051,1048063,1048123,1048127, 1048129,1048139,1048189,1048193,1048213,1048217,1048219,1048261,1048273, 1048291,1048309,1048343,1048357,1048361,1048367,1048387,1048391,1048423, 1048433,1048447,1048507,1048517,1048549,1048559,1048571,1048573,1048583, 1048589,1048601,1048609,1048613,1048627,1048633,1048661,1048681,1048703, 1048709,1048717,1048721,1048759,1048783,1048793,1048799,1048807,1048829, 1048837,1048847,1048867,1048877,1048889,1048891,1048897,1048909,1048919, 1048963,1048991,1049011,1049023,1049039,1049051,1049057,1049063,1049077, 1049089,1049093,1049101,1049117,1049129,1049131,1049137,1049141,1049143, 1049171,1049173,1049177,1049183,1049201,1049219,1049227,1049239,1049263, 1049281,1049297,1049333,1049339,1049387,1049413,1049429,1049437,1049459, 1049471,1049473,1049479,1049483,1049497,1049509,1049519,1049527,1049533, 1049537,1049549,1049569,1049599,1049603,1049611,1049623,1049639,1049663, 1049677,1049681,1049683,1049687,1049707,1049717,1049747,1049773,1049791, 1049809,1049821,1049827,1049833,1049837,1049843,1049849,1049857,1049861, 1049863,1049891,1049897,1049899,1049941,1049953,1049963,1049977,1049999, 1050011,1050013,1050031,1050041,1050053,1050079,1050083,1050139,1050151, 1050167,1050169,1050191,1050197,1050229,1050233,1050239,1050241,1050253, 1050281,1050307,1050317,1050323,1050331,1050337,1050349,1050367,1050391, 1050421,1050431,1050437,1050449,1050451,1050457,1050473,1050503,1050509, 1050523,1050563,1050593,1050611,1050631,1050713,1050727,1050733,1050737, 1050739,1050743,1050769,1050773,1050781,1050811,1050817,1050851,1050853, 1050887,1050899,1050901,1050913,1050949,1050961,1050977,1050997,1051003, 1051007,1051009,1051019,1051027,1051051,1051069,1051079,1051081,1051139, 1051147,1051151,1051153,1051157,1051177,1051181,1051247,1051277,1051283, 1051291,1051301,1051313,1051319,1051333,1051373,1051397,1051409,1051417, 1051423,1051459,1051469,1051471,1051481,1051499,1051507,1051543,1051549, 1051553,1051559,1051571,1051591,1051601,1051607,1051619,1051621,1051639, 1051643,1051649,1051663,1051697,1051709,1051717,1051747,1051759,1051763, 1051781,1051789,1051811,1051819,1051829,1051847,1051849,1051879,1051889, 1051903,1051913,1051927,1051949,1051957,1051961,1051979,1051987,1051991, 1052027,1052039,1052041,1052063,1052083,1052099,1052111,1052119,1052137, 1052141,1052179,1052197,1052203,1052221,1052231,1052237,1052269,1052279, 1052281,1052287,1052299,1052309,1052321,1052327,1052329,1052333,1052413, 1052417,1052431,1052437,1052459,1052473,1052479,1052489,1052531,1052533, 1052537,1052551,1052561,1052563,1052567,1052573,1052609,1052629,1052663, 1052693,1052707,1052719,1052731,1052743,1052747,1052767,1052797,1052801, 1052803,1052813,1052819,1052851,1052873,1052881,1052893,1052897,1052899, 1052939,1052971,1052981,1052993,1053007,1053029,1053061,1053067,1053071, 1053079,1053083,1053089,1053097,1053103,1053179,1053181,1053191,1053197, 1053233,1053257,1053259,1053263,1053271,1053293,1053301,1053319,1053347, 1053361,1053383,1053401,1053407,1053421,1053449,1053461,1053467,1053487, 1053491,1053497,1053509,1053511,1053529,1053539,1053551,1053557,1053571, 1053581,1053583,1053589,1053593,1053617,1053691,1053697,1053707,1053713, 1053727,1053737,1053739,1053749,1053757,1053769,1053809,1053817,1053821, 1053827,1053863,1053953,1053959,1053967,1053971,1053989,1053991,1054003, 1054007,1054013,1054033,1054043,1054049,1054061,1054073,1054091,1054133, 1054169,1054171,1054181,1054189,1054199,1054201,1054213,1054219,1054243, 1054247,1054259,1054267,1054301,1054303,1054309,1054321,1054327,1054331, 1054337,1054363,1054369,1054373,1054381,1054393,1054423,1054429,1054439, 1054441,1054457,1054477,1054483,1054517,1054523,1054531,1054549,1054577, 1054583,1054597,1054607,1054609,1054621,1054639,1054649,1054667,1054673, 1054679,1054717,1054721,1054723,1054733,1054769,1054813,1054819,1054831, 1054843,1054853,1054903,1054909,1054927,1054931,1054951,1054957,1054993, 1055017,1055039,1055057,1055063,1055077,1055083,1055113,1055137,1055141, 1055143,1055167,1055189,1055191,1055231,1055233,1055251,1055261,1055267, 1055269,1055303,1055321,1055347,1055359,1055363,1055371,1055387,1055399, 1055407,1055413,1055423,1055429,1055437,1055471,1055489,1055501,1055503, 1055531,1055543,1055567,1055591,1055597,1055603,1055609,1055611,1055671, 1055689,1055713,1055731,1055737,1055741,1055771,1055783,1055801,1055809, 1055827,1055839,1055851,1055863,1055867,1055881,1055893,1055897,1055911, 1055917,1055933,1055939,1055947,1055959,1055969,1055981,1056007,1056019, 1056047,1056049,1056053,1056061,1056071,1056073,1056089,1056109,1056113, 1056149,1056161,1056169,1056173,1056179,1056203,1056217,1056241,1056247, 1056269,1056271,1056281,1056287,1056311,1056317,1056323,1056347,1056353, 1056361,1056371,1056373,1056379,1056401,1056443,1056463,1056469,1056479, 1056481,1056493,1056509,1056521,1056541,1056563,1056569,1056577,1056589, 1056599,1056613,1056617,1056623,1056641,1056659,1056667,1056707,1056719, 1056721,1056739,1056773,1056779,1056793,1056823,1056829,1056833,1056863, 1056871,1056893,1056911,1056917,1056929,1056949,1056959,1056971,1057003, 1057013,1057019,1057033,1057037,1057051,1057087,1057093,1057117,1057129, 1057157,1057163,1057181,1057183,1057219,1057223,1057237,1057249,1057271, 1057279,1057291,1057307,1057361,1057367,1057387,1057391,1057393,1057411, 1057421,1057477,1057487,1057489,1057493,1057531,1057541,1057561,1057577, 1057579,1057603,1057607,1057613,1057631,1057633,1057643,1057657,1057663, 1057681,1057699,1057703,1057739,1057741,1057753,1057781,1057807,1057831, 1057853,1057879,1057883,1057897,1057907,1057919,1057951,1057957,1057963, 1057981,1057993,1058009,1058011,1058021,1058027,1058041,1058059,1058077, 1058093,1058107,1058117,1058143,1058147,1058149,1058153,1058171,1058179, 1058203,1058221,1058227,1058249,1058257,1058263,1058287,1058303,1058329, 1058339,1058341,1058353,1058377,1058381,1058383,1058389,1058419,1058423, 1058443,1058461,1058479,1058489,1058503,1058507,1058543,1058549,1058567, 1058591,1058593,1058597,1058627,1058639,1058653,1058657,1058663,1058671, 1058677,1058683,1058693,1058711,1058723,1058731,1058747,1058749,1058753, 1058767,1058773,1058779,1058791,1058803,1058807,1058809,1058821,1058839, 1058861,1058891,1058921,1058951,1058983,1058999,1059001,1059007,1059017, 1059029,1059059,1059061,1059067,1059073,1059077,1059103,1059119,1059131, 1059137,1059161,1059169,1059181,1059197,1059209,1059217,1059221,1059251, 1059257,1059259,1059263,1059271,1059293,1059299,1059313,1059323,1059343, 1059349,1059413,1059419,1059433,1059437,1059439,1059467,1059479,1059503, 1059511,1059517,1059547,1059557,1059571,1059599,1059613,1059637,1059647, 1059671,1059683,1059697,1059701,1059703,1059713,1059733,1059743,1059749, 1059757,1059769,1059787,1059823,1059833,1059847,1059857,1059871,1059889, 1059893,1059923,1059931,1059937,1059941,1060009,1060019,1060021,1060039, 1060043,1060051,1060061,1060091,1060097,1060123,1060133,1060151,1060177, 1060187,1060201,1060207,1060223,1060229,1060237,1060249,1060253,1060271, 1060303,1060313,1060321,1060343,1060349,1060351,1060357,1060361,1060373, 1060379,1060391,1060393,1060403,1060421,1060427,1060441,1060453,1060463, 1060469,1060481,1060487,1060513,1060519,1060529,1060567,1060571,1060573, 1060589,1060597,1060621,1060673,1060687,1060721,1060723,1060739,1060747, 1060769,1060777,1060781,1060861,1060867,1060883,1060937,1060949,1060963, 1060981,1060991,1060993,1061033,1061057,1061069,1061087,1061101,1061107, 1061117,1061129,1061141,1061143,1061149,1061171,1061189,1061227,1061251, 1061261,1061273,1061279,1061287,1061297,1061311,1061317,1061323,1061353, 1061363,1061377,1061393,1061407,1061413,1061441,1061453,1061483,1061509, 1061513,1061527,1061561,1061569,1061573,1061591,1061597,1061609,1061617, 1061623,1061629,1061647,1061651,1061677,1061689,1061699,1061707,1061717, 1061729,1061737,1061759,1061771,1061773,1061779,1061783,1061807,1061831, 1061849,1061867,1061869,1061881,1061897,1061903,1061909,1061911,1061917, 1061959,1061969,1061993,1062001,1062013,1062031,1062073,1062107,1062121, 1062169,1062197,1062203,1062251,1062253,1062263,1062293,1062311,1062343, 1062349,1062361,1062367,1062379,1062407,1062409,1062427,1062443,1062469, 1062497,1062511,1062521,1062547,1062557,1062563,1062599,1062601,1062643, 1062671,1062673,1062683,1062697,1062701,1062707,1062731,1062779,1062781, 1062793,1062797,1062827,1062847,1062869,1062871,1062877,1062881,1062907, 1062911,1062913,1062931,1062947,1062949,1062977,1062979,1062989,1063001, 1063009,1063019,1063033,1063039,1063043,1063067,1063079,1063087,1063109, 1063123,1063151,1063157,1063159,1063177,1063189,1063193,1063201,1063213, 1063219,1063241,1063243,1063273,1063303,1063319,1063351,1063379,1063397, 1063399,1063409,1063427,1063441,1063453,1063457,1063463,1063471,1063477, 1063483,1063501,1063523,1063529,1063541,1063547,1063553,1063561,1063597, 1063609,1063613,1063619,1063627,1063637,1063649,1063661,1063693,1063709, 1063721,1063729,1063739,1063747,1063757,1063771,1063781,1063813,1063823, 1063831,1063837,1063847,1063849,1063871,1063873,1063891,1063897,1063903, 1063913,1063919,1063921,1063927,1063961,1063963,1063967,1063969,1063973, 1063987,1063999,1064017,1064029,1064059,1064069,1064087,1064117,1064131, 1064153,1064159,1064177,1064179,1064191,1064197,1064201,1064243,1064257, 1064263,1064269,1064281,1064311,1064317,1064321,1064333,1064339,1064341, 1064359,1064377,1064383,1064407,1064411,1064431,1064467,1064471,1064473, 1064477,1064507,1064519,1064521,1064533,1064549,1064587,1064593,1064629, 1064653,1064669,1064671,1064681,1064689,1064699,1064731,1064737,1064743, 1064753,1064771,1064783,1064801,1064813,1064867,1064873,1064911,1064927, 1064933,1064939,1064941,1064951,1064953,1064957,1064977,1064989,1065011, 1065013,1065017,1065019,1065037,1065041,1065047,1065059,1065073,1065089, 1065091,1065109,1065131,1065133,1065137,1065173,1065209,1065217,1065263, 1065269,1065277,1065283,1065307,1065313,1065319,1065331,1065343,1065347, 1065391,1065409,1065433,1065469,1065479,1065503,1065511,1065523,1065527, 1065529,1065557,1065569,1065593,1065601,1065629,1065643,1065667,1065677, 1065683,1065689,1065697,1065709,1065733,1065763,1065773,1065787,1065791, 1065809,1065817,1065821,1065829,1065839,1065847,1065851,1065887,1065893, 1065899,1065901,1065937,1065941,1065949,1065973,1065979,1066001,1066031, 1066049,1066063,1066067,1066111,1066133,1066139,1066141,1066157,1066159, 1066217,1066231,1066237,1066253,1066267,1066279,1066283,1066297,1066313, 1066319,1066327,1066333,1066339,1066343,1066367,1066379,1066399,1066409, 1066411,1066423,1066433,1066447,1066511,1066517,1066523,1066531,1066553, 1066561,1066567,1066577,1066619,1066621,1066643,1066651,1066669,1066687, 1066693,1066721,1066729,1066753,1066757,1066777,1066789,1066811,1066817, 1066847,1066859,1066867,1066883,1066889,1066909,1066913,1066931,1066973, 1066979,1066981,1066987,1066999,1067009,1067023,1067029,1067047,1067057, 1067063,1067069,1067083,1067137,1067147,1067159,1067167,1067179,1067203, 1067207,1067221,1067239,1067263,1067293,1067327,1067329,1067347,1067351, 1067359,1067371,1067383,1067387,1067411,1067441,1067459,1067467,1067471, 1067489,1067491,1067497,1067509,1067537,1067551,1067557,1067567,1067569, 1067593,1067597,1067611,1067621,1067639,1067653,1067669,1067687,1067701, 1067707,1067711,1067741,1067747,1067749,1067761,1067767,1067777,1067789, 1067797,1067831,1067837,1067849,1067851,1067879,1067893,1067903,1067909, 1067921,1067939,1067951,1067987,1067999,1068019,1068037,1068061,1068083, 1068101,1068103,1068107,1068113,1068131,1068149,1068191,1068203,1068217, 1068233,1068241,1068247,1068251,1068253,1068257,1068259,1068271,1068307, 1068311,1068323,1068329,1068343,1068367,1068371,1068377,1068383,1068407, 1068409,1068437,1068439,1068461,1068469,1068481,1068491,1068497,1068499, 1068517,1068559,1068577,1068589,1068611,1068619,1068629,1068631,1068677, 1068701,1068703,1068707,1068709,1068713,1068719,1068721,1068751,1068757, 1068761,1068779,1068803,1068811,1068817,1068857,1068871,1068877,1068887, 1068889,1068901,1068913,1068917,1068941,1068989,1069001,1069007,1069031, 1069039,1069043,1069051,1069087,1069099,1069127,1069129,1069141,1069171, 1069183,1069193,1069199,1069207,1069217,1069219,1069223,1069267,1069273, 1069291,1069303,1069307,1069349,1069363,1069379,1069421,1069427,1069429, 1069441,1069451,1069459,1069463,1069499,1069501,1069507,1069517,1069543, 1069547,1069553,1069561,1069571,1069573,1069577,1069583,1069591,1069597, 1069603,1069609,1069631,1069639,1069667,1069687,1069693,1069697,1069727, 1069741,1069751,1069777,1069807,1069811,1069819,1069823,1069853,1069867, 1069919,1069921,1069927,1069931,1069933,1069949,1069951,1069973,1069979, 1069987,1070009,1070011,1070021,1070033,1070039,1070063,1070081,1070087, 1070093,1070131,1070149,1070171,1070189,1070197,1070203,1070207,1070221, 1070231,1070233,1070243,1070249,1070257,1070287,1070291,1070309,1070317, 1070323,1070339,1070341,1070347,1070357,1070369,1070389,1070411,1070417, 1070423,1070429,1070431,1070453,1070471,1070491,1070497,1070501,1070513, 1070527,1070533,1070543,1070557,1070561,1070567,1070569,1070579,1070621, 1070659,1070681,1070683,1070689,1070753,1070761,1070777,1070789,1070803, 1070827,1070843,1070851,1070869,1070873,1070899,1070921,1070933,1070939, 1070947,1070981,1070987,1071023,1071047,1071053,1071061,1071067,1071121, 1071131,1071139,1071149,1071151,1071157,1071181,1071193,1071197,1071223, 1071227,1071229,1071233,1071241,1071253,1071269,1071283,1071311,1071313, 1071337,1071341,1071349,1071359,1071373,1071377,1071379,1071401,1071407, 1071419,1071439,1071443,1071451,1071457,1071479,1071487,1071529,1071533, 1071541,1071563,1071569,1071571,1071589,1071601,1071641,1071643,1071659, 1071661,1071671,1071683,1071703,1071739,1071743,1071761,1071773,1071787, 1071803,1071817,1071821,1071841,1071857,1071871,1071899,1071907,1071911, 1071919,1071937,1071943,1071977,1071979,1071991,1072009,1072039,1072103, 1072129,1072133,1072147,1072157,1072163,1072187,1072199,1072213,1072219, 1072229,1072231,1072301,1072327,1072339,1072363,1072367,1072373,1072381, 1072387,1072397,1072429,1072433,1072439,1072447,1072457,1072459,1072471, 1072517,1072537,1072543,1072613,1072627,1072633,1072637,1072657,1072711, 1072733,1072763,1072793,1072801,1072811,1072823,1072829,1072831,1072837, 1072843,1072849,1072859,1072867,1072901,1072919,1072931,1072933,1072937, 1072943,1072957,1072961,1072969,1072991,1072997,1072999,1073053,1073069, 1073077,1073089,1073099,1073113,1073117,1073131,1073141,1073143,1073147, 1073153,1073183,1073201,1073209,1073213,1073221,1073239,1073243,1073263, 1073279,1073297,1073311,1073321,1073351,1073353,1073381,1073383,1073393, 1073399,1073411,1073441,1073447,1073461,1073491,1073507,1073509,1073521, 1073537,1073563,1073573,1073587,1073593,1073599,1073603,1073627,1073647, 1073651,1073687,1073711,1073713,1073717,1073729,1073773,1073789,1073791, 1073803,1073819,1073837,1073857,1073869,1073879,1073881,1073909,1073911, 1073921,1073951,1073953,1073983,1074001,1074023,1074041,1074061,1074067, 1074071,1074079,1074083,1074107,1074109,1074113,1074121,1074133,1074167, 1074223,1074251,1074253,1074259,1074277,1074287,1074289,1074299,1074329, 1074343,1074361,1074371,1074377,1074379,1074389,1074427,1074433,1074461, 1074473,1074481,1074509,1074511,1074523,1074533,1074559,1074581,1074607, 1074617,1074641,1074643,1074649,1074673,1074683,1074691,1074701,1074707, 1074709,1074713,1074719,1074751,1074761,1074763,1074833,1074839,1074847, 1074851,1074877,1074883,1074889,1074901,1074907,1074917,1074919,1074923, 1074929,1074949,1074971,1074973,1074977,1074989,1074991,1075007,1075013, 1075021,1075027,1075069,1075073,1075079,1075091,1075093,1075103,1075133, 1075141,1075147,1075159,1075163,1075169,1075171,1075177,1075187,1075201, 1075231,1075237,1075241,1075259,1075279,1075289,1075303,1075337,1075339, 1075351,1075357,1075391,1075397,1075409,1075429,1075433,1075441,1075453, 1075463,1075469,1075489,1075493,1075499,1075507,1075519,1075531,1075537, 1075561,1075577,1075601,1075619,1075621,1075643,1075649,1075651,1075663, 1075667,1075673,1075681,1075691,1075693,1075699,1075703,1075727,1075729, 1075757,1075759,1075769,1075771,1075787,1075807,1075843,1075853,1075859, 1075897,1075909,1075957,1075973,1076003,1076011,1076017,1076029,1076039, 1076051,1076057,1076063,1076069,1076077,1076107,1076111,1076113,1076123, 1076129,1076137,1076143,1076167,1076171,1076191,1076203,1076213,1076237, 1076263,1076279,1076281,1076303,1076323,1076329,1076353,1076359,1076381, 1076399,1076401,1076417,1076429,1076443,1076447,1076461,1076473,1076477, 1076501,1076503,1076507,1076513,1076519,1076557,1076563,1076587,1076611, 1076617,1076639,1076651,1076657,1076671,1076707,1076717,1076731,1076753, 1076767,1076771,1076773,1076813,1076821,1076827,1076843,1076861,1076869, 1076879,1076893,1076903,1076917,1076921,1076953,1076981,1077017,1077023, 1077047,1077059,1077079,1077101,1077127,1077143,1077161,1077179,1077191, 1077203,1077221,1077227,1077233,1077289,1077299,1077301,1077311,1077337, 1077347,1077353,1077371,1077397,1077413,1077421,1077449,1077457,1077469, 1077499,1077533,1077539,1077541,1077563,1077599,1077607,1077641,1077673, 1077677,1077691,1077697,1077707,1077719,1077721,1077733,1077743,1077751, 1077761,1077763,1077793,1077799,1077821,1077823,1077827,1077841,1077859, 1077863,1077893,1077911,1077913,1077917,1077943,1077971,1077977,1077997, 1078001,1078009,1078019,1078027,1078031,1078043,1078081,1078109,1078111, 1078127,1078151,1078153,1078159,1078163,1078169,1078183,1078199,1078219, 1078241,1078247,1078331,1078333,1078367,1078369,1078373,1078387,1078393, 1078403,1078409,1078411,1078417,1078471,1078489,1078507,1078537,1078559, 1078589,1078643,1078657,1078673,1078681,1078691,1078699,1078711,1078717, 1078733,1078739,1078757,1078787,1078789,1078807,1078813,1078817,1078841, 1078849,1078853,1078873,1078879,1078919,1078927,1078937,1078943,1078951, 1078967,1078981,1078993,1079009,1079011,1079021,1079033,1079053,1079059, 1079069,1079077,1079081,1079087,1079093,1079101,1079107,1079123,1079147, 1079153,1079173,1079189,1079213,1079227,1079233,1079251,1079269,1079291, 1079297,1079311,1079317,1079329,1079339,1079357,1079359,1079369,1079383, 1079399,1079417,1079431,1079453,1079461,1079471,1079473,1079503,1079509, 1079527,1079531,1079539,1079569,1079593,1079609,1079621,1079629,1079633, 1079647,1079651,1079669,1079671,1079681,1079711,1079717,1079753,1079777, 1079779,1079783,1079797,1079809,1079821,1079831,1079849,1079861,1079867, 1079879,1079887,1079917,1079927,1079929,1079933,1079957,1079963,1079977, 1079983,1079987,1079999,1080007,1080029,1080043,1080049,1080059,1080073, 1080077,1080083,1080089,1080091,1080097,1080119,1080137,1080143,1080173, 1080199,1080217,1080223,1080229,1080251,1080259,1080263,1080269,1080271, 1080281,1080301,1080307,1080311,1080329,1080341,1080347,1080353,1080383, 1080413,1080419,1080433,1080439,1080449,1080451,1080463,1080479,1080481, 1080491,1080523,1080539,1080553,1080557,1080559,1080589,1080613,1080647, 1080649,1080661,1080679,1080683,1080713,1080749,1080757,1080763,1080767, 1080773,1080787,1080791,1080797,1080803,1080811,1080817,1080823,1080841, 1080847,1080851,1080857,1080899,1080901,1080907,1080913,1080923,1080941, 1080943,1080971,1080973,1080983,1081027,1081037,1081051,1081061,1081079, 1081097,1081099,1081121,1081123,1081127,1081133,1081139,1081153,1081163, 1081219,1081229,1081231,1081237,1081243,1081247,1081277,1081279,1081291, 1081303,1081307,1081331,1081337,1081351,1081361,1081369,1081403,1081417, 1081429,1081441,1081477,1081501,1081513,1081541,1081583,1081631,1081637, 1081657,1081679,1081681,1081687,1081699,1081709,1081711,1081721,1081723, 1081733,1081741,1081757,1081763,1081771,1081777,1081781,1081789,1081793, 1081813,1081823,1081853,1081859,1081891,1081901,1081907,1081919,1081937, 1081939,1081979,1081981,1082017,1082023,1082027,1082047,1082083,1082089, 1082093,1082099,1082129,1082141,1082143,1082149,1082153,1082161,1082171, 1082177,1082189,1082197,1082209,1082231,1082233,1082243,1082273,1082317, 1082321,1082351,1082369,1082377,1082381,1082383,1082387,1082399,1082429, 1082443,1082447,1082467,1082491,1082527,1082531,1082533,1082573,1082579, 1082581,1082593,1082597,1082603,1082621,1082629,1082647,1082659,1082681, 1082699,1082707,1082717,1082723,1082729,1082743,1082761,1082777,1082801, 1082881,1082891,1082911,1082969,1082971,1082989,1082993,1082999,1083007, 1083031,1083037,1083059,1083073,1083077,1083079,1083083,1083107,1083113, 1083119,1083151,1083167,1083191,1083193,1083211,1083241,1083253,1083283, 1083287,1083289,1083301,1083307,1083311,1083317,1083319,1083337,1083349, 1083367,1083371,1083377,1083391,1083409,1083431,1083443,1083449,1083451, 1083463,1083473,1083497,1083517,1083541,1083559,1083571,1083583,1083601, 1083611,1083613,1083659,1083689,1083707,1083713,1083721,1083743,1083749, 1083757,1083793,1083809,1083827,1083833,1083839,1083847,1083851,1083871, 1083881,1083899,1083911,1083913,1083923,1083941,1083947,1083949,1083983, 1084001,1084019,1084043,1084051,1084067,1084079,1084087,1084093,1084103, 1084133,1084147,1084157,1084177,1084217,1084219,1084247,1084253,1084267, 1084297,1084301,1084309,1084313,1084333,1084357,1084367,1084373,1084403, 1084423,1084429,1084451,1084459,1084469,1084471,1084477,1084483,1084493, 1084543,1084547,1084553,1084579,1084609,1084613,1084621,1084627,1084637, 1084649,1084661,1084669,1084673,1084697,1084711,1084723,1084747,1084757, 1084771,1084777,1084793,1084799,1084817,1084823,1084829,1084859,1084871, 1084891,1084927,1084939,1084943,1084949,1084981,1084987,1084997,1085003, 1085011,1085017,1085023,1085047,1085053,1085101,1085111,1085113,1085131, 1085137,1085141,1085143,1085153,1085159,1085179,1085197,1085221,1085269, 1085309,1085317,1085327,1085351,1085353,1085369,1085389,1085407,1085419, 1085429,1085431,1085443,1085459,1085473,1085509,1085521,1085551,1085587, 1085611,1085627,1085633,1085657,1085663,1085677,1085681,1085687,1085719, 1085737,1085753,1085767,1085771,1085779,1085801,1085809,1085813,1085827, 1085857,1085863,1085867,1085873,1085881,1085891,1085911,1085933,1085957, 1085971,1085989,1086031,1086047,1086073,1086089,1086091,1086101,1086103, 1086119,1086133,1086139,1086149,1086161,1086179,1086191,1086193,1086199, 1086203,1086247,1086251,1086257,1086259,1086263,1086277,1086299,1086301, 1086307,1086331,1086343,1086347,1086353,1086361,1086373,1086389,1086391, 1086413,1086433,1086443,1086461,1086469,1086493,1086509,1086511,1086523, 1086529,1086557,1086559,1086587,1086607,1086611,1086619,1086637,1086641, 1086647,1086677,1086689,1086703,1086731,1086749,1086763,1086769,1086791, 1086809,1086817,1086859,1086863,1086881,1086893,1086901,1086913,1086919, 1086923,1086931,1086937,1086989,1086991,1087001,1087019,1087027,1087061, 1087091,1087109,1087117,1087129,1087147,1087159,1087231,1087241,1087249, 1087259,1087271,1087291,1087301,1087309,1087349,1087357,1087379,1087381, 1087391,1087409,1087423,1087433,1087451,1087453,1087459,1087483,1087487, 1087517,1087519,1087543,1087553,1087561,1087589,1087591,1087621,1087631, 1087657,1087663,1087673,1087679,1087687,1087717,1087729,1087741,1087747, 1087753,1087781,1087787,1087789,1087799,1087811,1087817,1087829,1087841, 1087843,1087861,1087873,1087897,1087903,1087907,1087937,1087963,1087967, 1087973,1087981,1087987,1088023,1088027,1088039,1088053,1088063,1088071, 1088081,1088089,1088093,1088123,1088159,1088161,1088209,1088233,1088237, 1088239,1088251,1088267,1088273,1088293,1088309,1088371,1088387,1088389, 1088393,1088407,1088413,1088419,1088431,1088443,1088447,1088449,1088467, 1088471,1088489,1088519,1088533,1088537,1088543,1088569,1088579,1088603, 1088611,1088617,1088621,1088623,1088639,1088641,1088657,1088669,1088671, 1088687,1088693,1088707,1088723,1088749,1088753,1088761,1088777,1088783, 1088807,1088827,1088831,1088839,1088851,1088903,1088917,1088933,1088953, 1088957,1088959,1088977,1088987,1088993,1089017,1089029,1089047,1089091, 1089103,1089107,1089113,1089133,1089161,1089191,1089197,1089217,1089223, 1089227,1089239,1089259,1089299,1089313,1089359,1089383,1089397,1089401, 1089421,1089427,1089457,1089461,1089463,1089469,1089481,1089497,1089503, 1089509,1089523,1089551,1089563,1089611,1089629,1089653,1089661,1089677, 1089679,1089703,1089709,1089713,1089757,1089793,1089799,1089841,1089863, 1089877,1089917,1089919,1089941,1089943,1089961,1089967,1090003,1090013, 1090021,1090027,1090031,1090097,1090099,1090127,1090129,1090151,1090153, 1090169,1090181,1090189,1090211,1090213,1090217,1090241,1090249,1090267, 1090273,1090303,1090333,1090373,1090381,1090387,1090403,1090409,1090421, 1090423,1090457,1090459,1090469,1090471,1090483,1090493,1090519,1090553, 1090577,1090589,1090597,1090613,1090627,1090681,1090697,1090709,1090711, 1090717,1090721,1090757,1090759,1090769,1090783,1090799,1090807,1090819, 1090841,1090849,1090877,1090879,1090883,1090889,1090891,1090897,1090909, 1090919,1090927,1090937,1090939,1090949,1090963,1090967,1090979,1090997, 1091003,1091017,1091021,1091023,1091033,1091047,1091053,1091059,1091063, 1091071,1091119,1091137,1091147,1091149,1091159,1091161,1091173,1091177, 1091191,1091219,1091221,1091239,1091243,1091257,1091261,1091263,1091267, 1091269,1091273,1091287,1091329,1091339,1091359,1091369,1091371,1091381, 1091393,1091399,1091401,1091411,1091413,1091443,1091459,1091471,1091477, 1091509,1091521,1091527,1091549,1091551,1091561,1091581,1091591,1091609, 1091617,1091627,1091633,1091639,1091659,1091663,1091681,1091687,1091711, 1091729,1091731,1091737,1091749,1091777,1091807,1091809,1091837,1091843, 1091863,1091869,1091887,1091917,1091939,1091957,1091983,1092019,1092023, 1092041,1092043,1092059,1092061,1092067,1092089,1092103,1092107,1092127, 1092137,1092151,1092163,1092173,1092181,1092191,1092209,1092229,1092241, 1092251,1092257,1092269,1092283,1092307,1092331,1092337,1092349,1092353, 1092361,1092373,1092379,1092389,1092391,1092397,1092419,1092433,1092451, 1092461,1092463,1092473,1092479,1092493,1092541,1092583,1092593,1092601, 1092629,1092643,1092659,1092667,1092677,1092713,1092731,1092733,1092757, 1092779,1092803,1092821,1092827,1092829,1092851,1092853,1092863,1092887, 1092893,1092901,1092907,1092911,1092919,1092929,1092961,1092977,1092989, 1092991,1092997,1093007,1093033,1093061,1093063,1093067,1093069,1093087, 1093109,1093111,1093129,1093133,1093159,1093163,1093177,1093199,1093201, 1093223,1093237,1093243,1093249,1093273,1093283,1093289,1093297,1093307, 1093327,1093331,1093357,1093363,1093381,1093399,1093403,1093409,1093427, 1093441,1093487,1093493,1093517,1093529,1093531,1093537,1093541,1093553, 1093571,1093577,1093591,1093633,1093637,1093639,1093657,1093663,1093667, 1093679,1093681,1093699,1093717,1093723,1093733,1093739,1093747,1093751, 1093753,1093777,1093789,1093823,1093837,1093843,1093847,1093871,1093889, 1093901,1093907,1093927,1093943,1093951,1093957,1093969,1093991,1093993, 1093997,1093999,1094011,1094029,1094047,1094057,1094059,1094081,1094089, 1094099,1094101,1094123,1094129,1094131,1094143,1094147,1094161,1094183, 1094209,1094237,1094263,1094293,1094299,1094321,1094333,1094339,1094371, 1094377,1094407,1094411,1094417,1094437,1094441,1094449,1094453,1094461, 1094473,1094491,1094519,1094531,1094539,1094543,1094549,1094551,1094557, 1094567,1094573,1094603,1094623,1094629,1094633,1094657,1094669,1094671, 1094683,1094689,1094693,1094701,1094711,1094747,1094759,1094773,1094791, 1094801,1094803,1094809,1094831,1094833,1094843,1094881,1094887,1094897, 1094911,1094921,1094923,1094939,1094957,1094963,1094969,1094983,1094999, 1095023,1095043,1095047,1095049,1095067,1095071,1095091,1095119,1095161, 1095169,1095173,1095209,1095221,1095223,1095229,1095239,1095247,1095251, 1095257,1095287,1095313,1095319,1095343,1095349,1095401,1095403,1095427, 1095433,1095439,1095443,1095449,1095461,1095481,1095487,1095491,1095503, 1095529,1095541,1095551,1095557,1095569,1095581,1095583,1095613,1095631, 1095671,1095691,1095713,1095719,1095727,1095733,1095739,1095751,1095779, 1095781,1095791,1095793,1095811,1095821,1095833,1095839,1095841,1095847, 1095851,1095859,1095907,1095931,1095947,1095959,1095961,1095979,1095989, 1096031,1096057,1096061,1096079,1096097,1096099,1096127,1096133,1096141, 1096159,1096163,1096189,1096201,1096219,1096267,1096289,1096307,1096327, 1096349,1096351,1096363,1096373,1096379,1096393,1096399,1096423,1096427, 1096451,1096477,1096481,1096489,1096493,1096499,1096507,1096541,1096549, 1096553,1096559,1096561,1096583,1096609,1096621,1096631,1096639,1096673, 1096691,1096703,1096727,1096741,1096763,1096787,1096793,1096807,1096817, 1096829,1096831,1096853,1096859,1096861,1096871,1096883,1096919,1096951, 1096957,1096967,1096969,1096981,1096999,1097009,1097017,1097029,1097039, 1097051,1097069,1097081,1097101,1097111,1097113,1097141,1097143,1097147, 1097179,1097189,1097203,1097209,1097221,1097237,1097267,1097293,1097297, 1097321,1097323,1097351,1097359,1097377,1097381,1097413,1097419,1097423, 1097441,1097443,1097461,1097483,1097501,1097513,1097533,1097539,1097543, 1097549,1097557,1097599,1097627,1097633,1097651,1097653,1097659,1097669, 1097699,1097711,1097717,1097729,1097743,1097783,1097791,1097797,1097819, 1097849,1097851,1097861,1097869,1097879,1097891,1097893,1097897,1097903, 1097909,1097923,1097933,1097947,1097983,1098017,1098023,1098037,1098073, 1098077,1098101,1098109,1098121,1098133,1098151,1098187,1098191,1098193, 1098203,1098211,1098221,1098233,1098269,1098287,1098301,1098311,1098313, 1098341,1098373,1098379,1098397,1098401,1098439,1098443,1098451,1098463, 1098469,1098479,1098481,1098509,1098511,1098533,1098541,1098593,1098613, 1098623,1098631,1098649,1098667,1098673,1098689,1098707,1098709,1098731, 1098737,1098787,1098791,1098803,1098821,1098833,1098847,1098953,1098967, 1098973,1098989,1099031,1099051,1099057,1099079,1099081,1099097,1099103, 1099117,1099121,1099139,1099171,1099177,1099181,1099199,1099223,1099247, 1099249,1099261,1099279,1099289,1099309,1099313,1099327,1099337,1099363, 1099369,1099391,1099393,1099409,1099411,1099421,1099433,1099459,1099463, 1099487,1099489,1099493,1099499,1099507,1099513,1099519,1099523,1099541, 1099547,1099559,1099573,1099589,1099619,1099621,1099627,1099633,1099649, 1099669,1099687,1099711,1099717,1099723,1099727,1099729,1099741,1099757, 1099771,1099783,1099793,1099799,1099807,1099817,1099823,1099841,1099843, 1099859,1099867,1099927,1099933,1099957,1099961,1099997,1100009,1100023, 1100027,1100039,1100041,1100051,1100063,1100089,1100093,1100101,1100123, 1100131,1100147,1100149,1100161,1100167,1100171,1100179,1100213,1100219, 1100243,1100249,1100261,1100273,1100279,1100303,1100311,1100321,1100353, 1100357,1100377,1100381,1100387,1100419,1100441,1100443,1100447,1100467, 1100471,1100483,1100503,1100509,1100513,1100543,1100557,1100569,1100581, 1100591,1100611,1100641,1100653,1100681,1100683,1100747,1100773,1100777, 1100783,1100797,1100807,1100831,1100833,1100837,1100839,1100851,1100857, 1100887,1100893,1100899,1100909,1100921,1100933,1100947,1100977,1101071, 1101091,1101097,1101103,1101109,1101127,1101143,1101169,1101179,1101193, 1101211,1101229,1101253,1101283,1101299,1101307,1101319,1101323,1101341, 1101349,1101371,1101377,1101389,1101403,1101407,1101409,1101421,1101431, 1101433,1101439,1101467,1101473,1101509,1101511,1101517,1101521,1101533, 1101559,1101571,1101577,1101587,1101593,1101613,1101619,1101641,1101649, 1101671,1101673,1101689,1101691,1101697,1101733,1101743,1101761,1101767, 1101773,1101781,1101803,1101811,1101839,1101851,1101871,1101883,1101901, 1101917,1101929,1101931,1101937,1101941,1101959,1101967,1102001,1102007, 1102021,1102027,1102063,1102069,1102111,1102117,1102147,1102151,1102159, 1102163,1102169,1102181,1102187,1102201,1102237,1102243,1102249,1102253, 1102259,1102271,1102279,1102301,1102307,1102313,1102333,1102337,1102393, 1102397,1102411,1102427,1102429,1102441,1102447,1102457,1102463,1102481, 1102483,1102523,1102537,1102547,1102553,1102567,1102571,1102583,1102663, 1102669,1102679,1102681,1102691,1102693,1102709,1102721,1102727,1102729, 1102733,1102747,1102757,1102813,1102823,1102831,1102847,1102853,1102861, 1102879,1102883,1102891,1102901,1102903,1102921,1102939,1102951,1102963, 1102967,1102979,1102991,1102999,1103009,1103017,1103029,1103041,1103059, 1103087,1103101,1103107,1103111,1103119,1103129,1103143,1103171,1103183, 1103191,1103203,1103213,1103237,1103257,1103279,1103281,1103293,1103309, 1103339,1103341,1103353,1103371,1103437,1103449,1103461,1103467,1103483, 1103489,1103497,1103519,1103533,1103549,1103561,1103579,1103581,1103587, 1103591,1103603,1103611,1103617,1103621,1103629,1103633,1103639,1103699, 1103723,1103737,1103749,1103779,1103797,1103803,1103849,1103857,1103863, 1103873,1103899,1103903,1103911,1103923,1103933,1103981,1103987,1103989, 1104017,1104041,1104079,1104097,1104101,1104107,1104113,1104119,1104137, 1104139,1104157,1104179,1104193,1104203,1104209,1104217,1104221,1104241, 1104247,1104289,1104293,1104307,1104319,1104331,1104343,1104353,1104373, 1104377,1104379,1104403,1104409,1104427,1104431,1104449,1104479,1104491, 1104511,1104517,1104533,1104557,1104559,1104589,1104599,1104613,1104619, 1104659,1104661,1104671,1104683,1104703,1104707,1104731,1104737,1104739, 1104743,1104749,1104751,1104767,1104769,1104781,1104787,1104791,1104797, 1104811,1104821,1104823,1104833,1104853,1104877,1104889,1104899,1104913, 1104919,1104937,1104941,1104947,1104959,1105009,1105019,1105033,1105061, 1105063,1105067,1105109,1105141,1105157,1105163,1105171,1105177,1105193, 1105201,1105207,1105213,1105217,1105231,1105261,1105267,1105271,1105309, 1105327,1105333,1105337,1105339,1105343,1105387,1105397,1105427,1105441, 1105457,1105463,1105501,1105513,1105519,1105537,1105547,1105549,1105571, 1105579,1105583,1105589,1105603,1105607,1105609,1105613,1105619,1105627, 1105639,1105649,1105651,1105661,1105669,1105691,1105693,1105711,1105757, 1105759,1105787,1105807,1105813,1105823,1105847,1105861,1105873,1105879, 1105883,1105891,1105913,1105919,1105943,1105961,1105963,1105997,1105999, 1106029,1106069,1106087,1106099,1106101,1106129,1106137,1106159,1106167, 1106177,1106179,1106197,1106201,1106213,1106219,1106233,1106243,1106249, 1106257,1106267,1106279,1106293,1106311,1106317,1106363,1106381,1106401, 1106407,1106419,1106423,1106429,1106447,1106449,1106471,1106477,1106489, 1106491,1106509,1106527,1106531,1106543,1106563,1106569,1106593,1106621, 1106627,1106629,1106653,1106671,1106687,1106689,1106741,1106747,1106761, 1106767,1106771,1106779,1106789,1106801,1106821,1106827,1106837,1106839, 1106851,1106881,1106891,1106909,1106923,1106927,1106939,1106953,1106957, 1106977,1106993,1106999,1107019,1107031,1107047,1107049,1107053,1107083, 1107101,1107107,1107109,1107157,1107167,1107173,1107199,1107203,1107217, 1107269,1107317,1107319,1107341,1107347,1107383,1107389,1107401,1107409, 1107419,1107433,1107439,1107467,1107479,1107487,1107497,1107503,1107511, 1107523,1107527,1107553,1107569,1107571,1107581,1107583,1107593,1107619, 1107677,1107679,1107721,1107727,1107751,1107763,1107773,1107781,1107787, 1107791,1107793,1107797,1107803,1107811,1107823,1107851,1107853,1107881, 1107893,1107913,1107917,1107923,1107929,1107937,1107989,1108001,1108007, 1108021,1108049,1108057,1108069,1108073,1108091,1108103,1108123,1108127, 1108147,1108169,1108171,1108181,1108201,1108207,1108223,1108229,1108241, 1108253,1108259,1108267,1108313,1108321,1108337,1108357,1108361,1108363, 1108369,1108397,1108423,1108427,1108447,1108453,1108463,1108469,1108477, 1108487,1108489,1108501,1108507,1108537,1108543,1108559,1108561,1108567, 1108571,1108573,1108579,1108603,1108609,1108619,1108633,1108663,1108691, 1108693,1108697,1108703,1108711,1108717,1108727,1108729,1108733,1108739, 1108747,1108753,1108759,1108771,1108781,1108801,1108817,1108819,1108823, 1108867,1108903,1108907,1108909,1108957,1108967,1108993,1108997,1108999, 1109021,1109033,1109057,1109113,1109117,1109123,1109159,1109161,1109167, 1109189,1109197,1109219,1109231,1109243,1109249,1109257,1109281,1109287, 1109291,1109309,1109327,1109347,1109351,1109363,1109387,1109393,1109399, 1109401,1109411,1109431,1109473,1109477,1109489,1109491,1109509,1109513, 1109531,1109533,1109561,1109579,1109609,1109611,1109629,1109639,1109653, 1109663,1109723,1109737,1109749,1109761,1109783,1109789,1109791,1109813, 1109821,1109839,1109851,1109861,1109869,1109881,1109887,1109891,1109897, 1109903,1109909,1109921,1109951,1109987,1110007,1110013,1110019,1110023, 1110041,1110061,1110077,1110089,1110103,1110127,1110133,1110167,1110181, 1110223,1110229,1110247,1110269,1110271,1110289,1110301,1110311,1110313, 1110331,1110349,1110353,1110367,1110397,1110401,1110413,1110427,1110433, 1110449,1110467,1110479,1110517,1110521,1110523,1110533,1110539,1110541, 1110547,1110583,1110587,1110589,1110611,1110617,1110643,1110667,1110679, 1110709,1110713,1110719,1110727,1110743,1110773,1110779,1110803,1110817, 1110821,1110839,1110859,1110881,1110887,1110913,1110917,1110919,1110929, 1110931,1110943,1110953,1110959,1110971,1110973,1110979,1110983,1110997, 1111007,1111013,1111021,1111031,1111043,1111049,1111057,1111067,1111081, 1111087,1111091,1111151,1111157,1111169,1111181,1111183,1111189,1111211, 1111213,1111219,1111247,1111259,1111283,1111289,1111301,1111333,1111339, 1111351,1111361,1111379,1111393,1111399,1111423,1111427,1111433,1111447, 1111457,1111489,1111493,1111499,1111531,1111543,1111547,1111553,1111559, 1111573,1111577,1111637,1111639,1111651,1111661,1111667,1111673,1111687, 1111703,1111711,1111723,1111727,1111741,1111757,1111771,1111787,1111793, 1111801,1111841,1111853,1111867,1111897,1111921,1111933,1111949,1111963, 1111967,1111991,1112003,1112011,1112017,1112047,1112057,1112077,1112081, 1112087,1112093,1112107,1112113,1112129,1112131,1112141,1112143,1112147, 1112159,1112171,1112197,1112201,1112239,1112269,1112273,1112291,1112323, 1112333,1112339,1112341,1112351,1112359,1112369,1112381,1112383,1112389, 1112413,1112467,1112471,1112477,1112483,1112509,1112513,1112519,1112543, 1112549,1112561,1112567,1112569,1112581,1112591,1112597,1112611,1112623, 1112651,1112653,1112663,1112677,1112689,1112707,1112723,1112729,1112731, 1112737,1112747,1112777,1112779,1112789,1112821,1112827,1112831,1112833, 1112857,1112897,1112899,1112911,1112921,1112941,1112953,1112959,1112971, 1112977,1112983,1113011,1113019,1113029,1113043,1113059,1113083,1113089, 1113103,1113137,1113149,1113157,1113173,1113181,1113187,1113193,1113197, 1113199,1113221,1113239,1113253,1113257,1113317,1113319,1113337,1113349, 1113373,1113379,1113401,1113403,1113421,1113451,1113461,1113481,1113491, 1113509,1113521,1113527,1113557,1113569,1113587,1113599,1113617,1113643, 1113667,1113701,1113703,1113713,1113719,1113751,1113773,1113781,1113787, 1113793,1113797,1113809,1113859,1113863,1113877,1113883,1113887,1113899, 1113941,1113949,1113953,1113961,1113971,1113991,1113997,1114019,1114031, 1114037,1114039,1114049,1114063,1114111,1114117,1114159,1114193,1114207, 1114213,1114241,1114249,1114261,1114271,1114273,1114283,1114297,1114301, 1114303,1114349,1114361,1114381,1114397,1114423,1114427,1114447,1114471, 1114489,1114493,1114501,1114507,1114523,1114541,1114549,1114567,1114573, 1114577,1114591,1114601,1114613,1114651,1114657,1114661,1114681,1114693, 1114697,1114709,1114721,1114723,1114733,1114753,1114759,1114801,1114807, 1114811,1114829,1114837,1114849,1114859,1114873,1114891,1114907,1114909, 1114931,1114937,1114943,1114969,1114973,1114987,1114999,1115011,1115027, 1115029,1115057,1115071,1115089,1115099,1115113,1115117,1115131,1115189, 1115207,1115227,1115237,1115239,1115267,1115269,1115273,1115297,1115299, 1115321,1115327,1115329,1115351,1115363,1115381,1115399,1115407,1115417, 1115419,1115447,1115449,1115453,1115467,1115497,1115501,1115519,1115531, 1115533,1115539,1115551,1115561,1115567,1115573,1115579,1115581,1115599, 1115627,1115633,1115641,1115657,1115683,1115701,1115711,1115713,1115731, 1115743,1115759,1115767,1115771,1115773,1115789,1115831,1115839,1115843, 1115857,1115879,1115899,1115911,1115923,1115929,1115941,1115987,1115993, 1116001,1116053,1116077,1116091,1116107,1116133,1116163,1116173,1116187, 1116209,1116223,1116229,1116257,1116277,1116281,1116289,1116301,1116317, 1116319,1116329,1116337,1116347,1116371,1116419,1116431,1116439,1116449, 1116461,1116469,1116473,1116491,1116499,1116523,1116541,1116547,1116569, 1116571,1116593,1116601,1116631,1116637,1116641,1116653,1116659,1116677, 1116701,1116743,1116749,1116751,1116809,1116821,1116851,1116853,1116859, 1116887,1116889,1116893,1116911,1116937,1116943,1116977,1116989,1117009, 1117013,1117021,1117027,1117031,1117033,1117057,1117069,1117073,1117079, 1117099,1117111,1117117,1117153,1117169,1117177,1117199,1117243,1117247, 1117253,1117267,1117273,1117279,1117301,1117307,1117309,1117321,1117349, 1117367,1117379,1117433,1117439,1117451,1117463,1117471,1117477,1117481, 1117483,1117489,1117513,1117549,1117553,1117579,1117591,1117601,1117603, 1117607,1117609,1117657,1117661,1117673,1117679,1117681,1117709,1117729, 1117741,1117757,1117759,1117763,1117769,1117793,1117799,1117811,1117813, 1117817,1117819,1117861,1117867,1117877,1117889,1117901,1117913,1117931, 1117933,1117939,1117943,1117967,1117973,1117993,1118003,1118009,1118011, 1118021,1118023,1118027,1118041,1118063,1118081,1118101,1118113,1118123, 1118137,1118147,1118149,1118189,1118197,1118203,1118219,1118261,1118267, 1118291,1118303,1118309,1118317,1118339,1118363,1118371,1118393,1118419, 1118437,1118441,1118479,1118483,1118497,1118519,1118527,1118563,1118567, 1118569,1118599,1118629,1118653,1118659,1118713,1118717,1118723,1118737, 1118749,1118773,1118779,1118783,1118797,1118807,1118809,1118827,1118837, 1118851,1118857,1118861,1118863,1118867,1118869,1118893,1118911,1118921, 1118941,1118947,1118951,1118969,1118987,1118993,1119029,1119037,1119047, 1119049,1119077,1119091,1119109,1119121,1119169,1119179,1119221,1119227, 1119241,1119269,1119281,1119299,1119319,1119323,1119343,1119359,1119389, 1119397,1119403,1119449,1119473,1119523,1119527,1119529,1119557,1119577, 1119589,1119607,1119611,1119623,1119649,1119653,1119659,1119673,1119691, 1119697,1119707,1119733,1119737,1119779,1119793,1119799,1119809,1119817, 1119821,1119823,1119857,1119863,1119871,1119907,1119913,1119947,1119949, 1119959,1120001,1120019,1120051,1120073,1120081,1120087,1120109,1120121, 1120153,1120157,1120159,1120187,1120211,1120219,1120237,1120271,1120277, 1120289,1120291,1120303,1120313,1120319,1120321,1120337,1120349,1120363, 1120369,1120391,1120423,1120429,1120459,1120481,1120499,1120501,1120507, 1120513,1120517,1120519,1120529,1120541,1120543,1120547,1120549,1120573, 1120577,1120591,1120607,1120627,1120633,1120649,1120661,1120663,1120667, 1120673,1120687,1120711,1120723,1120727,1120739,1120741,1120747,1120771, 1120781,1120783,1120787,1120799,1120807,1120811,1120831,1120837,1120849, 1120871,1120883,1120901,1120907,1120913,1120919,1120939,1120957,1120961, 1120969,1120993,1121011,1121017,1121023,1121027,1121033,1121047,1121051, 1121083,1121093,1121101,1121143,1121147,1121173,1121179,1121189,1121191, 1121203,1121221,1121231,1121249,1121257,1121261,1121293,1121297,1121317, 1121333,1121347,1121357,1121369,1121377,1121383,1121387,1121389,1121423, 1121431,1121443,1121447,1121453,1121509,1121539,1121543,1121557,1121599, 1121621,1121629,1121651,1121671,1121689,1121693,1121699,1121707,1121723, 1121737,1121819,1121831,1121833,1121837,1121839,1121867,1121899,1121933, 1121941,1121947,1121987,1121993,1122001,1122029,1122041,1122053,1122071, 1122089,1122091,1122103,1122113,1122131,1122133,1122137,1122139,1122157, 1122179,1122181,1122227,1122241,1122259,1122263,1122269,1122281,1122283, 1122287,1122367,1122371,1122389,1122397,1122419,1122427,1122431,1122437, 1122449,1122467,1122481,1122491,1122529,1122533,1122551,1122571,1122587, 1122599,1122623,1122643,1122647,1122659,1122679,1122683,1122701,1122721, 1122739,1122749,1122757,1122761,1122811,1122841,1122857,1122887,1122899, 1122923,1122937,1122941,1122983,1122997,1123051,1123079,1123081,1123093, 1123127,1123151,1123181,1123189,1123211,1123217,1123219,1123231,1123247, 1123267,1123279,1123303,1123307,1123319,1123327,1123349,1123351,1123361, 1123379,1123391,1123399,1123403,1123427,1123429,1123439,1123477,1123483, 1123487,1123501,1123511,1123517,1123531,1123541,1123553,1123561,1123567, 1123589,1123597,1123601,1123621,1123631,1123637,1123651,1123667,1123669, 1123691,1123693,1123699,1123709,1123729,1123739,1123741,1123747,1123777, 1123807,1123841,1123867,1123873,1123879,1123883,1123897,1123901,1123909, 1123919,1123931,1123943,1123951,1123961,1123973,1123979,1123999,1124027, 1124041,1124051,1124083,1124087,1124107,1124113,1124119,1124131,1124141, 1124147,1124197,1124203,1124209,1124219,1124239,1124251,1124267,1124269, 1124293,1124297,1124303,1124317,1124351,1124353,1124369,1124377,1124423, 1124429,1124437,1124441,1124443,1124449,1124509,1124531,1124551,1124561, 1124581,1124593,1124597,1124603,1124639,1124647,1124653,1124659,1124681, 1124687,1124699,1124719,1124741,1124749,1124759,1124789,1124797,1124803, 1124807,1124813,1124831,1124833,1124867,1124869,1124951,1124957,1124969, 1124983,1124987,1124993,1125001,1125013,1125017,1125029,1125053,1125097, 1125109,1125121,1125127,1125139,1125143,1125151,1125167,1125169,1125193, 1125203,1125209,1125217,1125221,1125253,1125259,1125283,1125317,1125323, 1125329,1125343,1125359,1125361,1125379,1125391,1125401,1125407,1125419, 1125431,1125433,1125469,1125473,1125479,1125499,1125529,1125539,1125557, 1125559,1125569,1125571,1125581,1125599,1125629,1125647,1125653,1125679, 1125701,1125713,1125739,1125763,1125767,1125793,1125797,1125811,1125823, 1125833,1125857,1125871,1125899,1125907,1125911,1125913,1125923,1125931, 1125941,1125953,1125973,1125991,1126031,1126033,1126043,1126067,1126093, 1126159,1126189,1126201,1126211,1126219,1126247,1126253,1126259,1126283, 1126313,1126319,1126343,1126351,1126357,1126361,1126381,1126387,1126397, 1126399,1126421,1126439,1126441,1126457,1126459,1126483,1126501,1126513, 1126519,1126523,1126537,1126553,1126561,1126577,1126579,1126597,1126627, 1126649,1126661,1126663,1126667,1126669,1126693,1126703,1126711,1126751, 1126759,1126771,1126781,1126787,1126823,1126831,1126837,1126843,1126847, 1126859,1126861,1126889,1126897,1126963,1126973,1126991,1126999,1127011, 1127029,1127033,1127039,1127051,1127081,1127101,1127111,1127123,1127149, 1127153,1127167,1127177,1127183,1127197,1127209,1127221,1127227,1127239, 1127249,1127263,1127281,1127297,1127303,1127309,1127311,1127323,1127333, 1127351,1127359,1127369,1127381,1127383,1127393,1127407,1127411,1127443, 1127447,1127453,1127461,1127507,1127513,1127527,1127531,1127537,1127557, 1127561,1127573,1127587,1127603,1127617,1127629,1127641,1127657,1127663, 1127683,1127701,1127741,1127767,1127773,1127801,1127803,1127809,1127813, 1127837,1127849,1127857,1127881,1127891,1127911,1127947,1127957,1127969, 1127981,1127983,1127993,1128031,1128037,1128089,1128091,1128107,1128109, 1128143,1128151,1128161,1128181,1128209,1128223,1128227,1128233,1128247, 1128251,1128287,1128289,1128293,1128299,1128301,1128313,1128349,1128371, 1128373,1128383,1128397,1128427,1128433,1128451,1128497,1128499,1128503, 1128509,1128521,1128527,1128539,1128553,1128557,1128577,1128583,1128599, 1128601,1128623,1128629,1128637,1128641,1128643,1128661,1128667,1128691, 1128697,1128703,1128713,1128719,1128727,1128731,1128737,1128761,1128763, 1128769,1128773,1128779,1128781,1128811,1128821,1128823,1128889,1128899, 1128901,1128917,1128931,1128937,1128943,1128947,1128949,1128977,1128979, 1128997,1129013,1129019,1129033,1129043,1129103,1129109,1129111,1129127, 1129133,1129153,1129159,1129169,1129187,1129211,1129213,1129217,1129229, 1129253,1129283,1129307,1129313,1129333,1129343,1129367,1129391,1129399, 1129409,1129433,1129439,1129441,1129459,1129477,1129487,1129489,1129501, 1129511,1129519,1129523,1129559,1129561,1129571,1129577,1129603,1129619, 1129643,1129663,1129679,1129693,1129699,1129717,1129729,1129741,1129747, 1129757,1129763,1129787,1129789,1129819,1129831,1129841,1129847,1129853, 1129859,1129861,1129889,1129897,1129951,1129957,1129963,1129991,1130011, 1130023,1130039,1130047,1130053,1130057,1130081,1130099,1130117,1130123, 1130131,1130191,1130237,1130251,1130257,1130267,1130273,1130281,1130287, 1130293,1130299,1130317,1130321,1130351,1130359,1130369,1130407,1130413, 1130417,1130429,1130431,1130447,1130471,1130497,1130501,1130527,1130561, 1130579,1130581,1130587,1130621,1130627,1130629,1130639,1130641,1130651, 1130677,1130693,1130699,1130711,1130719,1130737,1130741,1130777,1130783, 1130803,1130807,1130809,1130813,1130819,1130827,1130863,1130929,1130939, 1130947,1130951,1130953,1130957,1130963,1130981,1131023,1131047,1131049, 1131077,1131079,1131083,1131103,1131113,1131121,1131131,1131133,1131139, 1131157,1131181,1131191,1131217,1131223,1131239,1131253,1131259,1131269, 1131271,1131307,1131323,1131329,1131331,1131341,1131343,1131353,1131379, 1131397,1131413,1131419,1131421,1131437,1131451,1131463,1131467,1131479, 1131491,1131509,1131523,1131547,1131553,1131569,1131617,1131629,1131643, 1131653,1131671,1131677,1131701,1131721,1131727,1131737,1131749,1131751, 1131763,1131769,1131787,1131799,1131821,1131827,1131829,1131839,1131857, 1131863,1131869,1131881,1131883,1131913,1131917,1131919,1131937,1131943, 1131959,1131961,1131973,1131997,1132003,1132009,1132063,1132067,1132091, 1132123,1132139,1132141,1132177,1132199,1132223,1132249,1132259,1132291, 1132301,1132309,1132321,1132333,1132393,1132403,1132409,1132423,1132429, 1132447,1132463,1132471,1132477,1132487,1132499,1132507,1132511,1132519, 1132529,1132541,1132561,1132567,1132583,1132597,1132601,1132603,1132627, 1132633,1132639,1132643,1132661,1132667,1132673,1132679,1132697,1132721, 1132739,1132753,1132783,1132787,1132793,1132811,1132823,1132861,1132877, 1132883,1132909,1132919,1132927,1132933,1132949,1132969,1132979,1132987, 1132991,1132993,1132997,1133009,1133017,1133039,1133047,1133053,1133071, 1133131,1133147,1133149,1133159,1133173,1133177,1133183,1133189,1133191, 1133219,1133227,1133239,1133257,1133261,1133263,1133287,1133303,1133317, 1133333,1133357,1133359,1133381,1133387,1133459,1133467,1133477,1133479, 1133501,1133507,1133513,1133519,1133533,1133537,1133551,1133579,1133591, 1133621,1133623,1133633,1133641,1133651,1133653,1133659,1133677,1133681, 1133683,1133689,1133731,1133777,1133789,1133809,1133819,1133827,1133837, 1133843,1133851,1133857,1133861,1133893,1133897,1133903,1133911,1133933, 1133947,1133959,1133963,1133971,1133989,1134031,1134037,1134043,1134047, 1134059,1134071,1134079,1134113,1134137,1134143,1134149,1134151,1134163, 1134169,1134179,1134187,1134193,1134239,1134241,1134247,1134271,1134283, 1134299,1134311,1134313,1134389,1134391,1134403,1134421,1134437,1134443, 1134449,1134467,1134479,1134481,1134487,1134503,1134517,1134541,1134557, 1134559,1134583,1134587,1134607,1134611,1134619,1134649,1134667,1134673, 1134691,1134697,1134703,1134709,1134719,1134769,1134781,1134787,1134811, 1134821,1134841,1134863,1134871,1134877,1134883,1134907,1134923,1134929, 1134961,1134967,1134977,1134989,1135007,1135009,1135019,1135021,1135061, 1135063,1135081,1135087,1135091,1135093,1135103,1135111,1135129,1135133, 1135159,1135171,1135187,1135201,1135217,1135229,1135237,1135241,1135247, 1135261,1135279,1135283,1135291,1135327,1135333,1135339,1135363,1135367, 1135403,1135411,1135427,1135429,1135439,1135451,1135469,1135483,1135513, 1135531,1135597,1135613,1135619,1135633,1135643,1135657,1135663,1135699, 1135703,1135711,1135721,1135733,1135751,1135777,1135819,1135831,1135837, 1135847,1135853,1135859,1135861,1135873,1135879,1135891,1135903,1135913, 1135919,1135921,1135951,1135963,1135969,1135997,1135999,1136041,1136053, 1136063,1136077,1136081,1136087,1136089,1136111,1136117,1136123,1136129, 1136147,1136153,1136183,1136203,1136221,1136227,1136231,1136237,1136287, 1136299,1136309,1136327,1136329,1136339,1136357,1136363,1136383,1136389, 1136393,1136411,1136417,1136449,1136459,1136461,1136477,1136483,1136557, 1136567,1136579,1136587,1136593,1136609,1136617,1136623,1136627,1136633, 1136647,1136651,1136659,1136669,1136699,1136717,1136719,1136741,1136749, 1136767,1136809,1136813,1136819,1136831,1136833,1136843,1136869,1136897, 1136917,1136921,1136939,1136951,1136969,1136981,1136983,1136999,1137001, 1137007,1137029,1137067,1137091,1137109,1137137,1137139,1137161,1137163, 1137167,1137179,1137203,1137209,1137229,1137233,1137247,1137263,1137271, 1137289,1137313,1137329,1137337,1137341,1137403,1137407,1137427,1137439, 1137457,1137481,1137503,1137527,1137529,1137547,1137551,1137553,1137569, 1137611,1137613,1137629,1137659,1137667,1137673,1137677,1137707,1137733, 1137743,1137749,1137767,1137781,1137803,1137809,1137811,1137817,1137859, 1137863,1137869,1137881,1137883,1137887,1137889,1137911,1137919,1137937, 1137953,1137959,1137973,1137977,1137991,1138019,1138057,1138061,1138091, 1138097,1138117,1138127,1138141,1138147,1138171,1138183,1138213,1138237, 1138273,1138363,1138367,1138369,1138391,1138393,1138409,1138411,1138427, 1138429,1138433,1138441,1138451,1138457,1138483,1138519,1138547,1138559, 1138567,1138589,1138591,1138637,1138639,1138649,1138667,1138673,1138679, 1138681,1138703,1138717,1138729,1138733,1138741,1138751,1138757,1138771, 1138777,1138793,1138829,1138831,1138849,1138853,1138867,1138883,1138901, 1138919,1138957,1138961,1138967,1138979,1138987,1138997,1138999,1139003, 1139011,1139041,1139059,1139081,1139087,1139123,1139141,1139143,1139147, 1139191,1139197,1139227,1139239,1139249,1139263,1139269,1139273,1139287, 1139291,1139293,1139309,1139321,1139329,1139353,1139387,1139393,1139407, 1139423,1139461,1139471,1139473,1139483,1139491,1139503,1139519,1139521, 1139531,1139539,1139549,1139557,1139573,1139587,1139623,1139669,1139681, 1139683,1139687,1139713,1139717,1139741,1139771,1139773,1139779,1139807, 1139819,1139843,1139849,1139851,1139861,1139863,1139869,1139909,1139911, 1139917,1139921,1139951,1139959,1139989,1139993,1140091,1140101,1140103, 1140121,1140127,1140131,1140137,1140143,1140157,1140163,1140197,1140203, 1140233,1140239,1140253,1140257,1140281,1140289,1140311,1140319,1140341, 1140353,1140371,1140379,1140383,1140389,1140413,1140421,1140431,1140439, 1140449,1140463,1140487,1140493,1140533,1140539,1140563,1140569,1140571, 1140577,1140611,1140619,1140637,1140677,1140679,1140691,1140697,1140709, 1140721,1140749,1140787,1140803,1140847,1140851,1140859,1140863,1140871, 1140901,1140911,1140913,1140929,1140949,1140959,1140967,1140973,1140983, 1140991,1141009,1141013,1141027,1141031,1141033,1141039,1141061,1141067, 1141081,1141087,1141093,1141097,1141103,1141109,1141123,1141139,1141171, 1141219,1141223,1141229,1141241,1141243,1141253,1141267,1141271,1141277, 1141279,1141289,1141291,1141303,1141319,1141321,1141351,1141373,1141379, 1141381,1141391,1141417,1141423,1141447,1141453,1141477,1141507,1141523, 1141529,1141531,1141541,1141571,1141573,1141597,1141631,1141633,1141649, 1141661,1141667,1141717,1141739,1141757,1141769,1141801,1141813,1141837, 1141849,1141853,1141867,1141871,1141901,1141909,1141949,1141963,1141967, 1141969,1141999,1142003,1142017,1142021,1142039,1142041,1142059,1142069, 1142083,1142129,1142131,1142159,1142161,1142171,1142191,1142201,1142233, 1142237,1142243,1142263,1142269,1142279,1142287,1142311,1142321,1142333, 1142353,1142357,1142359,1142363,1142389,1142423,1142431,1142473,1142483, 1142503,1142507,1142509,1142539,1142549,1142569,1142573,1142593,1142599, 1142633,1142651,1142677,1142693,1142707,1142737,1142759,1142773,1142777, 1142783,1142789,1142809,1142821,1142833,1142837,1142851,1142863,1142881, 1142891,1142909,1142917,1142923,1142929,1142941,1142959,1142969,1142971, 1143013,1143019,1143047,1143049,1143053,1143061,1143067,1143071,1143073, 1143089,1143091,1143101,1143113,1143143,1143161,1143167,1143193,1143217, 1143223,1143227,1143239,1143257,1143269,1143281,1143283,1143299,1143341, 1143347,1143371,1143391,1143407,1143433,1143469,1143473,1143481,1143487, 1143529,1143551,1143563,1143577,1143587,1143589,1143601,1143619,1143643, 1143647,1143661,1143679,1143697,1143719,1143749,1143763,1143799,1143803, 1143809,1143817,1143829,1143851,1143887,1143893,1143943,1143949,1143953, 1143959,1143977,1144001,1144007,1144019,1144037,1144061,1144081,1144103, 1144139,1144141,1144147,1144153,1144163,1144183,1144193,1144211,1144223, 1144243,1144249,1144261,1144271,1144277,1144279,1144291,1144301,1144327, 1144333,1144343,1144349,1144357,1144379,1144393,1144399,1144417,1144439, 1144441,1144453,1144477,1144483,1144499,1144511,1144519,1144523,1144529, 1144537,1144573,1144589,1144603,1144607,1144621,1144643,1144657,1144667, 1144681,1144691,1144721,1144723,1144727,1144739,1144757,1144783,1144823, 1144837,1144867,1144877,1144879,1144889,1144901,1144903,1144907,1144919, 1144931,1144939,1144951,1144973,1144981,1144993,1145003,1145021,1145057, 1145059,1145077,1145093,1145099,1145107,1145129,1145141,1145143,1145173, 1145189,1145191,1145203,1145213,1145227,1145269,1145281,1145293,1145299, 1145303,1145311,1145323,1145327,1145329,1145359,1145369,1145371,1145381, 1145387,1145393,1145411,1145429,1145461,1145479,1145497,1145509,1145533, 1145537,1145539,1145593,1145611,1145621,1145623,1145659,1145689,1145693, 1145713,1145723,1145741,1145743,1145747,1145773,1145789,1145797,1145801, 1145803,1145831,1145843,1145849,1145873,1145897,1145899,1145971,1145983, 1145999,1146037,1146043,1146049,1146071,1146083,1146091,1146097,1146133, 1146143,1146179,1146217,1146221,1146263,1146281,1146307,1146323,1146329, 1146331,1146347,1146367,1146391,1146407,1146413,1146419,1146421,1146461, 1146487,1146491,1146511,1146521,1146529,1146533,1146539,1146559,1146569, 1146581,1146661,1146671,1146679,1146697,1146703,1146709,1146713,1146727, 1146731,1146763,1146773,1146779,1146781,1146787,1146791,1146793,1146797, 1146799,1146809,1146823,1146829,1146833,1146841,1146857,1146869,1146877, 1146881,1146911,1146917,1146931,1146947,1146953,1146967,1146989,1147009, 1147021,1147039,1147043,1147051,1147067,1147073,1147099,1147103,1147117, 1147127,1147141,1147169,1147183,1147187,1147189,1147193,1147213,1147229, 1147231,1147243,1147247,1147249,1147253,1147271,1147273,1147297,1147301, 1147331,1147339,1147351,1147379,1147387,1147409,1147417,1147423,1147427, 1147441,1147451,1147453,1147459,1147463,1147499,1147507,1147511,1147561, 1147567,1147571,1147579,1147583,1147591,1147613,1147621,1147637,1147639, 1147669,1147697,1147709,1147711,1147717,1147739,1147759,1147793,1147819, 1147841,1147843,1147889,1147897,1147903,1147921,1147931,1147969,1147981, 1147987,1147997,1148029,1148039,1148047,1148087,1148089,1148099,1148111, 1148167,1148171,1148177,1148219,1148249,1148261,1148263,1148291,1148293, 1148297,1148311,1148327,1148339,1148359,1148377,1148387,1148437,1148453, 1148489,1148501,1148507,1148513,1148527,1148549,1148561,1148593,1148599, 1148621,1148629,1148647,1148663,1148677,1148681,1148687,1148701,1148713, 1148729,1148731,1148737,1148747,1148753,1148761,1148773,1148837,1148839, 1148857,1148867,1148879,1148921,1148933,1148941,1148957,1148963,1148971, 1148977,1148981,1148989,1148999,1149007,1149017,1149037,1149053,1149059, 1149061,1149131,1149151,1149157,1149163,1149167,1149191,1149193,1149209, 1149221,1149227,1149229,1149233,1149259,1149283,1149307,1149341,1149349, 1149361,1149373,1149403,1149409,1149413,1149427,1149457,1149469,1149487, 1149493,1149503,1149509,1149521,1149527,1149539,1149559,1149569,1149581, 1149587,1149593,1149601,1149607,1149619,1149637,1149641,1149661,1149679, 1149689,1149737,1149749,1149769,1149773,1149779,1149803,1149817,1149857, 1149859,1149881,1149887,1149901,1149913,1149917,1149919,1149943,1149971, 1149979,1149983,1149989,1149991,1150027,1150031,1150057,1150063,1150073, 1150081,1150103,1150117,1150139,1150141,1150151,1150159,1150183,1150187, 1150199,1150211,1150213,1150217,1150229,1150243,1150249,1150301,1150309, 1150349,1150351,1150363,1150397,1150403,1150411,1150417,1150421,1150423, 1150447,1150489,1150511,1150519,1150531,1150537,1150547,1150561,1150579, 1150603,1150609,1150631,1150649,1150651,1150657,1150661,1150673,1150687, 1150703,1150717,1150729,1150733,1150739,1150741,1150757,1150763,1150769, 1150777,1150783,1150823,1150837,1150847,1150861,1150867,1150871,1150873, 1150879,1150909,1150921,1150927,1150939,1150949,1150957,1150973,1150987, 1151021,1151041,1151047,1151057,1151063,1151069,1151083,1151089,1151113, 1151141,1151147,1151159,1151167,1151177,1151179,1151203,1151209,1151221, 1151233,1151237,1151243,1151251,1151287,1151303,1151317,1151327,1151333, 1151363,1151369,1151383,1151389,1151399,1151401,1151413,1151417,1151431, 1151441,1151443,1151471,1151473,1151483,1151519,1151537,1151569,1151581, 1151593,1151599,1151603,1151611,1151629,1151639,1151651,1151653,1151659, 1151671,1151687,1151701,1151713,1151729,1151737,1151747,1151753,1151779, 1151807,1151861,1151873,1151879,1151881,1151911,1151933,1151963,1151981, 1151987,1151993,1151999,1152023,1152029,1152037,1152071,1152077,1152079, 1152091,1152113,1152119,1152121,1152149,1152157,1152161,1152163,1152181, 1152187,1152227,1152233,1152287,1152313,1152317,1152337,1152343,1152367, 1152383,1152391,1152397,1152419,1152421,1152493,1152509,1152517,1152523, 1152527,1152589,1152623,1152629,1152631,1152637,1152643,1152649,1152653, 1152667,1152677,1152707,1152733,1152751,1152757,1152761,1152763,1152773, 1152791,1152793,1152799,1152841,1152857,1152881,1152887,1152913,1152917, 1152937,1152941,1152979,1152989,1152997,1153001,1153007,1153021,1153027, 1153049,1153057,1153063,1153073,1153099,1153109,1153123,1153147,1153153, 1153157,1153171,1153177,1153183,1153199,1153211,1153219,1153223,1153237, 1153241,1153247,1153249,1153261,1153267,1153277,1153309,1153337,1153343, 1153349,1153367,1153393,1153421,1153429,1153441,1153457,1153459,1153463, 1153483,1153487,1153511,1153517,1153531,1153553,1153573,1153577,1153589, 1153597,1153609,1153613,1153639,1153643,1153681,1153687,1153721,1153729, 1153751,1153753,1153759,1153769,1153777,1153799,1153811,1153849,1153853, 1153871,1153891,1153921,1153967,1153973,1154017,1154029,1154033,1154039, 1154047,1154051,1154119,1154123,1154129,1154159,1154173,1154177,1154183, 1154207,1154221,1154227,1154233,1154239,1154243,1154267,1154291,1154297, 1154299,1154311,1154323,1154327,1154339,1154353,1154359,1154369,1154401, 1154411,1154431,1154449,1154467,1154473,1154509,1154513,1154537,1154539, 1154551,1154561,1154563,1154567,1154579,1154581,1154603,1154633,1154639, 1154651,1154653,1154707,1154723,1154737,1154753,1154771,1154789,1154819, 1154821,1154849,1154863,1154887,1154893,1154897,1154911,1154927,1154947, 1154969,1154971,1154987,1155001,1155017,1155019,1155053,1155061,1155071, 1155097,1155101,1155107,1155127,1155149,1155151,1155169,1155179,1155211, 1155223,1155233,1155239,1155247,1155263,1155293,1155311,1155317,1155373, 1155377,1155379,1155403,1155419,1155431,1155437,1155449,1155457,1155461, 1155499,1155527,1155529,1155569,1155577,1155601,1155607,1155611,1155613, 1155617,1155619,1155629,1155631,1155653,1155659,1155689,1155697,1155701, 1155703,1155709,1155733,1155821,1155823,1155829,1155841,1155851,1155859, 1155863,1155899,1155901,1155907,1155919,1155923,1155929,1155937,1155943, 1155953,1155961,1155967,1155971,1155977,1155997,1156009,1156013,1156019, 1156031,1156033,1156037,1156039,1156073,1156079,1156087,1156097,1156109, 1156121,1156151,1156157,1156171,1156217,1156229,1156231,1156249,1156261, 1156271,1156291,1156297,1156303,1156307,1156327,1156333,1156343,1156367, 1156369,1156387,1156403,1156423,1156427,1156429,1156451,1156453,1156457, 1156483,1156501,1156523,1156537,1156541,1156553,1156567,1156591,1156613, 1156627,1156633,1156637,1156643,1156681,1156699,1156709,1156711,1156721, 1156741,1156747,1156751,1156769,1156783,1156801,1156807,1156819,1156823, 1156847,1156849,1156873,1156907,1156927,1156949,1156963,1156997,1157011, 1157017,1157033,1157053,1157059,1157063,1157069,1157077,1157099,1157111, 1157131,1157159,1157171,1157179,1157183,1157201,1157203,1157209,1157213, 1157227,1157237,1157243,1157251,1157257,1157263,1157279,1157293,1157327, 1157333,1157339,1157341,1157357,1157363,1157369,1157381,1157393,1157413, 1157437,1157449,1157489,1157491,1157503,1157531,1157539,1157557,1157579, 1157591,1157609,1157621,1157627,1157641,1157669,1157671,1157699,1157701, 1157711,1157713,1157729,1157747,1157749,1157759,1157771,1157773,1157791, 1157831,1157833,1157837,1157839,1157851,1157869,1157873,1157899,1157929, 1157953,1157969,1157977,1157987,1158007,1158011,1158037,1158071,1158077, 1158089,1158121,1158133,1158139,1158161,1158187,1158197,1158203,1158217, 1158247,1158251,1158263,1158271,1158293,1158301,1158307,1158317,1158323, 1158341,1158361,1158383,1158389,1158401,1158407,1158419,1158427,1158457, 1158461,1158467,1158473,1158481,1158491,1158523,1158529,1158539,1158541, 1158551,1158569,1158587,1158593,1158607,1158611,1158613,1158617,1158629, 1158643,1158653,1158673,1158679,1158683,1158713,1158719,1158743,1158757, 1158761,1158769,1158799,1158821,1158823,1158827,1158841,1158847,1158863, 1158881,1158887,1158923,1158953,1158961,1158977,1158991,1159001,1159007, 1159027,1159031,1159049,1159063,1159073,1159079,1159087,1159091,1159127, 1159139,1159153,1159187,1159189,1159199,1159201,1159229,1159231,1159241, 1159243,1159259,1159271,1159283,1159303,1159337,1159339,1159381,1159393, 1159397,1159421,1159423,1159429,1159447,1159463,1159489,1159517,1159523, 1159531,1159541,1159577,1159583,1159597,1159601,1159633,1159649,1159661, 1159663,1159709,1159721,1159777,1159787,1159789,1159811,1159813,1159843, 1159853,1159861,1159877,1159889,1159901,1159909,1159919,1159967,1159973, 1159981,1159993,1159997,1160009,1160039,1160041,1160057,1160077,1160111, 1160129,1160141,1160147,1160161,1160167,1160179,1160207,1160213,1160219, 1160221,1160227,1160251,1160279,1160287,1160297,1160303,1160309,1160317, 1160351,1160359,1160363,1160371,1160407,1160413,1160429,1160443,1160447, 1160449,1160459,1160473,1160479,1160491,1160503,1160513,1160519,1160543, 1160567,1160569,1160581,1160597,1160611,1160639,1160659,1160681,1160689, 1160713,1160717,1160749,1160771,1160807,1160813,1160837,1160839,1160867, 1160893,1160903,1160911,1160927,1160941,1160953,1160977,1160983,1160987, 1160989,1161001,1161007,1161011,1161031,1161037,1161047,1161059,1161077, 1161091,1161101,1161107,1161113,1161137,1161143,1161163,1161169,1161203, 1161217,1161227,1161233,1161239,1161241,1161263,1161269,1161289,1161313, 1161317,1161331,1161343,1161371,1161397,1161401,1161403,1161437,1161439, 1161443,1161449,1161463,1161481,1161487,1161493,1161497,1161499,1161509, 1161521,1161529,1161547,1161551,1161553,1161581,1161599,1161617,1161619, 1161637,1161647,1161659,1161683,1161691,1161703,1161749,1161757,1161761, 1161767,1161781,1161791,1161829,1161833,1161841,1161851,1161857,1161871, 1161877,1161883,1161893,1161929,1161931,1161947,1161949,1161991,1161997, 1162009,1162037,1162043,1162061,1162067,1162079,1162081,1162093,1162099, 1162129,1162193,1162219,1162223,1162229,1162243,1162253,1162261,1162277, 1162279,1162297,1162303,1162321,1162339,1162361,1162367,1162373,1162417, 1162423,1162453,1162463,1162471,1162481,1162493,1162501,1162507,1162529, 1162537,1162541,1162543,1162547,1162559,1162571,1162573,1162583,1162589, 1162597,1162619,1162621,1162631,1162649,1162663,1162669,1162687,1162691, 1162709,1162727,1162729,1162741,1162751,1162753,1162771,1162789,1162793, 1162807,1162853,1162859,1162867,1162877,1162879,1162897,1162901,1162907, 1162927,1162937,1162943,1162951,1162957,1162961,1162969,1162981,1162991, 1163003,1163011,1163017,1163033,1163039,1163069,1163077,1163081,1163083, 1163093,1163111,1163119,1163131,1163137,1163143,1163147,1163159,1163167, 1163177,1163189,1163207,1163221,1163231,1163233,1163251,1163257,1163263, 1163273,1163311,1163329,1163333,1163339,1163353,1163417,1163423,1163431, 1163441,1163467,1163473,1163479,1163483,1163507,1163521,1163543,1163551, 1163557,1163581,1163587,1163609,1163611,1163627,1163629,1163641,1163651, 1163653,1163663,1163671,1163689,1163699,1163711,1163713,1163717,1163719, 1163737,1163753,1163759,1163783,1163791,1163821,1163831,1163843,1163849, 1163873,1163879,1163891,1163923,1163947,1163969,1163971,1163977,1163989, 1163993,1164001,1164029,1164043,1164067,1164071,1164077,1164091,1164101, 1164173,1164179,1164181,1164193,1164199,1164203,1164217,1164221,1164253, 1164287,1164323,1164343,1164367,1164409,1164413,1164419,1164431,1164433, 1164439,1164461,1164479,1164497,1164503,1164511,1164521,1164533,1164557, 1164571,1164587,1164589,1164593,1164599,1164607,1164617,1164623,1164629, 1164641,1164659,1164671,1164689,1164731,1164749,1164791,1164799,1164803, 1164811,1164817,1164829,1164841,1164853,1164859,1164869,1164899,1164937, 1164941,1164953,1164967,1164979,1164991,1164997,1165001,1165037,1165049, 1165051,1165057,1165069,1165079,1165081,1165103,1165121,1165127,1165139, 1165147,1165183,1165187,1165189,1165193,1165201,1165207,1165211,1165217, 1165223,1165273,1165279,1165301,1165303,1165349,1165357,1165361,1165363, 1165379,1165397,1165399,1165421,1165447,1165453,1165471,1165511,1165529, 1165531,1165579,1165583,1165643,1165667,1165691,1165711,1165721,1165727, 1165729,1165739,1165751,1165777,1165789,1165799,1165819,1165823,1165831, 1165837,1165849,1165861,1165873,1165889,1165903,1165909,1165919,1165921, 1165933,1165937,1165943,1165949,1165951,1165991,1165993,1166021,1166027, 1166041,1166057,1166083,1166089,1166093,1166101,1166107,1166131,1166141, 1166147,1166153,1166213,1166219,1166227,1166237,1166287,1166311,1166323, 1166329,1166359,1166383,1166393,1166401,1166411,1166413,1166441,1166453, 1166479,1166483,1166497,1166507,1166527,1166531,1166533,1166549,1166563, 1166567,1166569,1166579,1166597,1166603,1166609,1166617,1166639,1166663, 1166677,1166687,1166713,1166723,1166729,1166741,1166773,1166779,1166801, 1166807,1166827,1166833,1166839,1166849,1166857,1166861,1166903,1166927, 1166929,1166947,1166953,1166969,1166987,1167011,1167013,1167053,1167059, 1167077,1167083,1167139,1167143,1167157,1167167,1167193,1167209,1167211, 1167217,1167233,1167241,1167251,1167277,1167289,1167293,1167307,1167317, 1167329,1167347,1167349,1167359,1167391,1167409,1167421,1167443,1167449, 1167469,1167473,1167539,1167547,1167559,1167571,1167581,1167587,1167599, 1167613,1167623,1167637,1167653,1167659,1167667,1167689,1167697,1167701, 1167703,1167707,1167709,1167731,1167763,1167773,1167791,1167799,1167811, 1167821,1167823,1167833,1167839,1167841,1167847,1167853,1167869,1167889, 1167899,1167913,1167919,1167937,1167953,1167973,1168001,1168007,1168031, 1168039,1168043,1168093,1168133,1168151,1168169,1168183,1168187,1168231, 1168241,1168243,1168247,1168249,1168261,1168301,1168319,1168327,1168337, 1168339,1168351,1168357,1168361,1168397,1168399,1168403,1168411,1168451, 1168463,1168477,1168487,1168493,1168501,1168523,1168537,1168553,1168619, 1168621,1168627,1168637,1168639,1168693,1168711,1168721,1168751,1168757, 1168763,1168771,1168789,1168799,1168819,1168829,1168831,1168841,1168847, 1168859,1168877,1168879,1168897,1168919,1168927,1168931,1168933,1168957, 1168969,1168987,1168997,1169009,1169011,1169017,1169023,1169027,1169029, 1169059,1169081,1169131,1169137,1169149,1169171,1169177,1169183,1169191, 1169249,1169257,1169261,1169269,1169281,1169293,1169323,1169327,1169341, 1169347,1169353,1169369,1169381,1169383,1169401,1169411,1169417,1169419, 1169449,1169453,1169473,1169477,1169491,1169513,1169521,1169563,1169587, 1169591,1169593,1169603,1169627,1169633,1169647,1169669,1169677,1169683, 1169687,1169713,1169741,1169747,1169759,1169761,1169767,1169789,1169801, 1169809,1169827,1169873,1169879,1169899,1169929,1169933,1169939,1170007, 1170011,1170019,1170023,1170031,1170049,1170061,1170067,1170089,1170107, 1170109,1170119,1170131,1170133,1170137,1170139,1170167,1170173,1170193, 1170203,1170209,1170233,1170251,1170271,1170277,1170311,1170317,1170329, 1170349,1170361,1170373,1170397,1170437,1170443,1170451,1170461,1170487, 1170497,1170511,1170517,1170523,1170541,1170553,1170563,1170581,1170583, 1170593,1170599,1170607,1170641,1170649,1170661,1170667,1170679,1170683, 1170707,1170709,1170713,1170721,1170727,1170751,1170779,1170781,1170787, 1170803,1170811,1170821,1170833,1170853,1170857,1170863,1170899,1170941, 1170947,1170971,1170979,1171031,1171033,1171039,1171057,1171061,1171069, 1171073,1171109,1171111,1171117,1171123,1171133,1171189,1171199,1171201, 1171207,1171231,1171241,1171243,1171253,1171259,1171267,1171301,1171319, 1171343,1171393,1171399,1171421,1171427,1171447,1171451,1171463,1171477, 1171517,1171523,1171529,1171549,1171553,1171561,1171579,1171591,1171601, 1171619,1171633,1171637,1171661,1171669,1171699,1171721,1171747,1171771, 1171783,1171789,1171801,1171811,1171813,1171823,1171837,1171847,1171867, 1171921,1171927,1171931,1171957,1171967,1171969,1171979,1171981,1171991, 1171999,1172009,1172021,1172023,1172027,1172029,1172047,1172063,1172069, 1172081,1172107,1172111,1172147,1172179,1172207,1172233,1172257,1172261, 1172273,1172279,1172317,1172329,1172351,1172377,1172393,1172401,1172407, 1172411,1172417,1172429,1172443,1172447,1172461,1172467,1172491,1172497, 1172503,1172531,1172533,1172537,1172539,1172543,1172573,1172579,1172657, 1172659,1172663,1172671,1172681,1172683,1172687,1172713,1172749,1172777, 1172783,1172797,1172803,1172807,1172819,1172833,1172867,1172893,1172903, 1172921,1172929,1172933,1172939,1172953,1172957,1172959,1172981,1172993, 1173001,1173013,1173043,1173059,1173101,1173121,1173127,1173157,1173163, 1173173,1173181,1173191,1173199,1173223,1173239,1173259,1173281,1173283, 1173301,1173343,1173349,1173373,1173397,1173401,1173407,1173433,1173439, 1173463,1173481,1173511,1173521,1173539,1173541,1173551,1173553,1173581, 1173583,1173587,1173589,1173593,1173617,1173631,1173709,1173743,1173749, 1173779,1173787,1173803,1173811,1173827,1173829,1173841,1173853,1173881, 1173883,1173917,1173937,1173941,1173947,1173959,1173961,1173979,1173983, 1174021,1174027,1174031,1174049,1174073,1174079,1174091,1174093,1174099, 1174141,1174163,1174171,1174193,1174211,1174213,1174231,1174237,1174247, 1174259,1174267,1174273,1174301,1174307,1174319,1174331,1174337,1174339, 1174361,1174387,1174399,1174423,1174441,1174451,1174463,1174469,1174477, 1174487,1174489,1174499,1174507,1174519,1174531,1174549,1174571,1174583, 1174601,1174603,1174619,1174627,1174669,1174673,1174681,1174687,1174709, 1174721,1174727,1174739,1174759,1174763,1174769,1174781,1174783,1174793, 1174801,1174829,1174847,1174879,1174883,1174891,1174897,1174913,1174919, 1174949,1174951,1174969,1174973,1175003,1175021,1175029,1175039,1175071, 1175077,1175099,1175107,1175123,1175143,1175149,1175173,1175191,1175219, 1175243,1175249,1175257,1175267,1175297,1175351,1175353,1175371,1175387, 1175389,1175407,1175411,1175413,1175417,1175437,1175467,1175479,1175483, 1175497,1175509,1175521,1175561,1175569,1175579,1175591,1175617,1175623, 1175627,1175651,1175659,1175677,1175683,1175687,1175711,1175717,1175723, 1175729,1175743,1175767,1175789,1175791,1175803,1175807,1175813,1175819, 1175821,1175833,1175849,1175857,1175887,1175899,1175927,1175939,1175953, 1175959,1175963,1175969,1175981,1175989,1176023,1176029,1176031,1176041, 1176061,1176083,1176089,1176113,1176121,1176127,1176137,1176163,1176173, 1176187,1176191,1176221,1176223,1176239,1176277,1176293,1176323,1176353, 1176361,1176367,1176377,1176391,1176397,1176403,1176407,1176421,1176433, 1176449,1176463,1176509,1176521,1176529,1176533,1176557,1176583,1176589, 1176599,1176601,1176607,1176631,1176641,1176647,1176671,1176673,1176701, 1176709,1176713,1176737,1176767,1176779,1176787,1176793,1176797,1176811, 1176827,1176869,1176871,1176881,1176899,1176911,1176937,1176943,1176947, 1176949,1176983,1177009,1177019,1177027,1177037,1177067,1177073,1177087, 1177093,1177103,1177129,1177147,1177153,1177157,1177159,1177171,1177181, 1177201,1177207,1177219,1177223,1177237,1177243,1177247,1177277,1177291, 1177331,1177387,1177399,1177427,1177433,1177447,1177453,1177459,1177481, 1177489,1177499,1177507,1177513,1177529,1177541,1177543,1177549,1177571, 1177609,1177613,1177619,1177621,1177637,1177651,1177667,1177681,1177697, 1177711,1177717,1177723,1177733,1177739,1177741,1177751,1177763,1177769, 1177801,1177843,1177859,1177873,1177877,1177901,1177919,1177921,1177933, 1177949,1177987,1177997,1178003,1178017,1178033,1178039,1178041,1178059, 1178069,1178087,1178101,1178113,1178123,1178131,1178141,1178159,1178161, 1178167,1178173,1178189,1178197,1178201,1178207,1178213,1178227,1178231, 1178237,1178239,1178263,1178269,1178273,1178297,1178347,1178363,1178369, 1178371,1178377,1178393,1178417,1178447,1178461,1178479,1178483,1178521, 1178533,1178537,1178549,1178557,1178591,1178609,1178621,1178623,1178633, 1178641,1178659,1178669,1178689,1178699,1178701,1178707,1178711,1178717, 1178719,1178743,1178753,1178767,1178803,1178809,1178833,1178843,1178851, 1178887,1178897,1178909,1178921,1178927,1178939,1178953,1178959,1178963, 1178971,1178977,1178981,1178993,1179011,1179019,1179047,1179109,1179127, 1179149,1179151,1179173,1179179,1179193,1179203,1179223,1179251,1179253, 1179259,1179263,1179281,1179287,1179289,1179293,1179317,1179319,1179323, 1179329,1179331,1179337,1179379,1179383,1179389,1179403,1179413,1179419, 1179421,1179427,1179467,1179491,1179499,1179527,1179547,1179551,1179553, 1179569,1179571,1179583,1179589,1179599,1179637,1179641,1179649,1179677, 1179733,1179751,1179757,1179779,1179793,1179797,1179839,1179847,1179853, 1179859,1179863,1179869,1179883,1179901,1179907,1179929,1179947,1179961, 1179973,1179977,1179979,1179989,1179991,1180009,1180013,1180019,1180027, 1180031,1180043,1180057,1180073,1180087,1180093,1180099,1180111,1180117, 1180121,1180133,1180141,1180159,1180171,1180219,1180237,1180241,1180243, 1180247,1180253,1180279,1180303,1180313,1180351,1180369,1180373,1180381, 1180391,1180397,1180409,1180423,1180427,1180447,1180477,1180493,1180507, 1180519,1180537,1180547,1180549,1180577,1180591,1180631,1180637,1180643, 1180657,1180661,1180691,1180693,1180709,1180721,1180723,1180727,1180733, 1180757,1180771,1180799,1180807,1180811,1180819,1180847,1180849,1180853, 1180859,1180873,1180877,1180891,1180897,1180901,1180903,1180913,1180931, 1180937,1180951,1180957,1180961,1180979,1180987,1180997,1181017,1181023, 1181039,1181051,1181053,1181057,1181093,1181099,1181137,1181149,1181153, 1181171,1181183,1181197,1181203,1181209,1181237,1181263,1181267,1181269, 1181281,1181293,1181309,1181311,1181321,1181329,1181407,1181413,1181437, 1181443,1181461,1181471,1181473,1181501,1181507,1181519,1181527,1181549, 1181561,1181563,1181573,1181581,1181611,1181617,1181633,1181647,1181681, 1181699,1181701,1181723,1181729,1181731,1181759,1181767,1181771,1181773, 1181777,1181839,1181879,1181881,1181893,1181897,1181911,1181923,1181927, 1181963,1181969,1181981,1181987,1182007,1182019,1182023,1182031,1182043, 1182073,1182121,1182133,1182143,1182157,1182211,1182253,1182277,1182281, 1182283,1182287,1182289,1182331,1182341,1182343,1182347,1182353,1182383, 1182397,1182403,1182413,1182421,1182431,1182437,1182439,1182449,1182451, 1182463,1182479,1182487,1182491,1182509,1182521,1182539,1182547,1182581, 1182593,1182611,1182659,1182677,1182679,1182689,1182691,1182697,1182703, 1182737,1182739,1182757,1182763,1182767,1182781,1182787,1182791,1182817, 1182847,1182869,1182889,1182893,1182901,1182917,1182919,1182947,1182953, 1182967,1182989,1183003,1183027,1183031,1183033,1183057,1183079,1183093, 1183103,1183121,1183123,1183141,1183151,1183157,1183159,1183163,1183181, 1183199,1183201,1183211,1183213,1183241,1183261,1183267,1183271,1183277, 1183279,1183333,1183337,1183349,1183381,1183393,1183397,1183409,1183411, 1183423,1183447,1183451,1183471,1183477,1183531,1183537,1183541,1183561, 1183571,1183579,1183597,1183607,1183613,1183687,1183697,1183709,1183723, 1183729,1183733,1183739,1183753,1183759,1183769,1183771,1183781,1183799, 1183811,1183813,1183837,1183843,1183877,1183913,1183933,1183939,1183943, 1183951,1183961,1183969,1183981,1183993,1183997,1184003,1184011,1184047, 1184059,1184069,1184077,1184081,1184083,1184093,1184119,1184123,1184129, 1184143,1184149,1184171,1184173,1184207,1184219,1184243,1184269,1184291, 1184299,1184303,1184317,1184329,1184347,1184357,1184363,1184369,1184377, 1184399,1184411,1184413,1184423,1184429,1184453,1184459,1184461,1184471, 1184473,1184483,1184489,1184507,1184527,1184537,1184539,1184549,1184551, 1184587,1184609,1184653,1184663,1184671,1184683,1184731,1184741,1184749, 1184759,1184767,1184791,1184797,1184837,1184839,1184867,1184881,1184893, 1184903,1184923,1184927,1184933,1184947,1184957,1184959,1184987,1184993, 1185013,1185017,1185071,1185077,1185089,1185103,1185109,1185113,1185127, 1185131,1185179,1185181,1185241,1185281,1185287,1185299,1185307,1185313, 1185319,1185329,1185337,1185343,1185361,1185367,1185377,1185383,1185389, 1185403,1185439,1185463,1185469,1185493,1185497,1185511,1185523,1185551, 1185559,1185577,1185589,1185601,1185617,1185623,1185637,1185643,1185647, 1185659,1185661,1185671,1185677,1185683,1185689,1185697,1185703,1185707, 1185721,1185749,1185787,1185791,1185797,1185817,1185823,1185827,1185851, 1185859,1185871,1185883,1185889,1185893,1185907,1185929,1185931,1185953, 1185979,1185997,1186001,1186033,1186049,1186051,1186057,1186063,1186067, 1186079,1186099,1186111,1186117,1186121,1186127,1186147,1186169,1186181, 1186217,1186231,1186249,1186259,1186291,1186321,1186337,1186349,1186351, 1186373,1186397,1186403,1186411,1186439,1186441,1186489,1186517,1186519, 1186541,1186573,1186589,1186597,1186621,1186631,1186657,1186673,1186693, 1186697,1186699,1186739,1186741,1186751,1186769,1186789,1186807,1186811, 1186813,1186837,1186841,1186847,1186879,1186931,1186937,1186963,1186973, 1186981,1187003,1187009,1187023,1187047,1187051,1187089,1187107,1187111, 1187117,1187141,1187159,1187167,1187189,1187201,1187227,1187233,1187239, 1187261,1187279,1187287,1187309,1187311,1187317,1187321,1187339,1187341, 1187353,1187357,1187363,1187369,1187383,1187387,1187411,1187413,1187419, 1187429,1187453,1187471,1187479,1187489,1187507,1187509,1187539,1187551, 1187561,1187567,1187587,1187623,1187629,1187639,1187657,1187687,1187689, 1187699,1187701,1187707,1187717,1187723,1187741,1187749,1187761,1187801, 1187803,1187819,1187821,1187833,1187839,1187863,1187867,1187873,1187887, 1187897,1187911,1187933,1187939,1187941,1187947,1187981,1187993,1187999, 1188001,1188007,1188017,1188029,1188037,1188041,1188049,1188059,1188071, 1188073,1188149,1188151,1188167,1188169,1188179,1188197,1188223,1188227, 1188233,1188247,1188259,1188263,1188269,1188277,1188287,1188289,1188293, 1188307,1188353,1188359,1188361,1188377,1188389,1188409,1188413,1188457, 1188491,1188511,1188527,1188529,1188553,1188557,1188559,1188581,1188587, 1188601,1188613,1188619,1188637,1188653,1188661,1188667,1188679,1188689, 1188721,1188727,1188731,1188763,1188769,1188787,1188839,1188841,1188851, 1188857,1188899,1188917,1188931,1188937,1188947,1188973,1188977,1188991, 1189003,1189007,1189021,1189033,1189057,1189061,1189063,1189093,1189109, 1189121,1189127,1189151,1189159,1189163,1189171,1189189,1189193,1189213, 1189219,1189231,1189271,1189277,1189301,1189313,1189327,1189333,1189339, 1189361,1189387,1189403,1189417,1189453,1189469,1189471,1189481,1189483, 1189553,1189567,1189577,1189579,1189603,1189607,1189613,1189621,1189627, 1189631,1189633,1189637,1189649,1189651,1189673,1189703,1189709,1189717, 1189751,1189757,1189759,1189763,1189789,1189801,1189807,1189823,1189831, 1189843,1189871,1189879,1189891,1189897,1189901,1189907,1189919,1189933, 1189967,1189999,1190011,1190023,1190029,1190041,1190047,1190069,1190071, 1190081,1190143,1190149,1190159,1190177,1190201,1190237,1190249,1190261, 1190263,1190279,1190291,1190311,1190347,1190359,1190381,1190417,1190429, 1190447,1190467,1190473,1190477,1190489,1190491,1190507,1190509,1190513, 1190533,1190573,1190587,1190591,1190611,1190633,1190639,1190647,1190671, 1190699,1190701,1190719,1190723,1190737,1190743,1190753,1190773,1190789, 1190807,1190809,1190821,1190831,1190837,1190851,1190873,1190897,1190899, 1190911,1190923,1190929,1190947,1190951,1190953,1190983,1191011,1191013, 1191019,1191031,1191061,1191077,1191079,1191089,1191097,1191103,1191107, 1191109,1191119,1191131,1191149,1191163,1191187,1191191,1191199,1191209, 1191221,1191247,1191277,1191283,1191293,1191301,1191313,1191341,1191347, 1191353,1191373,1191409,1191431,1191439,1191457,1191481,1191499,1191529, 1191539,1191551,1191559,1191563,1191571,1191577,1191601,1191611,1191613, 1191637,1191643,1191667,1191679,1191691,1191703,1191719,1191727,1191731, 1191739,1191761,1191767,1191769,1191781,1191793,1191809,1191821,1191833, 1191847,1191899,1191923,1191937,1191941,1191947,1191973,1191979,1191991, 1192013,1192027,1192039,1192069,1192073,1192097,1192099,1192109,1192127, 1192141,1192151,1192153,1192171,1192181,1192183,1192187,1192199,1192201, 1192207,1192211,1192241,1192253,1192259,1192267,1192271,1192327,1192337, 1192339,1192349,1192357,1192369,1192391,1192409,1192417,1192423,1192427, 1192453,1192469,1192483,1192517,1192549,1192559,1192561,1192571,1192579, 1192589,1192603,1192651,1192673,1192679,1192699,1192717,1192721,1192753, 1192781,1192811,1192817,1192823,1192831,1192837,1192847,1192853,1192879, 1192883,1192889,1192897,1192903,1192909,1192927,1192937,1192951,1192967, 1192969,1193011,1193021,1193041,1193047,1193057,1193081,1193107,1193119, 1193123,1193131,1193149,1193161,1193173,1193183,1193209,1193233,1193237, 1193239,1193243,1193261,1193267,1193299,1193303,1193329,1193351,1193363, 1193369,1193399,1193429,1193431,1193443,1193459,1193473,1193483,1193497, 1193501,1193503,1193513,1193537,1193557,1193567,1193573,1193603,1193609, 1193617,1193653,1193663,1193683,1193693,1193701,1193707,1193711,1193729, 1193737,1193741,1193743,1193761,1193767,1193771,1193783,1193821,1193833, 1193837,1193839,1193849,1193867,1193869,1193887,1193909,1193911,1193939, 1193947,1193963,1193971,1193989,1193993,1194019,1194023,1194031,1194041, 1194047,1194059,1194103,1194157,1194161,1194163,1194203,1194209,1194211, 1194241,1194251,1194253,1194269,1194293,1194311,1194329,1194341,1194343, 1194373,1194379,1194383,1194407,1194421,1194439,1194443,1194449,1194463, 1194493,1194517,1194521,1194541,1194547,1194553,1194581,1194593,1194601, 1194631,1194659,1194667,1194671,1194679,1194707,1194727,1194731,1194733, 1194751,1194757,1194763,1194769,1194797,1194799,1194803,1194821,1194847, 1194857,1194877,1194883,1194889,1194899,1194901,1194917,1194923,1194959, 1194961,1194971,1194979,1194997,1195021,1195031,1195037,1195039,1195067, 1195091,1195121,1195123,1195127,1195141,1195153,1195169,1195171,1195189, 1195193,1195217,1195223,1195231,1195237,1195247,1195277,1195291,1195361, 1195387,1195421,1195429,1195459,1195463,1195477,1195483,1195489,1195501, 1195543,1195547,1195549,1195561,1195567,1195573,1195589,1195669,1195673, 1195679,1195681,1195693,1195703,1195709,1195721,1195723,1195741,1195751, 1195759,1195771,1195801,1195807,1195811,1195837,1195849,1195891,1195897, 1195907,1195919,1195927,1195937,1195979,1195991,1196003,1196029,1196033, 1196059,1196077,1196087,1196089,1196119,1196123,1196141,1196177,1196191, 1196201,1196219,1196227,1196231,1196267,1196269,1196281,1196287,1196309, 1196323,1196329,1196347,1196357,1196359,1196399,1196401,1196413,1196431, 1196471,1196473,1196491,1196501,1196509,1196513,1196519,1196521,1196537, 1196539,1196593,1196597,1196603,1196609,1196633,1196653,1196683,1196707, 1196717,1196719,1196729,1196731,1196773,1196809,1196813,1196837,1196843, 1196857,1196861,1196863,1196869,1196873,1196891,1196911,1196927,1196939, 1196959,1196999,1197011,1197013,1197017,1197029,1197037,1197041,1197059, 1197067,1197073,1197103,1197107,1197113,1197121,1197167,1197181,1197187, 1197193,1197197,1197199,1197211,1197221,1197239,1197257,1197263,1197269, 1197277,1197281,1197289,1197307,1197337,1197347,1197349,1197353,1197359, 1197367,1197389,1197407,1197409,1197433,1197451,1197467,1197473,1197479, 1197509,1197527,1197571,1197577,1197601,1197617,1197619,1197631,1197649, 1197697,1197709,1197739,1197743,1197751,1197767,1197799,1197821,1197827, 1197829,1197881,1197901,1197907,1197923,1197929,1197941,1197947,1197953, 1197971,1197997,1198013,1198033,1198037,1198049,1198051,1198063,1198069, 1198073,1198081,1198103,1198123,1198133,1198151,1198157,1198187,1198189, 1198201,1198217,1198229,1198247,1198259,1198261,1198289,1198291,1198297, 1198303,1198321,1198343,1198361,1198363,1198397,1198399,1198403,1198411, 1198427,1198433,1198447,1198451,1198469,1198481,1198511,1198513,1198523, 1198537,1198583,1198607,1198609,1198621,1198643,1198651,1198661,1198669, 1198679,1198699,1198727,1198751,1198793,1198811,1198819,1198849,1198853, 1198861,1198867,1198877,1198903,1198927,1198949,1198973,1198979,1198991, 1198997,1198999,1199039,1199047,1199069,1199083,1199087,1199089,1199117, 1199123,1199131,1199137,1199167,1199183,1199189,1199203,1199257,1199309, 1199329,1199351,1199357,1199369,1199371,1199377,1199389,1199417,1199423, 1199437,1199441,1199447,1199459,1199461,1199467,1199477,1199491,1199507, 1199509,1199521,1199551,1199557,1199573,1199587,1199591,1199593,1199617, 1199621,1199623,1199629,1199659,1199663,1199677,1199683,1199689,1199699, 1199711,1199719,1199767,1199777,1199789,1199801,1199813,1199819,1199833, 1199839,1199851,1199857,1199879,1199893,1199899,1199909,1199923,1199929, 1199953,1199969,1199993,1199999,1200007,1200061,1200077,1200083,1200109, 1200139,1200161,1200167,1200179,1200187,1200191,1200233,1200253,1200307, 1200313,1200323,1200341,1200349,1200359,1200361,1200371,1200373,1200377, 1200383,1200389,1200403,1200443,1200449,1200461,1200467,1200491,1200499, 1200509,1200527,1200581,1200583,1200607,1200611,1200637,1200643,1200673, 1200679,1200691,1200697,1200701,1200739,1200751,1200779,1200799,1200809, 1200811,1200833,1200839,1200869,1200883,1200887,1200889,1200917,1200929, 1200937,1200943,1200949,1200959,1200989,1201001,1201003,1201019,1201021, 1201027,1201043,1201049,1201061,1201073,1201087,1201097,1201103,1201111, 1201117,1201141,1201153,1201163,1201171,1201183,1201201,1201217,1201229, 1201241,1201247,1201261,1201283,1201307,1201309,1201327,1201337,1201381, 1201439,1201469,1201481,1201483,1201489,1201493,1201513,1201523,1201531, 1201553,1201559,1201567,1201583,1201601,1201633,1201637,1201643,1201687, 1201691,1201699,1201703,1201709,1201729,1201787,1201793,1201813,1201829, 1201841,1201843,1201853,1201873,1201909,1201919,1201939,1201961,1201969, 1201999,1202009,1202017,1202023,1202027,1202029,1202041,1202057,1202063, 1202077,1202081,1202099,1202107,1202129,1202147,1202153,1202183,1202191, 1202219,1202221,1202231,1202239,1202251,1202261,1202269,1202293,1202303, 1202317,1202321,1202329,1202347,1202363,1202387,1202423,1202429,1202437, 1202447,1202471,1202473,1202477,1202483,1202497,1202501,1202507,1202549, 1202561,1202569,1202603,1202609,1202627,1202629,1202633,1202689,1202741, 1202743,1202771,1202779,1202783,1202791,1202807,1202813,1202819,1202827, 1202837,1202843,1202849,1202857,1202863,1202867,1202881,1202939,1202959, 1202963,1202977,1202987,1203019,1203067,1203077,1203101,1203121,1203127, 1203149,1203151,1203161,1203179,1203193,1203211,1203217,1203221,1203229, 1203233,1203263,1203283,1203287,1203329,1203331,1203343,1203359,1203361, 1203421,1203437,1203443,1203457,1203463,1203467,1203487,1203493,1203509, 1203533,1203557,1203571,1203581,1203607,1203611,1203619,1203641,1203661, 1203667,1203689,1203691,1203731,1203733,1203739,1203757,1203773,1203779, 1203791,1203793,1203799,1203809,1203817,1203827,1203841,1203863,1203887, 1203893,1203899,1203901,1203913,1203919,1203929,1203931,1203941,1203949, 1203953,1203959,1203971,1204003,1204019,1204037,1204097,1204103,1204117, 1204139,1204141,1204153,1204169,1204171,1204183,1204207,1204219,1204243, 1204271,1204279,1204289,1204309,1204337,1204363,1204369,1204397,1204409, 1204421,1204447,1204451,1204453,1204471,1204477,1204493,1204507,1204519, 1204529,1204561,1204583,1204597,1204607,1204613,1204633,1204649,1204669, 1204681,1204699,1204711,1204729,1204741,1204781,1204783,1204787,1204813, 1204823,1204859,1204871,1204873,1204883,1204891,1204937,1204967,1204969, 1204981,1205027,1205047,1205081,1205089,1205093,1205101,1205117,1205119, 1205123,1205159,1205173,1205179,1205219,1205231,1205251,1205257,1205287, 1205293,1205339,1205377,1205387,1205411,1205437,1205447,1205459,1205467, 1205471,1205473,1205489,1205513,1205527,1205537,1205539,1205549,1205557, 1205563,1205609,1205627,1205629,1205639,1205647,1205653,1205663,1205669, 1205681,1205693,1205707,1205713,1205717,1205731,1205749,1205753,1205767, 1205773,1205779,1205819,1205843,1205891,1205899,1205903,1205921,1205947, 1205951,1205969,1205977,1205999,1206013,1206017,1206043,1206053,1206059, 1206061,1206071,1206113,1206131,1206151,1206157,1206169,1206173,1206181, 1206187,1206199,1206209,1206223,1206229,1206259,1206263,1206277,1206307, 1206319,1206323,1206341,1206347,1206353,1206377,1206383,1206391,1206407, 1206433,1206449,1206461,1206467,1206479,1206497,1206529,1206539,1206553, 1206563,1206577,1206581,1206587,1206619,1206637,1206679,1206683,1206691, 1206701,1206703,1206713,1206721,1206731,1206743,1206749,1206761,1206767, 1206769,1206773,1206781,1206791,1206809,1206827,1206841,1206869,1206941, 1206973,1206979,1207001,1207027,1207033,1207039,1207043,1207079,1207093, 1207097,1207111,1207117,1207121,1207123,1207133,1207147,1207159,1207211, 1207223,1207237,1207249,1207259,1207267,1207291,1207307,1207309,1207313, 1207319,1207331,1207343,1207351,1207363,1207379,1207387,1207403,1207417, 1207429,1207439,1207441,1207447,1207489,1207501,1207511,1207519,1207529, 1207537,1207597,1207603,1207627,1207649,1207681,1207699,1207721,1207727, 1207751,1207757,1207769,1207841,1207883,1207903,1207909,1207919,1207933, 1207957,1207961,1207979,1207981,1208017,1208021,1208023,1208027,1208033, 1208057,1208069,1208089,1208113,1208117,1208131,1208149,1208159,1208177, 1208189,1208209,1208219,1208237,1208239,1208243,1208269,1208279,1208297, 1208299,1208303,1208341,1208371,1208387,1208399,1208407,1208413,1208423, 1208447,1208461,1208507,1208521,1208561,1208569,1208573,1208591,1208651, 1208657,1208663,1208677,1208681,1208689,1208707,1208731,1208741,1208777, 1208789,1208791,1208797,1208813,1208821,1208833,1208843,1208849,1208863, 1208873,1208927,1208939,1208941,1208957,1209007,1209017,1209029,1209053, 1209073,1209079,1209083,1209107,1209113,1209121,1209139,1209151,1209163, 1209181,1209191,1209199,1209209,1209223,1209233,1209239,1209251,1209269, 1209277,1209281,1209287,1209311,1209337,1209347,1209353,1209367,1209379, 1209427,1209437,1209457,1209463,1209469,1209487,1209491,1209517,1209539, 1209557,1209563,1209577,1209583,1209587,1209617,1209629,1209631,1209647, 1209671,1209697,1209707,1209709,1209739,1209757,1209763,1209773,1209779, 1209781,1209809,1209811,1209821,1209841,1209853,1209877,1209883,1209889, 1209931,1209947,1209959,1209973,1209979,1210003,1210019,1210021,1210037, 1210039,1210049,1210051,1210067,1210093,1210103,1210123,1210127,1210151, 1210163,1210169,1210177,1210193,1210207,1210211,1210229,1210241,1210259, 1210289,1210351,1210369,1210379,1210387,1210393,1210397,1210399,1210403, 1210409,1210411,1210427,1210439,1210441,1210459,1210477,1210483,1210499, 1210523,1210541,1210549,1210597,1210609,1210613,1210631,1210637,1210639, 1210711,1210717,1210747,1210753,1210777,1210787,1210793,1210799,1210801, 1210817,1210819,1210831,1210843,1210871,1210873,1210877,1210879,1210883, 1210897,1210903,1210921,1210933,1210939,1210949,1210967,1210987,1210999, 1211027,1211039,1211051,1211057,1211059,1211081,1211083,1211087,1211141, 1211167,1211179,1211183,1211191,1211207,1211227,1211261,1211279,1211281, 1211303,1211311,1211333,1211339,1211381,1211389,1211393,1211407,1211411, 1211423,1211443,1211477,1211489,1211501,1211503,1211531,1211537,1211543, 1211549,1211563,1211593,1211597,1211599,1211603,1211621,1211629,1211647, 1211653,1211657,1211659,1211669,1211677,1211689,1211701,1211719,1211723, 1211731,1211737,1211741,1211761,1211767,1211779,1211789,1211797,1211807, 1211813,1211827,1211843,1211857,1211863,1211897,1211911,1211921,1211923, 1211933,1211983,1211999,1212011,1212017,1212023,1212047,1212053,1212061, 1212103,1212119,1212121,1212149,1212173,1212187,1212191,1212199,1212221, 1212227,1212241,1212251,1212259,1212283,1212293,1212301,1212319,1212331, 1212347,1212361,1212373,1212397,1212401,1212427,1212433,1212437,1212439, 1212443,1212473,1212479,1212487,1212517,1212521,1212551,1212569,1212611, 1212613,1212641,1212649,1212671,1212677,1212683,1212697,1212703,1212709, 1212719,1212737,1212769,1212773,1212781,1212787,1212793,1212811,1212817, 1212839,1212847,1212851,1212853,1212857,1212877,1212889,1212907,1212917, 1212919,1212923,1212931,1212943,1212973,1212989,1213007,1213019,1213021, 1213027,1213033,1213049,1213057,1213063,1213081,1213087,1213097,1213109, 1213129,1213133,1213141,1213151,1213153,1213183,1213189,1213213,1213241, 1213253,1213259,1213271,1213301,1213327,1213339,1213357,1213367,1213379, 1213427,1213439,1213451,1213469,1213481,1213483,1213517,1213529,1213547, 1213561,1213573,1213577,1213591,1213601,1213607,1213627,1213631,1213633, 1213643,1213651,1213657,1213661,1213673,1213721,1213741,1213747,1213757, 1213759,1213763,1213781,1213801,1213829,1213837,1213841,1213873,1213879, 1213897,1213907,1213909,1213913,1213921,1213931,1213939,1213943,1213951, 1213981,1214011,1214023,1214039,1214047,1214077,1214093,1214113,1214117, 1214131,1214137,1214141,1214159,1214167,1214183,1214189,1214197,1214219, 1214221,1214237,1214261,1214273,1214281,1214299,1214333,1214357,1214371, 1214393,1214401,1214407,1214413,1214417,1214431,1214441,1214453,1214459, 1214471,1214483,1214489,1214519,1214533,1214567,1214573,1214579,1214593, 1214617,1214623,1214639,1214641,1214657,1214659,1214663,1214669,1214671, 1214683,1214687,1214711,1214729,1214737,1214743,1214749,1214767,1214819, 1214827,1214849,1214867,1214891,1214909,1214923,1214933,1214947,1214957, 1214959,1214963,1214971,1214977,1214981,1215017,1215029,1215047,1215079, 1215083,1215103,1215121,1215133,1215157,1215161,1215167,1215173,1215197, 1215209,1215229,1215239,1215271,1215283,1215299,1215301,1215311,1215329, 1215349,1215359,1215367,1215391,1215397,1215407,1215421,1215433,1215437, 1215439,1215451,1215457,1215463,1215497,1215499,1215509,1215521,1215553, 1215569,1215583,1215587,1215623,1215629,1215631,1215637,1215647,1215649, 1215673,1215679,1215703,1215719,1215743,1215769,1215779,1215787,1215827, 1215839,1215847,1215853,1215859,1215881,1215899,1215917,1215919,1215923, 1216009,1216013,1216021,1216043,1216067,1216069,1216087,1216091,1216109, 1216123,1216147,1216151,1216177,1216213,1216249,1216273,1216277,1216337, 1216339,1216349,1216351,1216373,1216379,1216387,1216393,1216417,1216421, 1216433,1216441,1216451,1216459,1216489,1216507,1216529,1216543,1216547, 1216559,1216561,1216577,1216583,1216591,1216601,1216603,1216619,1216681, 1216693,1216711,1216717,1216729,1216751,1216759,1216763,1216777,1216793, 1216799,1216807,1216823,1216841,1216847,1216849,1216867,1216871,1216879, 1216903,1216913,1216937,1216939,1216951,1216961,1216973,1216987,1216997, 1217009,1217017,1217023,1217033,1217053,1217057,1217063,1217071,1217077, 1217089,1217093,1217107,1217113,1217119,1217131,1217141,1217143,1217147, 1217171,1217179,1217191,1217207,1217213,1217219,1217233,1217261,1217269, 1217297,1217299,1217303,1217309,1217317,1217329,1217351,1217393,1217399, 1217407,1217417,1217423,1217443,1217467,1217471,1217473,1217477,1217483, 1217509,1217521,1217533,1217537,1217561,1217617,1217647,1217651,1217663, 1217669,1217677,1217683,1217687,1217719,1217731,1217753,1217759,1217771, 1217809,1217813,1217831,1217833,1217861,1217893,1217899,1217903,1217917, 1217921,1217927,1217933,1217941,1217947,1217963,1217977,1217989,1218017, 1218043,1218089,1218121,1218131,1218157,1218167,1218179,1218197,1218199, 1218209,1218211,1218221,1218247,1218251,1218257,1218263,1218277,1218281, 1218307,1218313,1218367,1218383,1218391,1218401,1218421,1218433,1218449, 1218457,1218463,1218467,1218473,1218487,1218533,1218557,1218559,1218571, 1218583,1218601,1218617,1218631,1218649,1218653,1218683,1218691,1218709, 1218727,1218731,1218739,1218761,1218773,1218779,1218787,1218821,1218829, 1218853,1218859,1218901,1218911,1218913,1218923,1218941,1218949,1218953, 1218989,1218991,1219003,1219061,1219081,1219091,1219109,1219111,1219123, 1219129,1219147,1219177,1219213,1219237,1219241,1219271,1219279,1219297, 1219301,1219303,1219307,1219313,1219343,1219349,1219357,1219399,1219411, 1219433,1219453,1219457,1219469,1219481,1219487,1219489,1219501,1219507, 1219549,1219577,1219607,1219613,1219619,1219639,1219643,1219649,1219651, 1219657,1219663,1219679,1219703,1219717,1219721,1219727,1219739,1219747, 1219753,1219763,1219783,1219787,1219789,1219793,1219807,1219811,1219831, 1219837,1219843,1219847,1219849,1219859,1219861,1219871,1219877,1219879, 1219891,1219909,1219913,1219919,1219931,1219949,1219951,1219957,1219961, 1219963,1219991,1220027,1220029,1220041,1220071,1220077,1220099,1220147, 1220171,1220203,1220239,1220249,1220251,1220257,1220309,1220327,1220333, 1220347,1220353,1220363,1220369,1220393,1220411,1220423,1220437,1220489, 1220491,1220497,1220507,1220591,1220599,1220623,1220657,1220663,1220669, 1220689,1220699,1220711,1220717,1220729,1220743,1220761,1220773,1220777, 1220783,1220797,1220801,1220803,1220819,1220833,1220839,1220893,1220897, 1220903,1220917,1220927,1220953,1220969,1220981,1220983,1220993,1221019, 1221029,1221049,1221061,1221079,1221083,1221089,1221097,1221113,1221119, 1221131,1221163,1221167,1221193,1221197,1221221,1221223,1221239,1221247, 1221251,1221289,1221299,1221373,1221379,1221383,1221391,1221421,1221427, 1221443,1221449,1221457,1221463,1221469,1221499,1221503,1221523,1221527, 1221533,1221541,1221551,1221557,1221559,1221589,1221593,1221601,1221631, 1221641,1221653,1221659,1221667,1221707,1221749,1221751,1221761,1221767, 1221791,1221793,1221811,1221821,1221823,1221853,1221863,1221907,1221917, 1221937,1221959,1221971,1222003,1222019,1222027,1222037,1222049,1222057, 1222063,1222097,1222129,1222157,1222159,1222171,1222187,1222219,1222229, 1222231,1222241,1222253,1222259,1222267,1222271,1222279,1222307,1222373, 1222393,1222409,1222411,1222433,1222471,1222483,1222493,1222499,1222513, 1222523,1222537,1222561,1222567,1222583,1222597,1222601,1222603,1222633, 1222643,1222651,1222667,1222679,1222681,1222693,1222717,1222723,1222729, 1222751,1222757,1222769,1222777,1222789,1222801,1222811,1222829,1222831, 1222847,1222853,1222889,1222909,1222913,1222931,1222943,1222957,1222967, 1222993,1223003,1223021,1223029,1223039,1223051,1223059,1223077,1223083, 1223093,1223119,1223149,1223161,1223177,1223179,1223197,1223203,1223207, 1223231,1223237,1223263,1223279,1223281,1223309,1223311,1223323,1223329, 1223351,1223357,1223381,1223419,1223437,1223447,1223449,1223459,1223471, 1223489,1223491,1223527,1223533,1223549,1223561,1223569,1223587,1223591, 1223603,1223633,1223683,1223687,1223689,1223693,1223723,1223731,1223749, 1223753,1223767,1223773,1223777,1223857,1223863,1223867,1223879,1223897, 1223921,1223939,1223941,1223953,1223977,1223987,1223993,1224029,1224031, 1224053,1224059,1224077,1224079,1224089,1224109,1224121,1224131,1224133, 1224149,1224163,1224169,1224193,1224203,1224217,1224229,1224233,1224239, 1224257,1224259,1224269,1224271,1224281,1224287,1224299,1224329,1224337, 1224347,1224389,1224403,1224413,1224437,1224439,1224473,1224479,1224481, 1224529,1224533,1224577,1224599,1224637,1224673,1224677,1224701,1224703, 1224709,1224739,1224763,1224767,1224809,1224823,1224851,1224857,1224859, 1224863,1224869,1224887,1224889,1224893,1224913,1224919,1224943,1224953, 1224967,1224973,1224983,1224991,1225009,1225019,1225061,1225067,1225073, 1225079,1225087,1225093,1225097,1225099,1225109,1225111,1225117,1225123, 1225127,1225129,1225153,1225157,1225183,1225219,1225223,1225261,1225283, 1225297,1225303,1225319,1225327,1225331,1225361,1225373,1225381,1225397, 1225409,1225459,1225493,1225501,1225507,1225517,1225529,1225541,1225559, 1225571,1225577,1225579,1225589,1225591,1225603,1225621,1225643,1225657, 1225663,1225687,1225691,1225703,1225723,1225727,1225729,1225759,1225769, 1225787,1225817,1225849,1225871,1225879,1225883,1225891,1225897,1225907, 1225909,1225919,1225927,1225933,1225949,1225963,1225981,1225997,1225999, 1226011,1226041,1226053,1226063,1226077,1226083,1226087,1226101,1226111, 1226117,1226179,1226189,1226191,1226209,1226213,1226237,1226257,1226263, 1226293,1226297,1226299,1226311,1226321,1226339,1226341,1226347,1226353, 1226377,1226387,1226417,1226461,1226471,1226479,1226483,1226501,1226503, 1226531,1226539,1226549,1226557,1226581,1226593,1226609,1226611,1226623, 1226629,1226651,1226663,1226677,1226681,1226683,1226699,1226707,1226711, 1226713,1226741,1226767,1226779,1226783,1226789,1226801,1226803,1226807, 1226821,1226831,1226851,1226857,1226861,1226867,1226891,1226899,1226959, 1226977,1226983,1226993,1227047,1227053,1227101,1227103,1227131,1227133, 1227143,1227151,1227157,1227167,1227173,1227181,1227241,1227271,1227277, 1227299,1227301,1227319,1227323,1227329,1227337,1227353,1227379,1227407, 1227431,1227437,1227463,1227469,1227491,1227497,1227539,1227547,1227559, 1227563,1227619,1227637,1227649,1227659,1227683,1227701,1227703,1227713, 1227719,1227769,1227797,1227829,1227833,1227841,1227847,1227871,1227881, 1227887,1227911,1227917,1227929,1227943,1227949,1227973,1227977,1227979, 1227983,1228001,1228009,1228013,1228021,1228091,1228099,1228109,1228133, 1228147,1228153,1228159,1228163,1228181,1228187,1228193,1228219,1228243, 1228247,1228273,1228277,1228291,1228303,1228309,1228327,1228333,1228351, 1228373,1228391,1228393,1228397,1228399,1228429,1228441,1228457,1228459, 1228489,1228501,1228519,1228537,1228541,1228543,1228547,1228567,1228571, 1228583,1228589,1228603,1228613,1228631,1228651,1228657,1228679,1228691, 1228693,1228741,1228763,1228783,1228789,1228837,1228841,1228849,1228861, 1228883,1228889,1228891,1228907,1228919,1228937,1228943,1228949,1228951, 1228961,1228963,1228987,1228993,1229021,1229023,1229071,1229077,1229093, 1229113,1229131,1229141,1229149,1229159,1229197,1229201,1229203,1229209, 1229213,1229227,1229237,1229257,1229269,1229273,1229279,1229297,1229309, 1229311,1229317,1229329,1229351,1229353,1229359,1229369,1229377,1229381, 1229401,1229443,1229447,1229453,1229461,1229483,1229489,1229519,1229521, 1229531,1229561,1229563,1229581,1229597,1229617,1229633,1229647,1229663, 1229689,1229707,1229719,1229731,1229743,1229773,1229783,1229807,1229827, 1229869,1229873,1229897,1229903,1229911,1229939,1229941,1229957,1229981, 1229993,1229999,1230013,1230023,1230029,1230067,1230071,1230107,1230127, 1230167,1230169,1230181,1230199,1230223,1230227,1230233,1230241,1230263, 1230301,1230311,1230329,1230331,1230337,1230343,1230347,1230349,1230367, 1230371,1230373,1230377,1230379,1230391,1230401,1230433,1230461,1230469, 1230479,1230491,1230521,1230529,1230539,1230547,1230571,1230587,1230599, 1230629,1230631,1230637,1230667,1230689,1230727,1230739,1230743,1230751, 1230769,1230791,1230829,1230863,1230869,1230871,1230881,1230907,1230913, 1230941,1230949,1230967,1230997,1231001,1231003,1231039,1231049,1231051, 1231063,1231073,1231091,1231093,1231099,1231127,1231129,1231141,1231171, 1231177,1231193,1231199,1231201,1231207,1231229,1231231,1231247,1231261, 1231267,1231277,1231283,1231301,1231303,1231309,1231313,1231319,1231337, 1231339,1231357,1231379,1231381,1231387,1231411,1231421,1231423,1231453, 1231457,1231459,1231469,1231481,1231487,1231511,1231513,1231547,1231553, 1231577,1231579,1231589,1231597,1231613,1231631,1231663,1231669,1231687, 1231691,1231697,1231709,1231721,1231733,1231753,1231757,1231771,1231781, 1231787,1231799,1231807,1231817,1231829,1231831,1231843,1231859,1231873, 1231877,1231883,1231889,1231943,1231961,1231981,1231987,1231999,1232003, 1232069,1232071,1232083,1232089,1232171,1232183,1232201,1232213,1232221, 1232227,1232243,1232269,1232291,1232299,1232327,1232339,1232351,1232353, 1232377,1232389,1232393,1232401,1232411,1232417,1232431,1232437,1232453, 1232461,1232477,1232527,1232531,1232537,1232563,1232573,1232603,1232611, 1232617,1232657,1232659,1232683,1232689,1232713,1232719,1232771,1232797, 1232801,1232809,1232831,1232843,1232849,1232851,1232879,1232893,1232909, 1232941,1232947,1232977,1232981,1232983,1232999,1233019,1233047,1233073, 1233079,1233097,1233101,1233107,1233121,1233143,1233179,1233181,1233187, 1233209,1233241,1233251,1233259,1233263,1233301,1233313,1233319,1233361, 1233371,1233373,1233377,1233409,1233431,1233433,1233437,1233439,1233473, 1233493,1233497,1233509,1233523,1233527,1233539,1233563,1233569,1233577, 1233587,1233593,1233599,1233607,1233611,1233619,1233641,1233647,1233653, 1233709,1233721,1233751,1233761,1233763,1233779,1233781,1233851,1233887, 1233899,1233907,1233923,1233929,1233949,1233983,1234001,1234003,1234039, 1234049,1234063,1234067,1234099,1234109,1234117,1234133,1234147,1234187, 1234231,1234237,1234241,1234243,1234253,1234271,1234309,1234333,1234349, 1234351,1234367,1234379,1234391,1234393,1234417,1234439,1234463,1234511, 1234517,1234531,1234537,1234543,1234547,1234577,1234603,1234613,1234627, 1234657,1234687,1234703,1234721,1234747,1234757,1234759,1234769,1234777, 1234787,1234789,1234799,1234813,1234819,1234837,1234841,1234843,1234853, 1234873,1234889,1234901,1234951,1234967,1234969,1234991,1235021,1235027, 1235041,1235063,1235083,1235093,1235099,1235131,1235137,1235141,1235149, 1235159,1235167,1235177,1235183,1235191,1235239,1235243,1235249,1235251, 1235263,1235281,1235287,1235303,1235309,1235321,1235327,1235363,1235369, 1235383,1235389,1235417,1235419,1235431,1235447,1235449,1235459,1235473, 1235477,1235497,1235501,1235503,1235539,1235569,1235573,1235593,1235651, 1235653,1235659,1235669,1235701,1235711,1235761,1235789,1235791,1235803, 1235807,1235821,1235831,1235833,1235867,1235879,1235887,1235891,1235909, 1235929,1235933,1235947,1235977,1235981,1235987,1235999,1236017,1236073, 1236077,1236161,1236163,1236173,1236203,1236211,1236229,1236233,1236239, 1236259,1236307,1236317,1236329,1236337,1236383,1236397,1236419,1236439, 1236449,1236467,1236479,1236481,1236491,1236517,1236527,1236533,1236541, 1236553,1236583,1236611,1236623,1236629,1236643,1236659,1236661,1236667, 1236701,1236709,1236713,1236727,1236737,1236743,1236751,1236757,1236761, 1236769,1236787,1236791,1236797,1236803,1236811,1236827,1236857,1236883, 1236901,1236953,1236959,1236979,1237001,1237013,1237031,1237037,1237043, 1237051,1237057,1237063,1237079,1237091,1237121,1237129,1237139,1237151, 1237163,1237177,1237199,1237207,1237211,1237213,1237217,1237231,1237253, 1237273,1237279,1237283,1237297,1237309,1237349,1237363,1237373,1237387, 1237393,1237403,1237417,1237433,1237441,1237471,1237487,1237493,1237499, 1237501,1237513,1237519,1237529,1237531,1237543,1237547,1237567,1237571, 1237589,1237619,1237627,1237661,1237721,1237727,1237739,1237757,1237763, 1237783,1237813,1237823,1237829,1237843,1237849,1237853,1237867,1237877, 1237897,1237919,1237931,1237939,1237949,1237961,1237963,1237967,1237993, 1238023,1238033,1238051,1238063,1238071,1238087,1238089,1238101,1238119, 1238129,1238137,1238177,1238179,1238189,1238197,1238201,1238219,1238267, 1238269,1238273,1238291,1238317,1238327,1238333,1238371,1238381,1238383, 1238407,1238411,1238423,1238429,1238431,1238437,1238449,1238459,1238491, 1238509,1238521,1238533,1238537,1238551,1238597,1238599,1238621,1238647, 1238659,1238681,1238683,1238687,1238693,1238717,1238719,1238747,1238749, 1238759,1238761,1238767,1238771,1238789,1238801,1238821,1238827,1238833, 1238843,1238863,1238893,1238903,1238911,1238917,1238921,1238947,1238989, 1238999,1239001,1239013,1239023,1239041,1239067,1239089,1239103,1239109, 1239127,1239151,1239179,1239191,1239197,1239223,1239229,1239239,1239247, 1239269,1239281,1239311,1239319,1239323,1239341,1239347,1239353,1239361, 1239367,1239377,1239379,1239397,1239421,1239443,1239449,1239457,1239461, 1239481,1239499,1239509,1239517,1239523,1239529,1239533,1239551,1239569, 1239583,1239593,1239599,1239607,1239619,1239643,1239661,1239671,1239697, 1239727,1239737,1239739,1239751,1239761,1239773,1239803,1239817,1239839, 1239877,1239893,1239899,1239911,1239913,1239919,1239923,1239943,1239961, 1239971,1239983,1239989,1240007,1240009,1240013,1240021,1240027,1240039, 1240081,1240087,1240097,1240117,1240139,1240153,1240159,1240181,1240193, 1240199,1240207,1240219,1240231,1240241,1240247,1240271,1240273,1240307, 1240319,1240333,1240361,1240363,1240387,1240391,1240399,1240423,1240483, 1240487,1240511,1240517,1240523,1240543,1240553,1240559,1240607,1240621, 1240637,1240667,1240669,1240691,1240699,1240703,1240709,1240717,1240739, 1240741,1240751,1240763,1240769,1240777,1240793,1240807,1240817,1240831, 1240859,1240861,1240931,1240957,1240973,1240979,1240991,1240999,1241003, 1241027,1241033,1241039,1241059,1241077,1241081,1241087,1241159,1241161, 1241173,1241197,1241203,1241243,1241249,1241257,1241263,1241267,1241269, 1241291,1241321,1241341,1241347,1241351,1241369,1241377,1241381,1241389, 1241407,1241413,1241417,1241423,1241437,1241447,1241467,1241477,1241483, 1241489,1241491,1241507,1241509,1241549,1241551,1241557,1241573,1241579, 1241587,1241627,1241651,1241659,1241677,1241699,1241741,1241743,1241761, 1241771,1241789,1241813,1241819,1241827,1241869,1241879,1241893,1241921, 1241923,1241927,1241939,1241941,1241951,1241957,1241963,1241971,1241987, 1242001,1242029,1242061,1242067,1242089,1242097,1242103,1242107,1242119, 1242121,1242151,1242167,1242169,1242181,1242191,1242193,1242217,1242221, 1242233,1242251,1242271,1242289,1242317,1242347,1242359,1242361,1242379, 1242403,1242407,1242413,1242419,1242421,1242457,1242487,1242503,1242517, 1242569,1242601,1242611,1242617,1242623,1242629,1242641,1242643,1242739, 1242757,1242763,1242767,1242781,1242803,1242811,1242817,1242823,1242827, 1242841,1242859,1242869,1242889,1242893,1242929,1242931,1242937,1242947, 1242959,1242977,1242979,1242991,1243003,1243013,1243093,1243097,1243111, 1243129,1243133,1243141,1243147,1243157,1243169,1243181,1243211,1243271, 1243273,1243309,1243337,1243343,1243349,1243367,1243369,1243373,1243387, 1243391,1243393,1243421,1243427,1243439,1243471,1243477,1243481,1243483, 1243511,1243523,1243537,1243547,1243559,1243577,1243579,1243609,1243631, 1243639,1243643,1243663,1243673,1243691,1243709,1243717,1243741,1243747, 1243783,1243789,1243793,1243807,1243811,1243819,1243841,1243843,1243859, 1243877,1243883,1243889,1243927,1243933,1243939,1243943,1243951,1243961, 1243967,1243969,1243997,1244003,1244021,1244027,1244029,1244039,1244041, 1244053,1244057,1244059,1244083,1244099,1244141,1244143,1244149,1244153, 1244167,1244183,1244197,1244203,1244233,1244249,1244261,1244263,1244279, 1244293,1244333,1244357,1244359,1244363,1244381,1244393,1244401,1244423, 1244429,1244437,1244447,1244459,1244471,1244479,1244483,1244501,1244521, 1244531,1244533,1244543,1244567,1244591,1244603,1244609,1244611,1244627, 1244629,1244647,1244687,1244699,1244713,1244729,1244741,1244753,1244759, 1244777,1244797,1244813,1244819,1244821,1244833,1244839,1244857,1244863, 1244879,1244909,1244911,1244923,1244953,1244987,1244989,1244993,1245001, 1245017,1245019,1245037,1245067,1245091,1245103,1245113,1245121,1245137, 1245149,1245169,1245187,1245191,1245217,1245227,1245281,1245331,1245353, 1245379,1245397,1245401,1245421,1245449,1245451,1245479,1245509,1245527, 1245529,1245551,1245557,1245589,1245613,1245617,1245619,1245623,1245649, 1245683,1245689,1245691,1245701,1245707,1245719,1245721,1245763,1245767, 1245779,1245781,1245791,1245799,1245817,1245833,1245847,1245863,1245877, 1245883,1245917,1245929,1245943,1245953,1245961,1245971,1245973,1246013, 1246033,1246057,1246061,1246073,1246081,1246093,1246099,1246103,1246181, 1246187,1246199,1246207,1246213,1246241,1246243,1246247,1246249,1246261, 1246283,1246303,1246307,1246313,1246319,1246327,1246331,1246339,1246351, 1246361,1246363,1246367,1246369,1246373,1246379,1246387,1246397,1246429, 1246433,1246451,1246459,1246471,1246477,1246481,1246489,1246499,1246501, 1246513,1246517,1246529,1246537,1246543,1246561,1246573,1246579,1246589, 1246591,1246601,1246631,1246639,1246667,1246673,1246697,1246703,1246711, 1246733,1246747,1246757,1246781,1246823,1246829,1246841,1246867,1246879, 1246891,1246907,1246919,1246943,1246961,1246963,1246997,1247009,1247017, 1247033,1247053,1247063,1247089,1247101,1247107,1247117,1247119,1247167, 1247177,1247189,1247209,1247231,1247243,1247263,1247269,1247291,1247297, 1247303,1247317,1247321,1247327,1247329,1247371,1247383,1247401,1247417, 1247419,1247429,1247447,1247453,1247459,1247479,1247501,1247509,1247527, 1247549,1247557,1247563,1247569,1247581,1247591,1247599,1247611,1247621, 1247627,1247641,1247651,1247663,1247693,1247699,1247737,1247759,1247761, 1247767,1247777,1247797,1247801,1247833,1247837,1247861,1247867,1247879, 1247881,1247893,1247923,1247947,1247951,1247959,1247969,1248001,1248007, 1248011,1248017,1248019,1248031,1248041,1248059,1248061,1248083,1248101, 1248103,1248113,1248119,1248151,1248193,1248199,1248209,1248211,1248217, 1248229,1248239,1248241,1248253,1248271,1248323,1248329,1248337,1248341, 1248347,1248349,1248353,1248383,1248391,1248407,1248413,1248427,1248449, 1248451,1248469,1248493,1248503,1248529,1248539,1248551,1248553,1248563, 1248571,1248589,1248593,1248631,1248641,1248671,1248673,1248691,1248697, 1248703,1248721,1248757,1248781,1248799,1248809,1248829,1248833,1248847, 1248857,1248859,1248869,1248881,1248893,1248917,1248941,1248953,1248977, 1248979,1248991,1249013,1249019,1249033,1249037,1249043,1249049,1249057, 1249063,1249091,1249099,1249111,1249121,1249133,1249139,1249141,1249151, 1249159,1249163,1249187,1249201,1249217,1249243,1249247,1249273,1249301, 1249319,1249321,1249333,1249343,1249361,1249363,1249373,1249397,1249403, 1249411,1249427,1249433,1249477,1249481,1249487,1249489,1249499,1249511, 1249519,1249531,1249559,1249603,1249621,1249627,1249631,1249643,1249657, 1249669,1249681,1249691,1249693,1249727,1249733,1249739,1249741,1249747, 1249757,1249799,1249811,1249817,1249819,1249837,1249841,1249847,1249849, 1249861,1249873,1249901,1249921,1249939,1249943,1249999,1250003,1250009, 1250021,1250023,1250057,1250069,1250083,1250087,1250099,1250107,1250141, 1250147,1250149,1250173,1250177,1250189,1250201,1250203,1250237,1250243, 1250273,1250281,1250297,1250309,1250351,1250357,1250407,1250413,1250437, 1250443,1250449,1250453,1250461,1250471,1250479,1250497,1250507,1250519, 1250521,1250527,1250551,1250593,1250609,1250611,1250629,1250647,1250653, 1250677,1250701,1250737,1250749,1250761,1250771,1250773,1250779,1250783, 1250801,1250813,1250831,1250839,1250863,1250867,1250917,1250923,1250929, 1250939,1250969,1250971,1250981,1250983,1251011,1251037,1251043,1251053, 1251071,1251083,1251097,1251101,1251109,1251121,1251157,1251161,1251179, 1251227,1251247,1251259,1251287,1251301,1251307,1251317,1251323,1251329, 1251409,1251427,1251431,1251433,1251461,1251463,1251527,1251529,1251533, 1251571,1251577,1251581,1251583,1251641,1251661,1251667,1251671,1251697, 1251703,1251707,1251713,1251721,1251743,1251787,1251791,1251797,1251827, 1251841,1251851,1251857,1251869,1251871,1251881,1251907,1251911,1251919, 1251923,1251937,1251947,1251953,1251961,1251983,1252021,1252037,1252049, 1252057,1252063,1252073,1252079,1252103,1252109,1252123,1252129,1252151, 1252159,1252177,1252187,1252193,1252201,1252211,1252217,1252219,1252247, 1252259,1252267,1252283,1252331,1252343,1252357,1252399,1252403,1252411, 1252421,1252429,1252439,1252451,1252457,1252469,1252483,1252507,1252523, 1252579,1252609,1252631,1252639,1252661,1252663,1252681,1252711,1252717, 1252721,1252729,1252739,1252751,1252777,1252799,1252817,1252819,1252843, 1252873,1252877,1252897,1252903,1252913,1252921,1252943,1252957,1252963, 1252987,1252991,1252997,1253011,1253023,1253027,1253047,1253059,1253071, 1253089,1253093,1253099,1253111,1253137,1253167,1253171,1253249,1253251, 1253261,1253279,1253323,1253327,1253333,1253347,1253377,1253381,1253401, 1253437,1253453,1253471,1253479,1253513,1253519,1253521,1253557,1253587, 1253591,1253599,1253621,1253627,1253683,1253689,1253701,1253717,1253723, 1253729,1253737,1253741,1253761,1253783,1253803,1253831,1253839,1253849, 1253851,1253887,1253897,1253909,1253911,1253947,1253951,1253953,1253963, 1253969,1253999,1254013,1254017,1254023,1254031,1254037,1254049,1254053, 1254059,1254061,1254079,1254091,1254109,1254119,1254131,1254137,1254151, 1254157,1254161,1254179,1254193,1254203,1254217,1254241,1254251,1254257, 1254269,1254293,1254301,1254317,1254329,1254367,1254371,1254373,1254377, 1254427,1254433,1254467,1254469,1254479,1254497,1254503,1254523,1254527, 1254529,1254541,1254553,1254557,1254577,1254593,1254607,1254613,1254619, 1254623,1254637,1254647,1254653,1254661,1254667,1254683,1254689,1254731, 1254733,1254739,1254751,1254761,1254767,1254791,1254793,1254823,1254833, 1254839,1254863,1254899,1254907,1254941,1254959,1254971,1254983,1254997, 1255013,1255021,1255039,1255049,1255063,1255069,1255081,1255103,1255109, 1255117,1255123,1255129,1255139,1255147,1255153,1255157,1255169,1255181, 1255183,1255187,1255201,1255211,1255237,1255249,1255253,1255259,1255279, 1255301,1255307,1255313,1255321,1255333,1255337,1255357,1255361,1255367, 1255391,1255393,1255421,1255427,1255451,1255453,1255477,1255519,1255549, 1255559,1255567,1255591,1255601,1255609,1255619,1255633,1255651,1255663, 1255679,1255687,1255693,1255721,1255747,1255757,1255759,1255799,1255801, 1255811,1255829,1255831,1255847,1255861,1255907,1255913,1255927,1255931, 1255939,1255949,1255963,1255967,1255993,1255997,1256009,1256023,1256029, 1256041,1256063,1256107,1256149,1256161,1256197,1256201,1256209,1256231, 1256243,1256267,1256279,1256303,1256323,1256347,1256369,1256383,1256389, 1256393,1256407,1256429,1256449,1256477,1256531,1256533,1256543,1256573, 1256579,1256587,1256597,1256611,1256617,1256621,1256659,1256681,1256687, 1256693,1256707,1256711,1256729,1256737,1256747,1256753,1256777,1256797, 1256809,1256813,1256819,1256821,1256837,1256863,1256867,1256873,1256887, 1256891,1256897,1256903,1256911,1256917,1256923,1256939,1256953,1256989, 1256993,1257013,1257017,1257029,1257041,1257043,1257049,1257071,1257073, 1257077,1257079,1257089,1257103,1257119,1257131,1257163,1257199,1257209, 1257229,1257233,1257239,1257241,1257247,1257251,1257253,1257281,1257293, 1257307,1257313,1257317,1257323,1257331,1257359,1257397,1257409,1257437, 1257457,1257461,1257463,1257491,1257493,1257499,1257517,1257521,1257547, 1257559,1257563,1257569,1257587,1257589,1257611,1257647,1257653,1257689, 1257691,1257713,1257719,1257721,1257749,1257787,1257827,1257829,1257853, 1257859,1257869,1257877,1257911,1257931,1257953,1257959,1257961,1257973, 1257989,1258001,1258013,1258027,1258039,1258079,1258087,1258097,1258099, 1258109,1258133,1258139,1258141,1258151,1258163,1258171,1258177,1258181, 1258183,1258207,1258211,1258217,1258219,1258241,1258267,1258291,1258297, 1258303,1258319,1258337,1258343,1258349,1258373,1258403,1258409,1258417, 1258421,1258423,1258429,1258441,1258451,1258457,1258469,1258471,1258483, 1258487,1258511,1258531,1258559,1258589,1258597,1258601,1258627,1258637, 1258639,1258643,1258657,1258661,1258667,1258681,1258709,1258711,1258717, 1258723,1258753,1258771,1258781,1258783,1258787,1258811,1258819,1258837, 1258847,1258871,1258877,1258889,1258903,1258927,1258931,1258937,1258967, 1258973,1258993,1259017,1259029,1259033,1259039,1259047,1259051,1259053, 1259057,1259077,1259081,1259087,1259099,1259107,1259113,1259123,1259129, 1259143,1259171,1259179,1259191,1259213,1259231,1259243,1259249,1259287, 1259299,1259317,1259329,1259371,1259389,1259393,1259413,1259429,1259477, 1259509,1259527,1259537,1259539,1259543,1259551,1259563,1259569,1259593, 1259603,1259627,1259639,1259653,1259659,1259663,1259669,1259677,1259689, 1259701,1259737,1259743,1259749,1259759,1259767,1259777,1259803,1259821, 1259851,1259873,1259899,1259903,1259927,1259939,1259953,1259977,1259983, 1260011,1260019,1260031,1260047,1260059,1260067,1260113,1260121,1260131, 1260143,1260157,1260163,1260167,1260169,1260191,1260223,1260269,1260277, 1260283,1260293,1260317,1260319,1260323,1260341,1260359,1260361,1260383, 1260401,1260419,1260437,1260439,1260461,1260473,1260481,1260487,1260509, 1260541,1260547,1260551,1260569,1260577,1260583,1260599,1260629,1260641, 1260643,1260661,1260673,1260691,1260713,1260719,1260731,1260733,1260751, 1260757,1260767,1260769,1260797,1260799,1260827,1260829,1260841,1260851, 1260877,1260881,1260887,1260893,1260899,1260901,1260911,1260971,1260979, 1260989,1260991,1261033,1261069,1261079,1261081,1261109,1261121,1261133, 1261157,1261171,1261177,1261199,1261217,1261223,1261259,1261261,1261279, 1261289,1261301,1261313,1261321,1261327,1261333,1261357,1261363,1261373, 1261387,1261411,1261427,1261459,1261487,1261489,1261523,1261531,1261549, 1261567,1261571,1261627,1261639,1261643,1261649,1261697,1261699,1261717, 1261721,1261739,1261747,1261759,1261763,1261769,1261789,1261801,1261823, 1261829,1261831,1261837,1261861,1261889,1261891,1261901,1261913,1261933, 1261943,1261963,1261969,1261973,1262011,1262017,1262057,1262071,1262081, 1262083,1262087,1262099,1262101,1262119,1262143,1262147,1262203,1262207, 1262221,1262231,1262237,1262269,1262281,1262291,1262293,1262299,1262311, 1262321,1262363,1262377,1262411,1262419,1262441,1262453,1262461,1262479, 1262483,1262491,1262509,1262519,1262543,1262557,1262563,1262581,1262587, 1262617,1262621,1262623,1262629,1262633,1262669,1262671,1262693,1262711, 1262713,1262717,1262731,1262741,1262753,1262771,1262783,1262819,1262839, 1262851,1262869,1262881,1262887,1262893,1262897,1262903,1262917,1262927, 1262929,1262939,1262941,1262957,1263007,1263047,1263071,1263077,1263079, 1263103,1263107,1263109,1263113,1263121,1263133,1263173,1263179,1263181, 1263187,1263191,1263193,1263209,1263239,1263247,1263259,1263263,1263299, 1263307,1263319,1263323,1263331,1263337,1263341,1263347,1263373,1263377, 1263391,1263403,1263461,1263463,1263473,1263487,1263499,1263503,1263511, 1263539,1263541,1263547,1263569,1263583,1263599,1263607,1263629,1263631, 1263659,1263667,1263677,1263697,1263701,1263751,1263761,1263767,1263793, 1263799,1263803,1263817,1263853,1263863,1263887,1263917,1263929,1263931, 1263943,1263947,1263949,1263953,1263961,1263973,1263979,1264009,1264027, 1264033,1264037,1264049,1264061,1264063,1264129,1264177,1264189,1264199, 1264213,1264231,1264259,1264261,1264267,1264271,1264301,1264303,1264331, 1264337,1264363,1264387,1264411,1264447,1264451,1264499,1264537,1264541, 1264559,1264561,1264573,1264577,1264597,1264607,1264643,1264649,1264651, 1264657,1264663,1264667,1264687,1264699,1264733,1264741,1264763,1264787, 1264801,1264807,1264819,1264829,1264853,1264859,1264867,1264873,1264877, 1264883,1264889,1264897,1264903,1264909,1264933,1264969,1264979,1264981, 1264997,1265029,1265041,1265051,1265053,1265063,1265081,1265083,1265087, 1265093,1265101,1265111,1265113,1265119,1265129,1265167,1265177,1265179, 1265197,1265233,1265249,1265273,1265279,1265281,1265311,1265321,1265333, 1265347,1265353,1265377,1265387,1265393,1265431,1265443,1265449,1265461, 1265471,1265477,1265479,1265503,1265519,1265521,1265527,1265549,1265557, 1265573,1265581,1265597,1265603,1265611,1265617,1265623,1265639,1265653, 1265657,1265681,1265729,1265741,1265777,1265779,1265801,1265813,1265827, 1265843,1265857,1265861,1265863,1265867,1265899,1265903,1265909,1265911, 1265921,1265923,1265941,1265959,1265969,1265977,1265981,1265987,1265993, 1266019,1266043,1266047,1266059,1266073,1266077,1266079,1266091,1266101, 1266107,1266113,1266149,1266157,1266163,1266191,1266197,1266229,1266241, 1266247,1266259,1266263,1266269,1266271,1266277,1266281,1266301,1266323, 1266337,1266341,1266359,1266371,1266373,1266379,1266389,1266409,1266413, 1266431,1266451,1266469,1266487,1266491,1266493,1266511,1266523,1266527, 1266539,1266557,1266563,1266583,1266589,1266593,1266611,1266631,1266677, 1266719,1266731,1266743,1266751,1266757,1266761,1266763,1266767,1266779, 1266781,1266799,1266841,1266847,1266851,1266869,1266883,1266893,1266899, 1266913,1266919,1266929,1266931,1266943,1266949,1266953,1267009,1267043, 1267051,1267067,1267103,1267109,1267117,1267121,1267127,1267151,1267157, 1267159,1267183,1267193,1267199,1267223,1267237,1267291,1267297,1267303, 1267307,1267349,1267381,1267403,1267411,1267429,1267447,1267451,1267459, 1267463,1267481,1267501,1267517,1267529,1267531,1267549,1267577,1267579, 1267589,1267613,1267633,1267649,1267663,1267681,1267709,1267711,1267723, 1267727,1267757,1267771,1267787,1267789,1267823,1267831,1267837,1267859, 1267873,1267883,1267891,1267897,1267907,1267933,1267939,1267943,1267951, 1267957,1267961,1267999,1268011,1268017,1268039,1268051,1268053,1268077, 1268093,1268119,1268143,1268147,1268167,1268173,1268177,1268207,1268213, 1268221,1268233,1268261,1268279,1268287,1268291,1268299,1268327,1268341, 1268357,1268359,1268369,1268413,1268419,1268429,1268447,1268453,1268461, 1268467,1268479,1268537,1268549,1268563,1268567,1268593,1268599,1268621, 1268623,1268627,1268633,1268669,1268681,1268713,1268731,1268741,1268747, 1268753,1268759,1268777,1268783,1268789,1268791,1268797,1268803,1268807, 1268843,1268849,1268867,1268881,1268899,1268921,1268929,1268947,1268963, 1269001,1269007,1269013,1269017,1269041,1269043,1269049,1269061,1269077, 1269091,1269113,1269119,1269131,1269167,1269173,1269179,1269187,1269193, 1269197,1269221,1269223,1269239,1269241,1269253,1269263,1269283,1269287, 1269299,1269311,1269337,1269343,1269377,1269379,1269383,1269391,1269413, 1269427,1269461,1269467,1269493,1269497,1269529,1269547,1269559,1269563, 1269571,1269589,1269601,1269641,1269643,1269683,1269691,1269703,1269731, 1269733,1269743,1269757,1269797,1269847,1269859,1269869,1269871,1269901, 1269907,1269911,1269923,1269929,1269937,1269953,1269971,1270001,1270013, 1270033,1270051,1270063,1270067,1270079,1270097,1270103,1270111,1270123, 1270141,1270147,1270151,1270183,1270193,1270201,1270231,1270237,1270249, 1270271,1270279,1270301,1270309,1270319,1270327,1270333,1270337,1270343, 1270361,1270391,1270417,1270421,1270429,1270433,1270441,1270471,1270483, 1270499,1270513,1270531,1270537,1270541,1270547,1270559,1270561,1270567, 1270571,1270573,1270579,1270609,1270627,1270639,1270649,1270651,1270657, 1270667,1270669,1270679,1270747,1270757,1270771,1270817,1270823,1270849, 1270859,1270861,1270879,1270897,1270901,1270909,1270933,1270943,1270961, 1270981,1271027,1271029,1271033,1271047,1271051,1271059,1271069,1271087, 1271089,1271111,1271117,1271129,1271147,1271161,1271167,1271173,1271183, 1271197,1271201,1271203,1271213,1271227,1271239,1271251,1271293,1271299, 1271317,1271321,1271339,1271351,1271353,1271359,1271383,1271393,1271399, 1271401,1271419,1271429,1271449,1271471,1271483,1271503,1271507,1271513, 1271521,1271531,1271551,1271561,1271597,1271603,1271609,1271657,1271659, 1271671,1271687,1271701,1271717,1271731,1271747,1271749,1271791,1271797, 1271807,1271813,1271827,1271833,1271839,1271843,1271849,1271903,1271927, 1271929,1271939,1271953,1271971,1271987,1271999,1272001,1272043,1272049, 1272067,1272071,1272079,1272091,1272109,1272113,1272133,1272151,1272157, 1272163,1272169,1272191,1272203,1272211,1272223,1272233,1272247,1272253, 1272269,1272281,1272283,1272287,1272289,1272329,1272343,1272347,1272361, 1272367,1272377,1272379,1272409,1272421,1272443,1272451,1272461,1272539, 1272547,1272559,1272577,1272589,1272617,1272629,1272631,1272641,1272647, 1272653,1272673,1272679,1272749,1272811,1272827,1272833,1272847,1272851, 1272857,1272863,1272881,1272883,1272893,1272899,1272913,1272917,1272919, 1272937,1272941,1272961,1272983,1272989,1272991,1273001,1273021,1273033, 1273037,1273039,1273087,1273099,1273109,1273117,1273121,1273127,1273157, 1273159,1273199,1273213,1273231,1273241,1273267,1273289,1273291,1273301, 1273309,1273313,1273331,1273333,1273343,1273367,1273381,1273403,1273409, 1273411,1273417,1273421,1273423,1273457,1273463,1273471,1273483,1273499, 1273507,1273541,1273543,1273549,1273561,1273567,1273609,1273637,1273639, 1273663,1273673,1273681,1273687,1273693,1273721,1273729,1273733,1273739, 1273757,1273771,1273781,1273787,1273823,1273843,1273879,1273889,1273891, 1273903,1273907,1273919,1273933,1273939,1273957,1273981,1274011,1274017, 1274041,1274051,1274071,1274087,1274089,1274111,1274113,1274129,1274137, 1274149,1274183,1274209,1274227,1274249,1274267,1274291,1274293,1274297, 1274309,1274323,1274333,1274353,1274363,1274381,1274389,1274401,1274411, 1274423,1274437,1274461,1274509,1274549,1274557,1274561,1274599,1274617, 1274621,1274629,1274633,1274671,1274701,1274719,1274723,1274737,1274759, 1274771,1274773,1274803,1274851,1274857,1274873,1274879,1274899,1274921, 1274929,1274939,1274941,1274989,1275011,1275019,1275041,1275067,1275107, 1275121,1275133,1275173,1275179,1275193,1275199,1275203,1275227,1275269, 1275277,1275283,1275293,1275319,1275341,1275349,1275359,1275361,1275401, 1275437,1275457,1275467,1275499,1275503,1275523,1275539,1275541,1275553, 1275559,1275563,1275569,1275583,1275601,1275611,1275643,1275661,1275667, 1275683,1275691,1275707,1275709,1275719,1275737,1275749,1275751,1275779, 1275803,1275817,1275823,1275829,1275839,1275847,1275851,1275863,1275877, 1275889,1275893,1275899,1275931,1275947,1275973,1275977,1275979,1276001, 1276007,1276013,1276027,1276031,1276039,1276049,1276057,1276069,1276103, 1276117,1276123,1276129,1276133,1276147,1276157,1276169,1276183,1276193, 1276213,1276237,1276243,1276271,1276279,1276307,1276313,1276351,1276357, 1276361,1276397,1276409,1276433,1276441,1276447,1276481,1276501,1276511, 1276529,1276543,1276571,1276579,1276589,1276603,1276619,1276621,1276631, 1276637,1276657,1276679,1276687,1276711,1276721,1276733,1276739,1276747, 1276763,1276771,1276777,1276817,1276829,1276861,1276867,1276871,1276889, 1276897,1276903,1276927,1276949,1276967,1276969,1276973,1276987,1276999, 1277011,1277021,1277039,1277041,1277063,1277069,1277071,1277083,1277093, 1277099,1277113,1277137,1277147,1277197,1277207,1277209,1277233,1277249, 1277257,1277267,1277299,1277321,1277323,1277357,1277359,1277369,1277387, 1277429,1277449,1277461,1277477,1277483,1277491,1277501,1277543,1277557, 1277569,1277593,1277597,1277621,1277629,1277651,1277657,1277677,1277699, 1277723,1277729,1277741,1277743,1277753,1277761,1277791,1277803,1277813, 1277819,1277833,1277849,1277863,1277867,1277879,1277897,1277909,1277911, 1277957,1277971,1277993,1278007,1278029,1278031,1278047,1278097,1278107, 1278113,1278131,1278139,1278163,1278181,1278191,1278197,1278203,1278209, 1278217,1278227,1278253,1278287,1278289,1278323,1278337,1278341,1278371, 1278373,1278379,1278391,1278397,1278401,1278419,1278437,1278439,1278463, 1278467,1278479,1278481,1278493,1278527,1278551,1278583,1278601,1278611, 1278617,1278619,1278623,1278631,1278637,1278659,1278671,1278701,1278709, 1278713,1278721,1278733,1278769,1278779,1278787,1278799,1278803,1278811, 1278817,1278839,1278857,1278881,1278899,1278911,1278983,1278997,1279001, 1279013,1279021,1279027,1279039,1279043,1279081,1279087,1279093,1279111, 1279123,1279133,1279141,1279163,1279171,1279177,1279181,1279183,1279189, 1279193,1279211,1279249,1279253,1279303,1279307,1279309,1279319,1279321, 1279337,1279357,1279361,1279417,1279427,1279457,1279459,1279483,1279493, 1279507,1279511,1279519,1279541,1279547,1279549,1279561,1279583,1279601, 1279609,1279627,1279643,1279657,1279661,1279667,1279673,1279679,1279687, 1279693,1279703,1279727,1279753,1279757,1279787,1279801,1279807,1279813, 1279819,1279823,1279843,1279847,1279853,1279871,1279877,1279907,1279919, 1279921,1279931,1279937,1279961,1279969,1279997,1280023,1280101,1280107, 1280113,1280119,1280129,1280131,1280141,1280159,1280161,1280173,1280179, 1280183,1280221,1280231,1280267,1280281,1280291,1280297,1280309,1280317, 1280333,1280371,1280399,1280401,1280407,1280417,1280431,1280453,1280473, 1280519,1280537,1280549,1280561,1280567,1280597,1280603,1280623,1280633, 1280651,1280659,1280677,1280693,1280707,1280737,1280743,1280759,1280761, 1280767,1280789,1280791,1280803,1280821,1280833,1280837,1280857,1280863, 1280869,1280887,1280921,1280947,1280969,1280987,1280989,1281029,1281041, 1281043,1281047,1281083,1281089,1281097,1281101,1281131,1281149,1281157, 1281167,1281187,1281193,1281211,1281221,1281229,1281253,1281257,1281263, 1281281,1281283,1281317,1281331,1281349,1281367,1281383,1281389,1281407, 1281431,1281433,1281439,1281451,1281457,1281463,1281503,1281521,1281523, 1281541,1281547,1281551,1281563,1281587,1281649,1281653,1281667,1281673, 1281677,1281691,1281697,1281703,1281727,1281739,1281751,1281773,1281779, 1281781,1281799,1281803,1281809,1281821,1281823,1281827,1281853,1281871, 1281883,1281899,1281937,1281941,1281961,1281971,1281979,1281983,1282007, 1282009,1282031,1282033,1282051,1282069,1282079,1282081,1282093,1282109, 1282117,1282121,1282133,1282153,1282163,1282187,1282201,1282213,1282231, 1282241,1282261,1282277,1282279,1282289,1282297,1282343,1282349,1282363, 1282381,1282387,1282399,1282417,1282423,1282427,1282451,1282469,1282471, 1282493,1282499,1282507,1282511,1282513,1282517,1282529,1282543,1282571, 1282577,1282597,1282607,1282613,1282627,1282637,1282639,1282649,1282657, 1282661,1282681,1282693,1282703,1282717,1282739,1282751,1282763,1282781, 1282783,1282807,1282817,1282867,1282877,1282903,1282907,1282909,1282913, 1282933,1282943,1282951,1282961,1282969,1282993,1283011,1283017,1283021, 1283027,1283063,1283069,1283083,1283099,1283111,1283119,1283129,1283137, 1283159,1283167,1283171,1283173,1283179,1283207,1283237,1283297,1283323, 1283333,1283339,1283353,1283383,1283389,1283417,1283437,1283441,1283473, 1283479,1283509,1283521,1283537,1283539,1283543,1283549,1283563,1283573, 1283591,1283603,1283677,1283683,1283701,1283707,1283717,1283719,1283731, 1283753,1283759,1283767,1283771,1283797,1283831,1283839,1283873,1283879, 1283881,1283897,1283903,1283939,1283941,1283957,1283969,1283981,1283983, 1284007,1284037,1284043,1284047,1284053,1284083,1284131,1284169,1284187, 1284209,1284211,1284223,1284263,1284271,1284287,1284293,1284301,1284313, 1284317,1284329,1284341,1284373,1284379,1284383,1284421,1284427,1284433, 1284443,1284467,1284473,1284487,1284511,1284523,1284541,1284551,1284553, 1284559,1284583,1284601,1284617,1284623,1284631,1284641,1284659,1284691, 1284709,1284713,1284737,1284739,1284763,1284769,1284791,1284793,1284823, 1284841,1284847,1284851,1284863,1284889,1284901,1284917,1284931,1284937, 1284967,1284971,1284977,1284991,1285021,1285049,1285051,1285057,1285061, 1285069,1285099,1285111,1285117,1285129,1285139,1285147,1285159,1285169, 1285181,1285199,1285213,1285223,1285231,1285237,1285247,1285259,1285267, 1285279,1285283,1285289,1285301,1285351,1285381,1285393,1285397,1285411, 1285429,1285441,1285451,1285469,1285481,1285507,1285511,1285513,1285517, 1285519,1285547,1285549,1285553,1285607,1285619,1285633,1285649,1285679, 1285699,1285703,1285717,1285741,1285747,1285759,1285763,1285777,1285789, 1285793,1285799,1285811,1285813,1285841,1285847,1285853,1285859,1285871, 1285877,1285891,1285903,1285913,1285937,1285943,1285969,1285981,1285993, 1286011,1286017,1286039,1286071,1286081,1286093,1286099,1286107,1286119, 1286147,1286149,1286177,1286189,1286191,1286209,1286227,1286239,1286261, 1286267,1286269,1286273,1286287,1286303,1286323,1286359,1286371,1286381, 1286387,1286399,1286419,1286447,1286489,1286491,1286503,1286513,1286521, 1286533,1286557,1286561,1286569,1286581,1286587,1286617,1286629,1286633, 1286641,1286647,1286653,1286657,1286669,1286683,1286693,1286707,1286711, 1286773,1286777,1286783,1286797,1286807,1286819,1286821,1286833,1286837, 1286839,1286843,1286881,1286939,1286941,1286953,1286959,1286969,1286981, 1286983,1287007,1287047,1287059,1287061,1287067,1287071,1287101,1287109, 1287131,1287133,1287157,1287163,1287173,1287179,1287197,1287199,1287217, 1287233,1287239,1287289,1287323,1287329,1287343,1287347,1287353,1287361, 1287371,1287373,1287401,1287431,1287457,1287467,1287469,1287479,1287487, 1287491,1287499,1287511,1287541,1287551,1287553,1287569,1287589,1287593, 1287607,1287613,1287623,1287661,1287683,1287691,1287697,1287707,1287731, 1287739,1287743,1287749,1287751,1287757,1287761,1287787,1287799,1287817, 1287821,1287829,1287841,1287857,1287883,1287887,1287899,1287917,1287947, 1287961,1287967,1287973,1287983,1287989,1287997,1288003,1288009,1288013, 1288033,1288037,1288043,1288051,1288057,1288061,1288099,1288103,1288109, 1288117,1288163,1288169,1288171,1288187,1288193,1288201,1288213,1288247, 1288249,1288291,1288307,1288337,1288349,1288361,1288363,1288367,1288393, 1288421,1288423,1288429,1288439,1288487,1288513,1288519,1288531,1288541, 1288543,1288559,1288571,1288597,1288603,1288607,1288613,1288643,1288649, 1288657,1288691,1288697,1288699,1288709,1288711,1288733,1288769,1288783, 1288799,1288817,1288823,1288829,1288831,1288843,1288849,1288853,1288871, 1288873,1288877,1288891,1288919,1288921,1288933,1288939,1288951,1288967, 1288981,1288993,1288997,1289003,1289009,1289027,1289039,1289053,1289077, 1289083,1289111,1289129,1289149,1289153,1289159,1289179,1289213,1289231, 1289237,1289261,1289273,1289287,1289303,1289329,1289333,1289341,1289363, 1289371,1289381,1289401,1289411,1289423,1289429,1289447,1289459,1289513, 1289531,1289537,1289551,1289557,1289567,1289593,1289597,1289599,1289621, 1289623,1289627,1289653,1289657,1289677,1289711,1289713,1289731,1289747, 1289749,1289753,1289779,1289789,1289801,1289803,1289831,1289839,1289851, 1289867,1289881,1289921,1289927,1289933,1289963,1289969,1289971,1290013, 1290019,1290031,1290049,1290077,1290083,1290109,1290131,1290143,1290151, 1290161,1290167,1290169,1290173,1290199,1290203,1290209,1290257,1290259, 1290287,1290293,1290299,1290319,1290329,1290371,1290379,1290427,1290431, 1290433,1290439,1290463,1290467,1290469,1290491,1290503,1290533,1290539, 1290551,1290563,1290571,1290581,1290593,1290607,1290629,1290631,1290637, 1290643,1290649,1290659,1290673,1290683,1290719,1290791,1290811,1290823, 1290847,1290853,1290857,1290869,1290901,1290907,1290923,1290937,1290983, 1291001,1291007,1291009,1291019,1291021,1291063,1291079,1291111,1291117, 1291139,1291153,1291159,1291163,1291177,1291193,1291211,1291217,1291219, 1291223,1291229,1291249,1291271,1291313,1291321,1291327,1291343,1291349, 1291357,1291369,1291379,1291387,1291391,1291421,1291447,1291453,1291471, 1291481,1291483,1291489,1291501,1291523,1291547,1291567,1291579,1291603, 1291637,1291669,1291673,1291691,1291783,1291793,1291799,1291817,1291819, 1291831,1291861,1291877,1291883,1291907,1291909,1291931,1291957,1291963, 1291967,1291991,1291999,1292009,1292023,1292029,1292063,1292069,1292089, 1292099,1292113,1292131,1292141,1292143,1292149,1292167,1292177,1292219, 1292237,1292243,1292251,1292257,1292261,1292281,1292293,1292309,1292329, 1292339,1292353,1292371,1292383,1292387,1292419,1292429,1292441,1292477, 1292491,1292503,1292509,1292539,1292549,1292563,1292567,1292579,1292587, 1292591,1292593,1292597,1292609,1292633,1292639,1292653,1292657,1292659, 1292693,1292701,1292713,1292717,1292729,1292737,1292783,1292789,1292801, 1292813,1292831,1292843,1292857,1292887,1292927,1292947,1292953,1292957, 1292971,1292983,1292989,1292999,1293001,1293011,1293031,1293077,1293119, 1293133,1293137,1293157,1293169,1293179,1293199,1293203,1293233,1293239, 1293247,1293251,1293277,1293283,1293287,1293307,1293317,1293319,1293323, 1293329,1293361,1293367,1293373,1293401,1293419,1293421,1293433,1293473, 1293491,1293493,1293499,1293529,1293533,1293541,1293553,1293559,1293583, 1293587,1293613,1293619,1293647,1293659,1293701,1293739,1293757,1293763, 1293791,1293797,1293821,1293829,1293839,1293841,1293857,1293869,1293899, 1293917,1293923,1293931,1293947,1293949,1293961,1293967,1293977,1293979, 1293983,1294019,1294021,1294031,1294037,1294039,1294061,1294081,1294087, 1294103,1294121,1294123,1294129,1294169,1294177,1294199,1294201,1294231, 1294253,1294273,1294277,1294301,1294303,1294309,1294339,1294351,1294361, 1294367,1294369,1294393,1294399,1294453,1294459,1294471,1294477,1294483, 1294561,1294571,1294583,1294597,1294609,1294621,1294627,1294633,1294639, 1294649,1294651,1294691,1294721,1294723,1294729,1294753,1294757,1294759, 1294817,1294823,1294841,1294849,1294939,1294957,1294967,1294973,1294987, 1294999,1295003,1295027,1295033,1295051,1295057,1295069,1295071,1295081, 1295089,1295113,1295131,1295137,1295159,1295183,1295191,1295201,1295207, 1295219,1295221,1295243,1295263,1295279,1295293,1295297,1295299,1295309, 1295317,1295321,1295323,1295339,1295347,1295369,1295377,1295387,1295389, 1295447,1295473,1295491,1295501,1295513,1295533,1295543,1295549,1295551, 1295561,1295563,1295603,1295611,1295617,1295639,1295647,1295653,1295681, 1295711,1295717,1295737,1295741,1295747,1295761,1295783,1295803,1295809, 1295813,1295839,1295849,1295867,1295869,1295873,1295881,1295947,1295953, 1295989,1295993,1296007,1296011,1296019,1296023,1296037,1296041,1296059, 1296077,1296089,1296101,1296109,1296137,1296143,1296167,1296181,1296187, 1296209,1296227,1296277,1296283,1296287,1296293,1296319,1296331,1296341, 1296343,1296371,1296391,1296409,1296413,1296419,1296467,1296473,1296481, 1296499,1296511,1296521,1296523,1296551,1296557,1296563,1296571,1296583, 1296587,1296593,1296601,1296613,1296623,1296629,1296649,1296679,1296689, 1296703,1296721,1296727,1296749,1296781,1296787,1296803,1296817,1296829, 1296833,1296839,1296877,1296899,1296907,1296929,1296949,1296973,1296983, 1297001,1297003,1297013,1297019,1297027,1297057,1297061,1297063,1297091, 1297103,1297123,1297129,1297139,1297147,1297157,1297169,1297171,1297193, 1297201,1297211,1297217,1297229,1297243,1297249,1297271,1297273,1297279, 1297297,1297313,1297333,1297337,1297349,1297357,1297367,1297369,1297393, 1297397,1297399,1297403,1297411,1297421,1297447,1297451,1297459,1297477, 1297487,1297501,1297507,1297519,1297523,1297537,1297561,1297573,1297601, 1297607,1297619,1297631,1297633,1297649,1297651,1297657,1297669,1297687, 1297693,1297727,1297739,1297771,1297781,1297799,1297841,1297847,1297853, 1297873,1297927,1297963,1297973,1297979,1297993,1298027,1298039,1298047, 1298053,1298057,1298111,1298113,1298117,1298119,1298131,1298149,1298161, 1298173,1298191,1298197,1298221,1298261,1298279,1298291,1298309,1298317, 1298329,1298333,1298351,1298357,1298371,1298387,1298467,1298489,1298491, 1298537,1298551,1298573,1298581,1298611,1298617,1298641,1298651,1298653, 1298699,1298719,1298723,1298747,1298771,1298779,1298789,1298797,1298809, 1298819,1298831,1298849,1298863,1298887,1298909,1298911,1298923,1298951, 1298963,1298981,1298989,1299007,1299013,1299019,1299029,1299041,1299059, 1299061,1299079,1299097,1299101,1299143,1299169,1299173,1299187,1299203, 1299209,1299211,1299223,1299227,1299257,1299269,1299283,1299289,1299299, 1299317,1299323,1299341,1299343,1299349,1299359,1299367,1299377,1299379, 1299437,1299439,1299449,1299451,1299457,1299491,1299499,1299533,1299541, 1299553,1299583,1299601,1299631,1299637,1299647,1299653,1299673,1299689, 1299709,1299721,1299743,1299763,1299791,1299811,1299817,1299821,1299827 }; #define MAXSIZE 108000 int time; void print_trivial_lemma(FILE* out, pock_certif_t c) { int i, size; mpz_ptr *p; p = c->_dec; size = c->_used; fprintf(out, "Lemma prime"); mpz_out_str (out, 10, c->_N); fprintf(out, " : prime ");mpz_out_str (out, 10, c->_N); fprintf(out, ".\n"); fprintf(out, "Proof.\n"); fprintf(out, " apply (Pocklington_refl "); print_pock_certif(out, c); fprintf(out, "\n ("); for(i=0; i < size; i++) { fprintf(out, "(Proof_certif "); mpz_out_str (out, 10, p[i]); fprintf(out, " prime"); mpz_out_str (out, 10, p[i]); fprintf(out, ") :: "); } fprintf(out, "(Proof_certif 2 prime2) :: nil)).\n"); fprintf(out," native_cast_no_check (refl_equal true).\n"); if (time) fprintf(out,"Time "); fprintf(out,"Qed.\n\n"); } int main (int argc, char *argv[]) { FILE * out; int i,min,max; mpz_t t; pock_certif_t c; pre_certif_t p; certif_t lc; char * filename; mpz_init(t); time = 0; filename="FirstPrimes.v"; min = 0; max = MAXSIZE; if (argc <= 1) { fprintf(stdout,"no option given\n"); fflush(stdout); exit(1); } if (strcmp (argv[1], "-o") == 0) { filename = argv[2]; argv += 2; argc -= 2; }; if (strcmp (argv[1], "-base") == 0) { max = atoi(argv[2]); } else if (argc > 2) { min = atoi(argv[1]); max = atoi(argv[2]); } else exit (1); if (min < 1) min = 0; if (max > MAXSIZE) max = MAXSIZE; out = fopen(filename,"w+"); fprintf(out, "From Coqprime Require Import PocklingtonRefl.\n\n"); fprintf(out,"Local Open Scope positive_scope.\n\n"); char mynum[11]; for(i = min; i < max; i++) { if (i == 0) { fprintf(out, "Lemma prime2 : prime 2.\n"); fprintf(out, "exact prime_2.\n"); fprintf(out, "Qed.\n\n"); } else { char name[] = "prime"; sprintf(mynum, "%d", tprimes[i]); strcat(name,mynum); lc = init_certif(); mpz_set_ui(t, tprimes[i]); c = pock_certif(t); extend_lc (lc, c, tprimes[min], tprimes[max]); p = mk_pock_certif(c); print_lemma(out,name,p,lc); } } fclose(out); exit(0); } coqprime-8.18/gencertif/parser.ml000066400000000000000000000306651451023060700170750ustar00rootroot00000000000000open Str open Big_int let shift = 6 let skip s n = (String.sub s n (String.length s - n)) let nhexa =regexp "^N=" let shexa =regexp "^S=" let whexa =regexp "^W=" let ahexa =regexp "^A=" let bhexa =regexp "^B=" let thexa =regexp "^T=" let jhexa =regexp "^J=" let hexa = regexp "-?\\$?[ABCDEF0123456789]*" let lemmaExp =regexp "^Lemma" (* Conversion function *) let hexstring s = if (String.contains s '$') then if (String.contains s '-') then big_int_of_string ("-0x" ^ (skip s 2)) else big_int_of_string ("0x" ^ (skip s 1)) else big_int_of_string s let rec comp2 r = let (q, r) = quomod_big_int r (big_int_of_int 2) in if eq_big_int r zero_big_int then succ_big_int (comp2 q) else zero_big_int let gsqr n1 r = let f = div_big_int n1 r in let (s1,r1) = quomod_big_int r (mult_big_int (big_int_of_int 2) f) in sqrt_big_int (sub_big_int (square_big_int r1) (mult_big_int (big_int_of_int 8) s1)) type certif = (* Elliptic (n, s, r, a, b, x, y) *) Elliptic of big_int * big_int * big_int * big_int * big_int * big_int * big_int (* Pocklington (n, b, r) *) | Pocklington of big_int * big_int * big_int (* External n *) | External of big_int (* Error t *) | Error of int;; let n = ref zero_big_int let s = ref zero_big_int let r = ref zero_big_int let w = ref zero_big_int let a = ref zero_big_int let b = ref zero_big_int let t = ref zero_big_int let j = ref zero_big_int let ty = ref (-1) let file = ref "" let co = ref stdout let sep = ref "" let res = ref ([] : certif list) let split = ref false let fileout = ref "a" let fileoutflag = ref false let name = ref "primo" let debug = ref false let process_type() = let elt = (if !ty != -1 then (if !ty = 4 then let n = !n in let s = !s in let t = !t in let j = !j in let w = !w in let a = mult_big_int (mult_big_int (big_int_of_int 3) j) (sub_big_int (big_int_of_int 1728) j) in let b = mult_big_int (mult_big_int (big_int_of_int 2) j) (square_big_int (sub_big_int (big_int_of_int 1728) j)) in let l = mod_big_int (add_big_int (power_big_int_positive_int t 3) (add_big_int (mult_big_int a t) b)) n in let a = mod_big_int (mult_big_int a (square_big_int l)) n in let b = mod_big_int (mult_big_int b (power_big_int_positive_int l 3)) n in let x = mod_big_int (mult_big_int t l) n in let y = mod_big_int (square_big_int l) n in (r := div_big_int (sub_big_int (add_big_int n (big_int_of_int 1)) w) s; Elliptic (n, s, !r, a, b, x, y)) else if !ty = 3 then let n = !n in let t = !t in let s = !s in let w = !w in let a = !a in let b = !b in let l = mod_big_int (add_big_int (power_big_int_positive_int t 3) (add_big_int (mult_big_int a t) b)) n in let a = mod_big_int (mult_big_int a (square_big_int l)) n in let b = mod_big_int (mult_big_int b (power_big_int_positive_int l 3)) n in let x = mod_big_int (mult_big_int t l) n in let y = mod_big_int (square_big_int l) n in (r := div_big_int (sub_big_int (add_big_int n (big_int_of_int 1)) w) s; Elliptic (n, s, !r, a, b, x, y)) else Error !ty) else Error 0) in (n := !r; elt) let parse f = n := zero_big_int; s := zero_big_int; r := zero_big_int; a := zero_big_int; b := zero_big_int; t := zero_big_int; j := zero_big_int; ty:= (-1); file := ""; sep := ""; res := []; let ic = open_in f in let line = ref "" in (try while true do line := input_line ic; (if !debug then (print_string "line="; print_string !line; print_newline())); if string_match nhexa !line 0 then ( n := hexstring (skip !line 2); (if !debug then (print_string "n="; print_string (string_of_big_int !n); print_newline())); r := !n) else if string_match shexa !line 0 then (s := (hexstring (skip !line 2)); ty := 4; (if !debug then (print_string "s="; print_string (string_of_big_int !s); print_newline())); ) else if string_match whexa !line 0 then (w := (hexstring (skip !line 2)); (if !debug then (print_string "w="; print_string (string_of_big_int !w); print_newline())); ) else if string_match ahexa !line 0 then (a := (hexstring (skip !line 2)); ty := 3; (if !debug then (print_string "a="; print_string (string_of_big_int !a); print_newline())); ) else if string_match bhexa !line 0 then (b := (hexstring (skip !line 2)); (if !debug then (print_string "b="; print_string (string_of_big_int !b); print_newline())); ) else if string_match jhexa !line 0 then (j := (hexstring (skip !line 2)); (if !debug then (print_string "j="; print_string (string_of_big_int !j); print_newline())); ) else if string_match thexa !line 0 then (t := (hexstring (skip !line 2)); (if !debug then (print_string "t="; print_string (string_of_big_int !t); print_newline())); res := process_type() :: !res; ty := -1) done with e -> close_in_noerr ic); (if !debug then (print_string "external="; print_string (string_of_big_int !r); print_newline())); List.rev (External !r :: !res) let rec gen_name k l = match l with [] -> () | Elliptic (n, s, r, a, b, x, y) :: l1 -> print_string "Let p" ; print_int k; print_string " = "; print_string (string_of_big_int n); print_string ";"; print_newline(); gen_name (k + 1) l1 | Pocklington (n, b, r) :: l1 -> print_string "Let p" ; print_int k; print_string " = "; print_string (string_of_big_int n); print_string ";"; print_newline(); gen_name (k + 1) l1 | External n :: l1 -> print_string "Let p" ; print_int k; print_string " = "; print_string (string_of_big_int n); print_string ";"; print_newline(); gen_name (k + 1) l1 | _ :: l1 -> print_string "(* Error *)"; print_newline(); gen_name (k + 1) l1 let pe s = output_string !co s; output_string !co "\n"; flush !co let pef s = output_string !co s; flush !co let print_header () = pe "From Coqprime Require Import PocklingtonRefl."; pe "Local Open Scope positive_scope." let split_begin k = if !split then (let fname = !fileout ^ "_" ^ (string_of_int k) ^ ".v" in co := open_out fname; print_header()) let split_close k = if !split then (close_out !co) let print_elliptic k n s r a b x y = split_begin k; pe ""; pe ("Lemma " ^ !name ^ (string_of_int k) ^ ":"); pe (" prime " ^ (string_of_big_int r) ^ "->"); pe (" prime " ^ (string_of_big_int n) ^ "."); pe "Proof."; pe "intro H."; pe "apply (Pocklington_refl "; pe (" (Ell_certif"); pe (" " ^ (string_of_big_int n)); pe (" " ^ (string_of_big_int s)); pe (" ((" ^ (string_of_big_int r) ^ ",1)::nil)"); pe (" " ^ (string_of_big_int a)); pe (" " ^ (string_of_big_int b)); pe (" " ^ (string_of_big_int x)); pe (" " ^ (string_of_big_int y) ^ ")"); pe " ((Proof_certif _ H) :: nil))."; pe "native_cast_no_check (refl_equal true)."; pe "Time Qed."; split_close k let print_external k n = let fname = !fileout ^ "_" ^ (string_of_int k) ^ ".v" in let _ = Sys.command (Filename.dirname (Sys.executable_name)^ "/pocklington -o " ^ fname ^ " -n " ^ !name ^ (string_of_int k)^ " " ^ (string_of_big_int n)) in if (not !split) then (let ic = open_in fname in let line = ref "" in let flag = ref false in (try while true do line := input_line ic; if string_match lemmaExp !line 0 then flag := true; if !flag then pe !line done with e -> close_in_noerr ic); Sys.remove fname) let print_pocklington k n b r = split_begin k; pe ""; pe ("Lemma " ^ !name ^ (string_of_int k) ^ ":"); pe (" prime " ^ (string_of_big_int r) ^ "->"); pe (" prime " ^ (string_of_big_int n) ^ "."); pe "Proof."; pe "intro H."; pe "apply (Pocklington_refl "; pe (" (SPock_certif "); pe (" " ^ (string_of_big_int n)); pe (" " ^ (string_of_big_int b)); pe (" ((" ^ (string_of_big_int r) ^ ", 1)::nil))" ); pe " ((Proof_certif _ H) :: nil))."; pe "native_cast_no_check (refl_equal true)."; pe "Time Qed."; split_close k let rec print_goals k l = match l with [] -> () | Elliptic (n, s, r, a, b, x, y) :: l1 -> print_elliptic k n s r a b x y; print_goals (k + 1) l1 | Pocklington (n, b, r) :: l1 -> print_pocklington k n b r; print_goals (k + 1) l1 | External n :: l1 -> print_external k n; print_goals k l1 | _ :: l1 -> print_goals k l1 let rec rprint_main k l = match l with [] -> () | Elliptic (n, s, r, a, b, x, y) :: l1 -> pef ("("); pef (!name ^ (string_of_int k) ^ " "); rprint_main (k + 1) l1; pef (")"); | Pocklington (n, b, r) :: l1 -> pef ("("); pef (!name ^ (string_of_int k)^ " "); rprint_main (k + 1) l1; pef (")"); | External n :: l1 -> pef (!name ^ (string_of_int k)); rprint_main k l1 | _ :: l1 -> rprint_main k l1 let rec print_main l = match l with [] -> () | Elliptic (n, s, r, a, b, x, y) :: _ -> pe (""); pe ("Lemma " ^ !name ^ ": prime " ^ (string_of_big_int n)^ "."); pe ("Proof."); pe ("exact"); rprint_main 0 l; pe ("."); pe ("Qed.") | Pocklington (n, b, r) :: l1 -> pe (""); pe ("Lemma " ^ !name ^ ": prime " ^ (string_of_big_int n)^ "."); pe ("Proof."); pe ("exact"); rprint_main 0 l; pe ("."); pe ("Qed.") | External n :: l1 -> pe (""); pe ("Lemma " ^ !name ^ " : prime " ^ (string_of_big_int n)^ "."); pe ("Proof."); pef ("exact "); rprint_main 0 l; pe ("."); pe ("Qed.") | _ :: l1 -> print_main l1 let rec print_require k l = match l with [] -> () | Elliptic (n, s, r, a, b, x, y) :: l1 -> pe ("Require Import " ^ !fileout ^ "_" ^ (string_of_int k) ^ "."); print_require (k + 1) l1 | Pocklington (n, b, r) :: l1 -> pe ("Require Import " ^ !fileout ^ "_" ^ (string_of_int k) ^ "."); print_require (k + 1) l1 | External n :: l1 -> pe ("Require Import " ^ !fileout ^ "_" ^ (string_of_int k) ^ "."); print_require (k + 1) l1 | _ :: l1 -> print_require k l1 let rec print_make k l = match l with [] -> () | Elliptic (n, s, r, a, b, x, y) :: l1 -> pe (!fileout ^ "_" ^ (string_of_int k) ^ ".v"); print_make (k + 1) l1 | Pocklington (n, b, r) :: l1 -> pe (!fileout ^ "_" ^ (string_of_int k) ^ ".v"); print_make (k + 1) l1 | External n :: l1 -> pe (!fileout ^ "_" ^ (string_of_int k) ^ ".v"); print_make (k + 1) l1 | _ :: l1 -> print_make k l1 let _ = let v = ref (Array.length Sys.argv) in let k = ref 1 in let flag = ref true in while !flag do if Sys.argv.(!k) = "-split" then (k := !k + 1; v := !v -1; split := true) else if Sys.argv.(!k) = "-o" then (k := !k + 2; v := !v - 2; (try fileout := Filename.chop_extension (Sys.argv.(!k - 1)) with e -> fileout := Sys.argv.(!k - 1)); fileoutflag := true) else if Sys.argv.(!k) = "-n" then (k := !k + 2; v := !v - 2; name := Sys.argv.(!k - 1)) else (flag := false) done; if (!v) == 2 then (let p = parse Sys.argv.(!k) in if (not !fileoutflag) then (try fileout := Filename.chop_extension (Sys.argv.(!k)) with e -> fileout := Sys.argv.(!k)); if (not !split) then (let fname = !fileout ^ ".v" in co := open_out fname; print_header ()); print_goals 0 p; if (!split) then (let fname = !fileout ^ ".v" in co := open_out fname; print_header (); print_require 0 p); print_main p; close_out !co; if (!split) then (let fname = !fileout ^ "_make" in co := open_out fname; pe (!fileout ^ ".v"); print_make 0 p); close_out !co) else (print_string "o2v [-split] [-o file.out] [-n name] file.in "; print_newline()) coqprime-8.18/gencertif/pocklington.c000066400000000000000000000150111451023060700177260ustar00rootroot00000000000000/* (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) */ #include #include #include #include #include "certif.h" #include "ecm.h" #include "factorize.h" #include "gmp.h" #if defined(__STDC__) || defined(__cplusplus) || defined(_AIX) || \ defined(__DECC) || (defined(__mips) && defined(_SYSTYPE_SVR4)) || \ defined(_MSC_VER) || defined(_WIN32) #define __ECM_HAVE_TOKEN_PASTE 1 #else #define __ECM_HAVE_TOKEN_PASTE 0 #endif #ifndef __ECM #if __ECM_HAVE_TOKEN_PASTE #define __ECM(x) __ecm_##x #else #define __ECM(x) __ecm_ /**/ x #endif #endif #define pp1_random_seed __ECM(pp1_random_seed) void pp1_random_seed(mpz_t, mpz_t, gmp_randstate_t); #define pm1_random_seed __ECM(pm1_random_seed) void pm1_random_seed(mpz_t, mpz_t, gmp_randstate_t); #define get_random_ul __ECM(get_random_ul) unsigned long get_random_ul(void); void usage() { fprintf(stdout, "usage ; pocklington [-v] [-o file] [-n name] numspec\n"); fprintf(stdout, "numspec = prime | -next number\n"); fprintf(stdout, " = -size number | -proth k n | -lucas number \n"); fprintf(stdout, " | -mersenne number | -dec filename\n"); fflush(stdout); exit(-1); } int main(int argc, char *argv[]) { mpz_t t; pre_certif_t p; pock_certif_t c; certif_t lc; char *filename; int defaultname = 1; char *lemmaname; lemmaname = "myPrime"; c = NULL; if (argc < 2) { usage(); } while (1) { if (!strcmp(argv[1], "-v")) { my_set_verbose(); argv++; argc--; } else if (!strcmp(argv[1], "-o")) { if (argc == 2) usage(); filename = argv[2]; defaultname = 0; argv += 2; argc -= 2; } else if (!strcmp(argv[1], "-n")) { if (argc == 2) usage(); lemmaname = argv[2]; argv += 2; argc -= 2; } else break; } mpz_init(t); lc = init_certif(); switch (argc) { case 2: mpz_set_str(t, argv[1], 0); if (!mpz_probab_prime_p(t, 3)) { mpz_out_str(stdout, 10, t); fprintf(stdout, " is not a prime number\n"); fflush(stdout); exit(-1); } c = pock_certif(t); break; case 3: if (!strcmp(argv[1], "-size")) { unsigned long int size; gmp_randstate_t randstate; size = atoi(argv[2]); gmp_randinit_default(randstate); gmp_randseed_ui(randstate, get_random_ul()); mpz_urandomb(t, randstate, 4 * size); while (mpz_sizeinbase(t, 10) <= size) mpz_urandomb(t, randstate, 4 * size); while (mpz_sizeinbase(t, 10) > size) mpz_tdiv_q_2exp(t, t, 1); mpz_nextprime(t, t); c = pock_certif(t); break; } if (!strcmp(argv[1], "-next")) { mpz_set_str(t, argv[2], 0); mpz_nextprime(t, t); c = pock_certif(t); break; } if (!strcmp(argv[1], "-lucas")) { unsigned long int n; n = atoi(argv[2]); /* compute the mersenne number */ mpz_set_ui(t, 1); mpz_mul_2exp(t, t, n); mpz_sub_ui(t, t, 1); fprintf(stdout, "mersenne %lu = ", n); mpz_out_str(stdout, 10, t); fprintf(stdout, "\n"); /* Check primality */ if (!mpz_probab_prime_p(t, 3)) { fprintf(stdout, "is not a prime number\n"); fflush(stdout); exit(-1); } /* build the filename */ if (defaultname) { int size; size = /*mersenne.v*/ 7 + strlen(argv[2]) + 1; filename = (char *)malloc(size); strcpy(filename, "lucas"); strcat(filename, argv[2]); strcat(filename, ".v"); defaultname = 0; } p = mk_lucas_certif(t, n); break; } if (!strcmp(argv[1], "-mersenne")) { unsigned long int n; n = atoi(argv[2]); /* compute the mersenne number */ mpz_set_ui(t, 1); mpz_mul_2exp(t, t, n); mpz_sub_ui(t, t, 1); fprintf(stdout, "mersenne %lu = ", n); mpz_out_str(stdout, 10, t); fprintf(stdout, "\n"); /* Check primality */ if (!mpz_probab_prime_p(t, 3)) { fprintf(stdout, "is not a prime number\n"); fflush(stdout); exit(-1); } /* build the filename */ if (defaultname) { int size; size = /*mersenne.v*/ 10 + strlen(argv[2]) + 1; filename = (char *)malloc(size); strcpy(filename, "mersenne"); strcat(filename, argv[2]); strcat(filename, ".v"); defaultname = 0; } c = mersenne_certif(t, n); break; } if (!strcmp(argv[1], "-dec")) { c = read_file(argv[2], lc); if (defaultname) { int size; size = strlen(argv[2]) + 3; filename = (char *)malloc(size); strcpy(filename, argv[2]); strcat(filename, ".v"); defaultname = 0; } fprintf(stdout, "build certificate for\n"); mpz_out_str(stdout, 10, c->_N); fprintf(stdout, "\n"); fflush(stdout); finalize_pock(c); p = mk_pock_certif(c); break; } else usage(); case 4: if (!strcmp(argv[1], "-proth")) { unsigned long int n, k; k = atoi(argv[2]); n = atoi(argv[3]); mpz_set_ui(t, k); mpz_mul_2exp(t, t, n); mpz_add_ui(t, t, 1); if (!mpz_probab_prime_p(t, 3)) { mpz_out_str(stdout, 10, t); fprintf(stdout, " is not a prime number\n"); fflush(stdout); exit(-1); } c = pock_certif(t); break; } default: usage(); } if (defaultname) { int size; char *str; size = mpz_sizeinbase (t, 10) + 9; if (size > FILENAME_MAX - 1) filename = "Prime.v"; else { filename = (char *)malloc(size + 1); strcpy(filename, "prime"); str = (char *) malloc (size); str = mpz_get_str (str, 10, t); strcat(filename, str); strcat(filename, ".v"); free (str); } } if (c != NULL) { p = mk_pock_certif(c); extend_lc(lc, c, 0, 0); } print_file(filename, lemmaname, p, lc); fprintf(stdout, "\n"); fflush(stdout); mpz_clear(t); exit(0); } coqprime-8.18/src/000077500000000000000000000000001451023060700140565ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/000077500000000000000000000000001451023060700156355ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/List/000077500000000000000000000000001451023060700165505ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/List/.depend000066400000000000000000000012061451023060700200070ustar00rootroot00000000000000Iterator.vo: Iterator.v Permutation.vo Iterator.vi: Iterator.v Permutation.vo ListAux.vo: ListAux.v ../Tactic/Tactic.vo ListAux.vi: ListAux.v ../Tactic/Tactic.vo Permutation.vo: Permutation.v ListAux.vo Permutation.vi: Permutation.v ListAux.vo UList.vo: UList.v Permutation.vo UList.vi: UList.v Permutation.vo ZProgression.vo: ZProgression.v Iterator.vo UList.vo ZProgression.vi: ZProgression.v Iterator.vo UList.vo Iterator.html: Iterator.v Permutation.html ListAux.html: ListAux.v ../Tactic/Tactic.html Permutation.html: Permutation.v ListAux.html UList.html: UList.v Permutation.html ZProgression.html: ZProgression.v Iterator.html UList.html coqprime-8.18/src/Coqprime/List/Iterator.v000066400000000000000000000140001451023060700205230ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Require Export List. Require Export Permutation. Require Import Arith. Section Iterator. Variables A B : Set. Variable zero : B. Variable f : A -> B. Variable g : B -> B -> B. Hypothesis g_zero : forall a, g a zero = a. Hypothesis g_trans : forall a b c, g a (g b c) = g (g a b) c. Hypothesis g_sym : forall a b, g a b = g b a. Definition iter := fold_right (fun a r => g (f a) r) zero. Hint Unfold iter : core. Theorem iter_app: forall l1 l2, iter (app l1 l2) = g (iter l1) (iter l2). intros l1; elim l1; simpl; auto. intros l2; rewrite g_sym; auto. intros a l H l2; rewrite H. rewrite g_trans; auto. Qed. Theorem iter_permutation: forall l1 l2, permutation l1 l2 -> iter l1 = iter l2. intros l1 l2 H; elim H; simpl; auto; clear H l1 l2. intros a l1 l2 H1 H2; apply f_equal2 with ( f := g ); auto. intros a b l; (repeat rewrite g_trans). apply f_equal2 with ( f := g ); auto. intros l1 l2 l3 H H0 H1 H2; apply trans_equal with ( 1 := H0 ); auto. Qed. Lemma iter_inv: forall P l, P zero -> (forall a b, P a -> P b -> P (g a b)) -> (forall x, In x l -> P (f x)) -> P (iter l). intros P l H H0; (elim l; simpl; auto). Qed. Variable next : A -> A. Fixpoint progression (m : A) (n : nat) {struct n} : list A := match n with 0 => nil | S n1 => cons m (progression (next m) n1) end. Fixpoint next_n (c : A) (n : nat) {struct n} : A := match n with 0 => c | S n1 => next_n (next c) n1 end. Theorem progression_app: forall a b n m, le m n -> b = next_n a m -> progression a n = app (progression a m) (progression b (n - m)). intros a b n m; generalize a b n; clear a b n; elim m; clear m; simpl. intros a b n H H0; apply f_equal2 with ( f := progression ); auto with arith. intros m H a b n; case n; simpl; clear n. intros H1; absurd (0 < 1 + m); auto with arith. intros n H0 H1; apply f_equal2 with ( f := @cons A ); auto with arith. Qed. Let iter_progression := fun m n => iter (progression m n). Theorem iter_progression_app: forall a b n m, le m n -> b = next_n a m -> iter (progression a n) = g (iter (progression a m)) (iter (progression b (n - m))). intros a b n m H H0; unfold iter_progression; rewrite (progression_app a b n m); (try apply iter_app); auto. Qed. Theorem length_progression: forall z n, length (progression z n) = n. intros z n; generalize z; elim n; simpl; auto. Qed. End Iterator. Arguments iter [A B]. Arguments progression [A]. Arguments next_n [A]. Global Hint Unfold iter : core. Global Hint Unfold progression : core. Global Hint Unfold next_n : core. Theorem iter_ext: forall (A B : Set) zero (f1 : A -> B) f2 g l, (forall a, In a l -> f1 a = f2 a) -> iter zero f1 g l = iter zero f2 g l. intros A B zero f1 f2 g l; elim l; simpl; auto. intros a l0 H H0; apply f_equal2 with ( f := g ); auto. Qed. Theorem iter_map: forall (A B C : Set) zero (f : B -> C) g (k : A -> B) l, iter zero f g (map k l) = iter zero (fun x => f (k x)) g l. intros A B C zero f g k l; elim l; simpl; auto. intros; apply f_equal2 with ( f := g ); auto with arith. Qed. Theorem iter_comp: forall (A B : Set) zero (f1 f2 : A -> B) g l, (forall a, g a zero = a) -> (forall a b c, g a (g b c) = g (g a b) c) -> (forall a b, g a b = g b a) -> g (iter zero f1 g l) (iter zero f2 g l) = iter zero (fun x => g (f1 x) (f2 x)) g l. intros A B zero f1 f2 g l g_zero g_trans g_sym; elim l; simpl; auto. intros a l0 H; rewrite <- H; (repeat rewrite <- g_trans). apply f_equal2 with ( f := g ); auto. (repeat rewrite g_trans); apply f_equal2 with ( f := g ); auto. Qed. Theorem iter_com: forall (A B : Set) zero (f : A -> A -> B) g l1 l2, (forall a, g a zero = a) -> (forall a b c, g a (g b c) = g (g a b) c) -> (forall a b, g a b = g b a) -> iter zero (fun x => iter zero (fun y => f x y) g l1) g l2 = iter zero (fun y => iter zero (fun x => f x y) g l2) g l1. intros A B zero f g l1 l2 H H0 H1; generalize l2; elim l1; simpl; auto; clear l1 l2. intros l2; elim l2; simpl; auto with arith. intros; rewrite H1; rewrite H; auto with arith. intros a l1 H2 l2; case l2; clear l2; simpl; auto. elim l1; simpl; auto with arith. intros; rewrite H1; rewrite H; auto with arith. intros b l2. rewrite <- (iter_comp _ _ zero (fun x => f x a) (fun x => iter zero (fun (y : A) => f x y) g l1)); auto with arith. rewrite <- (iter_comp _ _ zero (fun y => f b y) (fun y => iter zero (fun (x : A) => f x y) g l2)); auto with arith. (repeat rewrite H0); auto. apply f_equal2 with ( f := g ); auto. (repeat rewrite <- H0); auto. apply f_equal2 with ( f := g ); auto. Qed. Theorem iter_comp_const: forall (A B : Set) zero (f : A -> B) g k l, k zero = zero -> (forall a b, k (g a b) = g (k a) (k b)) -> k (iter zero f g l) = iter zero (fun x => k (f x)) g l. intros A B zero f g k l H H0; elim l; simpl; auto. intros a l0 H1; rewrite H0; apply f_equal2 with ( f := g ); auto. Qed. Lemma next_n_S: forall n m, next_n S n m = plus n m. intros n m; generalize n; elim m; clear n m; simpl; auto with arith. intros m H n; case n; simpl. - rewrite H; auto with arith. - intros n1; rewrite H; simpl; auto with arith. Qed. Theorem progression_S_le_init: forall n m p, In p (progression S n m) -> le n p. intros n m; generalize n; elim m; clear n m; simpl; auto. intros; contradiction. intros m H n p [H1|H1]; auto with arith. subst n; auto. apply le_S_n; auto with arith. Qed. Theorem progression_S_le_end: forall n m p, In p (progression S n m) -> lt p (n + m). intros n m; generalize n; elim m; clear n m; simpl; auto. intros; contradiction. intros m H n p [H1|H1]; auto with arith. subst n; auto with arith. rewrite <- plus_n_Sm; auto with arith. rewrite <- plus_n_Sm; auto with arith. generalize (H (S n) p); auto with arith. Qed. coqprime-8.18/src/Coqprime/List/ListAux.v000066400000000000000000000205051451023060700203320ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) (********************************************************************** Aux.v Auxillary functions & Theorems **********************************************************************) Require Export List. Require Export Arith. Require Export Tactic. Require Import Inverse_Image. Require Import Wf_nat. (************************************** Some properties on list operators: app, map,... **************************************) Section List. Variables (A : Set) (B : Set) (C : Set). Variable f : A -> B. (************************************** An induction theorem for list based on length **************************************) Theorem list_length_ind: forall (P : list A -> Prop), (forall (l1 : list A), (forall (l2 : list A), length l2 < length l1 -> P l2) -> P l1) -> forall (l : list A), P l. intros P H l; apply well_founded_ind with ( R := fun (x y : list A) => length x < length y ); auto. apply wf_inverse_image with ( R := lt ); auto. apply lt_wf. Qed. Definition list_length_induction: forall (P : list A -> Set), (forall (l1 : list A), (forall (l2 : list A), length l2 < length l1 -> P l2) -> P l1) -> forall (l : list A), P l. intros P H l; apply well_founded_induction with ( R := fun (x y : list A) => length x < length y ); auto. apply wf_inverse_image with ( R := lt ); auto. apply lt_wf. Qed. Theorem in_ex_app: forall (a : A) (l : list A), In a l -> (exists l1 : list A , exists l2 : list A , l = l1 ++ (a :: l2) ). intros a l; elim l; clear l; simpl; auto. intros H; case H. intros a1 l H [H1|H1]; auto. exists (nil (A:=A)); exists l; simpl; auto. rewrite H1; auto. case H; auto; intros l1 [l2 Hl2]; exists (a1 :: l1); exists l2; simpl; auto. rewrite Hl2; auto. Qed. (************************************** Properties on app **************************************) Theorem length_app: forall (l1 l2 : list A), length (l1 ++ l2) = length l1 + length l2. intros l1; elim l1; simpl; auto. Qed. Theorem app_inv_head: forall (l1 l2 l3 : list A), l1 ++ l2 = l1 ++ l3 -> l2 = l3. intros l1; elim l1; simpl; auto. intros a l H l2 l3 H0; apply H; injection H0; auto. Qed. Theorem app_inv_tail: forall (l1 l2 l3 : list A), l2 ++ l1 = l3 ++ l1 -> l2 = l3. intros l1 l2; generalize l1; elim l2; clear l1 l2; simpl; auto. intros l1 l3; case l3; auto. intros b l H; absurd (length ((b :: l) ++ l1) <= length l1). simpl; rewrite length_app; auto with arith. rewrite <- H; auto with arith. intros a l H l1 l3; case l3. simpl; intros H1; absurd (length (a :: (l ++ l1)) <= length l1). simpl; rewrite length_app; auto with arith. rewrite H1; auto with arith. simpl; intros b l0 H0; injection H0. intros H1 H2; rewrite H2, (H _ _ H1); auto. Qed. Theorem app_inv_app: forall l1 l2 l3 l4 a, l1 ++ l2 = l3 ++ (a :: l4) -> (exists l5 : list A , l1 = l3 ++ (a :: l5) ) \/ (exists l5 , l2 = l5 ++ (a :: l4) ). intros l1; elim l1; simpl; auto. intros l2 l3 l4 a H; right; exists l3; auto. intros a l H l2 l3 l4 a0; case l3; simpl. intros H0; left; exists l; injection H0; intros; subst; auto. intros b l0 H0; case (H l2 l0 l4 a0); auto. injection H0; auto. intros [l5 H1]. left; exists l5; injection H0; intros; subst; auto. Qed. Theorem app_inv_app2: forall l1 l2 l3 l4 a b, l1 ++ l2 = l3 ++ (a :: (b :: l4)) -> (exists l5 : list A , l1 = l3 ++ (a :: (b :: l5)) ) \/ ((exists l5 , l2 = l5 ++ (a :: (b :: l4)) ) \/ l1 = l3 ++ (a :: nil) /\ l2 = b :: l4). intros l1; elim l1; simpl; auto. intros l2 l3 l4 a b H; right; left; exists l3; auto. intros a l H l2 l3 l4 a0 b; case l3; simpl. case l; simpl. intros H0; right; right; injection H0; split; auto. rewrite H2; auto. intros b0 l0 H0; left; exists l0; injection H0; intros; subst; auto. intros b0 l0 H0; case (H l2 l0 l4 a0 b); auto. injection H0; auto. intros [l5 HH1]; left; exists l5; injection H0; intros; subst; auto. intros [H1|[H1 H2]]; auto. right; right; split; auto; injection H0; intros; subst; auto. Qed. Theorem same_length_ex: forall (a : A) l1 l2 l3, length (l1 ++ (a :: l2)) = length l3 -> (exists l4 , exists l5 , exists b : B , length l1 = length l4 /\ (length l2 = length l5 /\ l3 = l4 ++ (b :: l5)) ). intros a l1; elim l1; simpl; auto. intros l2 l3; case l3; simpl; (try (intros; discriminate)). intros b l H; exists (nil (A:=B)); exists l; exists b; (repeat (split; auto)). intros a0 l H l2 l3; case l3; simpl; (try (intros; discriminate)). intros b l0 H0. case (H l2 l0); auto. intros l4 [l5 [b1 [HH1 [HH2 HH3]]]]. exists (b :: l4); exists l5; exists b1; (repeat (simpl; split; auto)). rewrite HH3; auto. Qed. (************************************** Properties on map **************************************) Theorem in_map_inv: forall (b : B) (l : list A), In b (map f l) -> (exists a : A , In a l /\ b = f a ). intros b l; elim l; simpl; auto. intros tmp; case tmp. intros a0 l0 H [H1|H1]; auto. exists a0; auto. case (H H1); intros a1 [H2 H3]; exists a1; auto. Qed. Theorem in_map_fst_inv: forall a (l : list (B * C)), In a (map (fst (B:=_)) l) -> (exists c , In (a, c) l ). intros a l; elim l; simpl; auto. intros H; case H. intros a0 l0 H [H0|H0]; auto. exists (snd a0); left; rewrite <- H0; case a0; simpl; auto. case H; auto; intros l1 Hl1; exists l1; auto. Qed. Theorem length_map: forall l, length (map f l) = length l. intros l; elim l; simpl; auto. Qed. Theorem map_app: forall l1 l2, map f (l1 ++ l2) = map f l1 ++ map f l2. intros l; elim l; simpl; auto. intros a l0 H l2; rewrite H; auto. Qed. Theorem map_length_decompose: forall l1 l2 l3 l4, length l1 = length l2 -> map f (app l1 l3) = app l2 l4 -> map f l1 = l2 /\ map f l3 = l4. intros l1; elim l1; simpl; auto; clear l1. intros l2; case l2; simpl; auto. intros; discriminate. intros a l1 Rec l2; case l2; simpl; clear l2; auto. intros; discriminate. intros b l2 l3 l4 H1 H2. injection H2; clear H2; intros H2 H3. case (Rec l2 l3 l4); auto. intros H4 H5; split; auto. subst; auto. Qed. (************************************** Properties of flat_map **************************************) Theorem in_flat_map: forall (l : list B) (f : B -> list C) a b, In a (f b) -> In b l -> In a (flat_map f l). intros l g; elim l; simpl; auto. intros a l0 H a0 b H0 [H1|H1]; apply in_or_app; auto. left; rewrite H1; auto. right; apply H with ( b := b ); auto. Qed. Theorem in_flat_map_ex: forall (l : list B) (f : B -> list C) a, In a (flat_map f l) -> (exists b , In b l /\ In a (f b) ). intros l g; elim l; simpl; auto. intros a H; case H. intros a l0 H a0 H0; case in_app_or with ( 1 := H0 ); simpl; auto. intros H1; exists a; auto. intros H1; case H with ( 1 := H1 ). intros b [H2 H3]; exists b; simpl; auto. Qed. (************************************** Properties of fold_left **************************************) Theorem fold_left_invol: forall (f: A -> B -> A) (P: A -> Prop) l a, P a -> (forall x y, P x -> P (f x y)) -> P (fold_left f l a). intros f1 P l; elim l; simpl; auto. Qed. Theorem fold_left_invol_in: forall (f: A -> B -> A) (P: A -> Prop) l a b, In b l -> (forall x, P (f x b)) -> (forall x y, P x -> P (f x y)) -> P (fold_left f l a). intros f1 P l; elim l; simpl; auto. intros a1 b HH; case HH. intros a1 l1 Rec a2 b [V|V] V1 V2; subst; auto. apply fold_left_invol; auto. apply Rec with (b := b); auto. Qed. End List. (************************************** Propertie of list_prod **************************************) Theorem length_list_prod: forall (A : Set) (l1 l2 : list A), length (list_prod l1 l2) = length l1 * length l2. intros A l1 l2; elim l1; simpl; auto. intros a l H; rewrite length_app; rewrite length_map; rewrite H; auto. Qed. Theorem in_list_prod_inv: forall (A B : Set) a l1 l2, In a (list_prod l1 l2) -> (exists b : A , exists c : B , a = (b, c) /\ (In b l1 /\ In c l2) ). intros A B a l1 l2; elim l1; simpl; auto; clear l1. intros H; case H. intros a1 l1 H1 H2. case in_app_or with ( 1 := H2 ); intros H3; auto. case in_map_inv with ( 1 := H3 ); intros b1 [Hb1 Hb2]; auto. exists a1; exists b1; split; auto. case H1; auto; intros b1 [c1 [Hb1 [Hb2 Hb3]]]. exists b1; exists c1; split; auto. Qed. coqprime-8.18/src/Coqprime/List/Permutation.v000066400000000000000000000411271451023060700212530ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) (********************************************************************** Permutation.v Defintion and properties of permutations **********************************************************************) Require Export List. Require Export ListAux. Section permutation. Variable A : Set. (************************************** Definition of permutations as sequences of adjacent transpositions **************************************) Inductive permutation : list A -> list A -> Prop := | permutation_nil : permutation nil nil | permutation_skip : forall (a : A) (l1 l2 : list A), permutation l2 l1 -> permutation (a :: l2) (a :: l1) | permutation_swap : forall (a b : A) (l : list A), permutation (a :: b :: l) (b :: a :: l) | permutation_trans : forall l1 l2 l3 : list A, permutation l1 l2 -> permutation l2 l3 -> permutation l1 l3. Hint Constructors permutation : core. (************************************** Reflexivity **************************************) Theorem permutation_refl : forall l : list A, permutation l l. simple induction l. apply permutation_nil. intros a l1 H. apply permutation_skip with (1 := H). Qed. Hint Resolve permutation_refl : core. (************************************** Symmetry **************************************) Theorem permutation_sym : forall l m : list A, permutation l m -> permutation m l. intros l1 l2 H'; elim H'. apply permutation_nil. intros a l1' l2' H1 H2. apply permutation_skip with (1 := H2). intros a b l1'. apply permutation_swap. intros l1' l2' l3' H1 H2 H3 H4. apply permutation_trans with (1 := H4) (2 := H2). Qed. (************************************** Compatibility with list length **************************************) Theorem permutation_length : forall l m : list A, permutation l m -> length l = length m. intros l m H'; elim H'; simpl in |- *; auto. intros l1 l2 l3 H'0 H'1 H'2 H'3. rewrite <- H'3; auto. Qed. (************************************** A permutation of the nil list is the nil list **************************************) Theorem permutation_nil_inv : forall l : list A, permutation l nil -> l = nil. intros l H; generalize (permutation_length _ _ H); case l; simpl in |- *; auto. intros; discriminate. Qed. (************************************** A permutation of the singleton list is the singleton list **************************************) Let permutation_one_inv_aux : forall l1 l2 : list A, permutation l1 l2 -> forall a : A, l1 = a :: nil -> l2 = a :: nil. intros l1 l2 H; elim H; clear H l1 l2; auto. intros a l3 l4 H0 H1 b H2. injection H2; intros; subst; auto. rewrite (permutation_nil_inv _ (permutation_sym _ _ H0)); auto. intros; discriminate. Qed. Theorem permutation_one_inv : forall (a : A) (l : list A), permutation (a :: nil) l -> l = a :: nil. intros a l H; apply permutation_one_inv_aux with (l1 := a :: nil); auto. Qed. (************************************** Compatibility with the belonging **************************************) Theorem permutation_in : forall (a : A) (l m : list A), permutation l m -> In a l -> In a m. intros a l m H; elim H; simpl in |- *; auto; intuition. Qed. (************************************** Compatibility with the append function **************************************) Theorem permutation_app_comp : forall l1 l2 l3 l4, permutation l1 l2 -> permutation l3 l4 -> permutation (l1 ++ l3) (l2 ++ l4). intros l1 l2 l3 l4 H1; generalize l3 l4; elim H1; clear H1 l1 l2 l3 l4; simpl in |- *; auto. intros a b l l3 l4 H. cut (permutation (l ++ l3) (l ++ l4)); auto. intros; apply permutation_trans with (a :: b :: l ++ l4); auto. elim l; simpl in |- *; auto. intros l1 l2 l3 H H0 H1 H2 l4 l5 H3. apply permutation_trans with (l2 ++ l4); auto. Qed. Hint Resolve permutation_app_comp : core. (************************************** Swap two sublists **************************************) Theorem permutation_app_swap : forall l1 l2, permutation (l1 ++ l2) (l2 ++ l1). intros l1; elim l1; auto. intros; rewrite <- app_nil_end; auto. intros a l H l2. replace (l2 ++ a :: l) with ((l2 ++ a :: nil) ++ l). apply permutation_trans with (l ++ l2 ++ a :: nil); auto. apply permutation_trans with (((a :: nil) ++ l2) ++ l); auto. simpl in |- *; auto. apply permutation_trans with (l ++ (a :: nil) ++ l2); auto. apply permutation_sym; auto. replace (l2 ++ a :: l) with ((l2 ++ a :: nil) ++ l). apply permutation_app_comp; auto. elim l2; simpl in |- *; auto. intros a0 l0 H0. apply permutation_trans with (a0 :: a :: l0); auto. apply (app_ass l2 (a :: nil) l). apply (app_ass l2 (a :: nil) l). Qed. (************************************** A transposition is a permutation **************************************) Theorem permutation_transposition : forall a b l1 l2 l3, permutation (l1 ++ a :: l2 ++ b :: l3) (l1 ++ b :: l2 ++ a :: l3). intros a b l1 l2 l3. apply permutation_app_comp; auto. change (permutation ((a :: nil) ++ l2 ++ (b :: nil) ++ l3) ((b :: nil) ++ l2 ++ (a :: nil) ++ l3)) in |- *. repeat rewrite <- app_ass. apply permutation_app_comp; auto. apply permutation_trans with ((b :: nil) ++ (a :: nil) ++ l2); auto. apply permutation_app_swap; auto. repeat rewrite app_ass. apply permutation_app_comp; auto. apply permutation_app_swap; auto. Qed. (************************************** An element of a list can be put on top of the list to get a permutation **************************************) Theorem in_permutation_ex : forall a l, In a l -> exists l1 : list A, permutation (a :: l1) l. intros a l; elim l; simpl in |- *; auto. intros H; case H; auto. intros a0 l0 H [H0| H0]. exists l0; rewrite H0; auto. case H; auto; intros l1 Hl1; exists (a0 :: l1). apply permutation_trans with (a0 :: a :: l1); auto. Qed. (************************************** A permutation of a cons can be inverted **************************************) Let permutation_cons_ex_aux : forall (a : A) (l1 l2 : list A), permutation l1 l2 -> forall l11 l12 : list A, l1 = l11 ++ a :: l12 -> exists l3 : list A, (exists l4 : list A, l2 = l3 ++ a :: l4 /\ permutation (l11 ++ l12) (l3 ++ l4)). intros a l1 l2 H; elim H; clear H l1 l2. intros l11 l12; case l11; simpl in |- *; intros; discriminate. intros a0 l1 l2 H H0 l11 l12; case l11; simpl in |- *. exists (nil (A:=A)); exists l1; simpl in |- *; split; auto. injection H1; intros; subst; auto. injection H1; intros H2 H3; rewrite <- H2; auto. intros a1 l111 H1. case (H0 l111 l12); auto. injection H1; auto. intros l3 (l4, (Hl1, Hl2)). exists (a0 :: l3); exists l4; split; simpl in |- *; auto. injection H1; intros; subst; auto. injection H1; intros H2 H3; rewrite H3; auto. intros a0 b l l11 l12; case l11; simpl in |- *. case l12; try (intros; discriminate). intros a1 l0 H; exists (b :: nil); exists l0; simpl in |- *; split; auto. injection H; intros; subst; auto. injection H; intros H1 H2 H3; rewrite H2; auto. intros a1 l111; case l111; simpl in |- *. intros H; exists (nil (A:=A)); exists (a0 :: l12); simpl in |- *; split; auto. injection H; intros; subst; auto. injection H; intros H1 H2 H3; rewrite H3; auto. intros a2 H1111 H; exists (a2 :: a1 :: H1111); exists l12; simpl in |- *; split; auto. injection H; intros; subst; auto. intros l1 l2 l3 H H0 H1 H2 l11 l12 H3. case H0 with (1 := H3). intros l4 (l5, (Hl1, Hl2)). case H2 with (1 := Hl1). intros l6 (l7, (Hl3, Hl4)). exists l6; exists l7; split; auto. apply permutation_trans with (1 := Hl2); auto. Qed. Theorem permutation_cons_ex : forall (a : A) (l1 l2 : list A), permutation (a :: l1) l2 -> exists l3 : list A, (exists l4 : list A, l2 = l3 ++ a :: l4 /\ permutation l1 (l3 ++ l4)). intros a l1 l2 H. apply (permutation_cons_ex_aux a (a :: l1) l2 H nil l1); simpl in |- *; auto. Qed. (************************************** A permutation can be simply inverted if the two list starts with a cons **************************************) Theorem permutation_inv : forall (a : A) (l1 l2 : list A), permutation (a :: l1) (a :: l2) -> permutation l1 l2. intros a l1 l2 H; case permutation_cons_ex with (1 := H). intros l3 (l4, (Hl1, Hl2)). apply permutation_trans with (1 := Hl2). generalize Hl1; case l3; simpl in |- *; auto. intros H1; injection H1; intros H2; rewrite H2; auto. intros a0 l5 H1; injection H1; intros H2 H3; rewrite H2; rewrite H3; auto. apply permutation_trans with (a0 :: l4 ++ l5); auto. apply permutation_skip; apply permutation_app_swap. apply (permutation_app_swap (a0 :: l4) l5). Qed. (************************************** Take a list and return tle list of all pairs of an element of the list and the remaining list **************************************) Fixpoint split_one (l : list A) : list (A * list A) := match l with | nil => nil (A:=A * list A) | a :: l1 => (a, l1) :: map (fun p : A * list A => (fst p, a :: snd p)) (split_one l1) end. (************************************** The pairs of the list are a permutation **************************************) Theorem split_one_permutation : forall (a : A) (l1 l2 : list A), In (a, l1) (split_one l2) -> permutation (a :: l1) l2. intros a l1 l2; generalize a l1; elim l2; clear a l1 l2; simpl in |- *; auto. intros a l1 H1; case H1. intros a l H a0 l1 [H0| H0]. injection H0; intros H1 H2; rewrite H2; rewrite H1; auto. generalize H H0; elim (split_one l); simpl in |- *; auto. intros H1 H2; case H2. intros a1 l0 H1 H2 [H3| H3]; auto. injection H3; intros H4 H5; (rewrite <- H4; rewrite <- H5). apply permutation_trans with (a :: fst a1 :: snd a1); auto. apply permutation_skip. apply H2; auto. case a1; simpl in |- *; auto. Qed. (************************************** All elements of the list are there **************************************) Theorem split_one_in_ex : forall (a : A) (l1 : list A), In a l1 -> exists l2 : list A, In (a, l2) (split_one l1). intros a l1; elim l1; simpl in |- *; auto. intros H; case H. intros a0 l H [H0| H0]; auto. exists l; left; subst; auto. case H; auto. intros x H1; exists (a0 :: x); right; auto. apply (in_map (fun p : A * list A => (fst p, a0 :: snd p)) (split_one l) (a, x)); auto. Qed. (************************************** An auxillary function to generate all permutations **************************************) Fixpoint all_permutations_aux (l : list A) (n : nat) {struct n} : list (list A) := match n with | O => nil :: nil | S n1 => flat_map (fun p : A * list A => map (cons (fst p)) (all_permutations_aux (snd p) n1)) ( split_one l) end. (************************************** Generate all the permutations **************************************) Definition all_permutations (l : list A) := all_permutations_aux l (length l). (************************************** All the elements of the list are permutations **************************************) Let all_permutations_aux_permutation : forall (n : nat) (l1 l2 : list A), n = length l2 -> In l1 (all_permutations_aux l2 n) -> permutation l1 l2. intros n; elim n; simpl in |- *; auto. intros l1 l2; case l2. simpl in |- *; intros H0 [H1| H1]. rewrite <- H1; auto. case H1. simpl in |- *; intros; discriminate. intros n0 H l1 l2 H0 H1. case in_flat_map_ex with (1 := H1). clear H1; intros x; case x; clear x; intros a1 l3 (H1, H2). case in_map_inv with (1 := H2). simpl in |- *; intros y (H3, H4). rewrite H4; auto. apply permutation_trans with (a1 :: l3); auto. apply permutation_skip; auto. apply H with (2 := H3). apply eq_add_S. apply trans_equal with (1 := H0). change (length l2 = length (a1 :: l3)) in |- *. apply permutation_length; auto. apply permutation_sym; apply split_one_permutation; auto. apply split_one_permutation; auto. Qed. Theorem all_permutations_permutation : forall l1 l2 : list A, In l1 (all_permutations l2) -> permutation l1 l2. intros l1 l2 H; apply all_permutations_aux_permutation with (n := length l2); auto. Qed. (************************************** A permutation is in the list **************************************) Let permutation_all_permutations_aux : forall (n : nat) (l1 l2 : list A), n = length l2 -> permutation l1 l2 -> In l1 (all_permutations_aux l2 n). intros n; elim n; simpl in |- *; auto. intros l1 l2; case l2. intros H H0; rewrite permutation_nil_inv with (1 := H0); auto with datatypes. simpl in |- *; intros; discriminate. intros n0 H l1; case l1. intros l2 H0 H1; rewrite permutation_nil_inv with (1 := permutation_sym _ _ H1) in H0; discriminate. clear l1; intros a1 l1 l2 H1 H2. case (split_one_in_ex a1 l2); auto. apply permutation_in with (1 := H2); auto with datatypes. intros x H0. apply in_flat_map with (b := (a1, x)); auto. apply in_map; simpl in |- *. apply H; auto. apply eq_add_S. apply trans_equal with (1 := H1). change (length l2 = length (a1 :: x)) in |- *. apply permutation_length; auto. apply permutation_sym; apply split_one_permutation; auto. apply permutation_inv with (a := a1). apply permutation_trans with (1 := H2). apply permutation_sym; apply split_one_permutation; auto. Qed. Theorem permutation_all_permutations : forall l1 l2 : list A, permutation l1 l2 -> In l1 (all_permutations l2). intros l1 l2 H; unfold all_permutations in |- *; apply permutation_all_permutations_aux; auto. Qed. (************************************** Permutation is decidable **************************************) Definition permutation_dec : (forall a b : A, {a = b} + {a <> b}) -> forall l1 l2 : list A, {permutation l1 l2} + {~ permutation l1 l2}. intros H l1 l2. case (In_dec (list_eq_dec H) l1 (all_permutations l2)). intros i; left; apply all_permutations_permutation; auto. intros i; right; contradict i; apply permutation_all_permutations; auto. Defined. End permutation. (************************************** Hints **************************************) Global Hint Constructors permutation : core. Global Hint Resolve permutation_refl : core. Global Hint Resolve permutation_app_comp : core. Global Hint Resolve permutation_app_swap : core. (************************************** Implicits **************************************) Arguments permutation [A] _ _. Arguments split_one [A] _. Arguments all_permutations [A] _. Arguments permutation_dec [A]. (************************************** Permutation is compatible with map **************************************) Theorem permutation_map : forall (A B : Set) (f : A -> B) l1 l2, permutation l1 l2 -> permutation (map f l1) (map f l2). intros A B f l1 l2 H; elim H; simpl in |- *; auto. intros l0 l3 l4 H0 H1 H2 H3; apply permutation_trans with (2 := H3); auto. Qed. Global Hint Resolve permutation_map : core. (************************************** Permutation of a map can be inverted *************************************) Local Definition permutation_map_ex_aux : forall (A B : Set) (f : A -> B) l1 l2 l3, permutation l1 l2 -> l1 = map f l3 -> exists l4, permutation l4 l3 /\ l2 = map f l4. intros A1 B1 f l1 l2 l3 H; generalize l3; elim H; clear H l1 l2 l3. intros l3; case l3; simpl in |- *; auto. intros H; exists (nil (A:=A1)); auto. intros; discriminate. intros a0 l1 l2 H H0 l3; case l3; simpl in |- *; auto. intros; discriminate. intros a1 l H1; case (H0 l); auto. injection H1; auto. intros l5 (H2, H3); exists (a1 :: l5); split; simpl in |- *; auto. injection H1; intros; subst; auto. intros a0 b l l3; case l3. intros; discriminate. intros a1 l0; case l0; simpl in |- *. intros; discriminate. intros a2 l1 H; exists (a2 :: a1 :: l1); split; simpl in |- *; auto. injection H; intros; subst; auto. intros l1 l2 l3 H H0 H1 H2 l0 H3. case H0 with (1 := H3); auto. intros l4 (HH1, HH2). case H2 with (1 := HH2); auto. intros l5 (HH3, HH4); exists l5; split; auto. apply permutation_trans with (1 := HH3); auto. Qed. Theorem permutation_map_ex : forall (A B : Set) (f : A -> B) l1 l2, permutation (map f l1) l2 -> exists l3, permutation l3 l1 /\ l2 = map f l3. intros A0 B f l1 l2 H; apply permutation_map_ex_aux with (l1 := map f l1); auto. Qed. (************************************** Permutation is compatible with flat_map **************************************) Theorem permutation_flat_map : forall (A B : Set) (f : A -> list B) l1 l2, permutation l1 l2 -> permutation (flat_map f l1) (flat_map f l2). intros A B f l1 l2 H; elim H; simpl in |- *; auto. intros a b l; auto. repeat rewrite <- app_ass. apply permutation_app_comp; auto. intros k3 l4 l5 H0 H1 H2 H3; apply permutation_trans with (1 := H1); auto. Qed. coqprime-8.18/src/Coqprime/List/UList.v000066400000000000000000000230421451023060700200000ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) (*********************************************************************** UList.v Definition of list with distinct elements Definition: ulist ************************************************************************) Require Import List. Require Import Arith. Require Import Permutation. Require Import ListSet. Section UniqueList. Variable A : Set. Variable eqA_dec : forall (a b : A), ({ a = b }) + ({ a <> b }). (* A list is unique if there is not twice the same element in the list *) Inductive ulist : list A -> Prop := ulist_nil: ulist nil | ulist_cons: forall a l, ~ In a l -> ulist l -> ulist (a :: l) . Hint Constructors ulist : core. (* Inversion theorem *) Theorem ulist_inv: forall a l, ulist (a :: l) -> ulist l. intros a l H; inversion H; auto. Qed. (* The append of two unique list is unique if the list are distinct *) Theorem ulist_app: forall l1 l2, ulist l1 -> ulist l2 -> (forall (a : A), In a l1 -> In a l2 -> False) -> ulist (l1 ++ l2). intros L1; elim L1; simpl; auto. intros a l H l2 H0 H1 H2; apply ulist_cons; simpl; auto. red; intros H3; case in_app_or with ( 1 := H3 ); auto; intros H4. inversion H0; auto. apply H2 with a; auto. apply H; auto. apply ulist_inv with ( 1 := H0 ); auto. intros a0 H3 H4; apply (H2 a0); auto. Qed. (* Iinversion theorem the appended list *) Theorem ulist_app_inv: forall l1 l2 (a : A), ulist (l1 ++ l2) -> In a l1 -> In a l2 -> False. intros l1; elim l1; simpl; auto. intros a l H l2 a0 H0 [H1|H1] H2. inversion H0 as [|a1 l0 H3 H4 H5]; auto. case H3; rewrite H1; auto with datatypes. apply (H l2 a0); auto. apply ulist_inv with ( 1 := H0 ); auto. Qed. (* Iinversion theorem the appended list *) Theorem ulist_app_inv_l: forall (l1 l2 : list A), ulist (l1 ++ l2) -> ulist l1. intros l1; elim l1; simpl; auto. intros a l H l2 H0. inversion H0 as [|il1 iH1 iH2 il2 [iH4 iH5]]; apply ulist_cons; auto. intros H5; case iH2; auto with datatypes. apply H with l2; auto. Qed. (* Iinversion theorem the appended list *) Theorem ulist_app_inv_r: forall (l1 l2 : list A), ulist (l1 ++ l2) -> ulist l2. intros l1; elim l1; simpl; auto. intros a l H l2 H0; inversion H0; auto. Qed. (* Uniqueness is decidable *) Definition ulist_dec: forall l, ({ ulist l }) + ({ ~ ulist l }). intros l; elim l; auto. intros a l1 [H|H]; auto. case (In_dec eqA_dec a l1); intros H2; auto. right; red; intros H1; inversion H1; auto. right; intros H1; case H; apply ulist_inv with ( 1 := H1 ). Defined. (* Uniqueness is compatible with permutation *) Theorem ulist_perm: forall (l1 l2 : list A), permutation l1 l2 -> ulist l1 -> ulist l2. intros l1 l2 H; elim H; clear H l1 l2; simpl; auto. intros a l1 l2 H0 H1 H2; apply ulist_cons; auto. inversion_clear H2 as [|ia il iH1 iH2 [iH3 iH4]]; auto. intros H3; case iH1; apply permutation_in with ( 1 := permutation_sym _ _ _ H0 ); auto. inversion H2; auto. intros a b L H0; apply ulist_cons; auto. inversion_clear H0 as [|ia il iH1 iH2]; auto. inversion_clear iH2 as [|ia il iH3 iH4]; auto. intros H; case H; auto. intros H1; case iH1; rewrite H1; simpl; auto. apply ulist_cons; auto. inversion_clear H0 as [|ia il iH1 iH2]; auto. intros H; case iH1; simpl; auto. inversion_clear H0 as [|ia il iH1 iH2]; auto. inversion iH2; auto. Qed. Theorem ulist_def: forall l a, In a l -> ulist l -> ~ (exists l1 , permutation l (a :: (a :: l1)) ). intros l a H H0 [l1 H1]. absurd (ulist (a :: (a :: l1))); auto. intros H2; inversion_clear H2; simpl; auto with datatypes. apply ulist_perm with ( 1 := H1 ); auto. Qed. Theorem ulist_incl_permutation: forall (l1 l2 : list A), ulist l1 -> incl l1 l2 -> (exists l3 , permutation l2 (l1 ++ l3) ). intros l1; elim l1; simpl; auto. intros l2 H H0; exists l2; simpl; auto. intros a l H l2 H0 H1; auto. case (in_permutation_ex _ a l2); auto with datatypes. intros l3 Hl3. case (H l3); auto. apply ulist_inv with ( 1 := H0 ); auto. intros b Hb. assert (H2: In b (a :: l3)). apply permutation_in with ( 1 := permutation_sym _ _ _ Hl3 ); auto with datatypes. simpl in H2 |-; case H2; intros H3; simpl; auto. inversion_clear H0 as [|c lc Hk1]; auto. case Hk1; subst a; auto. intros l4 H4; exists l4. apply permutation_trans with (a :: l3); auto. apply permutation_sym; auto. Qed. Theorem ulist_eq_permutation: forall (l1 l2 : list A), ulist l1 -> incl l1 l2 -> length l1 = length l2 -> permutation l1 l2. intros l1 l2 H1 H2 H3. case (ulist_incl_permutation l1 l2); auto. intros l3 H4. assert (H5: l3 = @nil A). generalize (permutation_length _ _ _ H4); rewrite length_app; rewrite H3. rewrite Nat.add_comm; case l3; simpl; auto. intros a l H5; absurd (lt (length l2) (length l2)); auto with arith. pattern (length l2) at 2; rewrite H5; auto with arith. replace l1 with (app l1 l3); auto. apply permutation_sym; auto. rewrite H5; rewrite app_nil_end; auto. Qed. Theorem ulist_incl_length: forall (l1 l2 : list A), ulist l1 -> incl l1 l2 -> le (length l1) (length l2). intros l1 l2 H1 Hi; case ulist_incl_permutation with ( 2 := Hi ); auto. intros l3 Hl3; rewrite permutation_length with ( 1 := Hl3 ); auto. rewrite length_app; simpl; auto with arith. Qed. Theorem ulist_incl2_permutation: forall (l1 l2 : list A), ulist l1 -> ulist l2 -> incl l1 l2 -> incl l2 l1 -> permutation l1 l2. intros l1 l2 H1 H2 H3 H4. apply ulist_eq_permutation; auto. apply Nat.le_antisymm; apply ulist_incl_length; auto. Qed. Theorem ulist_incl_length_strict: forall (l1 l2 : list A), ulist l1 -> incl l1 l2 -> ~ incl l2 l1 -> lt (length l1) (length l2). intros l1 l2 H1 Hi Hi0; case ulist_incl_permutation with ( 2 := Hi ); auto. intros l3 Hl3; rewrite permutation_length with ( 1 := Hl3 ); auto. rewrite length_app; simpl; auto with arith. generalize Hl3; case l3; simpl; auto with arith. rewrite <- app_nil_end; auto. intros H2; case Hi0; auto. intros a HH; apply permutation_in with ( 1 := H2 ); auto. intros a l Hl0; (rewrite Nat.add_comm; simpl; rewrite Nat.add_comm; auto with arith). Qed. Theorem in_inv_dec: forall (a b : A) l, In a (cons b l) -> a = b \/ ~ a = b /\ In a l. intros a b l H; case (eqA_dec a b); auto; intros H1. right; split; auto; inversion H; auto. case H1; auto. Qed. Theorem in_ex_app_first: forall (a : A) (l : list A), In a l -> (exists l1 : list A , exists l2 : list A , l = l1 ++ (a :: l2) /\ ~ In a l1 ). intros a l; elim l; clear l; auto. intros H; case H. intros a1 l H H1; auto. generalize (in_inv_dec _ _ _ H1); intros [H2|[H2 H3]]. exists (nil (A:=A)); exists l; simpl; split; auto. subst; auto. case H; auto; intros l1 [l2 [Hl2 Hl3]]; exists (a1 :: l1); exists l2; simpl; split; auto. subst; auto. intros H4; case H4; auto. Qed. Theorem ulist_inv_ulist: forall (l : list A), ~ ulist l -> (exists a , exists l1 , exists l2 , exists l3 , l = l1 ++ ((a :: l2) ++ (a :: l3)) /\ ulist (l1 ++ (a :: l2)) ). intros l; elim l using list_length_ind; clear l. intros l; case l; simpl; auto; clear l. intros Rec H0; case H0; auto. intros a l H H0. case (In_dec eqA_dec a l); intros H1; auto. case in_ex_app_first with ( 1 := H1 ); intros l1 [l2 [Hl1 Hl2]]; subst l. case (ulist_dec l1); intros H2. exists a; exists (@nil A); exists l1; exists l2; split; auto. simpl; apply ulist_cons; auto. case (H l1); auto. rewrite length_app; auto with arith. intros b [l3 [l4 [l5 [Hl3 Hl4]]]]; subst l1. exists b; exists (a :: l3); exists l4; exists (l5 ++ (a :: l2)); split; simpl; auto. (repeat (rewrite <- ass_app; simpl)); auto. apply ulist_cons; auto. contradict Hl2; auto. replace (l3 ++ (b :: (l4 ++ (b :: l5)))) with ((l3 ++ (b :: l4)) ++ (b :: l5)); auto with datatypes. (repeat (rewrite <- ass_app; simpl)); auto. case (H l); auto; intros a1 [l1 [l2 [l3 [Hl3 Hl4]]]]; subst l. exists a1; exists (a :: l1); exists l2; exists l3; split; auto. simpl; apply ulist_cons; auto. contradict H1. replace (l1 ++ (a1 :: (l2 ++ (a1 :: l3)))) with ((l1 ++ (a1 :: l2)) ++ (a1 :: l3)). - auto with datatypes. - (repeat (rewrite <- ass_app; simpl)); auto. Qed. Theorem incl_length_repetition: forall (l1 l2 : list A), incl l1 l2 -> lt (length l2) (length l1) -> (exists a , exists ll1 , exists ll2 , exists ll3 , l1 = ll1 ++ ((a :: ll2) ++ (a :: ll3)) /\ ulist (ll1 ++ (a :: ll2)) ). intros l1 l2 H H0; apply ulist_inv_ulist. intros H1; absurd (le (length l1) (length l2)); auto with arith. apply ulist_incl_length; auto. Qed. End UniqueList. Arguments ulist [A]. Global Hint Constructors ulist : core. Theorem ulist_map: forall (A B : Set) (f : A -> B) l, (forall x y, (In x l) -> (In y l) -> f x = f y -> x = y) -> ulist l -> ulist (map f l). intros a b f l Hf Hl; generalize Hf; elim Hl; clear Hf; auto. simpl; auto. intros a1 l1 H1 H2 H3 Hf; simpl. apply ulist_cons; auto with datatypes. contradict H1. case in_map_inv with ( 1 := H1 ); auto with datatypes. intros b1 [Hb1 Hb2]. replace a1 with b1; auto with datatypes. Qed. Theorem ulist_list_prod: forall (A : Set) (l1 l2 : list A), ulist l1 -> ulist l2 -> ulist (list_prod l1 l2). intros A l1 l2 Hl1 Hl2; elim Hl1; simpl; auto. intros a l H1 H2 H3; apply ulist_app; auto. apply ulist_map; auto. intros x y _ _ H; inversion H; auto. intros p Hp1 Hp2; case H1. case in_map_inv with ( 1 := Hp1 ); intros a1 [Ha1 Ha2]; auto. case in_list_prod_inv with ( 1 := Hp2 ); intros b1 [c1 [Hb1 [Hb2 Hb3]]]; auto. replace a with b1; auto. rewrite Ha2 in Hb1; injection Hb1; auto. Qed. coqprime-8.18/src/Coqprime/List/ZProgression.v000066400000000000000000000070051451023060700214050ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Require Export Iterator. Require Import ZArith. Require Import Lia. Require Export UList. Open Scope Z_scope. Theorem next_n_Z: forall n m, next_n Z.succ n m = n + Z_of_nat m. intros n m; generalize n; elim m; clear n m. intros n; simpl; auto with zarith. intros m H n. replace (n + Z_of_nat (S m)) with (Z.succ n + Z_of_nat m). rewrite <- H; auto with zarith. rewrite inj_S; auto with zarith. Qed. Theorem Zprogression_end: forall n m, progression Z.succ n (S m) = app (progression Z.succ n m) (cons (n + Z_of_nat m) nil). intros n m; generalize n; elim m; clear n m. simpl; intros; apply f_equal2 with ( f := @cons Z ); auto with zarith. intros m1 Hm1 n1. apply trans_equal with (cons n1 (progression Z.succ (Z.succ n1) (S m1))); auto. rewrite Hm1. replace (Z.succ n1 + Z_of_nat m1) with (n1 + Z_of_nat (S m1)). auto. replace (Z_of_nat (S m1)) with (1 + Z_of_nat m1). auto with zarith. rewrite inj_S; auto with zarith. Qed. Theorem Zprogression_pred_end: forall n m, progression Z.pred n (S m) = app (progression Z.pred n m) (cons (n - Z_of_nat m) nil). intros n m; generalize n; elim m; clear n m. simpl; intros; apply f_equal2 with ( f := @cons Z ); auto with zarith. intros m1 Hm1 n1. apply trans_equal with (cons n1 (progression Z.pred (Z.pred n1) (S m1))); auto. rewrite Hm1. replace (Z.pred n1 - Z_of_nat m1) with (n1 - Z_of_nat (S m1)). auto. replace (Z_of_nat (S m1)) with (1 + Z_of_nat m1). auto with zarith. rewrite inj_S; auto with zarith. Qed. Theorem Zprogression_opp: forall n m, rev (progression Z.succ n m) = progression Z.pred (n + Z_of_nat (pred m)) m. intros n m; generalize n; elim m; clear n m. simpl; auto. intros m Hm n. rewrite (Zprogression_end n); auto. rewrite distr_rev. rewrite Hm; simpl; auto. case m. simpl; auto. intros m1; replace (n + Z_of_nat (pred (S m1))) with (Z.pred (n + Z_of_nat (S m1))); auto. rewrite inj_S; simpl; (unfold Z.pred; unfold Z.succ); auto with zarith. Qed. Theorem Zprogression_le_init: forall n m p, In p (progression Z.succ n m) -> (n <= p). intros n m; generalize n; elim m; clear n m; simpl; auto. intros; contradiction. intros m H n p [H1|H1]; auto with zarith. generalize (H _ _ H1); auto with zarith. Qed. Theorem Zprogression_le_end: forall n m p, In p (progression Z.succ n m) -> (p < n + Z_of_nat m). intros n m; generalize n; elim m; clear n m; auto. intros; contradiction. intros m H n p H1; simpl in H1 |-; case H1; clear H1; intros H1. lia. apply Z.lt_le_trans with (Z.succ n + Z_of_nat m). apply H; assumption. lia. Qed. Theorem ulist_Zprogression: forall a n, ulist (progression Z.succ a n). intros a n; generalize a; elim n; clear a n; simpl; auto with zarith. intros n H1 a; apply ulist_cons; auto. intros H2; absurd (Z.succ a <= a); auto with zarith. apply Zprogression_le_init with ( 1 := H2 ). Qed. Theorem in_Zprogression: forall a b n, ( a <= b < a + Z_of_nat n ) -> In b (progression Z.succ a n). intros a b n; generalize a b; elim n; clear a b n; auto with zarith. simpl; auto with zarith. intros n H a b. replace (a + Z_of_nat (S n)) with (Z.succ a + Z_of_nat n). intros [H1 H2]; simpl; auto with zarith. case (Zle_lt_or_eq _ _ H1); auto with zarith. rewrite inj_S; auto with zarith. Qed. coqprime-8.18/src/Coqprime/N/000077500000000000000000000000001451023060700160325ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/N/.depend000066400000000000000000000000761451023060700172750ustar00rootroot00000000000000NatAux.vo: NatAux.v NatAux.vi: NatAux.v NatAux.html: NatAux.v coqprime-8.18/src/Coqprime/N/ChineseRem.v000066400000000000000000001101521451023060700202430ustar00rootroot00000000000000Require Import Arith. Require Import Wf_nat. Require Import ZArith. Require Import Peano_dec. Require Import ZArith_dec. Require Import NatAux ZCAux ZCmisc ZSum Pmod Ppow. Open Scope nat_scope. (** ** Remark Several definitions and theorems in this file are used by the library PRrepresentable of the [Goedel] project (maintained #here# %\href{https://github.com/coq-community/hydra-battles}{here}%). This library is dedicated to the proof that every primitive recursive function is representable in NN theory. Goedel's beta function is a key tool in this proof. The key theorem [betaTheorem1] is proved with the help of the Chinese Remainder, thus [beta] is defined and studied in this library. The following symbols are imported by PRrepresentable: [div_eucl], [uniqueRem], [rem], [coPrimeBeta], [gtBeta], [beta], [betaTheorem1] and [betaTheorem]. *) (* * Compatibility Lemmas (to remove someday) These lemmas are deprecated since 8.16. We re-introduce them, since they occur in non-trivial terms in the original proof scripts. *) Lemma mult_O_le : forall n m : nat, m = 0%nat \/ (n <= m * n)%nat. Proof. destruct m. - now left. - right; replace n with (1 * n)%nat at 1. apply Nat.mul_le_mono_r; auto with arith. now rewrite Nat.mul_1_l. Qed. Lemma le_plus_trans (n m p : nat) : (n <= m)%nat -> (n <= m + p)%nat. Proof. intro H; apply Nat.le_trans with m; [assumption | apply Nat.le_add_r]. Qed. Lemma ltgt1: forall a b : nat, (a < b -> b > 0)%nat. Proof. lia. Qed. Lemma minus1: forall a b c : Z, (a - c)%Z = (b - c)%Z -> a = b. Proof. lia. Qed. Lemma minusS : forall a b : nat, b - a = S b - S a. Proof. lia. Qed. Lemma div_trans (p q r: nat) : divide p q -> divide q r -> divide p r. Proof. intros [x Hx] [y Hy]; exists (x * y); lia. Qed. Lemma div_refl p : divide p p. Proof. exists 1; now rewrite Nat.mul_1_r. Qed. Fixpoint prod (n:nat) (x: nat -> nat) := match n with O => 1%nat | S p => x p * prod p x end. Lemma prodBig1 : forall (n : nat) (x : nat -> nat), (forall z : nat, z < n -> x z > 0) -> prod n x > 0. Proof. induction n as [| n Hrecn]. - intros x H; simpl in |- *; apply Nat.lt_succ_diag_r. - intros x H; simpl in |- *; apply Nat.mul_pos_pos. + apply H; apply Nat.lt_succ_diag_r. + apply Hrecn; intros; now apply H, Nat.lt_lt_succ_r. Qed. Lemma prodExtensional : forall (n : nat) (x1 x2 : nat -> nat), (forall z : nat, z < n -> x1 z = x2 z) -> prod n x1 = prod n x2. Proof. induction n as [| n Hrecn]. - intros; reflexivity. - intros x1 x2 H; simpl in |- *; replace (x1 n) with (x2 n). + f_equal; auto. + rewrite (H n); auto. Qed. Definition factorial (n : nat) : nat := prod n S. (** * Relative primality *) (** A [nat] version of [rel-prime] *) Definition CoPrime (a b : nat) := Zis_gcd (Z.of_nat a) (Z.of_nat b) 1%Z. Lemma coPrimeSym: forall a b : nat, CoPrime a b -> CoPrime b a. Proof. intros. now apply Zis_gcd_sym. Qed. Lemma gcd_bezout_nat: forall (x y d : nat), (x > 0)%nat -> Zis_gcd (Z_of_nat x) (Z_of_nat y) (Z_of_nat d) -> Bezout (Z_of_nat x) (Z_of_nat y) (Z_of_nat d) . Proof. intros x y d H H0; destruct (Zis_gcd_bezout (Z.of_nat x) (Z.of_nat y) (Z.of_nat d) H0) as [u v ?]; now exists u v. Qed. Lemma coPrimeMult : forall a b c : nat, CoPrime a b -> divide a (b * c) -> divide a c. Proof. intros ? ? ? H H0; unfold CoPrime in H. destruct a as [| a]. - (* a = 0 *) induction H0 as (x, H0). cbn in H0; rewrite Nat.eq_mul_0 in H0. (* b = O \/ c = O *) destruct H0 as [H1 | H1]. + rewrite H1 in H; simpl in H. inversion H. clear H H0 H1 H2. assert (2 | 0). { exists 0%Z. auto. } destruct (H3 _ H H). nia. + rewrite H1; now exists 0%nat. - assert (H1: (S a > 0)%nat) by apply Nat.lt_0_succ. pose (gcd_bezout_nat (S a) b 1 H1 H) as W. inversion W; clear W; destruct H0 as [x1 H0]. assert (1 * Z.of_nat c = Z_of_nat (S a) * (u * Z.of_nat c + Z.of_nat x1 * v))%Z. { rewrite (Z.mul_comm (Z.of_nat (S a))). rewrite Z.mul_add_distr_r. rewrite (Z.mul_comm (u * Z.of_nat c)). rewrite (Z.mul_comm (Z.of_nat x1 * v)). repeat rewrite Z.mul_assoc. rewrite <- Znat.inj_mult. rewrite <- H0. rewrite Znat.inj_mult. rewrite (Z.mul_comm (Z.of_nat b)). rewrite <- (Z.mul_assoc (Z.of_nat c)). rewrite (Z.mul_comm (Z.of_nat c)). rewrite <- Z.mul_add_distr_r. nia. } rewrite Zmult_1_l in H3. assert (Z.divide (Z.of_nat (S a)) (Z.of_nat c)). { exists (u * Z.of_nat c + Z.of_nat x1 * v)%Z. now rewrite Z.mul_comm at 1. } clear H2 H3 u v. rewrite <- (Znat.Zabs2Nat.id (S a)). rewrite <- (Znat.Zabs2Nat.id c). repeat rewrite Zabs2Nat.id. destruct H4. exists (Z.to_nat x). nia. Qed. Lemma coPrimeMult2 : forall a b c : nat, CoPrime a b -> divide a c -> divide b c -> divide (a * b) c. Proof. intros a b c H H0 [x H1]; assert (H2: divide a x). { eapply coPrimeMult with (1:= H); now rewrite <- H1. } destruct H2 as [x0 H2]; exists x0; subst; ring. Qed. Lemma chRem2 : forall b1 r1 b2 r2 q : Z, (0 <= r1)%Z -> (0 <= r2)%Z -> (r1 < q)%Z -> (r2 < q)%Z -> (b1 * q + r1)%Z = (b2 * q + r2)%Z -> r1 = r2. Proof. intros * H H0 H1 H2 H3. assert (H4: ((b1 - b2) * q)%Z = (r2 - r1)%Z) by (rewrite Z.mul_sub_distr_r; lia). induction (Zle_or_lt 0 (b1 - b2)) as [H5 | H5]. induction (Zle_lt_or_eq _ _ H5) as [H6 | H6]. assert (H7: (1 <= b1 - b2)%Z). { replace 1%Z with (Z.succ 0) by reflexivity. now apply Zlt_le_succ. } assert (H8: (q <= r2 - r1)%Z). { replace q with (1 * q)%Z by apply Zmult_1_l. - rewrite <- H4. apply Zmult_le_compat_r. + assumption. + eapply Z.le_trans. * apply H. * now apply Zlt_le_weak. } set (A1 := Zplus_lt_le_compat r2 q (- r1) 0 H2) in *. assert (H9: (r2 - r1 < q)%Z). { replace q with (q + 0)%Z by ( now rewrite <- Zplus_0_r_reverse). unfold Zminus in |- *; apply A1. eapply (fun a b : Z => Zplus_le_reg_l a b r1). rewrite Zplus_opp_r. now rewrite <- Zplus_0_r_reverse. } destruct (Zle_not_lt q (r2 - r1)). assumption. assumption. rewrite <- H6, Z.mul_comm in H4. rewrite <- Zmult_0_r_reverse in H4. rewrite <- (Zplus_opp_r r2) in H4. unfold Zminus in H4. apply Z.opp_inj. symmetry in |- *; eapply Zplus_reg_l. apply H4. assert (H6: (1 <= b2 - b1)%Z). { replace 1%Z with (Z.succ 0) by reflexivity. apply Zlt_le_succ. apply (Zplus_lt_reg_l 0 (b2 - b1) b1). rewrite Zplus_minus. rewrite <- Zplus_0_r_reverse. apply (Zplus_lt_reg_l b1 b2 (- b2)). rewrite Zplus_opp_l. rewrite Zplus_comm. now unfold Zminus in H5. } assert (H7: ((b2 - b1) * q)%Z = (r1 - r2)%Z) by ( rewrite Z.mul_sub_distr_r ; lia ). assert (H8:(q <= r1 - r2)%Z). { replace q with (1 * q)%Z. rewrite <- H7. apply Zmult_le_compat_r. assumption. eapply Z.le_trans. apply H. apply Zlt_le_weak. assumption. apply Zmult_1_l. } set (A1 := Zplus_lt_le_compat r1 q (- r2) 0 H1) in *. assert (H9:(r1 - r2 < q)%Z). { replace q with (q + 0)%Z. unfold Zminus in |- *. apply A1. eapply (fun a b : Z => Zplus_le_reg_l a b r2). rewrite Zplus_opp_r. now rewrite <- Zplus_0_r_reverse. now rewrite <- Zplus_0_r_reverse. } destruct (Zle_not_lt q (r1 - r2)); assumption. Qed. Lemma uniqueRem : forall r1 r2 b : nat, b > 0 -> forall a : nat, (exists q : nat, a = q * b + r1 /\ b > r1) -> (exists q : nat, a = q * b + r2 /\ b > r2) -> r1 = r2. Proof. intros ? ? ? H a [x [H0 H2]] [x0 [H1 H3]]. assert (x = x0). { nia. } nia. Qed. Lemma div_eucl : forall b : nat, b > 0 -> forall a : nat, {p : nat * nat | a = fst p * b + snd p /\ b > snd p}. Proof. intros b H a; apply (gt_wf_rec a). intros n H0 . destruct (le_lt_dec b n) as [Hle | Hlt]. - assert (n > n - b). { unfold gt in |- *; apply Nat.sub_lt; assumption. } destruct (H0 _ H1) as [[a1 b0] p]. simpl in p; exists (S a1, b0); simpl in |- *. destruct p as (H2, H3). split; [| assumption]. + rewrite <- Nat.add_assoc, <- H2. now rewrite Nat.add_comm, Nat.sub_add. - exists (0, n); simpl in |- *; now split. Qed. Lemma chRem1 : forall b : nat, b > 0 -> forall a : Z, {p : Z * nat | snd p < b /\ Z.of_nat (snd p) = (fst p * Z.of_nat b + a)%Z}. Proof. intros b H a. assert (H0: forall a' : Z, (a' >= 0)%Z -> {p : Z * nat | snd p < b /\ Z.of_nat (snd p) = (fst p * Z.of_nat b + a')%Z}). { intros a' H0; set (A := Z.to_nat a') in *. induction (div_eucl b H A) as [x p]. destruct x as (a0, b0). exists ((- Z.of_nat a0)%Z, b0). destruct p as (H1, H2). split. - apply H2. - rewrite <- (Z2Nat.id a'). + simpl fst ; simpl snd. rewrite Zopp_mult_distr_l_reverse. rewrite Z.add_comm. fold (Z.of_nat (Z.to_nat a') - Z.of_nat a0 * Z.of_nat b)%Z in |- *. apply Zplus_minus_eq. rewrite <- Znat.inj_mult. rewrite <- Znat.inj_plus. apply Znat.inj_eq. apply H1. + auto. now rewrite <- Z.ge_le_iff. } destruct (Z_ge_lt_dec a 0) as [g | l]. + apply H0; assumption. + assert (a + Z.of_nat b * - a >= 0)%Z. induction b as [| b Hrecb]. * elim (Nat.lt_irrefl _ H). * rewrite Znat.inj_S. rewrite Z.mul_comm. rewrite <- Zmult_succ_r_reverse. fold (- a * Z.of_nat b - a)%Z in |- *. rewrite Zplus_minus. replace 0%Z with (0 * Z.of_nat b)%Z. apply Zmult_ge_compat_r. rewrite (Zminus_diag_reverse a). rewrite <- (Zplus_0_l (- a)). unfold Zminus in |- *; apply Z.le_ge. apply Zplus_le_compat_r. now apply Zlt_le_weak. change 0%Z with (Z.of_nat 0). apply Znat.inj_ge. unfold ge in |- *. apply Nat.le_0_l. auto. * destruct (H0 _ H1) as [(a0,b1) [H2 H3]]. exists ((a0 - a)%Z, b1); split. -- simpl in |- *; apply H2. -- cbv beta iota zeta delta [fst snd] in H3 |- *. rewrite H3, (Zplus_comm a), Zplus_assoc. apply Zplus_eq_compat. rewrite Zmult_minus_distr_r. unfold Zminus in |- *. apply Zplus_eq_compat. reflexivity. rewrite Z.mul_comm. apply Zopp_mult_distr_l_reverse. reflexivity. Qed. Lemma euclid_gcd1 : forall (d : nat) (x y q r : Z), Zis_gcd x y (Z.of_nat d) -> x = (q * y + r)%Z -> Zis_gcd r y (Z.of_nat d). Proof. intros. rewrite H0 in H. clear H0 x. replace r with (y * - q + (q * y + r))%Z by lia. apply Zis_gcd_sym. apply Zis_gcd_for_euclid2; auto with zarith. Qed. Lemma euclid_gcd (d1 d2 : nat) (x y q r : Z) : x = (q * y + r)%Z -> Zis_gcd x y (Z.of_nat d1) -> Zis_gcd r y (Z.of_nat d2) -> d1 = d2. Proof. intros H H0 H1 ; pose proof (euclid_gcd1 d1 x y q r H0 H) as H2. pose proof (Zis_gcd_unique r y _ _ H2 H1); lia. Qed. Lemma gcd_lincomb_nat_dec : forall x y d : nat, x > 0 -> Zis_gcd (Z.of_nat x) (Z.of_nat y) (Z.of_nat d) -> {a : Z * Z | Z.of_nat d = (Z.of_nat x * fst a + Z.of_nat y * snd a)%Z}. Proof. intro x; apply (lt_wf_rec x); intros X IH. intros y d H H0. elim (div_eucl X H y). intro z; elim z. intros q r; clear z; simpl in |- *. case r. (* case r = 0 *) - intros; induction p as (H1, H2). rewrite <- plus_n_O in H1. exists (1%Z, 0%Z). simpl fst; simpl snd. rewrite <- Zmult_0_r_reverse; rewrite <- Zplus_0_r_reverse. rewrite Z.mul_comm. rewrite Zmult_1_l. apply Znat.inj_eq. apply (euclid_gcd d X (Z.of_nat y) (Z.of_nat X) (Z.of_nat q) 0). rewrite <- Zplus_0_r_reverse; rewrite <- Znat.inj_mult; apply Znat.inj_eq; assumption. apply Zis_gcd_sym; assumption. constructor. + exists 0%Z. auto. + exists 1%Z. lia. + auto. - (* case r > 0 *) intros r1 [H1 H2]. elim (IH (S r1) H2 X d). + intro z; elim z. intros delta gamma; clear z. simpl fst; simpl snd. intros p. exists ((gamma - Z.of_nat q * delta)%Z, delta). simpl fst; simpl snd. rewrite p, H1. unfold Zminus in |- *; rewrite Zmult_plus_distr_r. rewrite Znat.inj_plus; rewrite Zmult_plus_distr_l. rewrite Znat.inj_mult; rewrite <- Zopp_mult_distr_l_reverse. rewrite (Z.mul_assoc (Z.of_nat X)). rewrite (Z.mul_comm (Z.of_nat X) (- Z.of_nat q)). rewrite Zopp_mult_distr_l_reverse. rewrite Zopp_mult_distr_l_reverse. rewrite <- (Z.add_assoc (Z.of_nat X * gamma)). rewrite <- Znat.inj_mult. rewrite (Z.add_assoc (- (Z.of_nat (q * X) * delta))). rewrite Zplus_opp_l. simpl in |- *. apply Z.add_comm. + auto with arith. + apply (euclid_gcd1 d (Z.of_nat y) (Z.of_nat X) (Z.of_nat q) (Z.of_nat (S r1))). * apply Zis_gcd_sym; assumption. * rewrite <- Znat.inj_mult; rewrite <- Znat.inj_plus; apply Znat.inj_eq; assumption. Qed. Lemma chineseRemainderTheoremHelp : forall x1 x2 : nat, CoPrime x1 x2 -> forall (a b : nat) (pa : a < x1) (pb : b < x2), a <= b -> {y : nat | y < x1 * x2 /\ a = snd (proj1_sig (div_eucl x1 (ltgt1 _ _ pa) y)) /\ b = snd (proj1_sig (div_eucl x2 (ltgt1 _ _ pb) y))}. Proof. intros ? ? H a b pa pb H0. unfold CoPrime in H. replace 1%Z with (Z.of_nat 1) in H by auto. destruct (gcd_lincomb_nat_dec _ _ _ (ltgt1 _ _ pa) H) as [(a0,b0) p]. set (A := Z.of_nat a) in *. set (B := Z.of_nat b) in *. set (X1 := Z.of_nat x1) in *. set (X2 := Z.of_nat x2) in *. set (y := (a0 * (B - A))%Z) in *. set (z := (b0 * (A - B))%Z) in *. set (d := (A + X1 * y)%Z) in *. assert (d = (B + X2 * z)%Z). unfold d in |- *; simpl in p. apply minus1 with (X2 * z)%Z. rewrite (Z.add_comm B). rewrite Zminus_plus. unfold z in |- *. replace (A - B)%Z with (- (B - A))%Z. unfold Zminus in |- *. rewrite (Z.mul_comm b0). rewrite Zopp_mult_distr_l_reverse. rewrite (Z.mul_comm X2). rewrite Zopp_mult_distr_l_reverse. rewrite Z.opp_involutive. unfold y in |- *. rewrite <- (Z.mul_assoc (B + - A)). rewrite (Z.mul_comm (B + - A)). rewrite (Z.mul_assoc X1). rewrite (Z.mul_comm b0). rewrite <- Z.add_assoc. rewrite <- Zmult_plus_distr_l. rewrite <- p. rewrite Z.mul_1_l. fold (B - A)%Z in |- *. apply Zplus_minus. unfold Zminus in |- *. rewrite Zopp_plus_distr. rewrite Z.add_comm. rewrite Z.opp_involutive. reflexivity. assert (H2: x1 * x2 > 0). { change 0 with (0 * x2). unfold gt in |- *; rewrite Nat.mul_comm. rewrite (Nat.mul_comm x1). induction x2 as [| x2 Hrecx2]. elim (Nat.nlt_0_r _ pb). rewrite <- (Nat.mul_lt_mono_pos_l (S _)). fold (x1 > 0) in |- *. eapply ltgt1. apply pa. auto. auto with arith. } destruct (chRem1 _ H2 d) as [(a1, b1) [H3 H4]]. exists b1; split. apply H3. cbv beta iota zeta delta [snd fst] in H4, p. split. induction (div_eucl x1 (ltgt1 a x1 pa) b1). induction x as (a2, b2). simpl in |- *. induction p0 as (H5, H6). cbv beta iota zeta delta [snd fst] in H5. rewrite H5 in H4. unfold d in H4. unfold A, X1 in H4. assert (Z.of_nat a = Z.of_nat b2). { eapply chRem2; try lia. + apply Znat.inj_lt. apply pa. + apply Znat.inj_lt. apply H6. + rewrite Znat.inj_plus in H4. repeat rewrite Znat.inj_mult in H4. symmetry in |- *. rewrite (Z.add_comm (Z.of_nat a)) in H4. rewrite Z.add_assoc in H4. rewrite Z.mul_assoc in H4. rewrite (Z.mul_comm a1) in H4. rewrite <- (Z.mul_assoc (Z.of_nat x1)) in H4. rewrite <- Zmult_plus_distr_r in H4. rewrite (Z.mul_comm (Z.of_nat x1)) in H4. apply H4. } lia. induction (div_eucl x2 (ltgt1 b x2 pb) b1). simpl in |- *. induction x as (a2, b2). cbv beta iota zeta delta [snd fst] in p0. induction p0 as (H5, H6). rewrite H5 in H4. rewrite H1 in H4. unfold B, X2 in H4. simpl. assert (Z.of_nat b = Z.of_nat b2). { eapply chRem2; try lia. + apply Znat.inj_lt. apply pb. + apply Znat.inj_lt. apply H6. + rewrite Znat.inj_plus in H4. repeat rewrite Znat.inj_mult in H4. symmetry in |- *. rewrite (Z.add_comm (Z.of_nat b)) in H4. rewrite Z.mul_assoc in H4. rewrite Z.add_assoc in H4. rewrite (Z.mul_comm a1) in H4. rewrite (Z.mul_comm (Z.of_nat x2)) in H4. rewrite <- Zmult_plus_distr_l in H4. apply H4. } lia. Qed. Lemma chineseRemainderTheorem : forall x1 x2 : nat, CoPrime x1 x2 -> forall (a b : nat) (pa : a < x1) (pb : b < x2), {y : nat | y < x1 * x2 /\ a = snd (proj1_sig (div_eucl x1 (ltgt1 _ _ pa) y)) /\ b = snd (proj1_sig (div_eucl x2 (ltgt1 _ _ pb) y))}. Proof. intros ? ? H a b pa pb. destruct (le_lt_dec a b). - apply chineseRemainderTheoremHelp; assumption. - assert (H0: b <= a) by (now apply Nat.lt_le_incl). assert (H1: CoPrime x2 x1) by (now apply coPrimeSym). induction (chineseRemainderTheoremHelp _ _ H1 b a pb pa H0) as [x [H2 [H3 H4]]]. exists x. split. + now rewrite Nat.mul_comm. + split; assumption. Qed. Lemma coPrime1 : forall a : nat, CoPrime 1 a. Proof. split. - simpl. exists 1%Z. auto. - exists (Z.of_nat a); lia. - intros e [H H0] [H1 H2]. simpl in H0. symmetry in H0. assert (H >= 0 \/ H <= 0)%Z by lia. destruct H3. + pose proof (Zmult_one _ _ H3 H0). subst. exists 1%Z. lia. + assert (- H >= 0)%Z by lia. replace (H * e)%Z with ((- H) * (- e))%Z in H0 by lia. pose proof (Zmult_one _ _ H4 H0). rewrite H5 in H0. exists (-1)%Z. lia. Qed. Lemma coPrimeMult3 (a b c: nat): a > 0 -> b > 0 -> c > 0 -> CoPrime a c -> CoPrime b c -> CoPrime (a * b) c. Proof. intros H H0 H1 H2 H3; assert (H4: Bezout (Z.of_nat a) (Z.of_nat c) (Z.of_nat 1)). { apply gcd_bezout_nat. assumption. apply H2. } assert (H5: Bezout (Z.of_nat b) (Z.of_nat c) (Z.of_nat 1)). { apply gcd_bezout_nat. assumption. apply H3. } inversion H4 as [x x0 H6]; clear H4. inversion H5 as [x1 x2 H7]; clear H5. split. - exists (Z.of_nat (a * b)). lia. - exists (Z.of_nat c). lia. - intros e [H8 H9]. set (A := Z.of_nat a) in *. set (B := Z.of_nat b) in *. set (C := Z.of_nat c) in *. assert (H10: (1%Z = (A * B * (x * x1) + C * (x0 * B * x1 + x2 * A * x + x0 * x2 * C))%Z)). { change 1%Z with (Z.of_nat 1 * Z.of_nat 1)%Z. rewrite <- H6 at 1. rewrite <- H7. ring; reflexivity. } intros. destruct H4. rewrite H10. apply Z.divide_add_r. + exists (H8 * x * x1)%Z. assert (A * B = Z.of_nat (a * b))%Z by lia. rewrite H5. rewrite H9. lia. + apply Z.divide_mul_l. exists x3. auto. Qed. Lemma coPrimeProd : forall (n : nat) (x : nat -> nat), (forall z1 z2 : nat, z1 < S n -> z2 < S n -> z1 <> z2 -> CoPrime (x z1) (x z2)) -> (forall z : nat, z < S n -> x z > 0) -> CoPrime (prod n x) (x n). Proof. induction n as [| n Hrecn]. - intros; simpl in |- *; apply coPrime1. - intros x H H0. assert (H1: forall z1 z2 : nat, z1 < S n -> z2 < S n -> z1 <> z2 -> CoPrime (x z1) (x z2)). { intros;apply H. 1,2: now apply Nat.lt_lt_succ_r. - assumption. } simpl in |- *; apply coPrimeMult3. + apply H0. apply Nat.lt_lt_succ_r. apply Nat.lt_succ_diag_r. + apply prodBig1. intros; apply H0. do 2 apply Nat.lt_lt_succ_r. assumption. + apply H0. apply Nat.lt_succ_diag_r. + apply H. apply Nat.lt_lt_succ_r. apply Nat.lt_succ_diag_r. apply Nat.lt_succ_diag_r. auto. + set (A1 := fun a : nat => match eq_nat_dec a n with | left _ => x (S n) | right _ => x a end) in *. assert (H2: CoPrime (prod n A1) (A1 n)). { apply Hrecn. intros. unfold A1 in |- *. induction (eq_nat_dec z1 n). + induction (eq_nat_dec z2 n). * elim H4. rewrite a0. assumption. * apply H. apply Nat.lt_succ_diag_r. apply Nat.lt_lt_succ_r. assumption. unfold not in |- *; intros. rewrite H5 in H3. elim (Nat.lt_irrefl _ H3). + induction (eq_nat_dec z2 n). * apply H. apply Nat.lt_lt_succ_r. assumption. apply Nat.lt_succ_diag_r. unfold not in |- *; intros. rewrite H5 in H2. elim (Nat.lt_irrefl _ H2). * apply H. apply Nat.lt_lt_succ_r. assumption. apply Nat.lt_lt_succ_r. assumption. assumption. + intros. unfold A1 in |- *. induction (eq_nat_dec z n). * apply H0. apply Nat.lt_succ_diag_r. * apply H0. apply Nat.lt_lt_succ_r. assumption. } auto. replace (x (S n)) with (A1 n). replace (prod n x) with (prod n A1). assumption. apply prodExtensional. intros. unfold A1 in |- *. induction (eq_nat_dec z n). * rewrite a in H3. elim (Nat.lt_irrefl _ H3). * reflexivity. * unfold A1 in |- *. induction (eq_nat_dec n n). -- reflexivity. -- elim b; reflexivity. Qed. Lemma divProd : forall (n : nat) (x : nat -> nat) (i : nat), i < n -> divide (x i) (prod n x). Proof. induction n as [| n Hrecn]. - intros x i H; destruct (Nat.nlt_0_r _ H). - intros x i H. assert (lein: i <= n) by lia; rewrite Nat.lt_eq_cases in lein; destruct lein. + simpl in |- *. rewrite Nat.mul_comm. destruct (Hrecn x i H0). rewrite H1. exists (x0 * x n). lia. + subst. simpl. exists (prod n x). auto. Qed. Lemma chRem : forall (n : nat) (x : nat -> nat), (forall z1 z2 : nat, z1 < n -> z2 < n -> z1 <> z2 -> CoPrime (x z1) (x z2)) -> forall (y : nat -> nat) (py : forall z : nat, z < n -> y z < x z), {a : nat | a < prod n x /\ (forall (z : nat) (pz : z < n), y z = snd (proj1_sig (div_eucl (x z) (ltgt1 _ _ (py z pz)) a)))}. Proof. intro. induction n as [| n Hrecn]. - intros; exists 0. split. + simpl in |- *. apply Nat.lt_0_succ. + intros. elim (Nat.nlt_0_r _ pz). - intros. assert (H0: forall z1 z2 : nat, z1 < n -> z2 < n -> z1 <> z2 -> CoPrime (x z1) (x z2)). { intros; apply H. apply Nat.lt_lt_succ_r. assumption. apply Nat.lt_lt_succ_r. assumption. assumption. } assert (H1: forall z : nat, z < n -> y z < x z). { intros. apply py. apply Nat.lt_lt_succ_r. assumption. } induction (Hrecn x H0 y H1). clear Hrecn; induction p as (H2, H3). assert (H4: CoPrime (prod n x) (x n)). { apply coPrimeProd. - apply H. - intros. eapply ltgt1. apply py. assumption. } assert (H5: y n < x n). { apply py. apply Nat.lt_succ_diag_r. } induction (chineseRemainderTheorem (prod n x) (x n) H4 x0 (y n) H2 H5). exists x1; induction p as (H6, (H7, H8)). split. simpl in |- *. rewrite Nat.mul_comm. assumption. intros. assert (lezn : z <= n) by lia. rewrite Nat.lt_eq_cases in lezn. destruct lezn. + assert (H10: y z = snd (proj1_sig (div_eucl (x z) (ltgt1 (y z) (x z) (H1 z H9)) x0))) by apply H3. induction (div_eucl (x z) (ltgt1 (y z) (x z) (H1 z H9)) x0). simpl in H10. induction (div_eucl (x z) (ltgt1 (y z) (x z) (py z pz)) x1). simpl in |- *; rewrite H10. induction (div_eucl (prod n x) (ltgt1 x0 (prod n x) H2) x1). simpl in H7. rewrite H7 in p. induction p1 as (H11, H12). induction p as (H13, H14). induction p0 as (H15, H16). rewrite H13 in H11. apply uniqueRem with (x z) x1. apply (ltgt1 (y z) (x z) (py z pz)). assert (divide (x z) (prod n x)). { apply divProd. assumption. } induction H17 as (x5, H17). rewrite H17 in H11. rewrite (Nat.mul_comm (x z)) in H11. rewrite Nat.mul_assoc in H11. rewrite Nat.add_assoc in H11. rewrite <- Nat.mul_add_distr_r in H11. exists (fst x4 * x5 + fst x2). split. apply H11. assumption. exists (fst x3); auto. + induction (div_eucl (x z) (ltgt1 (y z) (x z) (py z pz)) x1). induction (div_eucl (x n) (ltgt1 (y n) (x n) H5) x1). simpl in H8. simpl in |- *. rewrite H9. rewrite H8. eapply uniqueRem. apply (ltgt1 (y n) (x n) H5). exists (fst x3). apply p0. exists (fst x2). rewrite H9 in p. assumption. Qed. Definition Prime (n : nat) : Prop := n > 1 /\ (forall q : nat, divide q n -> q = 1 \/ q = n). Lemma divdec : forall n d : nat, divide d n \/ ~ divide d n. Proof. intros. assert (d = 0 \/ 0 < d) by lia. destruct H. + destruct n. - left. exists 0. auto. - right. intro. destruct H0. lia. + revert d H. apply (lt_wf_ind n). clear n. intros. assert (n = 0 \/ 0 < n) by lia. destruct H1. - left. exists 0. lia. - assert (d <= n \/ n < d) by lia. destruct H2. * assert (n - d < n) by lia. destruct (H _ H3 _ H0). ++ destruct H4. left. exists (S x). lia. ++ right. intro. apply H4. destruct H5. exists (x - 1). nia. * right. intro. destruct H3. destruct x; lia. Qed. Lemma prime_Prime (n: nat) : prime (Z.of_nat n) -> Prime n. Proof. intro. inversion H. clear H. unfold Prime. split. + lia. + intros. destruct H. assert (Z.of_nat n = Z.of_nat q * Z.of_nat x)%Z by lia. assert (n = 0 \/ 0 < n) by lia. destruct H3. - lia. - assert (1 < q < n \/ q = 1 \/ n <= q) by nia. destruct H4 as [H4 | [H4 | H4]]. * assert (1 <= Z.of_nat q < Z.of_nat n)%Z by lia. pose proof (H1 _ H5). subst. exfalso. assert (1 < x) by nia. unfold rel_prime in H6. inversion H6. assert (Z.of_nat q | Z.of_nat q). { exists 1%Z. auto. lia. } assert (Z.of_nat q | Z.of_nat (q * x))%Z. { exists (Z.of_nat x). lia. } pose proof (H9 _ H10 H11). destruct H12. destruct x0; nia. * left. auto. * right. destruct x; nia. Qed. Lemma Prime_prime (n: nat) : Prime n -> prime (Z.of_nat n). Proof. intros. unfold Prime in H. destruct H. constructor. + lia. + intros. destruct H1. unfold rel_prime. set (Z.gcd n0 (Z.of_nat n)) as W. assert (W <= n0)%Z. { pose proof (Z.gcd_divide_l n0 (Z.of_nat n)). apply Z.divide_pos_le in H3. auto. lia. } pose proof (Z.gcd_divide_r n0 (Z.of_nat n)). assert (divide (Z.to_nat W) n). { destruct H4. exists (Z.to_nat x). unfold W. pose proof (Z.gcd_nonneg n0 (Z.of_nat n)). nia. } apply H0 in H5. destruct H5. - assert (W = 1)%Z by lia. rewrite <- H6. apply Znumtheory.Zgcd_is_gcd. - lia. Qed. Lemma Prime_dec (n: nat) : Prime n \/ ~ Prime n. Proof. destruct (prime_dec (Z.of_nat n)). + left. apply prime_Prime. auto. + right. intro. apply n0. apply Prime_prime. auto. Qed. Lemma primeDiv : forall a : nat, 1 < a -> exists p : nat, Prime p /\ divide p a. Proof. intro a. apply (lt_wf_ind a). clear a. intros. destruct (Prime_dec n). + exists n. split; auto. exists 1. lia. + assert (~ prime (Z.of_nat n)). { intro. apply H1. apply prime_Prime. auto. } apply not_prime_divide in H2. destruct H2. destruct H2. assert (Z.to_nat x < n) by lia. assert (1 < Z.to_nat x) by lia. destruct (H _ H4 H5). destruct H6. exists x0. split; auto. destruct H3, H7. exists (Z.to_nat x1 * x2). nia. lia. Qed. Lemma coPrimePrime : forall a b : nat, (forall p : nat, Prime p -> ~ divide p a \/ ~ divide p b) -> CoPrime a b. Proof. intros. unfold CoPrime. constructor. + exists (Z.of_nat a). lia. + exists (Z.of_nat b). lia. + intros. apply Zdivide_Zabs_inv_l in H0. apply Zdivide_Zabs_inv_l in H1. assert (Z.abs x = 0 \/ Z.abs x = 1 \/ 1 < Z.abs x)%Z by lia. destruct H2 as [H2 | [H2 | H2]]. - destruct H0. rewrite H2 in H0. destruct H1. rewrite H2 in H1. assert (a = 0) by lia. assert (b = 0) by lia. subst. assert (Prime 2). { apply prime_Prime. simpl. apply prime_2. } pose proof (H _ H3). destruct H4. * elim H4. exists 0. auto. * elim H4. exists 0. auto. - assert (x < 0 \/ 0 <= x)%Z by lia. destruct H3. * exists (-1)%Z. lia. * exists 1%Z. lia. - assert (1 < Z.to_nat (Z.abs x)) by lia. apply primeDiv in H3. destruct H3 as [p [H3 H4]]. pose proof (H _ H3). exfalso. destruct H4. destruct H5. * apply H5. destruct H0. exists (x0 * Z.to_nat x1). nia. * apply H5. destruct H1. exists (x0 * Z.to_nat x1). nia. Qed. Lemma div_plus_r : forall a b d : nat, divide d a -> divide d (a + b) -> divide d b. Proof. intros. destruct H, H0. exists (x0 - x). nia. Qed. Lemma div_mult_compat_l : forall a b c : nat, divide a b -> divide a (b * c). Proof. intros. destruct H. exists (c * x). lia. Qed. Lemma primedivmult : forall p n m : nat, Prime p -> divide p (n * m) -> divide p n \/ divide p m. Proof. intros. apply Prime_prime in H. assert (Z.divide (Z.of_nat p) (Z.of_nat n * Z.of_nat m)). { destruct H0. exists (Z.of_nat x). nia. } apply prime_mult in H1; auto. destruct H1. + left. destruct H1. exists (Z.to_nat x). nia. + right. destruct H1. exists (Z.to_nat x). nia. Qed. Lemma coPrimeSeqHelp : forall c i j n : nat, divide (factorial n) c -> i < j -> i <= n -> j <= n -> CoPrime (S (c * S i)) (S (c * S j)). Proof. intros ? ? ? ? H H0 H1 H2. apply coPrimePrime. intros p H3. destruct (divdec (S (c * S i)) p) as [H4 | H4]. assert (H5: ~ divide p c). { intro H5. assert (H6: divide p 1). { eapply div_plus_r. apply div_mult_compat_l. apply H5. rewrite Nat.add_comm. simpl in |- *. apply H4. } induction H3 as (H3, H7). red in H3; rewrite Nat.lt_nge in H3; apply H3. destruct H6 as [x Hx];destruct x; lia. } destruct (divdec (S (c * S j)) p). assert (H7: divide p (c * (j - i))). { rewrite minusS. rewrite Nat.mul_comm. rewrite Nat.mul_sub_distr_r. rewrite (Nat.mul_comm (S j)). rewrite (Nat.mul_comm (S i)). rewrite minusS. destruct H4, H6. rewrite H4, H6. exists (x0 - x). nia. } destruct (primedivmult _ _ _ H3 H7). - elim H5. assumption. - assert (H9: j - i <= n). { eapply Nat.le_trans. apply Nat.le_sub_l. assumption. } elim H5. apply div_trans with (factorial n). apply div_trans with (j - i). assumption. unfold factorial in |- *. assert (H10: 1 <= j - i). { assert (H10: j = i + (j - i)). rewrite Nat.add_comm. rewrite Nat.sub_add. reflexivity. apply Nat.lt_le_incl; assumption. rewrite H10 in H0; lia. } replace (j - i) with (S (pred (j - i))). apply divProd. rewrite <- Nat.sub_1_r. apply Nat.succ_lt_mono. apply Nat.lt_succ_r. replace (S (j - i - 1)) with (1 + (j - i - 1)). rewrite Nat.add_comm, Nat.sub_add. assumption. assumption. auto. induction (j - i). elim (Nat.nle_succ_diag_l _ H10). rewrite <- pred_Sn. reflexivity. assumption. - auto. - auto. Qed. (** * Goedel's beta function *) #[global] Notation rem a b Hposb := (snd (proj1_sig (div_eucl b Hposb a))). Definition coPrimeBeta (z c : nat) : nat := S (c * S z). Lemma gtBeta : forall z c : nat, coPrimeBeta z c > 0. Proof. unfold coPrimeBeta in |- *; intros; apply Nat.lt_0_succ. Qed. Definition beta x y z := rem x (S (y * S z)) (gtBeta _ _). Lemma coPrimeSeq : forall c i j n : nat, divide (factorial n) c -> i <> j -> i <= n -> j <= n -> CoPrime (coPrimeBeta i c) (coPrimeBeta j c). Proof. unfold coPrimeBeta in |- *. intros ? ? ? ? H H0 H1 H2. rewrite Nat.lt_gt_cases in H0; destruct H0 as [H3 | H3]. - eapply coPrimeSeqHelp. apply H. assumption. assumption. assumption. - apply coPrimeSym. eapply coPrimeSeqHelp. + apply H. + assumption. + assumption. + assumption. Qed. Fixpoint maxBeta (n: nat) (x: nat -> nat) := match n with | 0 => 0 | S n => Nat.max (x n) (maxBeta n x) end. Lemma maxBetaLe : forall (n : nat) (x : nat -> nat) (i : nat), i < n -> x i <= maxBeta n x. Proof. simple induction n. - intros x i H; elim (Nat.nlt_0_r _ H). - intros; simpl in |- *. assert (lein: i <= n0) by lia; rewrite Nat.lt_eq_cases in lein; destruct lein. + eapply Nat.le_trans; [now apply H | apply Nat.le_max_r]. + rewrite H1; apply Nat.le_max_l. Qed. Theorem divProd2 : forall (n : nat) (x : nat -> nat) (i : nat), i <= n -> divide (prod i x) (prod n x). Proof. simple induction n. - intros x i ?; assert (H0: (0 = i)). { symmetry; now apply Nat.le_0_r. } rewrite H0. exists 1. lia. - intros n0 H x i H0. rewrite Nat.lt_eq_cases in H0; destruct H0. + simpl in |- *. rewrite Nat.mul_comm. assert (H2: i <= n0) by lia. destruct (H x i H2). rewrite H1. exists (x0 * x n0). lia. + rewrite H0; exists 1; lia. Qed. Theorem betaTheorem1 : forall (n : nat) (y : nat -> nat), {a : nat * nat | forall z : nat, z < n -> y z = snd (proj1_sig (div_eucl (coPrimeBeta z (snd a)) (gtBeta z (snd a)) (fst a)))}. Proof. intros n y. unfold beta. set (c := factorial (max n (maxBeta n y))) in *. set (x := fun z : nat => coPrimeBeta z c) in *. assert (H: forall z1 z2 : nat, z1 < n -> z2 < n -> z1 <> z2 -> CoPrime (x z1) (x z2)). { intros; unfold x in |- *; eapply coPrimeSeq. - eapply div_trans. + unfold factorial in |- *; apply divProd2. apply Nat.le_max_l. + unfold c, factorial in |- *. exists 1; now rewrite Nat.mul_1_r. - assumption. - now apply Nat.lt_le_incl. - apply Nat.lt_le_incl; assumption. } assert (H0: forall z : nat, z < n -> y z < x z). { intros; unfold x, coPrimeBeta in |- *. apply Nat.lt_succ_r. induction (mult_O_le c (S z)). - discriminate H1. - apply Nat.le_trans with c. + unfold c in |- *. apply Nat.le_trans with (max n (maxBeta n y)). apply Nat.le_trans with (maxBeta n y). apply maxBetaLe. assumption. apply Nat.le_max_r. generalize (max n (maxBeta n y)). intros. induction n0 as [| n0 Hrecn0]. simpl in |- *. apply Nat.le_succ_diag_r. induction n0 as [| n0 Hrecn1]. simpl in |- *. apply le_n. assert (H2: factorial n0 > 0). { unfold factorial in |- *. apply prodBig1. intros. apply Nat.lt_0_succ. } simpl in |- *. apply Nat.le_trans with (1 + (1 + n0 * (factorial n0 + n0 * factorial n0))). * simpl in |- *. repeat apply le_n_S. induction (mult_O_le n0 (factorial n0 + n0 * factorial n0)). -- unfold gt in H2. assert (H4: factorial n0 = factorial n0 + 0) by (rewrite Nat.add_comm; auto). rewrite H4 in H2. set (A1 := factorial n0 + 0) in *. rewrite <- H3 in H2. unfold A1 in H2. clear H4 A1. assert (H4: n0 * factorial n0 < 0). { eapply Nat.add_lt_mono_l. apply H2. } elim (Nat.nlt_0_r _ H4). -- rewrite Nat.mul_comm; assumption. * apply Nat.add_le_mono. apply le_plus_trans. (* to do *) apply Nat.lt_succ_r. rewrite <- Nat.succ_lt_mono. auto. apply Nat.add_le_mono. apply le_plus_trans. apply Nat.lt_succ_r. rewrite <- Nat.succ_lt_mono. assumption. apply le_n. + now rewrite Nat.mul_comm. } destruct (chRem _ _ H _ H0) as [x0 [H2 H3]]. exists (x0, c). intros z H1; rewrite (H3 z H1). induction (div_eucl (x z) (ltgt1 (y z) (x z) (H0 z H1)) x0). simpl fst; simpl snd. destruct (div_eucl (coPrimeBeta z c) (gtBeta z c) x0) as [x2 p0]. simpl in |- *. eapply uniqueRem. apply gtBeta. unfold x in p. exists (fst x1); apply p. exists (fst x2); apply p0. Qed. Lemma betaTheorem : forall (n : nat) (y : nat -> nat), {a : nat * nat | forall z : nat, z < n -> y z = beta (fst a) (snd a) z}. Proof. intros n y; destruct (betaTheorem1 n y) as [x e]. unfold beta; now exists x. Qed. coqprime-8.18/src/Coqprime/N/NatAux.v000066400000000000000000000046551451023060700174330ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) (********************************************************************** Aux.v Auxillary functions & Theorems **********************************************************************) Require Export Arith. (************************************** Some properties of minus **************************************) Theorem minus_O : forall a b : nat, a <= b -> a - b = 0. intros a; elim a; simpl in |- *; auto with arith. intros a1 Rec b; case b; elim b; auto with arith. Qed. (************************************** Definitions and properties of the power for nat **************************************) Fixpoint pow (n m: nat) {struct m} : nat := match m with O => 1%nat | (S m1) => (n * pow n m1)%nat end. Theorem pow_add: forall n m p, pow n (m + p) = (pow n m * pow n p)%nat. intros n m; elim m; simpl. intros p; rewrite Nat.add_0_r; auto. intros m1 Rec p; rewrite Rec; auto with arith. Qed. Theorem pow_pos: forall p n, (0 < p)%nat -> (0 < pow p n)%nat. intros p1 n H; elim n; simpl; auto with arith. intros n1 H1; replace 0%nat with (p1 * 0)%nat; auto with arith. repeat rewrite (Nat.mul_comm p1); apply Nat.mul_lt_mono_pos_r; auto with arith. Qed. Theorem pow_monotone: forall n p q, (1 < n)%nat -> (p < q)%nat -> (pow n p < pow n q)%nat. intros n p1 q1 H H1; elim H1; simpl. pattern (pow n p1) at 1; rewrite <- (Nat.mul_1_l (pow n p1)). apply Nat.mul_lt_mono_pos_r; auto. apply pow_pos; auto with arith. intros n1 H2 H3. apply Nat.lt_trans with (1 := H3). pattern (pow n n1) at 1; rewrite <- (Nat.mul_1_l (pow n n1)). apply Nat.mul_lt_mono_pos_r; auto. apply pow_pos; auto with arith. Qed. (************************************ Definition of the divisibility for nat **************************************) Definition divide a b := exists c, b = a * c. Theorem divide_le: forall p q, (1 < q)%nat -> divide p q -> (p <= q)%nat. intros p1 q1 H (x, H1); subst. apply Nat.le_trans with (p1 * 1)%nat; auto with arith. rewrite Nat.mul_1_r; auto with arith. apply Nat.mul_le_mono_l. destruct x; auto with arith. rewrite Nat.mul_0_r in H; auto with arith. Qed. coqprime-8.18/src/Coqprime/PrimalityTest/000077500000000000000000000000001451023060700204475ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/PrimalityTest/.depend000066400000000000000000000075001451023060700217110ustar00rootroot00000000000000NCyclic.cmo: nIGroup.cmo nEGroup.cmo nFGroup.cmo NCyclic.cmx: nIGroup.cmx nEGroup.cmx nFGroup.cmx NEGroup.cmo: nFGroup.cmo NEGroup.cmx: nFGroup.cmx NEuler.cmo: ../Z/nZSum.cmo NEuler.cmx: ../Z/nZSum.cmx NFGroup.cmo: ../List/nUList.cmo NFGroup.cmx: ../List/nUList.cmx NIGroup.cmo: nFGroup.cmo NIGroup.cmx: nFGroup.cmx NLagrange.cmo: nFGroup.cmo NLagrange.cmx: nFGroup.cmx NLucasLehmer.cmo: nPGroup.cmo nEGroup.cmo ../Z/nZCAux.cmo NLucasLehmer.cmx: nPGroup.cmx nEGroup.cmx ../Z/nZCAux.cmx NPepin.cmo: NPepin.cmx: NPGroup.cmo: nIGroup.cmo NPGroup.cmx: nIGroup.cmx NPocklingtonCertificat.cmo: ../Z/nZCmisc.cmo ../Z/nPmod.cmo nLucasLehmer.cmo NPocklingtonCertificat.cmx: ../Z/nZCmisc.cmx ../Z/nPmod.cmx nLucasLehmer.cmx NPocklington.cmo: NPocklington.cmx: NProth.cmo: NProth.cmx: NRoot.cmo: NRoot.cmx: NZp.cmo: nIGroup.cmo ../List/nIterator.cmo nEGroup.cmo NZp.cmx: nIGroup.cmx ../List/nIterator.cmx nEGroup.cmx Cyclic.vo Cyclic.glob: Cyclic.v ../Z/ZCAux.vo Root.vo ../List/UList.vo IGroup.vo EGroup.vo FGroup.vo EGroup.vo EGroup.glob: EGroup.v ../Tactic/Tactic.vo ../Z/ZCAux.vo ../List/UList.vo FGroup.vo Lagrange.vo Euler.vo Euler.glob: Euler.v ../Tactic/Tactic.vo ../Z/ZSum.vo FGroup.vo FGroup.glob: FGroup.v ../List/UList.vo ../Tactic/Tactic.vo IGroup.vo IGroup.glob: IGroup.v ../Tactic/Tactic.vo ../List/UList.vo ../List/ListAux.vo FGroup.vo Lagrange.vo Lagrange.glob: Lagrange.v ../List/UList.vo ../List/ListAux.vo ../N/NatAux.vo FGroup.vo LucasLehmer.vo LucasLehmer.glob: LucasLehmer.v ../Z/ZCAux.vo ../Tactic/Tactic.vo ../N/NatAux.vo ../List/UList.vo ../List/ListAux.vo FGroup.vo EGroup.vo PGroup.vo IGroup.vo Pepin.vo Pepin.glob: Pepin.v ../Z/ZCAux.vo Pocklington.vo PGroup.vo PGroup.glob: PGroup.v ../Tactic/Tactic.vo ../List/ListAux.vo ../List/UList.vo FGroup.vo EGroup.vo IGroup.vo PocklingtonCertificat.vo PocklingtonCertificat.glob: PocklingtonCertificat.v ../Z/ZCAux.vo LucasLehmer.vo Pocklington.vo ../Z/ZCmisc.vo ../Z/Pmod.vo Pocklington.vo Pocklington.glob: Pocklington.v ../Tactic/Tactic.vo ../Z/ZCAux.vo Zp.vo FGroup.vo EGroup.vo Euler.vo Proth.vo Proth.glob: Proth.v ../Z/ZCAux.vo Pocklington.vo Root.vo Root.glob: Root.v ../List/UList.vo ../Tactic/Tactic.vo ../List/Permutation.vo Zp.vo Zp.glob: Zp.v ../Tactic/Tactic.vo ../List/UList.vo FGroup.vo EGroup.vo IGroup.vo Cyclic.vo Euler.vo ../List/ZProgression.vo Cyclic.html Cyclic.glob: Cyclic.v ../Z/ZCAux.html Root.html ../List/UList.html IGroup.html EGroup.html FGroup.html EGroup.html EGroup.glob: EGroup.v ../Tactic/Tactic.html ../Z/ZCAux.html ../List/UList.html FGroup.html Lagrange.html Euler.html Euler.glob: Euler.v ../Tactic/Tactic.html ../Z/ZSum.html FGroup.html FGroup.glob: FGroup.v ../List/UList.html ../Tactic/Tactic.html IGroup.html IGroup.glob: IGroup.v ../Tactic/Tactic.html ../List/UList.html ../List/ListAux.html FGroup.html Lagrange.html Lagrange.glob: Lagrange.v ../List/UList.html ../List/ListAux.html ../N/NatAux.html FGroup.html LucasLehmer.html LucasLehmer.glob: LucasLehmer.v ../Z/ZCAux.html ../Tactic/Tactic.html ../N/NatAux.html ../List/UList.html ../List/ListAux.html FGroup.html EGroup.html PGroup.html IGroup.html Pepin.html Pepin.glob: Pepin.v ../Z/ZCAux.html Pocklington.html PGroup.html PGroup.glob: PGroup.v ../Tactic/Tactic.html ../List/ListAux.html ../List/UList.html FGroup.html EGroup.html IGroup.html PocklingtonCertificat.html PocklingtonCertificat.glob: PocklingtonCertificat.v ../Z/ZCAux.html LucasLehmer.html Pocklington.html ../Z/ZCmisc.html ../Z/Pmod.html Pocklington.html Pocklington.glob: Pocklington.v ../Tactic/Tactic.html ../Z/ZCAux.html Zp.html FGroup.html EGroup.html Euler.html Proth.html Proth.glob: Proth.v ../Z/ZCAux.html Pocklington.html Root.html Root.glob: Root.v ../List/UList.html ../Tactic/Tactic.html ../List/Permutation.html Zp.html Zp.glob: Zp.v ../Tactic/Tactic.html ../List/UList.html FGroup.html EGroup.html IGroup.html Cyclic.html Euler.html ../List/ZProgression.html coqprime-8.18/src/Coqprime/PrimalityTest/Cyclic.v000066400000000000000000000241071451023060700220500ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) (*********************************************************************** Cyclic.v Proof that an abelien ring is cyclic ************************************************************************) Require Import ZCAux. Require Import List. Require Import Root. Require Import UList. Require Import IGroup. Require Import EGroup. Require Import FGroup. Open Scope Z_scope. Section Cyclic. Variable A: Set. Variable plus mult: A -> A -> A. Variable op: A -> A. Variable zero one: A. Variable support: list A. Variable e: A. Hypothesis A_dec: forall a b: A, {a = b} + {a <> b}. Hypothesis e_not_zero: zero <> e. Hypothesis support_ulist: ulist support. Hypothesis e_in_support: In e support. Hypothesis zero_in_support: In zero support. Hypothesis mult_internal: forall a b, In a support -> In b support -> In (mult a b) support. Hypothesis mult_assoc: forall a b c, In a support -> In b support -> In c support -> mult a (mult b c) = mult (mult a b) c. Hypothesis e_is_zero_l: forall a, In a support -> mult e a = a. Hypothesis e_is_zero_r: forall a, In a support -> mult a e = a. Hypothesis plus_internal: forall a b, In a support -> In b support -> In (plus a b) support. Hypothesis plus_zero: forall a, In a support -> plus zero a = a. Hypothesis plus_comm: forall a b, In a support -> In b support -> plus a b = plus b a. Hypothesis plus_assoc: forall a b c, In a support -> In b support -> In c support -> plus a (plus b c) = plus (plus a b) c. Hypothesis mult_zero: forall a, In a support -> mult zero a = zero. Hypothesis mult_comm: forall a b, In a support -> In b support ->mult a b = mult b a. Hypothesis mult_plus_distr: forall a b c, In a support -> In b support -> In c support -> mult a (plus b c) = plus (mult a b) (mult a c). Hypothesis op_internal: forall a, In a support -> In (op a) support. Hypothesis plus_op_zero: forall a, In a support -> plus a (op a) = zero. Hypothesis mult_integral: forall a b, In a support -> In b support -> mult a b = zero -> a = zero \/ b = zero. Definition IA := (IGroup A mult support e A_dec support_ulist e_in_support mult_internal mult_assoc e_is_zero_l e_is_zero_r). Definition isupport_incl_hint x := isupport_incl _ mult support e A_dec x. Hint Resolve isupport_incl_hint : core. Theorem gpow_evaln: forall n, 0 < n -> exists p, (length p <= Z.abs_nat n)%nat /\ (forall i, In i p -> In i support) /\ forall x, In x IA.(s) -> eval A plus mult zero (zero::p) x = gpow x IA n. intros n Hn; generalize Hn; pattern n; apply natlike_ind; auto with zarith. intros H1; contradict H1; auto with zarith. intros x Hx Rec _. case Zle_lt_or_eq with (1 := Hx); clear Hx; intros Hx; subst; simpl. case Rec; auto; simpl; intros p (Hp1, (Hp2, Hp3)); clear Rec. exists (zero::p); split; simpl. rewrite Zabs_nat_Zsucc; auto with arith zarith. split. intros i [Hi | Hi]; try rewrite <- Hi; auto. intros x1 Hx1; simpl. rewrite Hp3; repeat rewrite plus_zero; unfold Z.succ ; try rewrite gpow_add; auto with zarith. rewrite gpow_1; try apply mult_comm; auto. apply (fun x => isupport_incl _ mult support e A_dec x); auto. change (In (gpow x1 IA x) IA.(s)). apply gpow_in; auto. apply mult_internal; auto. apply (fun x => isupport_incl _ mult support e A_dec x); auto. change (In (gpow x1 IA x) IA.(s)). apply gpow_in; auto. exists (e:: nil); split; simpl. compute; auto with arith. split. intros i [Hi | Hi]; try rewrite <- Hi; auto; case Hi. intros x Hx; simpl. rewrite plus_zero; rewrite (fun x => mult_comm x zero); try rewrite mult_zero; auto. rewrite plus_comm; try rewrite plus_zero; auto. Qed. Definition check_list_gpow: forall l n, (incl l IA.(s)) -> {forall a, In a l -> gpow a IA n = e} + {exists a, In a l /\ gpow a IA n <> e}. intros l n; elim l; simpl; auto. intros H; left; intros a H1; case H1. intros a l1 Rec H. case (A_dec (gpow a IA n) e); intros H2. case Rec; try intros H3. apply incl_tran with (2 := H); auto with datatypes. left; intros a1 H4; case H4; auto. intros H5; rewrite <- H5; auto. right; case H3; clear H3; intros a1 (H3, H4). exists a1; auto. right; exists a; auto. Defined. Theorem prime_power_div: forall p q i, prime p -> 0 <= q -> 0 <= i -> (q | p ^ i) -> exists j, 0 <= j <= i /\ q = p ^ j. intros p q i Hp Hq Hi H. assert (Hp1: 0 < p). apply Z.lt_le_trans with 2; try apply prime_ge_2; auto with zarith. pattern q; apply prime_div_induction with (p ^ i); auto with zarith. exists 0; rewrite Zpower_0_r; auto with zarith. intros p1 i1 Hp2 Hi1 H1. case Zle_lt_or_eq with (1 := Hi1); clear Hi1; intros Hi1; subst. assert (Heq: p1 = p). apply prime_div_Zpower_prime with i; auto. apply Z.divide_trans with (2 := H1). apply Zpower_divide; auto with zarith. exists i1; split; auto; try split; auto with zarith. case (Zle_or_lt i1 i); auto; intros H2. absurd (p1 ^ i1 <= p ^ i). apply Zlt_not_le; rewrite Heq; apply Zpower_lt_monotone; auto with zarith. apply Z.lt_le_trans with 2; try apply prime_ge_2; auto with zarith. apply Zdivide_le; auto with zarith. rewrite Heq; auto. exists 0; repeat rewrite Zpower_exp_0; auto with zarith. intros p1 q1 Hpq (j1,((Hj1, Hj2), Hj3)) (j2, ((Hj4, Hj5), Hj6)). case Zle_lt_or_eq with (1 := Hj1); clear Hj1; intros Hj1; subst. case Zle_lt_or_eq with (1 := Hj4); clear Hj4; intros Hj4; subst. inversion Hpq as [ H0 H1 H2]. absurd (p | 1). intros H3; absurd (1 < p). apply Zle_not_lt; apply Zdivide_le; auto with zarith. apply Z.lt_le_trans with 2; try apply prime_ge_2; auto with zarith. apply H2; apply Zpower_divide; auto with zarith. exists j1; rewrite Zpower_0_r; auto with zarith. exists j2; rewrite Zpower_0_r; auto with zarith. Qed. Theorem inj_lt_inv: forall n m : nat, Z_of_nat n < Z_of_nat m -> (n < m)%nat. intros n m H; case (Nat.le_gt_cases m n); auto; intros H1; contradict H. apply Zle_not_lt; apply inj_le; auto. Qed. Theorem not_all_solutions: forall i, 0 < i < g_order IA -> exists a, In a IA.(s) /\ gpow a IA i <> e. intros i (Hi, Hi2). case (check_list_gpow IA.(s) i); try intros H; auto with datatypes. case (gpow_evaln i); auto; intros p (Hp1, (Hp2, Hp3)). absurd ((op e) = zero). intros H1; case e_not_zero. rewrite <- (plus_op_zero e); try rewrite H1; auto. rewrite plus_comm; auto. apply (root_max_is_zero _ (fun x => In x support) plus mult op zero) with (l := IA.(s)) (p := op e :: p); auto with datatypes. simpl; intros x [Hx | Hx]; try rewrite <- Hx; auto. intros x Hx. generalize (Hp3 _ Hx); simpl; rewrite plus_zero; auto. intros tmp; rewrite tmp; clear tmp. rewrite H; auto; rewrite plus_comm; auto with datatypes. apply mult_internal; auto. apply eval_P; auto. simpl; apply Nat.le_succ_l; apply Nat.le_lt_trans with (1 := Hp1). apply inj_lt_inv. rewrite inj_Zabs_nat; auto with zarith. rewrite Z.abs_eq ; auto with zarith. Qed. Theorem divide_g_order_e_order: forall n, 0 <= n -> (n | g_order IA) -> exists a, In a IA.(s) /\ e_order A_dec a IA = n. intros n Hn H. assert (Hg: 0 < g_order IA). apply g_order_pos. assert (He: forall a, 0 <= e_order A_dec a IA). intros a; apply Zlt_le_weak; apply e_order_pos. pattern n; apply prime_div_induction with (n := g_order IA); auto. exists e; split; auto. apply IA.(e_in_s). apply Zle_antisym. apply Zdivide_le; auto with zarith. apply e_order_divide_gpow; auto with zarith. apply IA.(e_in_s). rewrite gpow_1; auto. apply IA.(e_in_s). match goal with |- (_ <= ?X) => assert (0 < X) end; try apply e_order_pos; auto with zarith. intros p i Hp Hi K. assert (Hp1: 0 < p). apply Z.lt_le_trans with 2; try apply prime_ge_2; auto with zarith. assert (Hi1: 0 < p ^ i). apply Zpower_gt_0; auto. case Zle_lt_or_eq with (1 := Hi); clear Hi; intros Hi; subst. case (not_all_solutions (g_order IA / p)). apply Zdivide_Zdiv_lt_pos; auto with zarith. apply Z.lt_le_trans with 2; try apply prime_ge_2; auto with zarith. apply Z.divide_trans with (2 := K). apply Zpower_divide; auto. intros a (Ha1, Ha2). exists (gpow a IA (g_order IA / p ^ i)); split. apply gpow_in; auto. match goal with |- ?X = ?Y => assert (H1: (X | Y) ) end; auto. apply e_order_divide_gpow; auto with zarith. apply gpow_in; auto. rewrite <- gpow_gpow; auto with zarith. rewrite Zmult_comm; rewrite <- Zdivide_Zdiv_eq; auto with zarith. apply fermat_gen; auto. apply Z_div_pos; auto with zarith. case prime_power_div with (4 := H1); auto with zarith. intros j ((Hj1, Hj2), Hj3). case Zle_lt_or_eq with (1 := Hj2); intros Hj4; subst; auto. case Ha2. replace (g_order IA) with (((g_order IA / p ^i) * p ^ j) * p ^ (i - j - 1) * p). rewrite Z_div_mult; auto with zarith. repeat rewrite gpow_gpow; auto with zarith. rewrite <- Hj3. rewrite gpow_e_order_is_e; auto with zarith. rewrite gpow_e; auto. apply Zlt_le_weak; apply Zpower_gt_0; auto with zarith. apply gpow_in; auto. apply Z_div_pos; auto with zarith. apply Zmult_le_0_compat; try apply Z_div_pos; auto with zarith. pattern p at 4; rewrite <- Zpower_1_r. repeat rewrite <- Zmult_assoc; repeat rewrite <- Zpower_exp; auto with zarith. replace (j + (i - j - 1 + 1)) with i; auto with zarith. apply sym_equal; rewrite Zmult_comm; apply Zdivide_Zdiv_eq; auto with zarith. rewrite Zpower_0_r; exists e; split. apply IA.(e_in_s). match goal with |- ?X = 1 => assert (tmp: 0 < X); try apply e_order_pos; case Zle_lt_or_eq with 1 X; auto with zarith; clear tmp; intros H1 end. absurd (gpow IA.(FGroup.e) IA 1 = IA.(FGroup.e)). apply gpow_e_order_lt_is_not_e with A_dec; auto with zarith. apply gpow_e; auto with zarith. intros p q H1 (a, (Ha1, Ha2)) (b, (Hb1, Hb2)). exists (mult a b); split. apply IA.(internal); auto. rewrite <- Ha2; rewrite <- Hb2; apply order_mult; auto. rewrite Ha2; rewrite Hb2; auto. Qed. Set Implicit Arguments. Definition cyclic (A: Set) A_dec (op: A -> A -> A) (G: FGroup op):= exists a, In a G.(s) /\ e_order A_dec a G = g_order G. Unset Implicit Arguments. Theorem cyclic_field: cyclic A_dec IA. red; apply divide_g_order_e_order; auto. apply Zlt_le_weak; apply g_order_pos. exists 1; ring. Qed. End Cyclic. coqprime-8.18/src/Coqprime/PrimalityTest/EGroup.v000066400000000000000000000571721451023060700220530ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) (********************************************************************** EGroup.v Given an element a, create the group {e, a, a^2, ..., a^n} **********************************************************************) Require Import ZArith. Require Import Tactic. Require Import List. Require Import ZCAux. Require Import ZArith Znumtheory. Require Import Wf_nat. Require Import UList. Require Import FGroup. Require Import Lagrange. Open Scope Z_scope. Section EGroup. Variable A: Set. Variable A_dec: forall a b: A, {a = b} + {~ a = b}. Variable op: A -> A -> A. Variable a: A. Variable G: FGroup op. Hypothesis a_in_G: In a G.(s). (************************************** The power function for the group **************************************) Set Implicit Arguments. Definition gpow n := match n with Zpos p => iter_pos _ (op a) G.(e) p | _ => G.(e) end. Unset Implicit Arguments. Theorem gpow_0: gpow 0 = G.(e). simpl; sauto. Qed. Theorem gpow_1 : gpow 1 = a. simpl; sauto. Qed. (************************************** Some properties of the power function **************************************) Theorem gpow_in: forall n, In (gpow n) G.(s). intros n; case n; simpl; auto. intros p; apply iter_pos_invariant with (Inv := fun x => In x G.(s)); auto. Qed. Theorem gpow_op: forall b p, In b G.(s) -> iter_pos _ (op a) b p = op (iter_pos _ (op a) G.(e) p) b. intros b p; generalize b; elim p; simpl; auto; clear b p. intros p Rec b Hb. assert (H: In (gpow (Zpos p)) G.(s)). apply gpow_in. rewrite (Rec b); try rewrite (fun x y => Rec (op x y)); try rewrite (fun x y => Rec (iter_pos A x y p)); auto. repeat rewrite G.(assoc); auto. intros p Rec b Hb. assert (H: In (gpow (Zpos p)) G.(s)). apply gpow_in. rewrite (Rec b); try rewrite (fun x y => Rec (op x y)); try rewrite (fun x y => Rec (iter_pos A x y p)); auto. repeat rewrite G.(assoc); auto. intros b H; rewrite e_is_zero_r; auto. Qed. Theorem gpow_add: forall n m, 0 <= n -> 0 <= m -> gpow (n + m) = op (gpow n) (gpow m). intros n; case n. intros m _ _; simpl; apply sym_equal; apply e_is_zero_l; apply gpow_in. 2: intros p m H; contradict H; auto with zarith. intros p1 m; case m. intros _ _; simpl; apply sym_equal; apply e_is_zero_r. exact (gpow_in (Zpos p1)). 2: intros p2 _ H; contradict H; auto with zarith. intros p2 _ _; simpl. rewrite iter_pos_plus; rewrite (fun x y => gpow_op (iter_pos A x y p2)); auto. exact (gpow_in (Zpos p2)). Qed. Theorem gpow_1_more: forall n, 0 < n -> gpow n = G.(e) -> forall m, 0 <= m -> exists p, 0 <= p < n /\ gpow m = gpow p. intros n H1 H2 m Hm; generalize Hm; pattern m; apply Z_lt_induction; auto with zarith; clear m Hm. intros m Rec Hm. case (Zle_or_lt n m); intros H3. case (Rec (m - n)); auto with zarith. intros p (H4,H5); exists p; split; auto. replace m with (n + (m - n)); auto with zarith. rewrite gpow_add; try rewrite H2; try rewrite H5; sauto; auto with zarith. generalize gpow_in; sauto. exists m; auto. Qed. Theorem gpow_i: forall n m, 0 <= n -> 0 <= m -> gpow n = gpow (n + m) -> gpow m = G.(e). intros n m H1 H2 H3; generalize gpow_in; intro PI. apply g_cancel_l with (g:= G) (a := gpow n); sauto. rewrite <- gpow_add; try rewrite <- H3; sauto. Qed. (************************************** We build the support by iterating the power function **************************************) Set Implicit Arguments. Fixpoint support_aux (b: A) (n: nat) {struct n}: list A := b::let c := op a b in match n with O => nil | (S n1) =>if A_dec c G.(e) then nil else support_aux c n1 end. Definition support := support_aux G.(e) (Z.abs_nat (g_order G)). Unset Implicit Arguments. (************************************** Some properties of the support that helps to prove that we have a group **************************************) Theorem support_aux_gpow: forall n m b, 0 <= m -> In b (support_aux (gpow m) n) -> exists p, (0 <= p < length (support_aux (gpow m) n))%nat /\ b = gpow (m + Z_of_nat p). intros n; elim n; simpl. intros n1 b Hm [H1 | H1]; exists 0%nat; simpl; rewrite Zplus_0_r; auto; case H1. intros n1 Rec m b Hm [H1 | H1]. exists 0%nat; simpl; rewrite Zplus_0_r; auto; auto with arith. generalize H1; case (A_dec (op a (gpow m)) G.(e)); clear H1; simpl; intros H1 H2. case H2. case (Rec (1 + m) b); auto with zarith. rewrite gpow_add; auto with zarith. rewrite gpow_1; auto. intros p (Hp1, Hp2); exists (S p); split; auto with zarith. rewrite <- gpow_1. rewrite <- gpow_add; auto with zarith. rewrite inj_S; rewrite Hp2; eq_tac; auto with zarith. Qed. Theorem gpow_support_aux_not_e: forall n m p, 0 <= m -> m < p < m + Z_of_nat (length (support_aux (gpow m) n)) -> gpow p <> G.(e). intros n; elim n; simpl. intros m p Hm (H1, H2); contradict H2; auto with zarith. intros n1 Rec m p Hm; case (A_dec (op a (gpow m)) G.(e)); simpl. intros _ (H1, H2); contradict H2; auto with zarith. assert (tmp: forall p, Zpos (P_of_succ_nat p) = 1 + Z_of_nat p). intros p1; apply trans_equal with (Z_of_nat (S p1)); auto; rewrite inj_S; auto with zarith. rewrite tmp. intros H1 (H2, H3); case (Zle_lt_or_eq (1 + m) p); auto with zarith; intros H4; subst. apply (Rec (1 + m)); try split; auto with zarith. rewrite gpow_add; auto with zarith. rewrite gpow_1; auto with zarith. rewrite gpow_add; try rewrite gpow_1; auto with zarith. Qed. Theorem support_aux_not_e: forall n m b, 0 <= m -> In b (tail (support_aux (gpow m) n)) -> ~ b = G.(e). intros n; elim n; simpl. intros m b Hm H; case H. intros n1 Rec m b Hm; case (A_dec (op a (gpow m)) G.(e)); intros H1 H2; simpl; auto. assert (Hm1: 0 <= 1 + m); auto with zarith. generalize( Rec (1 + m) b Hm1) H2; case n1; auto; clear Hm1. intros _ [H3 | H3]; auto. contradict H1; subst; auto. rewrite gpow_add; simpl; try rewrite e_is_zero_r; auto with zarith. intros n2; case (A_dec (op a (op a (gpow m))) G.(e)); intros H3. intros _ [H4 | H4]. contradict H1; subst; auto. case H4. intros H4 [H5 | H5]; subst; auto. Qed. Theorem support_aux_length_le: forall n a, (length (support_aux a n) <= n + 1)%nat. intros n; elim n; simpl; auto. intros n1 Rec a1; case (A_dec (op a a1) G.(e)); simpl; auto with arith. Qed. Theorem support_aux_length_le_is_e: forall n m, 0 <= m -> (length (support_aux (gpow m) n) <= n)%nat -> gpow (m + Z_of_nat (length (support_aux (gpow m) n))) = G.(e) . intros n; elim n; simpl; auto. intros m _ H1; contradict H1; auto with arith. intros n1 Rec m Hm; case (A_dec (op a (gpow m)) G.(e)); simpl; intros H1. intros H2; rewrite Zplus_comm; rewrite gpow_add; simpl; try rewrite e_is_zero_r; auto with zarith. assert (tmp: forall p, Zpos (P_of_succ_nat p) = 1 + Z_of_nat p). intros p1; apply trans_equal with (Z_of_nat (S p1)); auto; rewrite inj_S; auto with zarith. rewrite tmp; clear tmp. rewrite <- gpow_1. rewrite <- gpow_add; auto with zarith. rewrite Zplus_assoc; rewrite (Zplus_comm 1); intros H2; apply Rec; auto with zarith. Qed. Theorem support_aux_in: forall n m p, 0 <= m -> (p < length (support_aux (gpow m) n))% nat -> (In (gpow (m + Z_of_nat p)) (support_aux (gpow m) n)). intros n; elim n; simpl; auto; clear n. intros m p Hm H1; replace p with 0%nat. left; eq_tac; auto with zarith. generalize H1; case p; simpl; auto with arith. intros n H2; contradict H2; apply Nat.le_ngt; auto with arith. intros n1 Rec m p Hm; case (A_dec (op a (gpow m)) G.(e)); simpl; intros H1 H2; auto. replace p with 0%nat. left; eq_tac; auto with zarith. generalize H2; case p; simpl; auto with arith. intros n H3; contradict H3; apply Nat.le_ngt; auto with arith. generalize H2; case p; simpl; clear H2. rewrite Zplus_0_r; auto. intros n. assert (tmp: forall p, Zpos (P_of_succ_nat p) = 1 + Z_of_nat p). intros p1; apply trans_equal with (Z_of_nat (S p1)); auto; rewrite inj_S; auto with zarith. rewrite tmp; clear tmp. rewrite <- gpow_1; rewrite <- gpow_add; auto with zarith. rewrite Zplus_assoc; rewrite (Zplus_comm 1); intros H2; right; apply Rec; auto with zarith. Qed. Theorem support_aux_ulist: forall n m, 0 <= m -> (forall p, 0 <= p < m -> gpow (1 + p) <> G.(e)) -> ulist (support_aux (gpow m) n). intros n; elim n; auto; clear n. intros m _ _; auto. simpl; apply ulist_cons; auto. intros n1 Rec m Hm H. simpl; case (A_dec (op a (gpow m)) G.(e)); auto. intros He; apply ulist_cons; auto. intros H1; case (support_aux_gpow n1 (1 + m) (gpow m)); auto with zarith. rewrite gpow_add; try rewrite gpow_1; auto with zarith. intros p (Hp1, Hp2). assert (H2: gpow (1 + Z_of_nat p) = G.(e)). apply gpow_i with m; auto with zarith. rewrite Hp2; eq_tac; auto with zarith. case (Zle_or_lt m (Z_of_nat p)); intros H3; auto. 2: case (H (Z_of_nat p)); auto with zarith. case (support_aux_not_e (S n1) m (gpow (1 + Z_of_nat p))); auto. rewrite gpow_add; auto with zarith; simpl; rewrite e_is_zero_r; auto. case (A_dec (op a (gpow m)) G.(e)); auto. intros _; rewrite <- gpow_1; repeat rewrite <- gpow_add; auto with zarith. replace (1 + Z_of_nat p) with ((1 + m) + (Z_of_nat (p - Z.abs_nat m))). apply support_aux_in; auto with zarith. rewrite inj_minus1. rewrite inj_Zabs_nat. rewrite Z.abs_eq; auto with zarith. apply inj_le_rev. rewrite inj_Zabs_nat. rewrite Z.abs_eq; auto with zarith. rewrite <- gpow_1; repeat rewrite <- gpow_add; auto with zarith. apply (Rec (1 + m)); auto with zarith. intros p H1; case (Zle_lt_or_eq p m); intros; subst; auto with zarith. rewrite gpow_add; auto with zarith. rewrite gpow_1; auto. Qed. Theorem support_gpow: forall b, (In b support) -> exists p, 0 <= p < Z_of_nat (length support) /\ b = gpow p. intros b H; case (support_aux_gpow (Z.abs_nat (g_order G)) 0 b); auto with zarith. intros p ((H1, H2), H3); exists (Z_of_nat p); repeat split; auto with zarith. apply inj_lt; auto. Qed. Theorem support_incl_G: incl support G.(s). intros a1 H; case (support_gpow a1); auto; intros p (H1, H2); subst; apply gpow_in. Qed. Theorem gpow_support_not_e: forall p, 0 < p < Z_of_nat (length support) -> gpow p <> G.(e). intros p (H1, H2); apply gpow_support_aux_not_e with (m := 0) (n := length G.(s)); simpl; try split; auto with zarith. rewrite <- (Zabs_nat_Z_of_nat (length G.(s))); auto. Qed. Theorem support_not_e: forall b, In b (tail support) -> ~ b = G.(e). intros b H; apply (support_aux_not_e (Z.abs_nat (g_order G)) 0); auto with zarith. Qed. Theorem support_ulist: ulist support. apply (support_aux_ulist (Z.abs_nat (g_order G)) 0); auto with zarith. Qed. Theorem support_in_e: In G.(e) support. unfold support; case (Z.abs_nat (g_order G)); simpl; auto with zarith. Qed. Theorem gpow_length_support_is_e: gpow (Z_of_nat (length support)) = G.(e). apply (support_aux_length_le_is_e (Z.abs_nat (g_order G)) 0); simpl; auto with zarith. unfold g_order; rewrite Zabs_nat_Z_of_nat; apply ulist_incl_length. rewrite <- (Zabs_nat_Z_of_nat (length G.(s))); auto. exact support_ulist. rewrite <- (Zabs_nat_Z_of_nat (length G.(s))); auto. exact support_incl_G. Qed. Theorem support_in: forall p, 0 <= p < Z_of_nat (length support) -> In (gpow p) support. intros p (H, H1); unfold support. rewrite <- (Z.abs_eq p); auto with zarith. rewrite <- (inj_Zabs_nat p); auto. generalize (support_aux_in (Z.abs_nat (g_order G)) 0); simpl; intros H2; apply H2; auto with zarith. rewrite <- (fun x => Zabs_nat_Z_of_nat (@length A x)); auto. apply Zabs_nat_lt; split; auto. Qed. Theorem support_internal: forall a b, In a support -> In b support -> In (op a b) support. intros a1 b1 H1 H2. case support_gpow with (1 := H1); auto; intros p1 ((H3, H4), H5); subst. case support_gpow with (1 := H2); auto; intros p2 ((H5, H6), H7); subst. rewrite <- gpow_add; auto with zarith. case gpow_1_more with (m:= p1 + p2) (2 := gpow_length_support_is_e); auto with zarith. intros p3 ((H8, H9), H10); rewrite H10; apply support_in; auto with zarith. Qed. Theorem support_i_internal: forall a, In a support -> In (G.(i) a) support. generalize gpow_in; intros Hp. intros a1 H1. case support_gpow with (1 := H1); auto. intros p1 ((H2, H3), H4); case Zle_lt_or_eq with (1 := H2); clear H2; intros H2; subst. 2: rewrite gpow_0; rewrite i_e; apply support_in_e. replace (G.(i) (gpow p1)) with (gpow (Z_of_nat (length support - Z.abs_nat p1))). apply support_in. rewrite inj_minus1. rewrite inj_Zabs_nat. rewrite Z.abs_eq; auto with zarith. apply inj_le_rev; rewrite inj_Zabs_nat. rewrite Z.abs_eq; auto with zarith. apply g_cancel_l with (g:= G) (a := gpow p1); sauto. rewrite <- gpow_add; auto with zarith. replace (p1 + Z_of_nat (length support - Z.abs_nat p1)) with (Z_of_nat (length support)). rewrite gpow_length_support_is_e; sauto. rewrite inj_minus1. rewrite inj_Zabs_nat. rewrite Z.abs_eq; auto with zarith. apply inj_le_rev; rewrite inj_Zabs_nat. rewrite Z.abs_eq; auto with zarith. Qed. (************************************** We are now ready to build the group **************************************) Definition Gsupport: (FGroup op). generalize support_incl_G; unfold incl; intros Ho. apply mkGroup with support G.(e) G.(i); sauto. apply support_ulist. apply support_internal. intros a1 b1 c1 H1 H2 H3; apply G.(assoc); sauto. apply support_in_e. apply support_i_internal. Defined. (************************************** Definition of the order of an element **************************************) Set Implicit Arguments. Definition e_order := Z_of_nat (length support). Unset Implicit Arguments. (************************************** Some properties of the order of an element **************************************) Theorem gpow_e_order_is_e: gpow e_order = G.(e). apply (support_aux_length_le_is_e (Z.abs_nat (g_order G)) 0); simpl; auto with zarith. unfold g_order; rewrite Zabs_nat_Z_of_nat; apply ulist_incl_length. rewrite <- (Zabs_nat_Z_of_nat (length G.(s))); auto. exact support_ulist. rewrite <- (Zabs_nat_Z_of_nat (length G.(s))); auto. exact support_incl_G. Qed. Theorem gpow_e_order_lt_is_not_e: forall n, 1 <= n < e_order -> gpow n <> G.(e). intros n (H1, H2); apply gpow_support_not_e; auto with zarith. Qed. Theorem e_order_divide_g_order: (e_order | g_order G). change ((g_order Gsupport) | g_order G). apply lagrange; auto. exact support_incl_G. Qed. Theorem e_order_pos: 0 < e_order. unfold e_order, support; case (Z.abs_nat (g_order G)); simpl; auto with zarith. Qed. Theorem e_order_divide_gpow: forall n, 0 <= n -> gpow n = G.(e) -> (e_order | n). generalize gpow_in; intros Hp. generalize e_order_pos; intros Hp1. intros n Hn; generalize Hn; pattern n; apply Z_lt_induction; auto; clear n Hn. intros n Rec Hn H. case (Zle_or_lt e_order n); intros H1. case (Rec (n - e_order)); auto with zarith. apply g_cancel_l with (g:= G) (a := gpow e_order); sauto. rewrite G.(e_is_zero_r); auto with zarith. rewrite <- gpow_add; try (rewrite gpow_e_order_is_e; rewrite <- H; eq_tac); auto with zarith. intros k Hk; exists (1 + k). rewrite Zmult_plus_distr_l; rewrite <- Hk; auto with zarith. case (Zle_lt_or_eq 0 n); auto with arith; intros H2; subst. contradict H; apply support_not_e. generalize H1; unfold e_order, support. case (Z.abs_nat (g_order G)); simpl; auto. intros H3; contradict H3; auto with zarith. intros n1; case (A_dec (op a G.(e)) G.(e)); simpl; intros _ H3. contradict H3; auto with zarith. generalize H3; clear H3. assert (tmp: forall p, Zpos (P_of_succ_nat p) = 1 + Z_of_nat p). intros p1; apply trans_equal with (Z_of_nat (S p1)); auto; rewrite inj_S; auto with zarith. rewrite tmp; clear tmp; intros H3. change (In (gpow n) (support_aux (gpow 1) n1)). replace n with (1 + Z_of_nat (Z.abs_nat n - 1)). apply support_aux_in; auto with zarith. rewrite <- (fun x => Zabs_nat_Z_of_nat (@length A x)). replace (Z.abs_nat n - 1)%nat with (Z.abs_nat (n - 1)). apply Zabs_nat_lt; split; auto with zarith. rewrite G.(e_is_zero_r) in H3; try rewrite gpow_1; auto with zarith. apply inj_eq_rev; rewrite inj_Zabs_nat. rewrite Z.abs_eq by auto with zarith. rewrite inj_minus1. rewrite inj_Zabs_nat. rewrite Z.abs_eq; auto with zarith. apply inj_le_rev; rewrite inj_Zabs_nat; simpl. rewrite Z.abs_eq; auto with zarith. rewrite inj_minus1. rewrite inj_Zabs_nat. rewrite Z.abs_eq. rewrite Zplus_comm; simpl; auto with zarith. auto with zarith. apply inj_le_rev; rewrite inj_Zabs_nat; simpl. rewrite Z.abs_eq; auto with zarith. exists 0; auto with arith. Qed. End EGroup. Theorem gpow_gpow: forall (A : Set) (op : A -> A -> A) (a : A) (G : FGroup op), In a (s G) -> forall n m, 0 <= n -> 0 <= m -> gpow a G (n * m ) = gpow (gpow a G n) G m. intros A op a G H n m; case n. simpl; intros _ H1; generalize H1. pattern m; apply natlike_ind; simpl; auto. intros x H2 Rec _; unfold Z.succ; rewrite gpow_add; simpl; auto with zarith. repeat rewrite G.(e_is_zero_r); auto with zarith. apply gpow_in; sauto. intros p1 _; case m; simpl; auto. assert(H1: In (iter_pos A (op a) (e G) p1) (s G)). refine (gpow_in _ _ _ _ _ (Zpos p1)); auto. intros p2 _; pattern p2; apply Pind; simpl; auto. rewrite Pmult_1_r; rewrite G.(e_is_zero_r); try rewrite G.(e_is_zero_r); auto. intros p3 Rec; rewrite Pplus_one_succ_r; rewrite Pmult_plus_distr_l. rewrite Pmult_1_r. simpl; repeat rewrite iter_pos_plus; simpl. rewrite G.(e_is_zero_r); auto. rewrite gpow_op with (G:= G); try rewrite Rec; auto. apply sym_equal; apply gpow_op; auto. intros p Hp; contradict Hp; auto with zarith. Qed. Theorem gpow_e: forall (A : Set) (op : A -> A -> A) (G : FGroup op) n, 0 <= n -> gpow G.(e) G n = G.(e). intros A op G n; case n; simpl; auto with zarith. intros p _; elim p; simpl; auto; intros p1 Rec; repeat rewrite Rec; auto. Qed. Theorem gpow_pow: forall (A : Set) (op : A -> A -> A) (a : A) (G : FGroup op), In a (s G) -> forall n, 0 <= n -> gpow a G (2 ^ n) = G.(e) -> forall m, n <= m -> gpow a G (2 ^ m) = G.(e). intros A op a G H n H1 H2 m Hm. replace m with (n + (m - n)); auto with zarith. rewrite Zpower_exp; auto with zarith. rewrite gpow_gpow; auto with zarith. rewrite H2; apply gpow_e. apply Zpower_ge_0; auto with zarith. Qed. Theorem gpow_mult: forall (A : Set) (op : A -> A -> A) (a b: A) (G : FGroup op) (comm: forall a b, In a (s G) -> In b (s G) -> op a b = op b a), In a (s G) -> In b (s G) -> forall n, 0 <= n -> gpow (op a b) G n = op (gpow a G n) (gpow b G n). intros A op a b G comm Ha Hb n; case n; simpl; auto. intros _; rewrite G.(e_is_zero_r); auto. 2: intros p Hp; contradict Hp; auto with zarith. intros p _; pattern p; apply Pind; simpl; auto. repeat rewrite G.(e_is_zero_r); auto. intros p3 Rec; rewrite Pplus_one_succ_r. repeat rewrite iter_pos_plus; simpl. repeat rewrite (fun x y H z => gpow_op A op x G H (op y z)) ; auto. rewrite Rec. repeat rewrite G.(e_is_zero_r); auto. assert(H1: In (iter_pos A (op a) (e G) p3) (s G)). refine (gpow_in _ _ _ _ _ (Zpos p3)); auto. assert(H2: In (iter_pos A (op b) (e G) p3) (s G)). refine (gpow_in _ _ _ _ _ (Zpos p3)); auto. repeat rewrite <- G.(assoc); try eq_tac; auto. rewrite (fun x y => comm (iter_pos A x y p3) b); auto. rewrite (G.(assoc) a); try apply comm; auto. Qed. Theorem Zdivide_mult_rel_prime: forall a b c : Z, (a | c) -> (b | c) -> rel_prime a b -> (a * b | c). intros a b c (q1, H1) (q2, H2) H3. assert (H4: (a | q2)). apply Gauss with (2 := H3). exists q1; rewrite <- H1; rewrite H2; auto with zarith. case H4; intros q3 H5; exists q3; rewrite H2; rewrite H5; auto with zarith. Qed. Theorem order_mult: forall (A : Set) (op : A -> A -> A) (A_dec: forall a b: A, {a = b} + {~ a = b}) (G : FGroup op) (comm: forall a b, In a (s G) -> In b (s G) -> op a b = op b a) (a b: A), In a (s G) -> In b (s G) -> rel_prime (e_order A_dec a G) (e_order A_dec b G) -> e_order A_dec (op a b) G = e_order A_dec a G * e_order A_dec b G. intros A op A_dec G comm a b Ha Hb Hab. assert (Hoat: 0 < e_order A_dec a G) by apply e_order_pos. assert (Hobt: 0 < e_order A_dec b G) by apply e_order_pos. assert (Hoabt: 0 < e_order A_dec (op a b) G) by apply e_order_pos. assert (Hoa: 0 <= e_order A_dec a G) by auto with zarith. assert (Hob: 0 <= e_order A_dec b G) by auto with zarith. apply Zle_antisym; apply Zdivide_le. 1, 4-5: auto with zarith. apply Zmult_lt_O_compat; auto. apply e_order_divide_gpow; sauto; auto with zarith. rewrite gpow_mult; auto with zarith. rewrite gpow_gpow; auto with zarith. rewrite gpow_e_order_is_e; auto with zarith. rewrite gpow_e; auto. rewrite Zmult_comm. rewrite gpow_gpow; auto with zarith. rewrite gpow_e_order_is_e; auto with zarith. rewrite gpow_e; auto. apply Zdivide_mult_rel_prime; auto. apply Gauss with (2 := Hab). apply e_order_divide_gpow; auto with zarith. rewrite <- (gpow_e _ _ G (e_order A_dec b G)); auto. rewrite <- (gpow_e_order_is_e _ A_dec _ (op a b) G); auto with zarith. rewrite <- gpow_gpow; auto with zarith. rewrite (Zmult_comm (e_order A_dec (op a b) G)). rewrite gpow_mult; auto with zarith. rewrite gpow_gpow with (a := b); auto with zarith. rewrite gpow_e_order_is_e; auto with zarith. rewrite gpow_e; auto with zarith. rewrite G.(e_is_zero_r); auto with zarith. apply gpow_in; auto. apply Gauss with (2 := rel_prime_sym _ _ Hab). apply e_order_divide_gpow; auto with zarith. rewrite <- (gpow_e _ _ G (e_order A_dec a G)); auto. rewrite <- (gpow_e_order_is_e _ A_dec _ (op a b) G); auto with zarith. rewrite <- gpow_gpow; auto with zarith. rewrite (Zmult_comm (e_order A_dec (op a b) G)). rewrite gpow_mult; auto with zarith. rewrite gpow_gpow with (a := a); auto with zarith. rewrite gpow_e_order_is_e; auto with zarith. rewrite gpow_e; auto with zarith. rewrite G.(e_is_zero_l); auto with zarith. apply gpow_in; auto. Qed. Theorem fermat_gen: forall (A : Set) (A_dec: forall (a b: A), {a = b} + {a <>b}) (op : A -> A -> A) (a: A) (G : FGroup op), In a G.(s) -> gpow a G (g_order G) = G.(e). intros A A_dec op a G H. assert (H1: (e_order A_dec a G | g_order G)). apply e_order_divide_g_order; auto. case H1; intros q; intros Hq; rewrite Hq. assert (Hq1: 0 <= q). apply Zmult_le_reg_r with (e_order A_dec a G); auto with zarith. apply Z.lt_gt; apply e_order_pos. rewrite Zmult_0_l; rewrite <- Hq; apply Zlt_le_weak; apply g_order_pos. rewrite Zmult_comm; rewrite gpow_gpow; auto with zarith. rewrite gpow_e_order_is_e; auto with zarith. apply gpow_e; auto. apply Zlt_le_weak; apply e_order_pos. Qed. Theorem order_div: forall (A : Set) (A_dec: forall (a b: A), {a = b} + {a <>b}) (op : A -> A -> A) (a: A) (G : FGroup op) m, 0 < m -> (forall p, prime p -> (p | m) -> gpow a G (m / p) <> G.(e)) -> In a G.(s) -> gpow a G m = G.(e) -> e_order A_dec a G = m. intros A Adec op a G m Hm H H1 H2. assert (F1: 0 <= m); auto with zarith. case (e_order_divide_gpow A Adec op a G H1 m F1 H2); intros q Hq. assert (F2: 1 <= q). case (Zle_or_lt 0 q); intros HH. case (Zle_lt_or_eq _ _ HH). auto with zarith. intros HH1; generalize Hm; rewrite Hq; rewrite <- HH1; auto with zarith. assert (F2: 0 <= (- q) * e_order Adec a G). apply Zmult_le_0_compat; auto with zarith. apply Zlt_le_weak; apply e_order_pos. generalize F2; rewrite Zopp_mult_distr_l_reverse; rewrite <- Hq; auto with zarith. case (Zle_lt_or_eq _ _ F2); intros H3; subst; auto with zarith. case (prime_dec q); intros Hq. case (H q); auto with zarith. rewrite Zmult_comm; rewrite Z_div_mult; auto with zarith. apply gpow_e_order_is_e; auto. case (Zdivide_div_prime_le_square _ H3 Hq); intros r (Hr1, (Hr2, Hr3)). case (H _ Hr1); auto. apply Z.divide_trans with (1 := Hr2). apply Zdivide_factor_r. case Hr2; intros q1 Hq1; subst. assert (F3: 0 < r). generalize (prime_ge_2 _ Hr1); auto with zarith. rewrite <- Zmult_assoc; rewrite Zmult_comm; rewrite <- Zmult_assoc; rewrite Zmult_comm; rewrite Z_div_mult; auto with zarith. rewrite gpow_gpow. 2: auto with zarith. rewrite gpow_e_order_is_e; try rewrite gpow_e; auto. apply Zmult_le_reg_r with r; auto with zarith. apply Zlt_le_weak; apply e_order_pos. apply Zmult_le_reg_r with r; auto with zarith. Qed. coqprime-8.18/src/Coqprime/PrimalityTest/Euler.v000066400000000000000000000066261451023060700217240ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) (************************************************************************ Definition of the Euler Totient function *************************************************************************) Require Import ZArith. Require Export Znumtheory. Require Import Tactic. Require Export ZSum. Open Scope Z_scope. Definition phi n := Zsum 1 (n - 1) (fun x => if rel_prime_dec x n then 1 else 0). Theorem phi_def_with_0: forall n, 1< n -> phi n = Zsum 0 (n - 1) (fun x => if rel_prime_dec x n then 1 else 0). intros n H; rewrite Zsum_S_left; auto with zarith. case (rel_prime_dec 0 n); intros H2. contradict H2; apply not_rel_prime_0; auto. rewrite Zplus_0_l; auto. Qed. Theorem phi_pos: forall n, 1 < n -> 0 < phi n. intros n H; unfold phi. case (Zle_lt_or_eq 2 n); auto with zarith; intros H1; subst. rewrite Zsum_S_left; simpl; auto with zarith. case (rel_prime_dec 1 n); intros H2. apply Z.lt_le_trans with (1 + 0); auto with zarith. apply Zplus_le_compat_l. pattern 0 at 1; replace 0 with ((1 + (n - 1) - 2) * 0); auto with zarith. rewrite <- Zsum_c; auto with zarith. apply Zsum_le; auto with zarith. intros x H3; case (rel_prime_dec x n); auto with zarith. case H2; apply rel_prime_1; auto with zarith. rewrite Zsum_nn. case (rel_prime_dec (2 - 1) 2); auto with zarith. intros H1; contradict H1; apply rel_prime_1; auto with zarith. Qed. Theorem phi_le_n_minus_1: forall n, 1 < n -> phi n <= n - 1. intros n H; replace (n-1) with ((1 + (n - 1) - 1) * 1); auto with zarith. rewrite <- Zsum_c; auto with zarith. unfold phi; apply Zsum_le; auto with zarith. intros x H1; case (rel_prime_dec x n); auto with zarith. Qed. Theorem prime_phi_n_minus_1: forall n, prime n -> phi n = n - 1. intros n H; replace (n-1) with ((1 + (n - 1) - 1) * 1); auto with zarith. assert (Hu: 1 <= n - 1). assert (2 <= n); auto with zarith. apply prime_ge_2; auto. rewrite <- Zsum_c; auto with zarith; unfold phi; apply Zsum_ext; auto. intros x (H2, H3); case H; clear H; intros H H1. generalize (H1 x); case (rel_prime_dec x n); auto with zarith. intros H6 H7; contradict H6; apply H7; split; auto with zarith. Qed. Theorem phi_n_minus_1_prime: forall n, 1 < n -> phi n = n - 1 -> prime n. intros n H H1; case (prime_dec n); auto; intros H2. assert (H3: phi n < n - 1); auto with zarith. replace (n-1) with ((1 + (n - 1) - 1) * 1); auto with zarith. assert (Hu: 1 <= n - 1); auto with zarith. rewrite <- Zsum_c; auto with zarith; unfold phi; apply Zsum_lt; auto. intros x _; case (rel_prime_dec x n); auto with zarith. case not_prime_divide with n; auto. intros x (H3, H4); exists x; repeat split; auto with zarith. case (rel_prime_dec x n); auto with zarith. intros H5; absurd (x = 1 \/ x = -1); auto with zarith. case (Zis_gcd_unique x n x 1); auto. apply Zis_gcd_intro; auto; exists 1; auto with zarith. contradict H3; rewrite H1; auto with zarith. Qed. Theorem phi_divide_prime: forall n, 1 < n -> (n - 1 | phi n) -> prime n. intros n H1 H2; apply phi_n_minus_1_prime; auto. apply Zle_antisym. apply phi_le_n_minus_1; auto. apply Zdivide_le; auto; auto with zarith. apply phi_pos; auto. Qed. coqprime-8.18/src/Coqprime/PrimalityTest/FGroup.v000066400000000000000000000102611451023060700220400ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) (********************************************************************** FGroup.v Defintion and properties of finite groups Definition: FGroup **********************************************************************) Require Import List. Require Import UList. Require Import Tactic. Require Import ZArith. Open Scope Z_scope. Set Implicit Arguments. (************************************** A finite group is defined for an operation op it has a support (s) op operates inside the group (internal) op is associative (assoc) it has an element (e) that is neutral (e_is_zero_l e_is_zero_r) it has an inverse operator (i) the inverse operates inside the group (i_internal) it gives an inverse (i_is_inverse_l is_is_inverse_r) **************************************) Record FGroup (A: Set) (op: A -> A -> A): Set := mkGroup {s : (list A); unique_s: ulist s; internal: forall a b, In a s -> In b s -> In (op a b) s; assoc: forall a b c, In a s -> In b s -> In c s -> op a (op b c) = op (op a b) c; e: A; e_in_s: In e s; e_is_zero_l: forall a, In a s -> op e a = a; e_is_zero_r: forall a, In a s -> op a e = a; i: A -> A; i_internal: forall a, In a s -> In (i a) s; i_is_inverse_l: forall a, (In a s) -> op (i a) a = e; i_is_inverse_r: forall a, (In a s) -> op a (i a) = e }. (************************************** The order of a group is the lengh of the support **************************************) Definition g_order (A: Set) (op: A -> A -> A) (g: FGroup op) := Z_of_nat (length g.(s)). Unset Implicit Arguments. Global Hint Resolve unique_s internal e_in_s e_is_zero_l e_is_zero_r i_internal i_is_inverse_l i_is_inverse_r assoc : core. Section FGroup. Variable A: Set. Variable op: A -> A -> A. (************************************** Some properties of a finite group **************************************) Theorem g_cancel_l: forall (g : FGroup op), forall a b c, In a g.(s) -> In b g.(s) -> In c g.(s) -> op a b = op a c -> b = c. intros g a b c H1 H2 H3 H4; apply trans_equal with (op g.(e) b); sauto. replace (g.(e)) with (op (g.(i) a) a); sauto. apply trans_equal with (op (i g a) (op a b)); sauto. apply sym_equal; apply assoc with g; auto. rewrite H4. apply trans_equal with (op (op (i g a) a) c); sauto. apply assoc with g; auto. replace (op (g.(i) a) a) with g.(e); sauto. Qed. Theorem g_cancel_r: forall (g : FGroup op), forall a b c, In a g.(s) -> In b g.(s) -> In c g.(s) -> op b a = op c a -> b = c. intros g a b c H1 H2 H3 H4; apply trans_equal with (op b g.(e)); sauto. replace (g.(e)) with (op a (g.(i) a)); sauto. apply trans_equal with (op (op b a) (i g a)); sauto. apply assoc with g; auto. rewrite H4. apply trans_equal with (op c (op a (i g a))); sauto. apply sym_equal; apply assoc with g; sauto. replace (op a (g.(i) a)) with g.(e); sauto. Qed. Theorem e_unique: forall (g : FGroup op), forall e1, In e1 g.(s) -> (forall a, In a g.(s) -> op e1 a = a) -> e1 = g.(e). intros g e1 He1 H2. apply trans_equal with (op e1 g.(e)); sauto. Qed. Theorem inv_op: forall (g: FGroup op) a b, In a g.(s) -> In b g.(s) -> g.(i) (op a b) = op (g.(i) b) (g.(i) a). intros g a1 b1 H1 H2; apply g_cancel_l with (g := g) (a := op a1 b1); sauto. repeat rewrite g.(assoc); sauto. apply trans_equal with g.(e); sauto. rewrite <- g.(assoc) with (a := a1); sauto. rewrite g.(i_is_inverse_r); sauto. rewrite g.(e_is_zero_r); sauto. Qed. Theorem i_e: forall (g: FGroup op), g.(i) g.(e) = g.(e). intro g; apply g_cancel_l with (g:= g) (a := g.(e)); sauto. apply trans_equal with g.(e); sauto. Qed. (************************************** A group has at least one element **************************************) Theorem g_order_pos: forall g: FGroup op, 0 < g_order g. intro g; generalize g.(e_in_s); unfold g_order; case g.(s); simpl; auto with zarith. Qed. End FGroup. coqprime-8.18/src/Coqprime/PrimalityTest/IGroup.v000066400000000000000000000211461451023060700220470ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) (********************************************************************** Igroup Build the group of the inversible elements for the operation Definition: ZpGroup **********************************************************************) Require Import ZArith. Require Import Tactic. Require Import Wf_nat. Require Import UList. Require Import ListAux. Require Import FGroup. Open Scope Z_scope. Section IG. Variable A: Set. Variable op: A -> A -> A. Variable support: list A. Variable e: A. Hypothesis A_dec: forall a b: A, {a = b} + {a <> b}. Hypothesis support_ulist: ulist support. Hypothesis e_in_support: In e support. Hypothesis op_internal: forall a b, In a support -> In b support -> In (op a b) support. Hypothesis op_assoc: forall a b c, In a support -> In b support -> In c support -> op a (op b c) = op (op a b) c. Hypothesis e_is_zero_l: forall a, In a support -> op e a = a. Hypothesis e_is_zero_r: forall a, In a support -> op a e = a. (************************************** is_inv_aux tests if there is an inverse of a for op in l **************************************) Fixpoint is_inv_aux (l: list A) (a: A) {struct l}: bool := match l with nil => false | cons b l1 => if (A_dec (op a b) e) then if (A_dec (op b a) e) then true else is_inv_aux l1 a else is_inv_aux l1 a end. Theorem is_inv_aux_false: forall b l, (forall a, (In a l) -> op b a <> e \/ op a b <> e) -> is_inv_aux l b = false. intros b l; elim l; simpl; auto. intros a l1 Rec H; case (A_dec (op a b) e); case (A_dec (op b a) e); auto. intros H1 H2; case (H a); auto; intros H3; case H3; auto. Qed. (************************************** is_inv tests if there is an inverse in support **************************************) Definition is_inv := is_inv_aux support. (************************************** isupport_aux returns the sublist of inversible element of support **************************************) Fixpoint isupport_aux (l: list A) : list A := match l with nil => nil | cons a l1 => if is_inv a then a::isupport_aux l1 else isupport_aux l1 end. (************************************** Some properties of isupport_aux **************************************) Theorem isupport_aux_is_inv_true: forall l a, In a (isupport_aux l) -> is_inv a = true. intros l a; elim l; simpl; auto. intros b l1 H; case_eq (is_inv b); intros H1; simpl; auto. intros [H2 | H2]; subst; auto. Qed. Theorem isupport_aux_is_in: forall l a, is_inv a = true -> In a l -> In a (isupport_aux l). intros l a; elim l; simpl; auto. intros b l1 Rec H [H1 | H1]; subst. rewrite H; auto with datatypes. case (is_inv b); auto with datatypes. Qed. Theorem isupport_aux_not_in: forall b l, (forall a, (In a support) -> op b a <> e \/ op a b <> e) -> ~ In b (isupport_aux l). intros b l; elim l; simpl; simpl; auto. intros a l1 H; case_eq (is_inv a); intros H1; simpl; auto. intros H2 [H3 | H3]; subst. contradict H1. unfold is_inv; rewrite is_inv_aux_false; auto. case H; auto; apply isupport_aux_is_in; auto. Qed. Theorem isupport_aux_incl: forall l, incl (isupport_aux l) l. intros l; elim l; simpl; auto with datatypes. intros a l1 H1; case (is_inv a); auto with datatypes. Qed. Theorem isupport_aux_ulist: forall l, ulist l -> ulist (isupport_aux l). intros l; elim l; simpl; auto with datatypes. intros a l1 H1 H2; case_eq (is_inv a); intros H3; auto with datatypes. apply ulist_cons; auto with datatypes. intros H4; apply (ulist_app_inv _ (a::nil) l1 a); auto with datatypes. apply (isupport_aux_incl l1 a); auto. apply H1; apply ulist_app_inv_r with (a:: nil); auto. apply H1; apply ulist_app_inv_r with (a:: nil); auto. Qed. (************************************** isupport is the sublist of inversible element of support **************************************) Definition isupport := isupport_aux support. (************************************** Some properties of isupport **************************************) Theorem isupport_is_inv_true: forall a, In a isupport -> is_inv a = true. unfold isupport; intros a H; apply isupport_aux_is_inv_true with (1 := H). Qed. Theorem isupport_is_in: forall a, is_inv a = true -> In a support -> In a isupport. intros a H H1; unfold isupport; apply isupport_aux_is_in; auto. Qed. Theorem isupport_incl: incl isupport support. unfold isupport; apply isupport_aux_incl. Qed. Theorem isupport_ulist: ulist isupport. unfold isupport; apply isupport_aux_ulist. apply support_ulist. Qed. Theorem isupport_length: (length isupport <= length support)%nat. apply ulist_incl_length. apply isupport_ulist. apply isupport_incl. Qed. Theorem isupport_length_strict: forall b, (In b support) -> (forall a, (In a support) -> op b a <> e \/ op a b <> e) -> (length isupport < length support)%nat. intros b H H1; apply ulist_incl_length_strict. apply isupport_ulist. apply isupport_incl. intros H2; case (isupport_aux_not_in b support); auto. Qed. Fixpoint inv_aux (l: list A) (a: A) {struct l}: A := match l with nil => e | cons b l1 => if A_dec (op a b) e then if (A_dec (op b a) e) then b else inv_aux l1 a else inv_aux l1 a end. Theorem inv_aux_prop_r: forall l a, is_inv_aux l a = true -> op a (inv_aux l a) = e. intros l a; elim l; simpl. intros; discriminate. intros b l1 H1; case (A_dec (op a b) e); case (A_dec (op b a) e); intros H3 H4; subst; auto. Qed. Theorem inv_aux_prop_l: forall l a, is_inv_aux l a = true -> op (inv_aux l a) a = e. intros l a; elim l; simpl. intros; discriminate. intros b l1 H1; case (A_dec (op a b) e); case (A_dec (op b a) e); intros H3 H4; subst; auto. Qed. Theorem inv_aux_inv: forall l a b, op a b = e -> op b a = e -> (In a l) -> is_inv_aux l b = true. intros l a b; elim l; simpl. intros _ _ H; case H. intros c l1 Rec H H0 H1; case H1; clear H1; intros H1. subst c. case (A_dec (op b a) e); case (A_dec (op a b) e); auto. case (A_dec (op b c) e); case (A_dec (op c b) e); auto. Qed. Theorem inv_aux_in: forall l a, In (inv_aux l a) l \/ inv_aux l a = e. intros l a; elim l; simpl; auto. intros b l1; case (A_dec (op a b) e); case (A_dec (op b a) e); intros _ _ [H1 | H1]; auto. Qed. (************************************** The inverse function **************************************) Definition inv := inv_aux support. (************************************** Some properties of inv **************************************) Theorem inv_prop_r: forall a, In a isupport -> op a (inv a) = e. intros a H; unfold inv; apply inv_aux_prop_r with (l := support). change (is_inv a = true). apply isupport_is_inv_true; auto. Qed. Theorem inv_prop_l: forall a, In a isupport -> op (inv a) a = e. intros a H; unfold inv; apply inv_aux_prop_l with (l := support). change (is_inv a = true). apply isupport_is_inv_true; auto. Qed. Theorem is_inv_true: forall a b, op b a = e -> op a b = e -> (In a support) -> is_inv b = true. intros a b H H1 H2; unfold is_inv; apply inv_aux_inv with a; auto. Qed. Theorem is_inv_false: forall b, (forall a, (In a support) -> op b a <> e \/ op a b <> e) -> is_inv b = false. intros b H; unfold is_inv; apply is_inv_aux_false; auto. Qed. Theorem inv_internal: forall a, In a isupport -> In (inv a) isupport. intros a H; apply isupport_is_in. apply is_inv_true with a; auto. apply inv_prop_l; auto. apply inv_prop_r; auto. apply (isupport_incl a); auto. case (inv_aux_in support a); unfold inv; auto. intros H1; rewrite H1; apply e_in_support; auto with zarith. Qed. (************************************** We are now ready to build our group **************************************) Definition IGroup : (FGroup op). generalize (fun x=> (isupport_incl x)); intros Hx. apply mkGroup with (s := isupport) (e := e) (i := inv); auto. apply isupport_ulist. intros a b H H1. assert (Haii: In (inv a) isupport); try apply inv_internal; auto. assert (Hbii: In (inv b) isupport); try apply inv_internal; auto. apply isupport_is_in; auto. apply is_inv_true with (op (inv b) (inv a)); auto. rewrite op_assoc; auto. rewrite <- (op_assoc a); auto. rewrite inv_prop_r; auto. rewrite e_is_zero_r; auto. apply inv_prop_r; auto. rewrite <- (op_assoc (inv b)); auto. rewrite (op_assoc (inv a)); auto. rewrite inv_prop_l; auto. rewrite e_is_zero_l; auto. apply inv_prop_l; auto. apply isupport_is_in; auto. apply is_inv_true with e; auto. intros a H; apply inv_internal; auto. intros; apply inv_prop_l; auto. intros; apply inv_prop_r; auto. Defined. End IG. coqprime-8.18/src/Coqprime/PrimalityTest/Lagrange.v000066400000000000000000000141651451023060700223650ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) (********************************************************************** Lagrange.v Proof of Lagrange theorem: the oder of a subgroup divides the order of a group Definition: lagrange **********************************************************************) Require Import List. Require Import UList. Require Import ListAux. Require Import ZArith Znumtheory. Require Import NatAux. Require Import FGroup. Open Scope Z_scope. Section Lagrange. Variable A: Set. Variable A_dec: forall a b: A, {a = b} + {~ a = b}. Variable op: A -> A -> A. Variable G: (FGroup op). Variable H:(FGroup op). Hypothesis G_in_H: (incl G.(s) H.(s)). (************************************** A group and a subgroup have the same neutral element **************************************) Theorem same_e_for_H_and_G: H.(e) = G.(e). apply trans_equal with (op H.(e) H.(e)); sauto. apply trans_equal with (op H.(e) (op G.(e) (H.(i) G.(e)))); sauto. eq_tac; sauto. apply trans_equal with (op G.(e) (op G.(e) (H.(i) G.(e)))); sauto. repeat rewrite H.(assoc); sauto. eq_tac; sauto. apply trans_equal with G.(e); sauto. apply trans_equal with (op G.(e) H.(e)); sauto. eq_tac; sauto. Qed. (************************************** The proof works like this. If G = {e, g1, g2, g3, .., gn} and {e, h1, h2, h3, ..., hm} we construct the list mkGH {e, g1, g2, g3, ...., gn hi*e, hi * g1, hi * g2, ..., hi * gn if hi does not appear before .... hk*e, hk * g1, hk * g2, ..., hk * gn if hk does not appear before } that contains all the element of H. We show that this list does not contain double (ulist). **************************************) Fixpoint mkList (base l: (list A)) { struct l} : (list A) := match l with nil => nil | cons a l1 => let r1 := mkList base l1 in if (In_dec A_dec a r1) then r1 else (map (op a) base) ++ r1 end. Definition mkGH := mkList G.(s) H.(s). Theorem mkGH_length: divide (length G.(s)) (length mkGH). unfold mkGH; elim H.(s); simpl. exists 0%nat; auto with arith. intros a l1 (c, H1); case (In_dec A_dec a (mkList G.(s) l1)); intros H2. exists c; auto. exists (1 + c)%nat; rewrite ListAux.length_app; rewrite ListAux.length_map; rewrite H1; ring. Qed. Theorem mkGH_incl: incl H.(s) mkGH. assert (H1: forall l, incl l H.(s) -> incl l (mkList G.(s) l)). intros l; elim l; simpl; auto with datatypes. intros a l1 H1 H2. case (In_dec A_dec a (mkList (s G) l1)); auto with datatypes. intros H3; assert (H4: incl l1 (mkList (s G) l1)). apply H1; auto with datatypes. intros b H4; apply H2; auto with datatypes. intros b; simpl; intros [H5 | H5]; subst; auto. intros _ b; simpl; intros [H3 | H3]; subst; auto. apply in_or_app; left. cut (In H.(e) G.(s)). elim (s G); simpl; auto. intros c l2 Hl2 [H3 | H3]; subst; sauto. assert (In b H.(s)); sauto. apply (H2 b); auto with datatypes. rewrite same_e_for_H_and_G; sauto. apply in_or_app; right. apply H1; auto with datatypes. apply incl_tran with (2:= H2); auto with datatypes. unfold mkGH; apply H1; auto with datatypes. Qed. Theorem incl_mkGH: incl mkGH H.(s). assert (H1: forall l, incl l H.(s) -> incl (mkList G.(s) l) H.(s)). intros l; elim l; simpl; auto with datatypes. intros a l1 H1 H2. case (In_dec A_dec a (mkList (s G) l1)); intros H3; auto with datatypes. apply H1; apply incl_tran with (2 := H2); auto with datatypes. apply incl_app. intros b H4. case ListAux.in_map_inv with (1:= H4); auto. intros c (Hc1, Hc2); subst; sauto. apply internal; auto with datatypes. apply H1; apply incl_tran with (2 := H2); auto with datatypes. unfold mkGH; apply H1; auto with datatypes. Qed. Theorem ulist_mkGH: ulist mkGH. assert (H1: forall l, incl l H.(s) -> ulist (mkList G.(s) l)). intros l; elim l; simpl; auto with datatypes. intros a l1 H1 H2. case (In_dec A_dec a (mkList (s G) l1)); intros H3; auto with datatypes. apply H1; apply incl_tran with (2 := H2); auto with datatypes. apply ulist_app; auto. apply ulist_map; sauto. intros x y H4 H5 H6; apply g_cancel_l with (g:= H) (a := a); sauto. apply H2; auto with datatypes. apply H1; apply incl_tran with (2 := H2); auto with datatypes. intros b H4 H5. case ListAux.in_map_inv with (1:= H4); auto. intros c (Hc, Hc1); subst. assert (H6: forall l a b, In b G.(s) -> incl l H.(s) -> In a (mkList G.(s) l) -> In (op a b) (mkList G.(s) l)). intros ll u v; elim ll; simpl; auto with datatypes. intros w ll1 T0 T1 T2. case (In_dec A_dec w (mkList (s G) ll1)); intros T3 T4; auto with datatypes. apply T0; auto; apply incl_tran with (2:= T2); auto with datatypes. case in_app_or with (1 := T4); intros T5; auto with datatypes. apply in_or_app; left. case ListAux.in_map_inv with (1:= T5); auto. intros z (Hz1, Hz2); subst. replace (op (op w z) v) with (op w (op z v)); sauto. apply in_map; sauto. apply assoc with H; auto with datatypes. apply in_or_app; right; auto with datatypes. apply T0; try apply incl_tran with (2 := T2); auto with datatypes. case H3; replace a with (op (op a c) (G.(i) c)); auto with datatypes. apply H6; sauto. apply incl_tran with (2 := H2); auto with datatypes. apply trans_equal with (op a (op c (G.(i) c))); sauto. apply sym_equal; apply assoc with H; auto with datatypes. replace (op c (G.(i) c)) with (G.(e)); sauto. rewrite <- same_e_for_H_and_G. assert (In a H.(s)); sauto; apply (H2 a); auto with datatypes. unfold mkGH; apply H1; auto with datatypes. Qed. (************************************** Lagrange theorem **************************************) Theorem lagrange: (g_order G | (g_order H)). unfold g_order. rewrite Permutation.permutation_length with (l := H.(s)) (m:= mkGH). case mkGH_length; intros x H1; exists (Z_of_nat x). rewrite H1; rewrite Zmult_comm; apply inj_mult. apply ulist_incl2_permutation; auto. apply ulist_mkGH. apply mkGH_incl. apply incl_mkGH. Qed. End Lagrange. coqprime-8.18/src/Coqprime/PrimalityTest/LucasLehmer.v000066400000000000000000000471321451023060700230510ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) (********************************************************************** LucasLehamer.v Build the sequence for the primality test of Mersenne numbers Definition: LucasLehmer **********************************************************************) Require Import ZArith. Require Import ZCAux. Require Import Tactic. Require Import Wf_nat. Require Import NatAux. Require Import UList. Require Import ListAux. Require Import FGroup. Require Import EGroup. Require Import PGroup. Require Import IGroup. Open Scope Z_scope. (************************************** The seeds of the serie **************************************) Definition w := (2, 1). Definition v := (2, -1). Theorem w_plus_v: pplus w v = (4, 0). simpl; auto. Qed. Theorem w_mult_v : pmult w v = (1, 0). simpl; auto. Qed. (************************************** Definition of the power function for pairs p^n **************************************) Definition ppow p n := match n with Zpos q => iter_pos _ (pmult p) (1, 0) q | _ => (1, 0) end. (************************************** Some properties of ppow **************************************) Theorem ppow_0: forall n, ppow n 0 = (1, 0). simpl; auto. Qed. Theorem ppow_1: forall n, ppow (1, 0) n = (1, 0). intros n; case n; simpl; auto. intros p; apply iter_pos_invariant with (Inv := fun x => x = (1, 0)); auto. intros x H; rewrite H; auto. Qed. Theorem ppow_op: forall a b p, iter_pos _ (pmult a) b p = pmult (iter_pos _ (pmult a) (1, 0) p) b. intros a b p; generalize b; elim p; simpl; auto; clear b p. intros p Rec b. rewrite (Rec b). try rewrite (fun x y => Rec (pmult x y)); try rewrite (fun x y => Rec (iter_pos _ x y p)); auto. repeat rewrite pmult_assoc; auto. intros p Rec b. rewrite (Rec b); try rewrite (fun x y => Rec (pmult x y)); try rewrite (fun x y => Rec (iter_pos _ x y p)); auto. repeat rewrite pmult_assoc; auto. intros b; rewrite pmult_1_r; auto. Qed. Theorem ppow_add: forall n m p, 0 <= m -> 0 <= p -> ppow n (m + p) = pmult (ppow n m) (ppow n p). intros n m; case m; clear m. intros p _ _; rewrite ppow_0; rewrite pmult_1_l; auto. 2: intros p m H; contradict H; auto with zarith. intros p1 m _; case m. intros _; rewrite Zplus_0_r; simpl; apply sym_equal; apply pmult_1_r. 2: intros p2 H; contradict H; auto with zarith. intros p2 _; simpl. rewrite iter_pos_plus. rewrite ppow_op; auto. Qed. Theorem ppow_ppow: forall n m p, 0 <= n -> 0 <= m -> ppow p (n * m ) = ppow (ppow p n) m. intros n m; case n. intros p _ Hm; rewrite Zmult_0_l. rewrite ppow_0; apply sym_equal; apply ppow_1. 2: intros p p1 H; contradict H; auto with zarith. intros p1 p _; case m; simpl; auto. intros p2 _; pattern p2; apply Pind; simpl; auto. rewrite Pmult_1_r; rewrite pmult_1_r; auto. intros p3 Rec; rewrite Pplus_one_succ_r; rewrite Pmult_plus_distr_l. rewrite Pmult_1_r. simpl; repeat rewrite iter_pos_plus; simpl. rewrite pmult_1_r. rewrite ppow_op; try rewrite Rec; auto. apply sym_equal; apply ppow_op; auto. Qed. Theorem ppow_mult: forall n m p, 0 <= n -> ppow (pmult m p) n = pmult (ppow m n) (ppow p n). intros n m p; case n; simpl; auto. intros p1 _; pattern p1; apply Pind; simpl; auto. repeat rewrite pmult_1_r; auto. intros p3 Rec; rewrite Pplus_one_succ_r. repeat rewrite iter_pos_plus; simpl. repeat rewrite (fun x y z => ppow_op x (pmult y z)) ; auto. rewrite Rec. repeat rewrite pmult_1_r; auto. repeat rewrite <- pmult_assoc; try eq_tac; auto. rewrite (fun x y => pmult_comm (iter_pos _ x y p3) p); auto. rewrite (pmult_assoc m); try apply pmult_comm; auto. Qed. (************************************** We can now define our series of pairs s **************************************) Definition s n := pplus (ppow w (2 ^ n)) (ppow v (2 ^ n)). (************************************** Some properties of s **************************************) Theorem s0 : s 0 = (4, 0). simpl; auto. Qed. Theorem sn_aux: forall n, 0 <= n -> s (n+1) = (pplus (pmult (s n) (s n)) (-2, 0)). intros n Hn. assert (Hu: 0 <= 2 ^n); auto with zarith. set (y := (fst (s n) * fst (s n) - 2, 0)). unfold s; simpl; rewrite Zpower_exp; auto with zarith. rewrite Zpower_1_r; rewrite ppow_ppow; auto with zarith. repeat rewrite pplus_pmult_dist_r || rewrite pplus_pmult_dist_l. repeat rewrite <- pplus_assoc. eq_tac; auto. pattern 2 at 2; replace 2 with (1 + 1); auto with zarith. rewrite ppow_add; auto with zarith; simpl. rewrite pmult_1_r; auto. rewrite Zmult_comm; rewrite ppow_ppow; simpl; auto with zarith. repeat rewrite <- ppow_mult; auto with zarith. rewrite (pmult_comm v w); rewrite w_mult_v. rewrite ppow_1. repeat rewrite tpower_1. rewrite pplus_comm; repeat rewrite <- pplus_assoc; rewrite pplus_comm; repeat rewrite <- pplus_assoc. simpl; case (ppow (7, -4) (2 ^n)); simpl; intros z1 z2; eq_tac; auto with zarith. Qed. Theorem sn_snd: forall n, snd (s n) = 0. intros n; case n; simpl; auto. intros p; pattern p; apply Pind; auto. intros p1 H; rewrite Zpos_succ_morphism; unfold Z.succ. rewrite sn_aux; auto with zarith. generalize H; case (s (Zpos p1)); simpl. intros x y H1; rewrite H1; auto with zarith. Qed. Theorem sn: forall n, 0 <= n -> s (n+1) = (fst (s n) * fst (s n) -2, 0). intros n Hn; rewrite sn_aux; generalize (sn_snd n); case (s n); auto. intros x y H; simpl in H; rewrite H; simpl. eq_tac; ring. Qed. Theorem sn_w: forall n, 0 <= n -> ppow w (2 ^ (n + 1)) = pplus (pmult (s n) (ppow w (2 ^ n))) (- 1, 0). intros n H; unfold s; simpl; rewrite Zpower_exp; auto with zarith. assert (Hu: 0 <= 2 ^n); auto with zarith. rewrite Zpower_1_r; rewrite ppow_ppow; auto with zarith. repeat rewrite pplus_pmult_dist_r || rewrite pplus_pmult_dist_l. pattern 2 at 2; replace 2 with (1 + 1); auto with zarith. rewrite ppow_add; auto with zarith; simpl. rewrite pmult_1_r; auto. repeat rewrite <- ppow_mult; auto with zarith. rewrite (pmult_comm v w); rewrite w_mult_v. rewrite ppow_1; simpl. simpl; case (ppow (7, 4) (2 ^n)); simpl; intros z1 z2; eq_tac; auto with zarith. Qed. Theorem sn_w_next: forall n, 0 <= n -> ppow w (2 ^ (n + 1)) = pplus (pmult (s n) (ppow w (2 ^ n))) (- 1, 0). intros n H; unfold s; simpl; rewrite Zpower_exp; auto with zarith. assert (Hu: 0 <= 2 ^n); auto with zarith. rewrite Zpower_1_r; rewrite ppow_ppow; auto with zarith. repeat rewrite pplus_pmult_dist_r || rewrite pplus_pmult_dist_l. pattern 2 at 2; replace 2 with (1 + 1); auto with zarith. rewrite ppow_add; auto with zarith; simpl. rewrite pmult_1_r; auto. repeat rewrite <- ppow_mult; auto with zarith. rewrite (pmult_comm v w); rewrite w_mult_v. rewrite ppow_1; simpl. simpl; case (ppow (7, 4) (2 ^n)); simpl; intros z1 z2; eq_tac; auto with zarith. Qed. Section Lucas. Variable p: Z. (************************************** Definition of the mersenne number **************************************) Definition Mp := 2^p -1. Theorem mersenne_pos: 1 < p -> 1 < Mp. intros H; unfold Mp; enough (2 < 2 ^p) by auto with zarith. apply Z.lt_le_trans with (2^2). refine (refl_equal _). apply Zpower_le_monotone; auto with zarith. Qed. Hypothesis p_pos2: 2 < p. (************************************** We suppose that the mersenne number divides s **************************************) Hypothesis Mp_divide_sn: (Mp | fst (s (p - 2))). Variable q: Z. (************************************** We take a divisor of Mp and shows that Mp <= q^2, hence Mp is prime **************************************) Hypothesis q_divide_Mp: (q | Mp). Hypothesis q_pos2: 2 < q. Theorem q_pos: 1 < q. apply Z.lt_trans with (2 := q_pos2); auto with zarith. Qed. (************************************** The definition of the groups of inversible pairs **************************************) Definition pgroup := PGroup q q_pos. Theorem w_in_pgroup: (In w pgroup.(FGroup.s)). generalize q_pos; intros HM. generalize q_pos2; intros HM2. assert (H0: 0 < q); auto with zarith. simpl; apply isupport_is_in; auto. assert (zpmult q w (2, q - 1) = (1, 0)). unfold zpmult, w, pmult, base; repeat (rewrite Zmult_1_r || rewrite Zmult_1_l). eq_tac. apply trans_equal with ((3 * q + 1) mod q). eq_tac; auto with zarith. rewrite Zplus_mod; auto. rewrite Zmult_mod; auto. rewrite Z_mod_same; auto with zarith. rewrite Zmult_0_r; repeat rewrite Zmod_small; auto with zarith. apply trans_equal with (2 * q mod q). eq_tac; auto with zarith. apply Zdivide_mod; auto with zarith; exists 2; auto with zarith. apply is_inv_true with (2, q - 1); auto. rewrite zpmult_comm; auto. apply mL_in; auto with zarith. unfold w; apply mL_in; auto with zarith. Qed. Theorem e_order_divide_order: (e_order P_dec w pgroup | g_order pgroup). apply e_order_divide_g_order. apply w_in_pgroup. Qed. Theorem order_lt: g_order pgroup < q * q. unfold g_order, pgroup, PGroup; simpl. rewrite <- (Z.abs_eq (q * q)); auto with zarith. rewrite <- (inj_Zabs_nat (q * q)); auto with zarith. rewrite <- mL_length; auto with zarith. apply inj_lt; apply isupport_length_strict with (0, 0). apply mL_ulist. apply mL_in; auto with zarith. intros a _; left; rewrite zpmult_0_l; auto with zarith. intros; discriminate. Qed. (************************************** The power function zpow: a^n **************************************) Definition zpow a := gpow a pgroup. (************************************** Some properties of zpow **************************************) Theorem zpow_def: forall a b, In a pgroup.(FGroup.s) -> 0 <= b -> zpow a b = ((fst (ppow a b)) mod q, (snd (ppow a b)) mod q). generalize q_pos; intros HM. generalize q_pos2; intros HM2. assert (H0: 0 < q); auto with zarith. intros a b Ha Hb; generalize Hb; pattern b; apply natlike_ind; auto. intros _; repeat rewrite Zmod_small; [auto with zarith..|]. rewrite ppow_0; simpl; auto with zarith. unfold zpow; intros n1 H Rec _; unfold Z.succ. rewrite gpow_add; auto with zarith. rewrite ppow_add; simpl; try rewrite pmult_1_r; auto with zarith. rewrite Rec; unfold zpmult; auto with zarith. case (ppow a n1); case a; unfold pmult, fst, snd. intros x y z t. repeat (rewrite Zmult_1_r || rewrite Zmult_0_r || rewrite Zplus_0_r || rewrite Zplus_0_l); eq_tac. repeat rewrite (fun u v => Zplus_mod (u * v)); auto. eq_tac; try eq_tac; auto. repeat rewrite (Zmult_mod z); auto with zarith. repeat rewrite (fun u v => Zmult_mod (u * v)); auto. eq_tac; try eq_tac; auto with zarith. repeat rewrite (Zmult_mod base); auto with zarith. eq_tac; try eq_tac; auto with zarith. apply Zmod_mod; auto. apply Zmod_mod; auto. repeat rewrite (fun u v => Zplus_mod (u * v)); auto. eq_tac; try eq_tac; auto. repeat rewrite (Zmult_mod z); auto with zarith. repeat rewrite (Zmult_mod t); auto with zarith. Qed. Theorem zpow_w_n_minus_1: zpow w (2 ^ (p - 1)) = (-1 mod q, 0). generalize q_pos; intros HM. generalize q_pos2; intros HM2. assert (H0: 0 < q); auto with zarith. rewrite zpow_def. replace (p - 1) with ((p - 2) + 1); auto with zarith. rewrite sn_w; auto with zarith. generalize Mp_divide_sn (sn_snd (p - 2)); case (s (p -2)); case (ppow w (2 ^ (p -2))). unfold fst, snd; intros x y z t H1 H2; unfold pmult, pplus; subst. repeat (rewrite Zmult_0_l || rewrite Zmult_0_r || rewrite Zplus_0_l || rewrite Zplus_0_r). assert (H2: z mod q = 0). case H1; intros q1 Hq1; rewrite Hq1. case q_divide_Mp; intros q2 Hq2; rewrite Hq2. rewrite Zmult_mod; auto. rewrite (Zmult_mod q2); auto. rewrite Z_mod_same; auto with zarith. repeat (rewrite Zmult_0_r; rewrite (Zmod_small 0)); auto with zarith. assert (H3: forall x, (z * x) mod q = 0). intros y1; rewrite Zmult_mod; try rewrite H2; auto. assert (H4: forall x y, (z * x + y) mod q = y mod q). intros x1 y1; rewrite Zplus_mod; try rewrite H3; auto. rewrite Zplus_0_l; apply Zmod_mod; auto. eq_tac; auto. apply w_in_pgroup. apply Zlt_le_weak; apply Zpower_gt_0; auto with zarith. Qed. Theorem zpow_w_n: zpow w (2 ^ p) = (1, 0). generalize q_pos; intros HM. generalize q_pos2; intros HM2. assert (H0: 0 < q); auto with zarith. replace p with ((p - 1) + 1); auto with zarith. rewrite Zpower_exp; try rewrite Zpower_exp_1; auto with zarith. unfold zpow; rewrite gpow_gpow; auto with zarith. generalize zpow_w_n_minus_1; unfold zpow; intros H1; rewrite H1; clear H1. simpl; unfold zpmult, pmult. repeat (rewrite Zmult_0_l || rewrite Zmult_0_r || rewrite Zplus_0_l || rewrite Zplus_0_r || rewrite Zmult_1_r). eq_tac; auto. pattern (-1 mod q) at 1; rewrite <- (Zmod_mod (-1) q); auto with zarith. repeat rewrite <- Zmult_mod; auto. rewrite Zmod_small; auto with zarith. apply w_in_pgroup. Qed. (************************************** As e = (1, 0), the previous equation implies that the order of the group divide 2^p **************************************) Theorem e_order_divide_pow: (e_order P_dec w pgroup | 2 ^ p). generalize q_pos; intros HM. generalize q_pos2; intros HM2. assert (H0: 0 < q); auto with zarith. apply e_order_divide_gpow. apply w_in_pgroup. apply Zlt_le_weak; apply Zpower_gt_0; auto with zarith. exact zpow_w_n. Qed. (************************************** So it is less than equal **************************************) Theorem e_order_le_pow : e_order P_dec w pgroup <= 2 ^ p. apply Zdivide_le. apply Zlt_le_weak; apply e_order_pos. apply Zpower_gt_0; auto with zarith. apply e_order_divide_pow. Qed. (************************************** So order(w) must be 2^q **************************************) Theorem e_order_eq_pow: exists q, (e_order P_dec w pgroup) = 2 ^ q. case (Zdivide_power_2 (e_order P_dec w pgroup) 2 p); auto with zarith. apply Zlt_le_weak; apply e_order_pos. apply prime_2. apply e_order_divide_pow; auto. intros x H; exists x; auto with zarith. Qed. (************************************** Buth this q can only be p otherwise it would contradict w^2^(p -1) = (-1, 0) **************************************) Theorem e_order_eq_p: e_order P_dec w pgroup = 2 ^ p. case (Zdivide_power_2 (e_order P_dec w pgroup) 2 p); auto with zarith. apply Zlt_le_weak; apply e_order_pos. apply prime_2. apply e_order_divide_pow; auto. intros p1 Hp1. case (Zle_lt_or_eq p1 p); try (intro H1; subst; auto; fail). case (Zle_or_lt p1 p); auto; intros H1. absurd (2 ^ p1 <= 2 ^ p); auto with zarith. apply Zlt_not_le; apply Zpower_lt_monotone; auto with zarith. apply Zdivide_le. apply Zlt_le_weak; apply Zpower_gt_0; auto with zarith. apply Zpower_gt_0; auto with zarith. rewrite <- Hp1; apply e_order_divide_pow. intros H1. assert (Hu: 0 <= p1). generalize Hp1; case p1; simpl; auto with zarith. intros p2 Hu; absurd (0 < e_order P_dec w pgroup). rewrite Hu; auto with zarith. apply e_order_pos. absurd (zpow w (2 ^ (p - 1)) = (1, 0)). rewrite zpow_w_n_minus_1. intros H2; injection H2; clear H2; intros H2. assert (H0: 0 < q); auto with zarith. absurd (0 mod q = 0). pattern 0 at 1; replace 0 with (-1 + 1); auto with zarith. rewrite Zplus_mod; auto with zarith. rewrite H2; rewrite (Zmod_small 1); auto with zarith. rewrite Zmod_small; auto with zarith. rewrite Zmod_small; auto with zarith. unfold zpow; apply (gpow_pow _ _ w pgroup) with p1; auto with zarith. apply w_in_pgroup. rewrite <- Hp1. apply (gpow_e_order_is_e _ P_dec _ w pgroup). apply w_in_pgroup. Qed. (************************************** We have then the expected conclusion **************************************) Theorem q_more_than_square: Mp < q * q. unfold Mp. assert (2 ^ p <= q * q); auto with zarith. rewrite <- e_order_eq_p. apply Z.le_trans with (g_order pgroup). apply Zdivide_le; auto with zarith. apply Zlt_le_weak; apply e_order_pos; auto with zarith. 2: apply e_order_divide_order. 2: apply Zlt_le_weak; apply order_lt. apply Z.lt_le_trans with 2; auto with zarith. replace 2 with (Z_of_nat (length ((1, 0)::w::nil))); auto. unfold g_order; apply inj_le. apply ulist_incl_length. apply ulist_cons; simpl; auto. unfold w; intros [H2 | H2]; try (case H2; fail); discriminate. intro a; simpl; intros [H1 | [H1 | H1]]; subst. assert (In (1, 0) (mL q)). apply mL_in; auto with zarith. apply isupport_is_in; auto. apply is_inv_true with (1, 0); simpl; auto. intros; apply zpmult_1_l; auto with zarith. intros; apply zpmult_1_r; auto with zarith. exact w_in_pgroup. case H1. Qed. End Lucas. (************************************** We build the sequence in Z **************************************) Definition SS p := let n := Mp p in match p - 2 with Zpos p1 => iter_pos _ (fun x => Zmodd (Z.square x - 2) n) (Zmodd 4 n) p1 | _ => (Zmodd 4 n) end. Theorem SS_aux_correct: forall p z1 z2 n, 0 <= n -> 0 < z1 -> z2 = fst (s n) mod z1 -> iter_pos _ (fun x => Zmodd (Z.square x - 2) z1) z2 p = fst (s (n + Zpos p)) mod z1. intros p; pattern p; apply Pind. simpl. intros z1 z2 n Hn H H1; rewrite sn; auto; rewrite H1; rewrite Zmodd_correct; rewrite Zsquare_correct; simpl. unfold Zminus; rewrite Zplus_mod; auto. rewrite (Zplus_mod (fst (s n) * fst (s n))); auto with zarith. eq_tac; auto. eq_tac; auto. apply sym_equal; apply Zmult_mod; auto. intros n Rec z1 z2 n1 Hn1 H1 H2. rewrite Pplus_one_succ_l; rewrite iter_pos_plus. rewrite (Rec _ _ n1); auto. replace (n1 + Zpos (1 + n)) with ((n1 + Zpos n) + 1). rewrite sn; simpl; try rewrite Zmodd_correct; try rewrite Zsquare_correct; simpl; auto with zarith. unfold Zminus; rewrite Zplus_mod; auto. unfold Zmodd. rewrite (Zplus_mod (fst (s (n1 + Zpos n)) * fst (s (n1 + Zpos n)))). eq_tac; auto. eq_tac; auto. apply sym_equal; apply Zmult_mod; auto. rewrite Zpos_plus_distr; auto with zarith. Qed. Theorem SS_prop: forall n, 1 < n -> SS n = fst(s (n -2)) mod (Mp n). intros n Hn; unfold SS. cut (0 <= n - 2); auto with zarith. case (n - 2). intros _; rewrite Zmodd_correct; rewrite s0; auto. intros p1 H2; rewrite SS_aux_correct with (n := 0); auto with zarith. apply Z.le_lt_trans with 1; try apply mersenne_pos; auto with zarith. rewrite Zmodd_correct; rewrite s0; auto. intros p1 H2; case H2; auto. Qed. Theorem SS_prop_cor: forall p, 1 < p -> SS p = 0 -> (Mp p | fst(s (p -2))). intros p H H1. apply Zmod_divide. generalize (mersenne_pos _ H); auto with zarith. apply trans_equal with (2:= H1); apply sym_equal; apply SS_prop; auto. Qed. Theorem LucasLehmer: forall p, 2 < p -> SS p = 0 -> prime (Mp p). intros p H H1; case (prime_dec (Mp p)); auto; intros H2. case Zdivide_div_prime_le_square with (2 := H2). apply mersenne_pos; apply Z.lt_trans with 2; auto with zarith. intros q (H3, (H4, H5)). contradict H5; apply Zlt_not_le. apply q_more_than_square; auto. apply SS_prop_cor; auto. apply Z.lt_trans with 2; auto with zarith. case (Zle_lt_or_eq 2 q); auto. apply prime_ge_2; auto. intros H5; subst. absurd (2 <= 1); auto with arith. apply Zdivide_le; auto with zarith. case H4; intros x Hx. exists (2 ^ (p -1) - x). rewrite Zmult_minus_distr_r; rewrite <- Hx; unfold Mp. pattern 2 at 2; rewrite <- Zpower_1_r; rewrite <- Zpower_exp; auto with zarith. replace (p - 1 + 1) with p; auto with zarith. Qed. (************************************** The test **************************************) Definition lucas_test n := if Z_lt_dec 2 n then if Z.eq_dec (SS n) 0 then true else false else false. Theorem LucasTest: forall n, lucas_test n = true -> prime (Mp n). intros n; unfold lucas_test; case (Z_lt_dec 2 n); intros H1; try (intros; discriminate). case (Z.eq_dec (SS n) 0); intros H2; try (intros; discriminate). intros _; apply LucasLehmer; auto. Qed. Theorem prime7: prime 7. exact (LucasTest 3 (refl_equal _)). Qed. Theorem prime31: prime 31. exact (LucasTest 5 (refl_equal _)). Qed. Theorem prime127: prime 127. exact (LucasTest 7 (refl_equal _)). Qed. Theorem prime8191: prime 8191. exact (LucasTest 13 (refl_equal _)). Qed. Theorem prime131071: prime 131071. exact (LucasTest 17 (refl_equal _)). Qed. Theorem prime524287: prime 524287. exact (LucasTest 19 (refl_equal _)). Qed. coqprime-8.18/src/Coqprime/PrimalityTest/Makefile.bak000066400000000000000000000112051451023060700226420ustar00rootroot00000000000000############################################################################## ## The Calculus of Inductive Constructions ## ## ## ## Projet Coq ## ## ## ## INRIA ENS-CNRS ## ## Rocquencourt Lyon ## ## ## ## Coq V7 ## ## ## ## ## ############################################################################## # WARNING # # This Makefile has been automagically generated by coq_makefile # Edit at your own risks ! # # END OF WARNING # # This Makefile was generated by the command line : # coq_makefile -f Make -o Makefile # ########################## # # # Variables definitions. # # # ########################## CAMLP4LIB=`camlp4 -where` COQSRC=-I $(COQTOP)/kernel -I $(COQTOP)/lib \ -I $(COQTOP)/library -I $(COQTOP)/parsing \ -I $(COQTOP)/pretyping -I $(COQTOP)/interp \ -I $(COQTOP)/proofs -I $(COQTOP)/syntax -I $(COQTOP)/tactics \ -I $(COQTOP)/toplevel -I $(COQTOP)/contrib/correctness \ -I $(COQTOP)/contrib/extraction -I $(COQTOP)/contrib/field \ -I $(COQTOP)/contrib/fourier -I $(COQTOP)/contrib/graphs \ -I $(COQTOP)/contrib/interface -I $(COQTOP)/contrib/jprover \ -I $(COQTOP)/contrib/omega -I $(COQTOP)/contrib/romega \ -I $(COQTOP)/contrib/ring -I $(COQTOP)/contrib/xml \ -I $(CAMLP4LIB) ZFLAGS=$(OCAMLLIBS) $(COQSRC) OPT= COQFLAGS=-q $(OPT) $(COQLIBS) $(OTHERFLAGS) $(COQ_XML) COQC=$(COQBIN)coqc GALLINA=gallina COQDOC=coqdoc CAMLC=ocamlc -c CAMLOPTC=ocamlopt -c CAMLLINK=ocamlc CAMLOPTLINK=ocamlopt COQDEP=$(COQBIN)coqdep -c GRAMMARS=grammar.cma CAMLP4EXTEND=pa_extend.cmo pa_ifdef.cmo q_MLast.cmo PP=-pp "camlp4o -I . -I $(COQTOP)/parsing $(CAMLP4EXTEND) $(GRAMMARS) -impl" ######################### # # # Libraries definition. # # # ######################### OCAMLLIBS=-I .\ -I ../Tactic\ -I ../N\ -I ../Z\ -I ../List COQLIBS=-I .\ -I ../Tactic\ -I ../N\ -I ../Z\ -I ../List ################################### # # # Definition of the "all" target. # # # ################################### VFILES=Cyclic.v\ EGroup.v\ Euler.v\ FGroup.v\ IGroup.v\ Lagrange.v\ LucasLehmer.v\ Pepin.v\ PGroup.v\ PocklingtonCertificat.v\ PocklingtonRefl.v\ Pocklington.v\ Proth.v\ Root.v\ Zp.v VOFILES=$(VFILES:.v=.vo) VIFILES=$(VFILES:.v=.vi) GFILES=$(VFILES:.v=.g) HTMLFILES=$(VFILES:.v=.html) GHTMLFILES=$(VFILES:.v=.g.html) all: Cyclic.vo\ EGroup.vo\ Euler.vo\ FGroup.vo\ IGroup.vo\ Lagrange.vo\ LucasLehmer.vo\ Pepin.vo\ PGroup.vo\ PocklingtonCertificat.vo\ PocklingtonRefl.vo\ Pocklington.vo\ Proth.vo\ Root.vo\ Zp.vo spec: $(VIFILES) gallina: $(GFILES) html: $(HTMLFILES) gallinahtml: $(GHTMLFILES) all.ps: $(VFILES) $(COQDOC) -ps -o $@ `$(COQDEP) -sort -suffix .v $(VFILES)` all-gal.ps: $(VFILES) $(COQDOC) -ps -g -o $@ `$(COQDEP) -sort -suffix .v $(VFILES)` #################### # # # Special targets. # # # #################### .PHONY: all opt byte archclean clean install depend html .SUFFIXES: .v .vo .vi .g .html .tex .g.tex .g.html .v.vo: $(COQC) $(COQDEBUG) $(COQFLAGS) $* .v.vi: $(COQC) -i $(COQDEBUG) $(COQFLAGS) $* .v.g: $(GALLINA) $< .v.tex: $(COQDOC) -latex $< -o $@ .v.html: $(COQDOC) -html $< -o $@ .v.g.tex: $(COQDOC) -latex -g $< -o $@ .v.g.html: $(COQDOC) -html -g $< -o $@ byte: $(MAKE) all "OPT=" opt: $(MAKE) all "OPT=-opt" include .depend .depend depend: rm -f .depend $(COQDEP) -i $(COQLIBS) $(VFILES) *.ml *.mli >.depend $(COQDEP) $(COQLIBS) -suffix .html $(VFILES) >>.depend install: mkdir -p `$(COQC) -where`/user-contrib cp -f $(VOFILES) `$(COQC) -where`/user-contrib Makefile: Make mv -f Makefile Makefile.bak $(COQBIN)coq_makefile -f Make -o Makefile clean: rm -f *.cmo *.cmi *.cmx *.o $(VOFILES) $(VIFILES) $(GFILES) *~ rm -f all.ps all-gal.ps $(HTMLFILES) $(GHTMLFILES) archclean: rm -f *.cmx *.o html: # WARNING # # This Makefile has been automagically generated by coq_makefile # Edit at your own risks ! # # END OF WARNING coqprime-8.18/src/Coqprime/PrimalityTest/N000066400000000000000000000051351451023060700205730ustar00rootroot00000000000000(********************************************************************** Aux.v Auxillary functions & Theorems Laurent.Thery@inria.fr (2003) **********************************************************************) Require Export Arith. Require Export Tactic. (************************************** Some properties of minus **************************************) Theorem minus_O : forall a b : nat, a <= b -> a - b = 0. intros a; elim a; simpl in |- *; auto with arith. intros a1 Rec b; case b; elim b; auto with arith. Qed. (************************************** Definitions and properties of the power for nat **************************************) Fixpoint pow (n m: nat) {struct m} : nat := match m with O => 1%nat | (S m1) => (n * pow n m1)%nat end. Theorem pow_add: forall n m p, pow n (m + p) = (pow n m * pow n p)%nat. intros n m; elim m; simpl. intros p; rewrite plus_0_r; auto. intros m1 Rec p; rewrite Rec; auto with arith. Qed. Theorem pow_pos: forall p n, (0 < p)%nat -> (0 < pow p n)%nat. intros p1 n H; elim n; simpl; auto with arith. intros n1 H1; replace 0%nat with (p1 * 0)%nat; auto with arith. repeat rewrite (mult_comm p1); apply mult_lt_compat_r; auto with arith. Qed. Theorem pow_monotone: forall n p q, (1 < n)%nat -> (p < q)%nat -> (pow n p < pow n q)%nat. intros n p1 q1 H H1; elim H1; simpl. pattern (pow n p1) at 1; rewrite <- (mult_1_l (pow n p1)). apply mult_lt_compat_r; auto. apply pow_pos; auto with arith. intros n1 H2 H3. apply lt_trans with (1 := H3). pattern (pow n n1) at 1; rewrite <- (mult_1_l (pow n n1)). apply mult_lt_compat_r; auto. apply pow_pos; auto with arith. Qed. (************************************ Definition of the divisibility for nat **************************************) Definition divide a b := exists c, b = a * c. Theorem divide_le: forall p q, (1 < q)%nat -> divide p q -> (p <= q)%nat. intros p1 q1 H (x, H1); subst. apply le_trans with (p1 * 1)%nat; auto with arith. rewrite mult_1_r; auto with arith. apply mult_le_compat_l. case (le_lt_or_eq 0 x); auto with arith. intros H2; subst; contradict H; rewrite mult_0_r; auto with arith. Qed. coqprime-8.18/src/Coqprime/PrimalityTest/Note.pdf000066400000000000000000004056261451023060700220640ustar00rootroot00000000000000%PDF-1.2 %쏢 18 0 obj <> stream xYKF`#=$N0Yܒh g^I!8[]]$G"fw=﫪gb?zz^}f~r%9VUPLW7?vͮ+i`m3E,~NK k,.ݤ%Ʉ~㪲)p5Fo[Ό[)_u2^S1g] ͋Mv2iS9Wke.m}[:%ϔPq28\G\Ly)!RNIPަ` ^ 5Ki㢔qcIJ˼qW9J;_7$G!F>>4zͤ z>!բ/RƖ=%τv[ tC3qǴy@7 <60[Zk4ٖUWf1k`פӥar߾P!.! WvXIH"C#Đ)(sKibh[#6=BH} ^ ~ Hv96WXqA<*PN'(-&O*m@Rf9n=[)?@uг!{>~)k+B&4fNgNbϏ[ي3zrNwD+w\ ;hQABGmlHY؁NzW&`;ctloYy:EO9gZa[> stream x[M K/ia :$-$!NHcwFUfw|8@:HeW^gRLWgyVZpso >Q"Zf7Li)3gf7Wo~L/ Qxnn^AլEeu 2Cz/H.?[ÌO?Yn﷛2B~8 ̺owV"h_Fn5ht(vm~(.oi*ՇyuZmyێ 2jϻaTynUE5sN+WGn(Qe/VnO 2;d8ji.4dQz; C3PnWe0ƛ>BƆ}d6ShC0%MƈT^]_5腀%#r(0]Pr{u }tϯu!hsU i\turܼ?ǣBYo3l0Q b-(l@0p1]/֛6|1GpC5FYLji&' a:Z>bXGK~ FR0YHl(o c!!IσFnNWKS,s1796lh.wmS`/{YrȆ V̮]8课6N (_xiiWyW`fk1i93/"Y~6}/P8FY\PUEbCRgjBx# p\^){(efy 0y ug_X9vy"l a_q*m^WR bp΄( $Z'V:"V9 ő6™6J@3Tf?92n` htL{R]㽊(|c7\Z=L^ +FʅZ Бug h4tJB?&C -aL$ ]&ŜOr}#Uik~@#`UpF|<%BbrM կ1Gz6ޯ<Ԁ@[6_tQ $KؗPi 1Wyj7,"j0E[^uciVYVCa"k E)xJ?G%6(,Qo,Ĺ%vF|SY3n>f5(HU&|G^iҦ4;R +߲6`x*56#;5=,f6 Ib٠ ( IfW2)꾅;Kt azπؐkg܉]M;?l)%oVqo#Xj|𚼰v[m1gj f[ZnunYڷc~;#;9YOd$vw# Z[I qbjx 爕)l0yI`ܖjMtJ![Z3GYOĵ>|c}$aBǠO =G}K9" 餒Gșn^y!>jhWlg0rLBIGC:BeM,ڑ˫q5Hrt|7dH m'kLQ|:hcsYp܇4#o/XҗloH*:V&SK/R˽:I˻ )MpA k1/Npb4Ɓx=NԈTqPCX0 c]U|r k)N,{JTDw3?}*q5 tg 8T7p)c#9_}1VJЖ|AY;6A'\TEUVeԞ2x۬+Mw/zuґ%„ JļF/7Zk$nޔSL@ v=lso<]/u/'ΚyRʵǮh]w @73ތT,nm\$Mjpǖz溮9?Pb6W >6D5Dœ*9g\J  uyqǝ΋G\t}{x"ε>9EKΊn>J9)B }D>ԃS^#`濌؍54C;^ \ (TQ鈕=U,oPA"՟?]vv5]F VH/6|}ӷ!"m6j0ɸHGv՘tyN}dBWP$_Di.0W@2ŸRhx~zk+$Q9 EqLm<r(aXtvFEaEaR/Qd>Umv'g鰱`wi],Pk>IF~=vѦ?v5tLn.Ԯ^]Q0.S5t\r}ROI>)'\sU LiTf,mGa焬O1Oh W>>~B[aE0zHof0/:zx&LE:#dlҭ# zuHS>ǮnҵP3VR*ۿ/; u cZ8GOc(;Nl&n~ڷz|?sL<4덺==ePD!vuo]U25/:a웫߻{/endstream endobj 60 0 obj 2791 endobj 78 0 obj <> stream x\K6Kgrڣ ~H!ـ 9 0VcHӳ_b7YlvWV,ՃUKގֻoo.QKn+yu}/9ghU e.ov_/o~bRi7//6 qYYiEZ!_IǍCMaN8YJ y] ךka*ay;a2o <-{C4Er$H4gxrb¥F*D:d_q1w]0>n?D*gʻIuf* vciWp0s'^}άv&ޗŋxŹM>>Zg\{5릉tԶ}Qp&66fR+Æ*1LKt}[c2MK;Y"jAӉ7t~M 1ytJSI^-BV9 ^Q|_§V}Pz+gOˎ-J[d7`"\Y`5>g -ܡd`hh:g=ͮh8n)I'Wn6:8vU5 (3See`Mg|eVI.W1L3&YWKӴ>RKGCN@l4b /xZ/黉0_+NQx?4Byrĩ?)p3T*J e!  E>ttả:l& P%NrK$t(#4\66h=YQDZmt)S]Kd74Qg3zN[?H`)n[Ҥ:yLkPǨaL -*cuȡ&q>{X@ƧWκӓ{(u@@!q# @Wrmg`;g軣p}$=ixlqWUHQB)/լe!~XKiDb {$֤dFc OW}i*bbڂVeD0j7IRV^">tN(j]'i1n@ F:RMdDi+HD)us<hY)kD'KtmH.,#y r7J*my9-39 }TiAAՉ z(&G#FS{a0 ##]ufM Խ˖ΎZab#Daˁ崸El2EeIe!L|ԍ ^mG>pO[sBu=hv<0D UI4G?ֻB$ѹBDo\Fz}w\B]o7]X Clϐ.#"n,$~1" 'ڬD2 9xaA`o}y\4;Jև\Y*-0zv$L6dppSn]C+2H2(6 ^#܎CݓvXՄ2٬Lw& ̶.4 trdrAm93mn>{ȍZ=QǡmJxKLājsreN] -r=lG#8&c'O::xEr4URҚ:IwWV1b BX gt& %x6˟ʁJS |7yL-Gà=~_8"Sc-TX y_@=DSĹXZ ]=':Z^§g$[jȪ9y/Cj28Q0(pINb235D6Bx9X)_eѝSi&ƼI9JbY~OB[TQփy!NJG9M  !,sF[b<m+cB%*$}'Rl|.P$Lj҆~[m$3\0_E5¡JndAbXؾaZ'O 5Ah_Rִj Piȑ؁k44i8ͼ sʹP=~@J ShUP_YīQO~q_.V`80 6,P l,Eж~wsDendstream endobj 79 0 obj 4073 endobj 82 0 obj <> stream x\ocO=1"hrh+@z5ב*J>ΐC9;kv |1׋_Wܭqu OqJ QbXi% zuuw Ɖ닯7]Lmuxa2*Ú%ڭ q~ iӫKFc씚hm-|j"y<9'Xn'vx%>JVkW2|k@닰BWhf~W\ zr+D: K.}|aBu!-q`#cZZMWW@5-[iZG֞jmXZ9Q,/\BUbׇ%`]\= Ps$Ÿw莽P9#wd*2+fb-=yETݰջ[z D8#n%}DWCr&L؄NM0n7CxjD<]3hqp++_|?\)G9U dTMjZ1@Ri)?nT`*D=;&Y]PhTSA{7B~OE143R--*yƱJyasWmODD%{kF8֧`*DZp+S@YΆTeX<4%!3ȶ6EPVIzd+o,\.TV^_ZId.)TUڕ*-^:`#sg$~$aQTa)l\ϫ2\M.{yxd%7M,ќ,eAqaZ9s-a;07+ 2ԋTp­)rIZ-Do1NԱdGƘLBڝQĚzFU`L LEI?n.UJ 8oVst# zPb23c|@ nw) S+zV7!>KD|#-AzXzaf`ưB`62L3Nf2$mR,1l}i_ǧ6̴:zl`VfMb|*@]==Q-0XQԇiAs2@oLIH.jX(p@=)]b {/倌W*hJ+nܾIQgi(Hnx+s e .$J*u&8 0/JzVV,Jo(^vpƒey`{ `8VޅuV:}F }\EUR-Zv`6Q<!3)ǂ-^&org6QS|~<meY8tf@)3ݬBv݄;sKnFn&*Լr:ŸW8Z.4Vu8!Kts]/TB= P Yû (!+HCpa2'$}\?Q4'`Pd*+.Oé; h9ua͒lja3D! /F:ke:ANaz0äaS#lZuwrՈXF%[ ֧q75̭w @wBMw=d :nnG|v;sAr c(b;u; o0,aç7sd2Q@"z |4J@1d7A1=#ڭ! 7ПZ;K<̇tn`jPFe W|$kÙsNcNɈL`(>jJ%Է NF%(npobgj2 {d 些Tˎ8ػBYr5Su0JwsxoWjv&΍an(`oLE؎n(v YOȈU?u2_W  ס Y,9U>wGsZpup@& 폱 q4m_K裝<#]Zŭk4Yo(lk^5ЛND1'S J ԊgUrUuϸΪ9%%;,2Ϣv?Ƃܰp~f7kd|H? KX*.7<Ӎ TXaSg:4t "ڊBsۿ4¤f=HB lTݿՋtߗ=SA!wj?y|ӹXy"WP~Yo\WU9f`XЉ_ĭCb_ Q-)So_ʵ ȹUkORg4֏ۥOt,-!yv̂ jd 4vzo#4;oSvHҗ\G`eÒ⵬ABnJOɇ(8uyz&R.e$K;[mIEk\Q`?%GE!Xf5. HsW*ee\'㵫Era~}!&3fVI9`YeiK[\K̒ϮBpn$:kké7.1c93I7ٿ'.j4e㮛]\WKLeZِQ!gΆJVg@M&o@?Dx:trrIuFŨiz1V[&6Lc+R]OqF.}=AE;X9R-Cx~RMS*6طO_on赅xa;iJ[{a\AvPpM1 -FQ*#v6Jm.- \bf0|zu,WK9z;`+]By9(N.WMKК^2@ ꥟( _wh)Sendstream endobj 83 0 obj 4248 endobj 102 0 obj <> stream x[KsvU.)~AN<ǗTb%U(<9aMĕ\jw)[> B)U)a1@?)g?'OEuq}󓯞i{* ƈ'q:F3 CίO>?궻'Ʋ]|~yb*>1\R1ν̓t7i0 fyBeCsV{{1ʜJe% ΞZ;TVLVǩUkZϺɑp?>c\>ó8%6mN0]MYDG bDn]ԇc_dGĒvᴅN_R a,10C"||uBJjm73#I#XF&_Ì$jԵhn;C ~UIlpl`"mTϺ jg#jrn͐ksfL7$%8Uڠ| ܭFN,8&Ul̑eKJHIu{bPڗ- d1ߧ%"q.~-ЖŪPM3O0i©?|7zijZM8ꅹ j Xn*b-C }i( L(CBBjx }R`)6u5㙔 =$# 3/A VBs׫mp?$wzzUbkך+n[2IIV!Be.@݋u(F`.-њ K`"c~!iv(:BKQbۮn5MpXRT(%]sEuhû7$8:YsbGdn^P)n!Aӓ8vij ]uM3Pl'z` x)60W,Qv HT,ʀ `U䡵,m? _,ObK=Pu( ՞_J :$2Kz18ӠA>ϴnaa/ngyba ;lTJ劆ݶJJn>e*Hnwg*Pi* s6ZʏPAW)۔`@Qx4Ζ&C:V\I R#\l(3?S}12e٤1C 7`'C)LT2JTmq$DwՆ,>;Or~€9cd`B֌I2.)${7CڃO[;}ɃG>!ʚ9x2$0wL٬Ŷ>wO+>02.b)=MN T"4?)-wf* eX9@7DWGL@P=ksiCtCGr̅x;˵`:% A/n%DЊZUq*hLzhdǑm3x>t(f; g(u-duHtc3mXlӆI$jwLF!)(9FzVrHF0h}=i/Gr!4rdYyﰍXrsC6Ѯ )]-N'!79]K==<@;ƵM C 0%AūS)h@IMs-ATxW’RppTzq_IS{EB8n(6 )|"c _s346[@JIEE(Tzh?b\?1sUNŬ]ʑ!qL2⌕&;pB,EPӲJZ\wK_69nĦr B"]:WLڡv#2]UA6J]'ye !Y&k*FrK0HkFV#`{7 1o> +V2a#gk`9h0[T9ɢYi| d ҇^i}ٗY1q) ][0Cf7siِ7 r='|*A;<C*q#љxޞ`"@^L`ZGm} Զd٬Į_E,3=n6}RIb",˷Tp*&TW 7]XJ٣{P@&Gb(U/AXN3d["ђze˖lQu.y~K*#R GgO` P+lI;g./'돦']Ta*Ukn,nvtkfK{3-3n~(hЇn5Zg?e^V#DըFkz\?84zʌDYZ}l_ tCy.`6dˀς I3\ͻZGZ q93-սce.-9O/ D{!u%ÜJ^\ĊFّWVpuTsNQsn"i mHHpl>$NcI|*HLj_b}ye{@H-Ce|y@&ǃBZחSQؠG&7r,aQmh7K24b# TI J0#;5uK#dNj֓4CaJI0eŢ O<:*, G2Z1_na j@{MMDB}u0qW(x,ۑRK־3[|VTұy\ƮKZ$یڣ٬^W z!dmS[ WXƏGI GBOCefH4㇔ EFԥendstream endobj 103 0 obj 3838 endobj 112 0 obj <> stream x\[o\ЗBK}tPMM]H7s9vnul LKSYl(MQAVyw폝*O}uڲ4p\ sJ­z,2Bb}jF+&Ǽ}F- <&t(ij%3i\A=}K&_Fkfxuٌ >)}7>ҷaXp\4],)L):Z="Lna@h'Yf|+JYlmMjrR,?ږ6"+P2Ku0-ʲQ-@;|ZsyS=h,FPiÿ\xRܯII3*fVU1kbjal^v;+&aQ޴V{ǍqP[O!f۴~d~=0NanÄc޹Tз f.Fb }]m ,4ogkmUGS } ± YŊ+2a)QYn6G\N<*e%C#4V k]ٴXP:/9‹T? .Fb T6x1%|D;2qﭩοT+G ]=rfa y8_)Q|MeJ$7jq/|4T;ķW 4+A'"(vK5rB!r-tϑ׈T D NjVUzK6Sj4 5 v ,'ſTEpg eEqJ~T9< e}} L{o0RR*d!y=ar,B"e4*%]^'㐋z|(\/Ѷ$>г-,yādgߎKCTGb? o!}">׆`&YкpWi2;D Z~`c'E ƭ9JUSPMr:A]6afO2v.Gji`):1Ì׮ `-Ab'tΒ?2*=O _a %YA+ ]٩.XDbvWq<{). *xamqIƿKqIip dU?:c$3Gٲ[ M[ NJXJQ C \@ O퐰X]HxX@4%l~M Na μ *O!%\ϠTpdk`ডC#5-Zc-Ԧu&3{g¢_5'JL`BWfmkN޷ш[&Qx(薄$0՚ hŪ<~яG޺YtZEbEl {Wnu)^A '40#v[rh襹zS߮sf;ا }Q!Kfda檍EoFWJx-ԁ \8ᩍQA,xGՋȕ$Wҥ pLM 3%j{04-8۷h5oMX[ xw6̄HG(P_yq~Cs[LKnb2v# Y1Wҭy L"s0!cD9jer #Q*$ڽզ%2uǼUG}$uׯ>žKЕR)cY;emf6(MݴCjkCQxk>9 VH8UZUSecW |gY{l*Ig a#wV^D<;_UֵS#o5R:hЂM2%K1S5y˯I8^΂;Si qp|)HhX9,i+P$T"qa]63C[)t7RqG>{8:_]6m]?ͳP$B5 EփF ]DMnD'b(,*MSPDЕWl>0CP.Dz(Ϩn/H|`g>gєp- w*)I݄3m*8͋5F,"xY96ߨW` %]Y5 g'P!y՝=+| K(1; /G%^]<^ ݛP^$]n>щ\xq[eh4 }6-# .dZYl= ar nˊćHx{+{k5EχBy1ZɈ94)m?u<}tHe^}(HAI8`:*JdoASSN (TgGUk5c*]r-D64ÁP߁(K{L &y!oZ04l_Д מN1 Ggm}x1 uݽ۳Ec$ĸ!a6-j7˗(ϑ R|Yj˂R >qǣw6E"[_ mˏ@6`ۯ?:J")-e)k7Ă%3 .7f_]}|[2g]^a~k3Ƚ[Kbz \~/ ֗x5 W6dӌtZ"Z뗭w>`u^I4"{ DD:}7ewbz\ٝ<1;Hvb;*~$[%y/&*|yni]1;V\OsBtgJ}wϘW6ybCTV D.?endstream endobj 113 0 obj 4195 endobj 127 0 obj <> stream x[Yo[.ЗA"AP:5P`ž5DmLsxIPKm?ؠ).gԗ3qI/g_ξt"_g}\'˜lYԶ;_4ߞx&Jc˳IfԩbytڤYx^kl5sM?. Vl{ ,#p3Nt3i:NY&bgΨZ l׹|ӯ8vq;ߔMfyoˠiryoo8sHÜr23sBw3 8C(̞q3cE^CQoctb_΂R9Ψ[ 1!Y?cۼqLC2`r@`C5h63!Rp)yr*cua$σ]D_Cڲh/j˟Wt^Dzv.O+2L}^j=YS:EYU]IXέeJS%^> }<X߲j5B9׿YdȱYW g2q4 %_ ;UψƟF*qvC ,a獗c# XVsRx J_Ǯ)wDj`1>OC:ǂb3L0YX =7!J~rݸ,xX"jj50836v6Jv$ p{Nή[Q{i>@ARy!oӢeDAըE ~%o ~I\ӑpzz%BF* 95J`YG"q: 'BfG\R{Bԡ=Y@8NO4RdGjUѰ.l`֞d6ְQd$tP:6J_Hsf |vBl%B^4S!1ʙz4|Z5ϽiHaDqDĞ >fARzꠚ"'j6O)wC|ߐ6Rpj+G"za#84,dOlX yȧI.B1m" epglø+jVoZp\L4UJt-Yz.IS2$? ʚ#8tzʵ#s€G%ؕfmUhn:?.p -g$(<ح O `i?#xA^? 8h3C}A U5v!UfDM(2Z<:X;ѥ?#kmp 5U"kis<}nvD9lOf%ܬy *0TCeùXMROUFYxQZ@h7]:=`RY굝4aJ)d6ZDɏ[a=t]}.=ĸiWTKmٷD2I?񖲛2v@_D8SRwā ^˺?j^R7GFp_,i?}Lef^Y!sˤPHF4eh"L @paDCW.̆Kḯjrxy sY )N^=YV`C So6Pg9WWF5x0xH ÄݸC@x['@-'U faS3$/5 9 426-"y{vq3fiY Y㢮c٩8 Y%KyӐn6 Z7I(| bTPߨmc3…ŷD8d{O!ժe,i_-lud$Q(2kPf:hRKgvhA|Gi+dB"n(oF AS)[I:] tL=,d),-=>ld0mG~@] (n] ePyXeTD!8v=' HeWD2 aU^> iф0 zej .ĝ9@5J'Iq]n' ]z7G2‡*=x__TؖH):EGO}$P4eGP,hK*J ~ > stream x\s۶3P,NM7=Խ:rN,9]DDIe⡗v?(u7g>?܏{y{OX)aty{V#HIAPn__~h+ R]~8;=2@qM<% _3 @i${pFVh1J,<\݅(3{،I~^ˑ&VShA\[ YE\$Rjd)Q|ĈM'dN ʸF"* *dvnC2FcM@Jȡ =XTNƜ\,1 o:gX<(`W%ٸ/u5a P_:Cg2x\N7P[6^Lbo.?WgT6^b:  |?k2<|KV0L,IKt?1S(lJ*Gn4aGA/C( 'V6hOa:%YXVڨjBv.]`r*hP;{"f>ĜA#*a¯z)h#˜+ 0ޯ ݯˀKU7%K4HJq٤"C<ZtZL=Kr5} Qt$:)e%\TK2|7{/X)Oja wҶŻiY} B67,< ׻v) y8nИ w=՘iܝAÏ5 քÕ}-.~YR~]Z(q"N}6 Xb|kƆmqk+!Y{wrvCr. IKȁk9w3uBftXEغ轠 urJX/e::ўir `"f9gpu9 0۬[BfYJ I98M)!W;28/ d$UV*b}tD "&'o{dx]/N~[NhhgNqZt{OSbk~/~8r81?8Ղٍ8E.8Y(Pe7|agݮ X a\ZJ0Oߕ3=\b8J4]V-ҭ pc1eyrSƵUiU{e+B443aQ%V憲ݬemM[ &.QcY"1hB~]I*p֚' _gU; 0 / ^ H"k뻥w];h5fsȔ&\fC "T" "~|Tq Q.Ц@ r:mi7E y}7,c"QMrd2}B{Z UCyHC~1ƻk{&/|Y~'Pi:ÜL -x)tq%dx>ܒ2; z*'iۋ8j7@tMI,Aꢣy0Tn.*5/*7aE7&G5{]?N'Gf 3;誂E]0"+g*.KjQ-;ೝPNDJaDr&߆@9W@kGM_/sQ.lpuWZ <ƶ ЍFfȬ6A*UItTiגdSkC-e0PV3| ;j3(<ƏJAc,@W^5肫AzE=wՅ1 o{1?; ɆMCkrefp!%M\4jIJKҲq[LS7)~\;Pհ/4G!E^>`IFe-eǩ܀ Q){yUYo)g/ 3FfiÇ߭R7fΊQvJ(n<;!JD}.s*ݚCl1 ʱ$@s7nJ+~jfZNkI`@Hwr2yq+&3SMz}6GUTEpol6Nd*ԒCfɘ!uiVӬ ]ſof/!ΓxrxTBiWǔM.iR7^\rgнD5"1DmYNޣYك~zhDB oendstream endobj 144 0 obj 2661 endobj 148 0 obj <> stream x]o$7r?^_8I`1sҎ-inHv=t,$WߜV+on_mnW_\ʬ8|uGsZV!>ﶷ^~J+/߼Dw  Lx'_߬/^n=~GRxm[U Y|%QrGorJEC_+@u1jOT~m!;eC_[4KJ'30g@lN2W_JTjE>0DCLkgagf;93:3+:q{x9n? BBG|lgpYdz s<.uxa2nHl~ s9."nqr$MJm|{y Vq.j; SnGbL6O g UYO#EWmت+8Obv\W uI/򩦑q OĒ@oHj SnjмvJBlDaڊK8ʌ]?VGd"y"4%U1Z4c-czUA͕{ 10&bUǤdEV(Fqc&{gAՊ .zq≦`˂Ns]CQISoބgN۸ q׏FAǖp|:ӃT] :cXP}h+&mVxs9IDTMub{OcfNE;F)Yh8Vl%lҫgM2r~Jl+XXQuO#+0hLLQ 2@wM/f zf}< <`r* $x3y/(f* `#epf|^0+\p2K(RAcKaۃN'%WUvv|0k󣈥_Y=6v%*eW\c`= Y-h9X-T64<'NQ>PV4ﳫzpTc@ǚ׿Y1D( N(hfa0z׷>kg4y/λTZPGT`"ZFR MG)`W _`Jc\̬ 5W2#ѺaD kQxVE,ݮovr$._TYp7T PTև&!z7[ K$XXKOx@2ͷ B!l7A!*IM ~#ZPdt4Gei"NGz^He/uWhX9yOhaʎb z_ȍ1|`U`bj%?]K*vG/R -GZ6S١XΑwDd;>%n>oc\y,h}ta 3OU"kV*/uc 90W)M4uN5"m]`ͩF'F;%UGf3n6uy9Ev*Ҭ%%4B\ mz.+Kjӷ/ D8ŅfH.\hsvݥ~k %%O+;*{43ϫY Ē]#lEK%@@g Ѡ"2E}DV峘@- 0vQҾR%B~REQҀx=:&Z*/.c:^o :  j864Y}`*icn鯴G.'}`f^>o a=cLZ0)w3VCol9ILHQwf$SGdV3'/Kx\enVn1*lܙJD;4O-;(]rd 9N'qh 1-v a# RRyG~lvMuȤ Xnv;`@G\EQ:酢F8!MQFـik#E7ܦL0_ݬLN5;׃挧^_/+TuT~)Τj">=Cbnf 'N e(ZQ > stream x\Ko$GrVY ~.[&ZdL&Gc;*3*C>s/^~':/s;?~W$<]z,|_^YEq/\ovҝE%3!~eWAX|;,vLKd_)B'pߥꌱ!Urױ]0N٣]>.=u^iX0^BL︽Tv?K&npF ָOܛJeep?^$J;8sָ3 D|x ثsW]\N0Z/#UxNxr]Ā2t:Ta<lһyxaPҝOpy? 1_p'A&iͻuy06AO.81`r7hMCP>Z]&vA+A}z;F:eƼGqcOpGFhG-dI+;Cdh:m}t1U@THkw&%3®Ag~Vx5~ݯX搣1Жѿsè#wƠ@ϴůtrңb!B(~;(QlNBJj}"ǪU?{l#I|a5tЁMd p`"`1u9g/8/u` ³lR&&-ӑ&去͕L])tm_~ݫdLD؁e&sy<nK |۟H; Nt^f??oھZZ `8jЛś*Ʀ޵ zo}E@ja I>IHnHwRfVO^T, vH$ܕGo'N~H"5!ۄ&jwe'h$s-_!Ҳ\t/) 'xG^3 ["˨T2_'Ν:D c*9`CXث1Pׂ 5 9H5hq͒k ѿe;JVv,m \^(CphHƮѠ(/{ xuŸς䃹Wíp<<BМ!8ޥHіN)2:? n7+EE%:"O^A"qvy|' YX DRKI3rFz9stM >V F*fZkFto2(-2_vȁɛBJ@wmN)ܜU.Š}O U9 EAQ<3!,j̿@`j)|7W^`Je|UR. 'sHdI629 ?ڐ%CLt b<LvI^O^.k4@4E"4s54e}A,CÐ">9=i gDÿA!85@Ma]wq*U?& W1͓-K6nY{Dcj`Mh? _n`7&*5" .{b\!,D֣FG>62\c Q+zDzjmW_e,WZ%AX=~Uީ.H52V88 hcMҷ=8&שR|NMTvwAHnz0>Js}R곪yE039_~d;ŤN_嚗4XIIs:Yl} 0΢R]AXAX0^B;nte(N`Uz8(2Y Q1.ඬplHE7[5*U4RPkgm2ޛ e6c-Ÿx4!ݕ]xOhDˉB<-JQ&wǛ}vFb"l&b*o4PJ'VW~<1y%2R递9߶'v?jyEc:- 6 y[! E( zh<p1\aޒMԑp#.4E4,! K fYQ- F-X>@X62+$];*W )zczj9O^I֬&ԦHW%ey)sU6Vj:^vs2ʑiFC)ff!6y ; SjBxwڂ+,Iy\ cca+OUN8]'UpVFwLYa(h2No'h W2h=G32,K~kASFa_6|};%7hq$Rn7 ͼ qXmMZ6&:4(TH;G:lj6ĢIXb)3܆_LsW#ueii(MSA\W4ٺms~̫*u8@5WeE#$6r[-u9ՠ_ؓ^J҈<j/ׄ<]'kIQ>T[~b&8GPZ[4sF!9&B,,IjI*bk"[%yKKItU HZHypX)K,?Pu Bl?ٴ1;j[/MoGVeL%-)S*z{@¯A(c@yt^L(潒+J;GQ_Kѣ8L)ܳDb՛$yU sEH5-< ?ąVPhl1yn\N-vs25P} aw Zi2|J}ۘ %z-s阩8Y Cѯ︋:hQy52t2RS\2.Д5dG{'00ARo\d4=|b_+7-v(1 Wx`Λފmlآ'kA^a]0;-_ *ċyP'E7"t0Й:RD<ANUZi TQjrY' $ eyyS 2Ovi9戋-qNMh}fX:y`M\]Wz8gZͶ0b sJbc8Pbdі\KqZ0tH/_yR[t e]gJZQ##C#0Y >أxUF̱veZev𚗲4fyLdžNMJibWVZ$؟3cdXK*i3>~-=C]M+9Oxн9 s%a"{=.Hm ] bɸszG,6ٹמ"zWӜ-h41&_0;1gnjI7&Swahd0_d(fIk]m vľ1۲ 0Nd} }B 2TfJ@ dvֽAȅ(,O[ǖc1Q4--l.0^76fA!3 6'x7ܹm'f:5 ur_+?6=xi@?lzR(G6 ]MR։F2q? ' @oh8Q$aQ(M(==&Di :v2hN'8 6J0UG-%ɪ[ Oj٢D~۸.[6Cz zɩkdxOx#&5bQJh?G'}`$׬18u5Z/1Lz[(Mrx84BQR8#U%w*={vgx})xa˕H~vPFO\PN duh?b\OQZ7lƺbNI6Uۛ݇q-"yr-ެES#>{V> ]`w.a4QMܗ=7 A']* mkc%:HC:0Y$v7irL P6Ͼ0]"G8 UC&7+0mBUyi 8,$tW6@Ap>>7ȎՋh" Z>H{Lp{<.ʖ~֜Ö'⽥2CzZBA -! O\ˮFEw.=x4r|ibI1#w2VJIsȯa ؚ%-O7tT% pWO:ݾad^ jE̓lGCV@rያRx }ؕX]-샌ś>q-@endstream endobj 161 0 obj 5226 endobj 170 0 obj <> stream x[K^ @[lC0&$X,g{P4nil8)6=A6&"6O{z~ƪgf+ OqJ*#J3$Rn6Wb&™`,mU"']XrDye>Tyma͌w$Ee0\] u<^2A` A0Xun] AC2R {PF;f󌜁4ȦC98tRq:aQNU ]JZ8l@2u>4GN07"n.cVd_Xs+&w1"-%[ZYY$P55"Gϣj7G!;8,]̹DLIDI}N(S7U:HzOCΆд@ȹIlO}Hٽn3*$zGS,ecX.lYC;iFcJWGKqjJ`/^M_e%`,}*OU_fYf7Ө}x^8v¡hd `FAxp |;OX"rq?QrEQT tY5x̕G,>ŏBl~9mVNY69~9716IVӘF *Ev^*:nvFO 1bN诜{;If6s^$~]+s> 0ҡmϬ1 a:+M(ƬL*i ^B) *kU_<oFIږi!S"7q:`3Is6q0"lUCE槙Vf A>Pfx ~Ugk+σDUVnDeԨuJQ.#:{t\{ܡMH`@}ԗHHȓ|VIGxj?ʳIa-*o"!`MwzºXpI@ɥHh(h> zD;ת~{VwoZ~U't|ԌR5a z%US{9᥷?̐wvhM9igxdQlПhR'(~*E.UX~?L$0*7rT^yɃ";HlaΧ\m봪N[~UuI(ǻ'n~}6"TVMo"8Je~]wUYڪPDv@N{g{;شV>2piLkd mR݇_n"-]\Mrre*;L;(#x!f)Ⱦھυ5W6ro߃H.wqZƱK8f"AA@2Do5nf  :;3#TU_~ޣh[s&(||>wU{mt{A֝2^gn|nQ*Sɖ;BxgYn7{շb|_ԮlWKlbbYQKj_͝Y6!Bߵ?{Γ̎<7}xjHm2;=GB!}8|T Fmk$k|3  ˓Ŷ,6p(Qɹ>5g«$;w j:ڲa_kuZdz>P2:cWDaLu(~*:%q)#|wA&x5X\rݜfH<4bEY/N#+ ~}9)> /Contents 18 0 R >> endobj 58 0 obj <> /Contents 59 0 R >> endobj 77 0 obj <> /Contents 78 0 R >> endobj 81 0 obj <> /Annots[84 0 R]/Contents 82 0 R >> endobj 101 0 obj <> /Annots[104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 109 0 R]/Contents 102 0 R >> endobj 111 0 obj <> /Annots[114 0 R 115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R]/Contents 112 0 R >> endobj 126 0 obj <> /Contents 127 0 R >> endobj 142 0 obj <> /Annots[145 0 R]/Contents 143 0 R >> endobj 147 0 obj <> /Annots[150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R 157 0 R]/Contents 148 0 R >> endobj 159 0 obj <> /Annots[162 0 R 163 0 R 164 0 R 165 0 R 166 0 R 167 0 R]/Contents 160 0 R >> endobj 169 0 obj <> /Annots[175 0 R 176 0 R 177 0 R 178 0 R 179 0 R 180 0 R]/Contents 170 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 58 0 R 77 0 R 81 0 R 101 0 R 111 0 R 126 0 R 142 0 R 147 0 R 159 0 R 169 0 R ] /Count 11 >> endobj 6 0 obj << /Count 10 /First 7 0 R /Last 16 0 R >> endobj 1 0 obj <> >> endobj 8 0 obj << /Title(Natural numbers) /Dest/subsection.1.1 /Parent 7 0 R /Next 9 0 R >> endobj 9 0 obj << /Title(Lists) /Dest/subsection.1.2 /Parent 7 0 R /Prev 8 0 R /Next 10 0 R >> endobj 10 0 obj << /Title(Sets) /Dest/subsection.1.3 /Parent 7 0 R /Prev 9 0 R >> endobj 7 0 obj << /Title(Definitions and Notations) /Dest/section.1 /Count 3 /Parent 6 0 R /Next 11 0 R /First 8 0 R /Last 10 0 R >> endobj 11 0 obj << /Title(Basic Theorems) /Dest/section.2 /Parent 6 0 R /Prev 7 0 R /Next 12 0 R >> endobj 12 0 obj << /Title(Group of invertible elements) /Dest/section.3 /Parent 6 0 R /Prev 11 0 R /Next 13 0 R >> endobj 13 0 obj << /Title(Order of an element) /Dest/section.4 /Parent 6 0 R /Prev 12 0 R /Next 14 0 R >> endobj 14 0 obj << /Title(Lucas-Lehmer test) /Dest/section.5 /Parent 6 0 R /Prev 13 0 R /Next 15 0 R >> endobj 15 0 obj << /Title(Pocklington certificate ) /Dest/section.6 /Parent 6 0 R /Prev 14 0 R /Next 16 0 R >> endobj 17 0 obj <> endobj 56 0 obj <> endobj 57 0 obj <> endobj 76 0 obj <> endobj 80 0 obj <> endobj 84 0 obj <>endobj 100 0 obj <> endobj 104 0 obj <>endobj 105 0 obj <>endobj 106 0 obj <>endobj 107 0 obj <>endobj 108 0 obj <>endobj 109 0 obj <>endobj 110 0 obj <> endobj 114 0 obj <>endobj 115 0 obj <>endobj 116 0 obj <>endobj 117 0 obj <>endobj 118 0 obj <>endobj 119 0 obj <>endobj 120 0 obj <>endobj 121 0 obj <>endobj 122 0 obj <>endobj 123 0 obj <>endobj 124 0 obj <>endobj 125 0 obj <> endobj 141 0 obj <> endobj 145 0 obj <>endobj 146 0 obj <> endobj 150 0 obj <>endobj 151 0 obj <>endobj 152 0 obj <>endobj 153 0 obj <>endobj 154 0 obj <>endobj 155 0 obj <>endobj 156 0 obj <>endobj 157 0 obj <>endobj 158 0 obj <> endobj 162 0 obj <>endobj 163 0 obj <>endobj 164 0 obj <>endobj 165 0 obj <>endobj 166 0 obj <>endobj 167 0 obj <>endobj 168 0 obj <> endobj 175 0 obj <>endobj 176 0 obj <>endobj 177 0 obj <> /Subtype/Link>>endobj 178 0 obj <>endobj 179 0 obj <>endobj 180 0 obj <>endobj 181 0 obj <> endobj 21 0 obj <> endobj 20 0 obj <>stream xU}TS@PYujE6;rZ UvŕB# IC|'#D)N a1VSmeGӽ^M[ugs׽>>%$9g;&5#+>!B?(Ē@] +l z#pJYI*YIJ9u8~qJJVTP)(PJ+ TC8[^$4ϊSYjqZZuXZETyF%gȋUADi*SUH%^%v/DOd9e9"Ed: Ar-)#`!4:,vHHOSإ5OKZ&-.MYRjSa8VZIcA fAI<G)l`2^ڜU2 Vv mYʴW@U-Ǵ=5:Mʩc3} ??/v}']6 'f1]!ׅ),FC: Ӎ,ʡ~;ؗ|.BFntYC|@ s~Ǔ[xg[Dur-MMWodIY@X@ѷ&.s<었.w\H>5+@S)c[$y+^]=yj{>FrCVV!3|e#=;,`zㅣ@[>A 'k7c>GۚęFfOuȇAd,,iKȆq]g-84KM^4ݏ{W[Eh>hy9n ?.cWޡtƋ>l|0=MS 0u.sOI*y b)YD]gNӟfL6jս =ɲ>C) ,H!7~Y8l=Jry_$v0tctٟ@:-c266e,GƂnf{S%tAmז4,zWhJc,{3٧U'_*;؊R[=b7\swھX m\ r+n?Eȏ}q PX24Bstiя)J 8 ..24T͂ʢ;Mx6#;<_y4FUVxz ^K1o ir>ԗo& H, `e[DIYp۹^hAELP%&]"#W -3spfiʩDSp[aBO'n/Ə ,zk!4K=h]訫f\By"WC``wʀNvĐq&y(3sV߭ϮxTHfG.xD$yMO&E2$9o}x>>zʯ ѭ $Y;7hNϝ PYWD ֌7&\Y;+?OUs)3RXV oMAaʠڥs;H!y8ūWK-M{ţ+Ӆ=$ q~ E0y*Wgd ( endstream endobj 182 0 obj 1772 endobj 36 0 obj <> endobj 35 0 obj <>stream xX T׶@)*p'888 $2H3tdEF@qHhb}/Qߘ5)ry?h_Ղ}9Ͼ(s3FP8u^v'ӦPHoIÔ$󗼮Mo;УN( N!b}":`7?'ggOgh6dODdvkoۭ =)$hWdOKOX00cW޾ {.U wY.* :3k̿ͲvDf&1ÙUBf,b0gf*3YLc2KuRf3Y,c60cܘ;,`V2Nk f0APƆ bQXs}E⩙YrtsyE&>-Koz+s5VM}Vyj=wNj6MWB'w jV#&I*84*s,Ng'=B[jv:l@Tϻ٫X_v`©&iYBkJ! )b&!iai \ZuXj>3!gXBZLRA#]8%X9lAl,hVFE*p+*1sr/LE$Yُ[$7լAO"sjCE\Tuk#%KCָZ ŧݻLN{)@kT!<11Ff ɐI8 <Ɓѓ< hy4_V/V6,5EUR n/z$θg,Z|"ldٶg 3xڞ?]fDS,>1_MJH.45F.B2=`w33uPIFVJ.?>]wl JwXLO?Y/O/`REh@}ށ PVH{K L8(F&g 3Sl {FaC{tv,KF?sYjδKd(\<(U=໽ߩ17d[[N-kL5 $vϦpyI^Hե%˖Fyt\ߜ~J\bQ|EƮrGK^ex#&a$ #c/E;bc+nr_+j}.z|435_o١Kp.k6.p106aF0u9 u M#p,mE&b?* fg M@x {6mYs­bpSb4Gybc^&Qc1+Z}[N%J o_ztVfQE95SEFAw/j4 kUQ؛Fj,.=q 8.^ dHDlWѰR~~&썑1g/Ab8/C%mnG|o5FM-ZTȹ#5V?:iTdmq%f\ U(LJěRdge\|Zyܮd+S4:Х$Ē,ˣu] !.)-}n9{@r{y< /?lMl6PX3قTV$h IdeW,žd$K}BA!5!!}_FjFB<&&̽[gdd Q{GsOMF2]it%6#@\pHmF6J,WGhA=qRLM%S?ҡIqnѶ2KW\"Ե+o b6>SƙPVjKGueYb>zX!0\a!܎:CO'}ѿ{ .beDroɯJS! M^|nw ^q(8KUhJ` rSjTWnq6R\IqnWǸ$SW2L41h],_arŰ[]:YMJ"?4}6j«h&[tהxOUZuobfvط/GW>bL{ Z+3S\lpR$D'cGt-( ٹ\Ed&+Tʭ-rQanm0Y< endstream endobj 183 0 obj 3997 endobj 33 0 obj <> endobj 32 0 obj <>stream xcd`ab`ddt vuv64 f!Cyo?CYW8.N9w#fFF7ʢ gMCKKsԢ<Ē 'G!8?93RO1'G!X!(8,5js~nAiIjo~JjQss!C Cء k3VTPG=dqd ~-{vQLGG~ζ﬑Gf r,$%P*O?&/cVtNfp~T%l~Hnwݓ[a;`5wOxGz{k{:fts[ oۗYC{9~fUw&Nm?b7OvMtAkJj]QwMw^wYVD#973/6uY^+#9?7jbcOw^ήnuΛlҸi| /<4U\Xp.sy/{  endstream endobj 184 0 obj 579 endobj 30 0 obj <> endobj 29 0 obj <>stream xWkTT)[Ʋijd'+$IKK}a 3" 0^ygE230À p"+Oey7s/XiZ{}g(1H$ܴoUP\5wO7G[uq}J,?%5S5.^3ς%K|}ʭё>k"UHEUʜPlpH O+cn꟒Vɕ>kRbdZ*O}UڪږLxbE=AmQ/QR˩TzZ@R+T VQ!bj#ZC-RTEGɄ)z.]?#Fq۳ns%1|f<Ĵ{ȸqg'{,4,Z׈;80kU̟rV)8Iڂc KtVt68;b]~ 2Onr71H08m9 B#R0OttgQoI[.[Ep7^#`Iˤd4LM<$rYf(+ ]|,yުX`BKV΋j|kb>X I&!"8=2FB7v+fs'7Զ[9A:\XN~cY; o+iYi2c4wmidó KBɇG5[94HZNZ: Ζ~8K{ qMhGXy N,$ā[)N{hO~ k ;\-7ur9f0 r+v =(s- Wgp+wB?/? '6h>]=#2>#ҘK@s,nEDLzЄqkITnxBB78δ$/*EvP`h>hJ5vTw(yh`f)]Z`<۞ݮԀJH),@UWUV:9&#wp"]06v5=>җ +>⒘؛ݣM3iCt&+~*Z9.K|bR3al1j"zHpX # g៮:1n0CXKl^wvB_\ؓɑt)/1jkeF#kjD՛Nɤ\BsLid)#=X❩aS@avT@I-#] 4:˕i w*`0K"0*A55Ì*- I̿%/e1zQ YW P=_kΚi>c]ĩV1FyW+%%I> Eb}嵝n<2R ZX0Cyycr~-K|\}044 7/8X{_nG *&޻:FzCwvL(]~ d3 ںw~MD$#_;ϺֈюwHzoNt^ $e ir :@; s5y4yxRF" endstream endobj 185 0 obj 3009 endobj 27 0 obj <> endobj 26 0 obj <>stream x={L[ukB7:408Ph@Reap :ю)Ϥ +11d& fsh̹#NrN'7_E4--'0uj|v;N C^aӲi>L×`^JBI)&CqaQUE8+5zUjHWo,rMhPŕw>T*F./6 rΠ( @ePTO)b(3:(9M7foKt,4lHDfFrhm~Dl[>m`m&W6m[蘀.ܴ l6J)K=Ο`\s K(#RR'oۇ*,nq܇'-1Li:Vط]u#ΙDŽN#q!,98hjo3p)겁%6z;S= ?>]8]CfZ۠NUuk-#@4 G=.5)˪W#HF'4S;zg|mp;Q^;VJ1+7n   GI0fڏ愄XGdQ}_}۹pLrIUy^қ2cSOF,@Q#z)K!nA 7`O۠Y,a"Dzjh*XQ VbD^Cᓙ\=F)ÙH![)|V&xx )P`]/@QAJgH n,0CXleb? m*,)23Z[@|s!R J w.}rHQ+mA٨GNQ> endstream endobj 186 0 obj 1036 endobj 24 0 obj <> endobj 23 0 obj <>stream xkXW' ̌;,*ZnUqhvHP()pI&@CB./ ZէjOֵ3nw0y=ϑ~D"_,]7%"j]X`aD'LQx'2EߡOODleL\My/ΐf&%ʂۤJ!=x<)U̝8==x";x4[#M}4BP)YQdi W-Ε%EW+ofeo[L]J: B?1b)1xN%azbI Lb#EL&%BMLXvG)o}r5y?/ 4J-ާydk#l#GƎ dŘ:G<?:(tE]W-Έf>4Ϳ{NQY8G.cy62)FZS}=voǩpiTߑ嚝*o)ԣ2Ϙ Uj1i)jsMo#tU{y޻ gw ,0He!۽;B`}3jmy3aSPzyRY lDGcj idD^D4[JKR=9 e"0/ż6JYS;<ɘu>1eЀh t>d2^Јo|pgx?Crnz:6G6лLq_Rh6D#-?{wxv/xD"5&0sڲwJ@ȜCў0[6}G g@$,No /W~h.n@/%-U ̅b.% ضo%]|褦Vײ)Vr&!kӌMVqeM`4eF;[phgRo @ TPp)2xTK:v󂛆\,p!^$ o(CҫMeg 9諏g&bu=_Ey'" n:>?mGygœ22pA ";+@Om]qu[BfS;]);miDͺBf?}sƕvtMj=.[B_=$-!f˞(-cx=Fk%jIBk~\M'T6P$)؆ZqvLS^}Xp j.1ZJǏiތ[둼‰մ{@ 7}uԨQ ' endstream endobj 187 0 obj 2669 endobj 45 0 obj <> endobj 44 0 obj <>stream xXiXW֮ŅTD@Eq_$DeqEQAqidE6}>4جȪ؈ 4&&QDg5qD=E.do{t׭{FP \|IN gL/h#FF)H%=Fj? ?[!Rpuq؞cc4f͂-61Aa1KgĖ6 BCmVoD۬  ?)"l(pa%oq_=yKTJUbw e?{ot3qꌙ 3YϬ`Ƈ`\Jƕc13q'ɌgV3KY=Yʬe`7ƝY,gW3g̙WL3f,ט0ƊA#ƘЅvt|Gf2Ӥ4j*Nu6qf>fo`,\-=dAZ~poL:yaU[VڬbJdaˀ0Jg8Ba=tIfHڨZ ka+8އjC! %P2"pF6X~4uArnn6W$fd7yMUњEtE{SvgXn quHT. pڰ >sF1WQdy'ȼ S5I!3W5[ pFW f}pmiRjQ/"4WJAhƗBN6%[Ȍ߾xppy8dkZVMN(η5q_=] _C\]GX2i8g W(Xb2vdtIOcъ'ҡtkLY;ȜM6^e_1/A'cq_ݩ*}Rl0"OΣQZ˶gFB:r(j^`TYȿ7=aU2XınCw&-5Sq v:'b& kGͪ--Š4&Y 9*%7i"_\ :si/R|NTLb$ U7Ue$Àмf[TJa*~ @p@td%O^4Wuǎ5ж*&4q,ל\O尼&vG&W f2ћh}pTbUojd3(I,Q~.NZ}JO;";vL0l319I1W .E?leOZlwF3ȕ כFI+Vp88q![,Yk\vʣ]:AF;'eju]WH3XޝՆMN+%o9.ѷsJoڑat?H,1rXNLtyGk۪3s(&JIQ~7;)a,H >W,+hCfVM 6bAq=&2'VJuZ^HJKOXnumӉ2pus_nШ5-h:ɼJw8}vc* ?'LCtϡ^ϡI.w_8 -2M$"v˥s74naʓrk@G}!L:,CUJ;W5?w8]S\*L{IOo1[+.>;xC!B3aWjf"$p~} U껋ҸREƃ8ܪL[Rd9Sm)%bSeCA.7;7˫kbbboꦰ`11>!A]vgt{ <.-F7|37]U&4,Y!;O]r(tz~6\=q޽ 7l,+(h%EsG.^ |d-ڶ=4H3yU']hhap"dOI [^%]~bZ=iCER65C+fΈ~W8ē.p/9|cpɟ+h&ƹ] Ylsy-'n?*jZOnP)2ݏYA={`PDnkl:>(ڼN 36OVS0Q,ط p9PiVyE) 嫡0)KIBNnjfvnDV=02ȫqȎl1ېUҏE/tv|!dhl Jd*:kwkhu(1PF2=}UZ{{\n-ގzB$,YgJQAž%_XQPtA~c]vi/!Eaz"]q @9;hq?JJQ$!7#'+GR2TR*9ҍpEUVUۋd-5۠.<A;!Rv䧖s/3-=+g)磮u0%+kٲQj<_ $jTgM, gpW-,fm&]{5VP$RA vnyP Q8$3wSl*,~1m({P*۰(d΢e0 c}㼤uK^_Wb,$П:تʚSkϦoGM'<>j&XU ِ`]u\&H9vv|Mт]I &0g&vI~h,hf=7X*@, ӹ6%Р~yg=ڧ1^oIJ|M,#J*xutz눨f;t.z=yd 'l,۬CQ!tˍHJȜIt6:rT+6$c:qƤ±:;[IKK7:QZ,,#ŸFE6FsTX&5ZDEAy-?t endstream endobj 188 0 obj 4667 endobj 42 0 obj <> endobj 41 0 obj <>stream x{PTݻ!mC]M֨H%>HJݕUWvA`y)ர[ DeA\p5>VFZRm5MHuߥ{G;ig9s;8,T0,ˎ\l{ã+T7_fWXc@a@+¶QhK Dzq;R[Y4>wlB!ոYY: 0ib7 75 M&ͪiU4Cj!C&*90̨Ȥ41&ݤ3g9=a0+LY,cf2LY3c(f43(颇]QmO?)g)+Ч<A~1krǗjCB4rU [ D?h,nDDmQtBEh Dhywu8Lǧ 4҇"i |c.qS'eIUg&$ʹt#(˞UK~?d֐ VTpB {yyϣ/v;5nI8OcN7qb>\q G_jN2nZOs8r0mSwmoKЛC%wRoȮB viYEu6m(~F%&ci8_YBWGKJM}[NLmˋpK rn[:ry՟p}]W!l.@5SnGn++ (i=Cݤ{MCD;_xo`;$ AةWQ#p~Qd, % B0pr &'8[OU}toknJ@5 '\w[2'z\ ? <,6\d&+$[XTM**qSlȾ(*g7p2(Yw0gP0F ~ endstream endobj 189 0 obj 1870 endobj 51 0 obj <> endobj 50 0 obj <>stream xT}L[ 2[((4QHBҌѦI]eU=x[6_%c04B)!!jkҤ6%E[Nk)&u)T?9Mw'6zWs9=sX&7aYp?ŚiJ!+H2\FҞ7Wkuxu-/bֲރl<2xcv|ХkڍJU͎QiVwvCmVլժzVlàzV4^%CcƮQ٦T{ZQ+vf~hv #=jV͢د1Fի['^@u.7 p;x&NKSl`: ԧaum2h>nNm 2s3ϼY`=~v l a^.ÄOs9)}!Wi.C[U(/.%MŇ"es~q故׀j @حlˡ6F'ȡymkq>94@A?0`4<q;a {x@7`ěG~~|;Q;Zg%]Dff=>WG5* L&v2u]H]c/"<Ҕނ a'Z" o߲¥" f4 nI~N XLQlͥ"|=d%.Ďt?w8S?2c <,$d&"I=9oq Y%r,ƓVLxRtz:!1„oK]Xy|\[v%p(I'^s5d(d(S w/xs};Ȥc\0[rd+y]d'>DV۲o |łLN s%E H'TH#V ܏XU"u{ ];Ot'-D,!}OhH)-狟{( ;P uڟDD&+:\߾~gb Ń\}=Q}jqw'Y6'I5pzrM uaRxO~0DjHz˴Br, &]L*/S%YYUlT6S&ҋ6R:‚ߩHݟ@$*D).܂߿f~Oz.KɸL*fE {2gp40 .:\C?)nw|^ƗROL^wJ|d,!5lq(9Ӿ c8 ,w/tGGOĢSAg4$?] *2Et\ Y:[=z(gB0CQM#T}dÓv1Oc"F#1K cwHܜ\ IVJ{' [8$(C%}BQpXȤmvS%<rJdI?P(Y z`n~=N. d)=ut/'JU)ev6qQ{&($͵}ɝB qDŽpк^8,Qp̱p  ( {f{f8R4&O_O[;]&1YP0\+ endstream endobj 190 0 obj 1711 endobj 48 0 obj <> endobj 47 0 obj <>stream xXyxT幟axd # PPZKd@1, ٷIf;ξ/%$A6Y) UQZ[Z->7$E[}fɜ|}q9'p\[%mX`ER瞏]IF/5}cVƵ?,D3P4b:^=}wbi+L|nJd&& 2ʥ$.O,qLTZ!{bq41(KTZ^_!*Op8sf/.MkĹk+*_/?[D0y 4gg%N2gg jF&<Λ89q^ z3X~fJY)#Պ)hBmፘfrƙVUȊe/,r; DьK(FG)SYV0aLF'Rr?{6?j1R bR RA,Gl#6h7b+B7ТwOfړ;ΎIP^ߢ2]5l'~L+^mpR\X3yh M<ּN4Rf"TlMs? \`uEmu-eg<x/^hIˤLIcڠY^x\k`[ob L_ޝ9N G``T7n-N ο|-\Sq&N͌VщQV1_߼XtK ;Aq|.-oM%Xd#wis{h5˱*\` G:ZֽW 5xK(=6]ʁ~MkҨh%VfHK(vGܷ0+Yz/;D#- յEc4~]PM@"WTkjaˊBV.FGSnE.\bX0o`wY fݹh:m 1PJBO]FJHq̕PMKʓ9;-/ ~w N4ojj)%V0qc5W3yLڧ㣨=&%fb٨5]T|#fP8Ɓ}|wQT3@yVSv62qUT,qIiXnilnζmϵpQ 򆧍WW052RHaKk]鸴},feUQ.`uDGrH%yj$ 0fڢR24-l:0:`J;MC>d.MB3Ќ>EK-"kJ_U_}g?lXX-W19 &.q?!>{V19 GXPq׳84n[X,{ CgUk"Z#/d)O)ƃDH Z18;:r@tTN=8|kܤoaZ)FGZl-V߀甭 >P]Z!YC;FQ5*0@ZιٹjYgz洐w.yΘY8dy7A 8#`"_ 2Wr5a *b à9O"x9$% cNWBrؔQԝn?;n/8 ^{L_ꗭW6~NpBVJ\Z:줣GWۇ~zMut6?o:q$絓ϙBW#kS*Vmι?hn0(s .rw7t^vMG83 -TTR ޔ{ccX \v+_Gz9j֞{:d^ yw;F]bs6Shwھ!X$7';qg8@ٚ, WS ,o /0&V 0 MM?bUoQe4I?r4/U+>j/SiFf>EKw%B b4}k۬M"Eh!;쬃O MDA&`11Byn[BA6kc6jdcP JD{( TR˶ $iFS@,[d}X'5EəTek R&c{rLQÖpԅqK<$+JۤȘPg 46jJfy4T*Fܬ[w5]M6 Vohm!J $2Kb_>pF#@Vy( 7Mh-Zu6nкPYaeYYa2Db?Ҟƚl|/|x V~nMUXE_r`4X2nu6/p4Pvra4~(UѱATFpP#n+p"< b J_u@h8/X Ch7/tJfOeFb=?A&Sp;k2eZI=VB楝:^XjuNZ6L)].W&^"/oz仧? Oz7uTz̍*=,-Qw ¡=TG*YXJ’% VV^xPÝg: lKL RPiM?9V8 yCx,Ѽ蓂+{yZʩ,a$p8@/ XQO\—Vz8vhq+9F.on ND؛IZQ@dϚ;D7˗Cg?XsZ;yVLR`1mn'x5U nk) ufbjExar4} .M&'M|)4۔) endstream endobj 191 0 obj 4965 endobj 39 0 obj <> endobj 38 0 obj <>stream xywXTF{ѨXb +T4Q:0ԙY 0R *cx-1j,Ѩ1$}&~ H&}{{}׻HNfD"`zUW_j.I߬a7Nտ%ּzG>"EO4D2f{?@oVN2jGjkV_`jGp'Vs||V;Vyyz>?$#jG|Vo..w[jcm] {!, hku㆏qnFm\j0ZAͣl!Jj>5ZE-RCԧ0j G ExʚZK-&P#uj"5ZO- 2ʞL:S,ՅKMQ(_ʂNͤ,՟I RR]GIZDOP$͖=H:c>Xs 8 e*H&Ȼ4hs#K cѠzt6YRנDܲ!:E ~`#3tn 1FI `嗏$쑫`;&kU)$XkhwB9EeY59#r? V@Fbn5p_'`|ŠҰPܣcxr$ezKTXXx {7yQ$c<.b`wmZ eqxo,a2*$h`0^˩/꫚o\vvCy<ӺPBgā*3%~1+*YTFBsjZ6օ49PcQO2iU J9Nw:,blK~\ǠhS4eCZBq7yxԈ-5Ѡ&R ^],DM)R)l*EG%6-IRi̋q5-ޙoB0KbAtu8;w]#K"PN됽 iqBok@eśH6"ʐJLT> vuhd>*%{9nѺL/#Tڲ}"7< b;B5k<bg4EhơcP&R!޳hs@b~p9O'h)r 㾿}Fb@݃/6΅գW|$?ґ&"担'ufP -poCjx? pyp2Y+v&d )(M/“R4["s#QgÇ2U 9\:0LpΒ҂Z/y>pwМJ(eN]#F1v Ht2/F<xC;"++%P0EۢL&6wq,Ó~ FT[Er,2Y <&h.A8?̓'>bT"36AaP!ae(ȼ|e,*hE[i(}QVԩ\\g%1z}nyDMXFREO( 5v5 S Hc컂?FȂG|!ǗUW}h!U|I a 2EQ[׹o|Ky邙=bp9ͻ6{:fU'/֗m !\ȊՁ v.)r^g2Ö>L#vݱ24L =dWdhMrD~M[S,$ Z'ɗʩ,kۤNRl͍CY)PqmDRJ;YKj" 4F)#L3q\XHl<'mX$u[=~ǞUQ~Kq 7ֽ ᒊ YJM%01t8$fi 64u_NݼmOl&U埶07.2UÏ$ )d}'V?qzmQFodmmBU]ɹj 9G<Я.a*zʾ,un1/=<'%&2. eҽjcy@(̇p%?@i`}hH$(|rv #q' 㛒VdgF簸ʗA R3+A㾢|jDpSvG#Gvv'vvWяR4Q~qh?)+]}<^n~kEt{!cIqCH1_՝|2ɀMC oDb).J #ԣFQ2;*K55}<-Szzԣ/IʖVsˈ񺘙@Tgs&>S 62\gе3R.L`:5E _xKG|GRV;d)$m[gTۏ7:׺ձ_WǝK8\kNvZ}Б[y"zZ[dRZ&'K0f׸]~@|K;ϑٹFgS{V#Պ=(:Agldy'V$qLEyM3 /':͝=%I}KA"oҖ#hX ^Jƒ: N###n+Y-F2=!xp&x UJK9<̄^ Y`LB$((0"1cmA:1O ,""uZNCVRFis 4.S՛ɐr9#C ;TRGsba'cGä6B?TyuBExi:^nQLxTb(Y[s،<(.'kha|wV.p"Xl5j='/,Ah+NAe UʁErp$DdD#oK_6֞,!߉rLnZ"/WXY5LQs/-}ӳȌkh{[l 4bUr4$5')lp0TC2ˊZ0w WK-}Dv'抭e~Й_"?N@"HI&M6E[ YuڝZe&XfCJzj6N[P2e'>fv{n(BYk}\IT_gIMw޿uS30S8,JJ K /9pß{hY9kdx:.uSA` gOWEy|n1n㖚̩p`,R,^z k;Ь34>GTl brU  1 qZI 閐-lKyvt*?G[hT w)gX+v9;8Ǹs: 6ԑ4 JIʇ<(H7m(ZUUBqq;]e$:+Z ᚠ=$%R/l2.uˡxǸ?|y$Mʿ`y1Qє^y5]yK]]PZsx _OA^7 [#wH!YL#_~(e Mw&` h;De*j[ST~')H5ONpKqle9y]hs_&8WZ JQ NakGj{$wJ%p%ݕv5P暚_[BvOx{a b\-$OnQO%|Ob*sSFO|6 Na"ܠ}v6ӀkQԹZ0dQWERQ|Eaa#6QV<"dQ^Db>ѬvG=Jȃ԰l(*H_<<ڻsUKwT8s SO2\d]#k6v0/$R.=] Nצq))1J\y3$Hb̛d^شIJ狿ێDe ғ0: EolS_÷Igmϰ]eJV_uSc^I}㌣ݕVǘK_6\vq2gǕ۹k.e}`3ki *V6KJQ)Z6\ȢL(2Y}kԎ}C`8#AkS4Y& jH]@ΈMч;Dw<!x:zH@cly!P#8wwXIycRz"ӟllKi?ڙ0wU~:\<'T-6}KӰY1°ْ BaJ+R²% 9HI-!:Uƴ^q\VyA^ |qʜwKp(AMD,D= ߼MWR LBi} iW? VmKt6D[4+ ^*+/9wBVOKbw"%Y0|Cb(S5Udݗ͇/s\sV-5$t[&?!+&''.qSϏm+a&~߾dޥ> endobj 73 0 obj <>stream xUQ}LSw}{R؊{&"2 "]?07ն%2(EaX2ֶ[(@G2j[$9e2,:no {NN9KSaMӚ-yy/,p1ƅF#t$$nhݞ :!`,J QU{3?PX9 }}5`9 0.e $@d\"*BM_řT@H=@MV_K-`lv<XϺs2`}msD&r> endobj 70 0 obj <>stream xuP]HSaʖYMDFP Ԡl詭6g;gȣ.6zsr~]ԕMwNfBE<<FTc|j__׵kύK{QrJ>:cͲXA#Z;:o#ϰ:i"gmK 8ykw8ޅxm-O作3{xDPƒ gw!4yqnu~'HP/6VOLGOCAMZD||r)nW}2ZTn2O d,~`$bRFݮ]_wgD æZϮI3Z`I3󇠭 mgh I73nG"fr '2\y&_oQvya1<ČSs"D,l<0Ps]G=Pi|Fb4mo!GcP"l$.j 'B0Vz8=ֆ C,YbS-ҔdW~!>$ $&M ` tbZD7*(ĀM&T`60k,nF~Y'maEi2bN[8P!]V/f. endstream endobj 194 0 obj 631 endobj 68 0 obj <> endobj 67 0 obj <>stream xVitSei\tt{xFXaDdRhKl͞7ٛ4mB -&ta+R6A::39sq/vƹfs?wy}އMH8}V]dUFɇ99)ɹ\ CpT7}δ@3QDgƼ=⒢b)E-[_Y!T3ba@~7W)J?,/!%BqpcWUUTHb~F^RP^],- 0 YYYfmIMimYbi žIJDZl# ^2+Xh$ oS NTNHL12.LM>?`r2fM6U'8}}9E93`&'\;REHu)A(|zڠ Z !Y&+\Ef_ @,~-{yJ0\pxX(kfOhu }5rL_JRzeYXoJ̸4~]Ngg1plw1hn҄"/W_[g?:mE|Dag>;F؉_'/ ׷~5='}9[J/w,H$&Wyͱy\ɣ5,L5c![KNA5&I01&Hcf S!icd~:֩.YG5Vѩ94Cn l.'6P2<ۖ:n6EiY^a^I%wH=ӗQ=4 yMNwXwOhPfv4 H;G?Aѣf+*ګ@{t]u_ -hJO(x&CnOvWd; _m4^<h 9 zUEi5[aVP/@R-a5Nc!/KُBz<M?[kԸMN LkЀEC&2Bd5[꘴CuBJpˠ"1IDTp0SmRqbm)I2[e<'6: E'VƆFԌ)gL:LD+v_v{. Bgp  ,&PJҶǦܨdW^He3L(eOuG>E aMY L?1YRG9rJNN!gWos^Q*T4*bW&Iޢ׾gHwfթ8bPިS{-0|]|4X gZUڊq-ܵOFɩ3W<@Oϒ !|}<k9W;o$:[8=kvJҺ]At`Zi逡#@O,d;Hb&M,kr2vC2[V.C1k%^|c7r 7)s5h<fL0?^0Kڧ 4:q'N(;\M 4 <ЩZ#Q)hi$)2ڽURņa4HABϱ2 33YdZVkt8.)mjGx2а- E' 2R^-U9ONg7I:> /?^Mc&#FFaZ}Lo)קS&,=8mr1  endstream endobj 195 0 obj 2673 endobj 65 0 obj <> endobj 64 0 obj <>stream xUP]HSa>Ύ gF2Ћ @]IS1vrΦs;iZAn"RA+. 6ыyM,m̖{MeS/CP*} Kڥ]EΞé ·1<_X5{vH\*|kufpV4^׹V-3|\/o?6{݂_Ew^ďJ^VrV;qOSac/: k#'! L]@|`t-}=)ٳ?enb֘(2!Z0XdtۢYvTX .vs(vi:޳[׊r'm+.ޡ {㥗M,ۥ)h,:&qbޅ7<>HT'd0lH'*₢Sw\m<ߠtt:_zH0x@`I(ݔ bзY'/QыR(K cE`WMkl }gS3hђ,3d :G +Ҩ,Gl3!]2P$P # 9,fXHbH0[^?Vk^}JZ/YhZE endstream endobj 196 0 obj 670 endobj 62 0 obj <> endobj 61 0 obj <>stream xTkLWNRݶFm(U XAY.oG[AXyCQK mY >VLj}k;ڴK?4N=wCw7@ךu1qKc¢%?bn:pc88C8'(pĊ0:mIӈ}CB*,%I)NҤII ǩRdRMx\.JltjJj8ZY*>Jf4JȴrV`9+@8րH9X J I` _|@pn~CgZ2@'vs^_hA-u+X\:N?J8Q)L5*ͰVt ے'4mmmp(Em'-X$ ǎ"G K,W Cn@rM ߋw `:,}g"CD,NΜ;GTF]D'wԻ~{ߚ}(J۾fκRDoq !a1n?[O^ˌ`aւ濖C]jO'M^H={MA ,a/En/\|ҧ{{e~ោ0ħt:j<+>Dqx( 1y#o{w%Ņ%"6&4È3_\:EO!hza͂Z$>&@GN)j?`vVv7ZO/K>4Y+ܪ~E u* (+*@rC 7V-ejo0v'կ4V :*vp3el[RDyot/YPEszhTehʙŚ^ %T]ێ_%T,$@6SZ[VB*f UcK/kȳO<_)ZP~Cwܻ'1s+@R^2PsP6}YE3=|hߥrA. tcB^l㖧zhLπl|U >=&&PGs,òY738Ϡ_`&a;v'_4Hܡ CµvޔȀTW~>bn3[Lap+\[kLֶj4nNf_E0@> endobj 53 0 obj <>stream xWytSם~BX<6'0UIْbRt@0ޱl&/KO'ZʲdˋlLҦS&s6=WL& tr8ɜӹ}?1w£ܻ-湨]"ׇDO /=u*6\Kо'P۲31J"-egGZqNe&'DJHNIrfj~ڈ_B+" SSf%ɖ"vIRRe9A;s457M%/ck~f"q<袟%hb3CA%D &%8b;xx'vb7Ed'|wb.}8%Bѹܑ0Qؠ`ʼDǤo ZdY{=O?'KD/1-񣿄5'5gBGqH n4I $)lNR-mP#NRg4ATڡF kM4[*JIr6r(1.nA w3v'{B8?Yh3XȺ GD+SM)89&D]ݟv_U xȁgrtjTUE ]<*p/<Rȉ'۽ I3Y-&3{w fFƽEB]osJjA dbGNPd,3PLid eaЭ"y6>F= rUGi*bYh 9rCAAo 0ATap >~1Uz/ Gʼz:>Ի r?Vz?4vdRkQK⁌O49]IYM$ÿFrf꿃A#`_/(#J{/ ^a&6Db G&SӞ7lFWv ~:?V4:4f%6SE˃}X鿛fc5^75e9@e1N ŀagX3qu _]Ch)z8¤̞{uȱփqaY e2?84-P -[jZ^0MPL⾩=jј N`x<;l]U>]},L:%y}ScMU[e (J7r?sL'ZP?@^; %Z#mTSrh P#p+U ؘVtΔZP`mh'픵dxhZV;[vCէӽBCo%B{ǥӘ?&[RDgqT"rl%V;=q+.Q *v=yWpWG}0ަ9dksVp O Y$T7ypVDU^).@>XOwfMTIeE8`vYZf;!t<fmAǨ:u}#}ǻ⣖JYukIkOG!י^̶gjuRPZUO}N= 9^NA=!<ͯfԥEʤ`[YN6*%RzAkP&tz-7 +*h /YXsjJ-x+ROE~F0*kWxxq$Jtij K$PdC@#ugRS_{DJȄ\@-Y/d;w<j~58VvVG" 9iߠcLzFMc[-*:<4#,F% Tbr+k+HT69륲T趱 B_6go43˱+f΀Jjz7< |zaUYU,u1x,`VsCkю\a)<w`$o(cőBj(mԟT* IOUR֦b{&BƯPD%alww_eOT5ccXBVj`TXBw& QfmˈΡaHJ˔`rxOG?bXQM\&W}4(%sqx=%$s|C:H7KOGRS_lڊ?*f@C*/U 5Lt8S"!\aXk:Cy/MhLu?HɊ(K+J a|6qn[[\CP`*Ue8蝟UG*teF%2F_[-}kޠ-̨.?P`6oҦe2G3'E1-F;ɤmքo2Rݨ%n)b(Gc]9 2J%NrU'* ŚhSFJU1/3e,0kv[3TDܢiP`^ʞzwcH䙹0%zpXՒt#&{giuoynMtn>58fp d4A}h5.!=6ҽwЗ{8=Lz62;г֖*= 4/)q *EJ{8^6Q#֤VNQC.(E?9{EayL('M.-Ês']ӕNtwEyE6Mĵ:QYq/Z0EϢǢE?fS endstream endobj 198 0 obj 3560 endobj 130 0 obj <> endobj 129 0 obj <>stream xcd`ab`dd t qt v5 f!CyIϠ+)]3#ws~AeQfzFcnjQfrbobIFjnb ZRQZZTҵ4'яAe|.YyA~?Nξk|u3yx? endstream endobj 199 0 obj 381 endobj 95 0 obj <> endobj 94 0 obj <>stream xcd`ab`dd  tv44f!CySO^+ }n]_'9(3=DAYS\17(391O7$#57QOL-SpQ(VJ-N-*KM霟[PZZZ t";|F|Vtɸ׏SM{ͱrr mYYN}- S#?sJWw]w{WGGo?k%S:m9Hf[=qέ9Ӻ{{8;&55uUef͡V=w\k4,{V.3oi/=ĩP~Jݽ--MmeroGWwgH;w*.X&ʕۉN\;eڞ3;f-X,; 7{e|GlzJ7Gfֲ>%W˦M;q*r\,y8La`nu̪ endstream endobj 200 0 obj 507 endobj 92 0 obj <> endobj 91 0 obj <>stream xU{PSW!u"-{)ƪ[ٙZa" y1yG@4C|Uj]ú֞0FWv̙{9~A OZaS7-[Z# sx[p[XD_G >Re~nJ8?qpY\\0^&QEraH'TD*LS%%xT)cpdDWDH(RND\xݓWo.bH"4"L!҉"F L$ǼoGQ\M!yJ3^jaς/?d@툘nI#=(=@ #%snMh`E.]bIʟ J0P w-l/mؕH_@_iB_kvax4Ns-atVUTqG~/3o<(Aӛ^[gKVj˯?F1( MW ^6̯8KO Qވ~g 1E54ѷHb΂L{Ѱr>^胋Ga>VweueF@.3@SPg;.X Dі7t(LySc))gu.4|;^:qE$^S&ۙ΂ s_wg}"xaa)=RSx(y(TN;0W1}6}A; endstream endobj 201 0 obj 1965 endobj 98 0 obj <> endobj 97 0 obj <>stream x` NFCVJK+CMMI7ցJ30-FKZCopyright (C) 1997 American Mathematical Society. All Rights ReservedCMMI7Computer ModernkLMUP_O癧b,w8r}v}!ʆy|zD҄tW|Dk,~}x`pDZp aË`i|u|sVRWb\Xacjlbzw?`  7 bq endstream endobj 202 0 obj 426 endobj 89 0 obj <> endobj 88 0 obj <>stream xcd`ab`ddwq v 2~H3a!˼nj:n"]3#Ws~AeQfzFcnjQfrbobIFjnb ZRQZZT9?$H7?%(AAd{ g,ߧEc߭=}j-uzq6vv)7p/Mֽǒ3~WOe=r>]I싻vZg{Vw\j:ܞ}WuXű>]{y?^2{T߉sb1ù|2ϭ<  endstream endobj 203 0 obj 406 endobj 86 0 obj <> endobj 85 0 obj <>stream xcd`ab`ddqvw v54f!CyIϠ+~,']3#Os~AeQfzFcnjQfrbobIFjnb ZRQZZTӵ4'/A0gdbA =mpwE԰w5WFtq4TuUW+]m{jCzt.˟S'tLꖜ={݇1qN5ݕ*+vO?5;Y߇~4.V TX3syS;;k9~"ݽ S%s}'Ytθvݏu?^2dܟ8šu&M8ir\)Ol{E;;9t;i:fr\,y8Mb^ endstream endobj 204 0 obj 566 endobj 173 0 obj <> endobj 172 0 obj <>stream xcd`ab`dd  vuv64KLf!Cyo?CYW8%QwSfFF7ʢ gMCKKsԢ<Ē 'G!8?93RO1'G!X!(8,5js~nAiIjo~JjQss!C Cح k3VTPG=dqd ~-{vQLGG~ζ﬑Gf r,$%P*O?&/cVtNfp~T%l~Hnwݓ[a;`5wOxGz{k{:fts[ oۗYC{9~fUw&Nm?b7OvMtAkJj]QwMw^wYVD#973/6uY^+#9?7jbcOw^ήnuΛlҸi| /<4U\Xp.sy/ h endstream endobj 205 0 obj 582 endobj 139 0 obj <> endobj 138 0 obj <>stream xU_LSw v8u}p{o5IQ1KE]ȢQrd =TJzblFg$&K-suHN KŜ/Dzt8î;rj ZK}ߦPz&IZf>~xۺbI_QL+sQ:괫uնJSkw+ӳ{ʭ/:,ꪗ/F=Ƚ6 xS?/#]M{d{ ċ ol&U"4~b%_q]m-2PegQpk<uc)Gp,MA1?mA8,6w9)o{ҬP(oEԧh$f6?550:N6Q4CNg'N C}?24֣#`Yz%@VZMمޖ`⑐Lhƙ 1h)z8!Di*xeI!zPM҄ޫB}}"2NФU ޶TOJ+|#J/ 5@KTU#\?y;d>ٳ$_|jˌ_ Ǽm ʄ{7z/=L$?}PC++ t. zG|7>۰yϦ-etXBk?N d'sϓrr53|'ys endstream endobj 206 0 obj 793 endobj 136 0 obj <> endobj 135 0 obj <>stream xcd`ab`dd pv 4 f!C+X~On,݀3#ws~AeQfzFcnjQfrbobIFjnb ZRQZZT9?$H7?%(10122ig>{~1?7}/{ҢZ|lE݅Kg/i4\/Oa`N endstream endobj 207 0 obj 229 endobj 133 0 obj <> endobj 132 0 obj <>stream x_H6$XB@1,#i5526ކ6ۺmNV":DDO=C`S=~HAQJ{Y)I6Tx eO%%* 1^m-hGm!NK竪*Z-eҨ:TZԔVi } JCYrh]VLO^kZ(A)AA -H3"!DM6JޒoF障p*=Bg1z  nvsL<,q o x{xBEL9@hѷ4agżP* /]od]8fH1GķمEizFOX3++ɗA⬍ k AVB(䝀 P,'ׄ"x}%7*%Gbt@s -tQ鐃٥`inw=].+cbяtfA/^ܟتN&&'̓x WX $8> endstream endobj 208 0 obj 657 endobj 99 0 obj <> endobj 34 0 obj <> endobj 31 0 obj <> endobj 90 0 obj <> endobj 87 0 obj <> endobj 28 0 obj <> endobj 75 0 obj <> endobj 25 0 obj <> endobj 72 0 obj <> endobj 22 0 obj <> endobj 69 0 obj <> endobj 66 0 obj <> endobj 63 0 obj <> endobj 174 0 obj <> endobj 55 0 obj <> endobj 46 0 obj <> endobj 140 0 obj <> endobj 137 0 obj <> endobj 43 0 obj <> endobj 52 0 obj <> endobj 134 0 obj <> endobj 49 0 obj <> endobj 131 0 obj <> endobj 40 0 obj <> endobj 96 0 obj <> endobj 37 0 obj <> endobj 93 0 obj <> endobj 16 0 obj << /Title(Acknowledgments) /Dest/section.7 /Parent 6 0 R /Prev 15 0 R >> endobj 5 0 obj <> /Doc-Start<> /section.1<> /subsection.1.1<> /page.2<> /subsection.1.2<> /subsection.1.3<> /page.3<> /section.2<> /theo.2.1<> /theo.2.2<> /theo.2.3<> /theo.2.4<> /page.4<> /section.3<> /Def.3.1<> /theo.3.1<> /Def.3.2<> /Def.3.3<> /theo.3.2<> /Def.3.4<> /theo.3.3<> /Hfootnote.1<> /page.5<> /theo.3.4<> /theo.3.5<> /section.4<> /Def.4.1<> /Def.4.2<> /theo.4.1<> /theo.4.2<> /page.6<> /theo.4.3<> /theo.4.4<> /theo.4.5<> /theo.4.6<> /theo.4.7<> /theo.4.8<> /theo.4.9<> /page.7<> /section.5<> /Def.5.1<> /Def.5.2<> /Def.5.3<> /Def.5.4<> /Def.5.5<> /theo.5.1<> /theo.5.2<> /page.8<> /theo.5.3<> /Def.5.6<> /theo.5.4<> /page.9<> /section.6<> /theo.6.1<> /theo.6.2<> /page.10<> /Def.6.1<> /theo.6.3<> /theo.6.4<> /theo.6.5<> /page.11<> /section.7<> /section*.1<> /cite.lehmer<>>>endobj 2 0 obj <>endobj xref 0 209 0000000000 65535 f 0000044161 00000 n 0000129638 00000 n 0000043967 00000 n 0000041977 00000 n 0000122604 00000 n 0000044104 00000 n 0000044578 00000 n 0000044309 00000 n 0000044401 00000 n 0000044496 00000 n 0000044711 00000 n 0000044811 00000 n 0000044926 00000 n 0000045032 00000 n 0000045136 00000 n 0000122515 00000 n 0000045247 00000 n 0000000015 00000 n 0000002413 00000 n 0000052482 00000 n 0000052238 00000 n 0000114994 00000 n 0000064732 00000 n 0000064459 00000 n 0000114039 00000 n 0000063314 00000 n 0000063092 00000 n 0000113349 00000 n 0000059974 00000 n 0000059694 00000 n 0000112449 00000 n 0000059007 00000 n 0000058788 00000 n 0000112125 00000 n 0000054682 00000 n 0000054363 00000 n 0000121358 00000 n 0000082977 00000 n 0000082488 00000 n 0000120531 00000 n 0000072918 00000 n 0000072653 00000 n 0000118690 00000 n 0000067877 00000 n 0000067510 00000 n 0000117786 00000 n 0000077414 00000 n 0000077090 00000 n 0000119820 00000 n 0000075270 00000 n 0000074897 00000 n 0000119273 00000 n 0000098473 00000 n 0000098188 00000 n 0000117211 00000 n 0000045304 00000 n 0000045336 00000 n 0000042138 00000 n 0000002434 00000 n 0000005297 00000 n 0000096669 00000 n 0000096409 00000 n 0000116454 00000 n 0000095631 00000 n 0000095320 00000 n 0000116134 00000 n 0000092538 00000 n 0000092281 00000 n 0000115568 00000 n 0000091542 00000 n 0000091309 00000 n 0000114637 00000 n 0000090193 00000 n 0000089934 00000 n 0000113692 00000 n 0000045489 00000 n 0000042282 00000 n 0000005318 00000 n 0000009463 00000 n 0000045631 00000 n 0000042426 00000 n 0000009484 00000 n 0000013804 00000 n 0000045751 00000 n 0000107681 00000 n 0000107467 00000 n 0000113163 00000 n 0000106953 00000 n 0000106737 00000 n 0000113023 00000 n 0000103919 00000 n 0000103673 00000 n 0000121938 00000 n 0000103058 00000 n 0000102845 00000 n 0000121132 00000 n 0000106203 00000 n 0000105993 00000 n 0000111986 00000 n 0000045885 00000 n 0000042586 00000 n 0000013825 00000 n 0000017737 00000 n 0000046072 00000 n 0000046204 00000 n 0000046337 00000 n 0000046470 00000 n 0000046603 00000 n 0000046735 00000 n 0000046868 00000 n 0000042789 00000 n 0000017759 00000 n 0000022028 00000 n 0000047011 00000 n 0000047142 00000 n 0000047274 00000 n 0000047407 00000 n 0000047540 00000 n 0000047672 00000 n 0000047805 00000 n 0000047937 00000 n 0000048070 00000 n 0000048203 00000 n 0000048335 00000 n 0000048468 00000 n 0000043032 00000 n 0000022050 00000 n 0000025086 00000 n 0000102355 00000 n 0000102142 00000 n 0000120391 00000 n 0000111220 00000 n 0000111002 00000 n 0000119665 00000 n 0000110664 00000 n 0000110424 00000 n 0000118552 00000 n 0000109522 00000 n 0000109270 00000 n 0000118369 00000 n 0000048600 00000 n 0000043179 00000 n 0000025108 00000 n 0000027843 00000 n 0000048806 00000 n 0000048937 00000 n 0000043342 00000 n 0000027865 00000 n 0000033398 00000 n 0000049086 00000 n 0000049219 00000 n 0000049351 00000 n 0000049483 00000 n 0000049616 00000 n 0000049749 00000 n 0000049882 00000 n 0000050015 00000 n 0000050147 00000 n 0000043561 00000 n 0000033420 00000 n 0000038720 00000 n 0000050340 00000 n 0000050473 00000 n 0000050605 00000 n 0000050738 00000 n 0000050871 00000 n 0000051004 00000 n 0000051137 00000 n 0000043764 00000 n 0000038742 00000 n 0000041955 00000 n 0000108579 00000 n 0000108355 00000 n 0000116881 00000 n 0000051295 00000 n 0000051429 00000 n 0000051563 00000 n 0000051727 00000 n 0000051858 00000 n 0000051990 00000 n 0000052126 00000 n 0000054341 00000 n 0000058766 00000 n 0000059673 00000 n 0000063070 00000 n 0000064437 00000 n 0000067488 00000 n 0000072631 00000 n 0000074875 00000 n 0000077068 00000 n 0000082466 00000 n 0000089912 00000 n 0000091287 00000 n 0000092260 00000 n 0000095298 00000 n 0000096388 00000 n 0000098166 00000 n 0000102120 00000 n 0000102824 00000 n 0000103652 00000 n 0000105971 00000 n 0000106716 00000 n 0000107446 00000 n 0000108334 00000 n 0000109249 00000 n 0000110403 00000 n 0000110981 00000 n 0000111965 00000 n trailer << /Size 209 /Root 1 0 R /Info 2 0 R >> startxref 129776 %%EOF coqprime-8.18/src/Coqprime/PrimalityTest/PGroup.v000066400000000000000000000276631451023060700220700ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) (********************************************************************** PGroup.v Build the group of pairs modulo needed for the theorem of lucas lehmer Definition: PGroup **********************************************************************) Require Import ZArith. Require Import Znumtheory. Require Import Tactic. Require Import Wf_nat. Require Import ListAux. Require Import UList. Require Import FGroup. Require Import EGroup. Require Import IGroup. Open Scope Z_scope. Definition base := 3. (************************************** Equality is decidable on pairs **************************************) Definition P_dec: forall p q: Z * Z, {p = q} + {p <> q}. intros p1 q1; case p1; case q1; intros z t x y; case (Z.eq_dec x z); intros H1. case (Z.eq_dec y t); intros H2. left; eq_tac; auto. right; contradict H2; injection H2; auto. right; contradict H1; injection H1; auto. Defined. (************************************** Addition of two pairs **************************************) Definition pplus (p q: Z * Z) := let (x ,y) := p in let (z,t) := q in (x + z, y + t). (************************************** Properties of addition **************************************) Theorem pplus_assoc: forall p q r, (pplus p (pplus q r)) = (pplus (pplus p q) r). intros p q r; case p; case q; case r; intros r1 r2 q1 q2 p1 p2; unfold pplus. eq_tac; ring. Qed. Theorem pplus_comm: forall p q, (pplus p q) = (pplus q p). intros p q; case p; case q; intros q1 q2 p1 p2; unfold pplus. eq_tac; ring. Qed. (************************************** Multiplication of two pairs **************************************) Definition pmult (p q: Z * Z) := let (x ,y) := p in let (z,t) := q in (x * z + base * y * t, x * t + y * z). (************************************** Properties of multiplication **************************************) Theorem pmult_assoc: forall p q r, (pmult p (pmult q r)) = (pmult (pmult p q) r). intros p q r; case p; case q; case r; intros r1 r2 q1 q2 p1 p2; unfold pmult. eq_tac; ring. Qed. Theorem pmult_0_l: forall p, (pmult (0, 0) p) = (0, 0). intros p; case p; intros x y; unfold pmult; eq_tac; ring. Qed. Theorem pmult_0_r: forall p, (pmult p (0, 0)) = (0, 0). intros p; case p; intros x y; unfold pmult; eq_tac; ring. Qed. Theorem pmult_1_l: forall p, (pmult (1, 0) p) = p. intros p; case p; intros x y; unfold pmult; eq_tac; ring. Qed. Theorem pmult_1_r: forall p, (pmult p (1, 0)) = p. intros p; case p; intros x y; unfold pmult; eq_tac; ring. Qed. Theorem pmult_comm: forall p q, (pmult p q) = (pmult q p). intros p q; case p; case q; intros q1 q2 p1 p2; unfold pmult. eq_tac; ring. Qed. Theorem pplus_pmult_dist_l: forall p q r, (pmult p (pplus q r)) = (pplus (pmult p q) (pmult p r)). intros p q r; case p; case q; case r; intros r1 r2 q1 q2 p1 p2; unfold pplus, pmult. eq_tac; ring. Qed. Theorem pplus_pmult_dist_r: forall p q r, (pmult (pplus q r) p) = (pplus (pmult q p) (pmult r p)). intros p q r; case p; case q; case r; intros r1 r2 q1 q2 p1 p2; unfold pplus, pmult. eq_tac; ring. Qed. (************************************** In this section we create the group PGroup of inversible elements {(p, q) | 0 <= p < m /\ 0 <= q < m} **************************************) Section Mod. Variable m : Z. Hypothesis m_pos: 1 < m. (************************************** mkLine creates {(a, p) | 0 <= p < n} **************************************) Fixpoint mkLine (a: Z) (n: nat) {struct n} : list (Z * Z) := (a, Z_of_nat n) :: match n with O => nil | (S n1) => mkLine a n1 end. (************************************** Some properties of mkLine **************************************) Theorem mkLine_length: forall a n, length (mkLine a n) = (n + 1)%nat. intros a n; elim n; simpl; auto. Qed. Theorem mkLine_in: forall a n p, 0 <= p <= Z_of_nat n -> (In (a, p) (mkLine a n)). intros a n; elim n. simpl; auto with zarith. intros p (H1, H2); replace p with 0; auto with zarith. intros n1 Rec p (H1, H2). case (Zle_lt_or_eq p (Z_of_nat (S n1))); auto with zarith. rewrite inj_S in H2; auto with zarith. rewrite inj_S; auto with zarith. intros H3; right; apply Rec; auto with zarith. intros H3; subst; simpl; auto. Qed. Theorem in_mkLine: forall a n p, In p (mkLine a n) -> exists q, 0 <= q <= Z_of_nat n /\ p = (a, q). intros a n p; elim n; clear n. simpl; intros [H1 | H1]; exists 0; auto with zarith; case H1. simpl; intros n Rec [H1 | H1]; auto. exists (Z_of_nat (S n)); auto with zarith. case Rec; auto; intros q ((H2, H3), H4); exists q; repeat split. 1, 3: auto with zarith. change (q <= Z_of_nat (S n)). rewrite inj_S; auto with zarith. Qed. Theorem mkLine_ulist: forall a n, ulist (mkLine a n). intros a n; elim n; simpl; auto. intros n1 H; apply ulist_cons; auto. change (~ In (a, Z_of_nat (S n1)) (mkLine a n1)). rewrite inj_S; intros H1. case in_mkLine with (1 := H1); auto with zarith. intros x ((H2, H3), H4); injection H4. intros H5; subst; auto with zarith. Qed. (************************************** mkRect creates the list {(p, q) | 0 <= p < n /\ 0 <= q < m} **************************************) Fixpoint mkRect (n m: nat) {struct n} : list (Z * Z) := (mkLine (Z_of_nat n) m) ++ match n with O => nil | (S n1) => mkRect n1 m end. (************************************** Some properties of mkRect **************************************) Theorem mkRect_length: forall n m, length (mkRect n m) = ((n + 1) * (m + 1))%nat. intros n; elim n; simpl; auto. intros n1; rewrite <- app_nil_end; rewrite mkLine_length; rewrite Nat.add_0_r; auto. intros n1 Rec m1; rewrite length_app; rewrite Rec; rewrite mkLine_length; auto. Qed. Theorem mkRect_in: forall n m p q, 0 <= p <= Z_of_nat n -> 0 <= q <= Z_of_nat m -> (In (p, q) (mkRect n m)). intros n m1; elim n; simpl. intros p q (H1, H2) (H3, H4); replace p with 0; auto with zarith. rewrite <- app_nil_end; apply mkLine_in; auto. intros n1 Rec p q (H1, H2) (H3, H4). case (Zle_lt_or_eq p (Z_of_nat (S n1))); auto with zarith; intros H5. rewrite inj_S in H5; apply in_or_app; auto with zarith. apply in_or_app; left; subst; apply mkLine_in; auto with zarith. Qed. Theorem in_mkRect: forall n m p, In p (mkRect n m) -> exists p1, exists p2, 0 <= p1 <= Z_of_nat n /\ 0 <= p2 <= Z_of_nat m /\ p = (p1, p2). intros n m1 p; elim n; clear n; simpl. rewrite <- app_nil_end; intros H1. case in_mkLine with (1 := H1). intros p2 (H2, H3); exists 0; exists p2; auto with zarith. intros n Rec H1. case in_app_or with (1 := H1); intros H2. case in_mkLine with (1 := H2). intros p2 (H3, H4); exists (Z_of_nat (S n)); exists p2; subst; simpl; auto with zarith. case Rec with (1 := H2); auto. intros p1 (p2, (H3, (H4, H5))); exists p1; exists p2; repeat split. 1, 3-5: auto with zarith. change (p1 <= Z_of_nat (S n)). rewrite inj_S; auto with zarith. Qed. Theorem mkRect_ulist: forall n m, ulist (mkRect n m). intros n; elim n; simpl; auto. intros n1; rewrite <- app_nil_end; apply mkLine_ulist; auto. intros n1 Rec m1; apply ulist_app; auto. apply mkLine_ulist. intros a H1 H2. case in_mkLine with (1 := H1); intros p1 ((H3, H4), H5). case in_mkRect with (1 := H2); intros p2 (p3, ((H6, H7), ((H8, H9), H10))). subst; injection H10; clear H10; intros; subst. contradict H7. change (~ Z_of_nat (S n1) <= Z_of_nat n1). rewrite inj_S; auto with zarith. Qed. (************************************** mL is the list {(p, q) | 0 <= p < m-1 /\ 0 <= q < m - 1} **************************************) Definition mL := mkRect (Z.abs_nat (m - 1)) (Z.abs_nat (m -1)). (************************************** Some properties of mL **************************************) Theorem mL_length : length mL = Z.abs_nat (m * m). unfold mL; rewrite mkRect_length; simpl; apply inj_eq_rev. repeat (rewrite inj_mult || rewrite inj_plus || rewrite inj_Zabs_nat || rewrite Z.abs_eq); simpl. 2-3: auto with zarith. eq_tac; auto with zarith. Qed. Theorem mL_in: forall p q, 0 <= p < m -> 0 <= q < m -> (In (p, q) mL). intros p q (H1, H2) (H3, H4); unfold mL; apply mkRect_in; rewrite inj_Zabs_nat; rewrite Z.abs_eq; auto with zarith. Qed. Theorem in_mL: forall p, In p mL-> exists p1, exists p2, 0 <= p1 < m /\ 0 <= p2 < m /\ p = (p1, p2). unfold mL; intros p H1; case in_mkRect with (1 := H1). repeat (rewrite inj_Zabs_nat || rewrite Z.abs_eq); auto with zarith. intros p1 (p2, ((H2, H3), ((H4, H5), H6))); exists p1; exists p2; repeat split; auto with zarith. Qed. Theorem mL_ulist: ulist mL. unfold mL; apply mkRect_ulist; auto. Qed. (************************************** We define zpmult the multiplication of pairs module m **************************************) Definition zpmult (p q: Z * Z) := let (x ,y) := pmult p q in (Z.modulo x m, Z.modulo y m). (************************************** Some properties of zpmult **************************************) Theorem zpmult_internal: forall p q, (In (zpmult p q) mL). intros p q; unfold zpmult; case (pmult p q); intros z y; apply mL_in; auto with zarith. apply Z_mod_lt; auto with zarith. apply Z_mod_lt; auto with zarith. Qed. Theorem zpmult_assoc: forall p q r, (zpmult p (zpmult q r)) = (zpmult (zpmult p q) r). assert (U: 0 < m); auto with zarith. intros p q r; unfold zpmult. generalize (pmult_assoc p q r). case (pmult p q); intros x1 x2. case (pmult q r); intros y1 y2. case p; case r; unfold pmult. intros z1 z2 t1 t2 H. match goal with H: (?X, ?Y) = (?Z, ?T) |- _ => assert (H1: X = Z); assert (H2: Y = T); try (injection H; simpl; auto; fail); clear H end. eq_tac. generalize (f_equal (fun x => x mod m) H1). repeat rewrite <- Zmult_assoc. repeat (rewrite (fun x => Zplus_mod (t1 * x))); auto. repeat (rewrite (fun x => Zplus_mod (x1 * x))); auto. repeat (rewrite (fun x => Zplus_mod (x1 mod m * x))); auto. repeat (rewrite (Zmult_mod t1)); auto. repeat (rewrite (Zmult_mod x1)); auto. repeat (rewrite (Zmult_mod base)); auto. repeat (rewrite (Zmult_mod t2)); auto. repeat (rewrite (Zmult_mod x2)); auto. repeat (rewrite (Zmult_mod (t2 mod m))); auto. repeat (rewrite (Zmult_mod (x1 mod m))); auto. repeat (rewrite (Zmult_mod (x2 mod m))); auto. repeat (rewrite Zmod_mod); auto. generalize (f_equal (fun x => x mod m) H2). repeat (rewrite (fun x => Zplus_mod (t1 * x))); auto. repeat (rewrite (fun x => Zplus_mod (x1 * x))); auto. repeat (rewrite (fun x => Zplus_mod (x1 mod m * x))); auto. repeat (rewrite (Zmult_mod t1)); auto. repeat (rewrite (Zmult_mod x1)); auto. repeat (rewrite (Zmult_mod t2)); auto. repeat (rewrite (Zmult_mod x2)); auto. repeat (rewrite (Zmult_mod (t2 mod m))); auto. repeat (rewrite (Zmult_mod (x1 mod m))); auto. repeat (rewrite (Zmult_mod (x2 mod m))); auto. repeat (rewrite Zmod_mod); auto. Qed. Theorem zpmult_0_l: forall p, (zpmult (0, 0) p) = (0, 0). intros p; case p; intros x y; unfold zpmult, pmult; simpl. rewrite Zmod_small; auto with zarith. Qed. Theorem zpmult_1_l: forall p, In p mL -> zpmult (1, 0) p = p. intros p H; case in_mL with (1 := H); clear H; intros p1 (p2, ((H1, H2), (H3, H4))); subst. unfold zpmult; rewrite pmult_1_l. repeat rewrite Zmod_small; auto with zarith. Qed. Theorem zpmult_1_r: forall p, In p mL -> zpmult p (1, 0) = p. intros p H; case in_mL with (1 := H); clear H; intros p1 (p2, ((H1, H2), (H3, H4))); subst. unfold zpmult; rewrite pmult_1_r. repeat rewrite Zmod_small; auto with zarith. Qed. Theorem zpmult_comm: forall p q, zpmult p q = zpmult q p. intros p q; unfold zpmult; rewrite pmult_comm; auto. Qed. (************************************** We are now ready to build our group **************************************) Definition PGroup : (FGroup zpmult). apply IGroup with (support := mL) (e:= (1, 0)). exact P_dec. apply mL_ulist. apply mL_in; auto with zarith. intros; apply zpmult_internal. intros; apply zpmult_assoc. exact zpmult_1_l. exact zpmult_1_r. Defined. End Mod. coqprime-8.18/src/Coqprime/PrimalityTest/Pepin.v000066400000000000000000000107761451023060700217240ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) (********************************************************************** Pepin.v Pepin's Test for Fermat Number Definition: PepinTest **********************************************************************) Require Import ZArith. Require Import ZCAux. Require Import Pocklington. Open Scope Z_scope. Definition FermatNumber n := 2^(2^(Z_of_nat n)) + 1. Theorem Fermat_pos: forall n, 1 < FermatNumber n. unfold FermatNumber; intros n. solve [ auto with zarith (* 8.14 *) | (apply Z.le_lt_trans with (2 ^ 2 ^(Z_of_nat n)); auto with zarith; rewrite <- (Zpower_0_r 2); auto with zarith; apply Zpower_le_monotone; try split; auto with zarith)]. Qed. Theorem PepinTest: forall n, let Fn := FermatNumber n in (3 ^ ((Fn - 1) / 2) + 1) mod Fn = 0 -> prime Fn. intros n Fn H. assert (Hn: 1 < Fn). unfold Fn; apply Fermat_pos. apply PocklingtonCorollary1 with (F1 := 2^(2^(Z_of_nat n))) (R1 := 1). 2: auto with zarith. 2: unfold Fn, FermatNumber; auto with zarith. apply Z.lt_le_trans with (2 ^ 1). rewrite Zpower_1_r; auto with zarith. apply Zpower_le_monotone. 2: split. 1-2: auto with zarith. rewrite <- (Zpower_0_r 2); apply Zpower_le_monotone; try split; auto with zarith. unfold Fn, FermatNumber. assert (H1: 2 <= 2 ^ 2 ^ Z_of_nat n). pattern 2 at 1; rewrite <- (Zpower_1_r 2) by auto with zarith. apply Zpower_le_monotone; split. auto with zarith. rewrite <- (Zpower_0_r 2); apply Zpower_le_monotone; try split; auto with zarith. apply Z.lt_le_trans with (2 * 2 ^2 ^Z_of_nat n). assert (tmp: forall p, 2 * p = p + p); auto with zarith. apply Zmult_le_compat_r; auto with zarith. assert (Hd: (2 | Fn - 1)). exists (2 ^ (2^(Z_of_nat n) - 1)). pattern 2 at 3; rewrite <- (Zpower_1_r 2). rewrite <- Zpower_exp. 3: auto with zarith. assert (tmp: forall p, p = (p - 1) +1) by auto with zarith; rewrite <- tmp. unfold Fn, FermatNumber; ring. assert (0 < 2 ^ Z_of_nat n); auto with zarith. intros p Hp Hp1; exists 3; split. auto with zarith. split. rewrite (Zdivide_Zdiv_eq 2 (Fn -1)) by auto with zarith. rewrite Zmult_comm. rewrite Zpower_mult. 3: auto with zarith. rewrite Zpower_mod by auto with zarith. assert (tmp: forall p, p = (p + 1) -1) by auto with zarith; rewrite (fun x => (tmp (3 ^ x))). rewrite Zminus_mod by auto with zarith. rewrite H. rewrite (Zmod_small 1) by auto with zarith. rewrite <- Zpower_mod by auto with zarith. rewrite Zmod_small. auto with zarith. simpl; unfold Zpower_pos; simpl; auto with zarith. apply Z_div_pos; auto with zarith. apply Zis_gcd_gcd. auto with zarith. apply Zis_gcd_intro. 1-2: auto with zarith. intros x HD1 HD2. assert (Hd1: p = 2). apply prime_div_Zpower_prime with (4 := Hp1). 1-2: auto with zarith. apply prime_2. assert (Hd2: (x | 2)). replace 2 with ((3 ^ ((Fn - 1) / 2) + 1) - (3 ^ ((Fn - 1) / 2) - 1)) by auto with zarith. apply Zdivide_minus_l; auto. apply Z.divide_trans with (1 := HD2). apply Zmod_divide; auto with zarith. rewrite <- Hd1; auto. replace 1 with (Fn - (Fn - 1)) by auto with zarith. apply Zdivide_minus_l; auto. apply Z.divide_trans with (1 := Hd2); auto. Qed. (* An optimized version with Zpow_mod *) Definition pepin_test n := let Fn := FermatNumber n in if Z.eq_dec (Zpow_mod 3 ((Fn - 1) / 2) Fn) (Fn - 1) then true else false. Theorem PepinTestOp: forall n, pepin_test n = true -> prime (FermatNumber n). intros n; unfold pepin_test. match goal with |- context[if ?X then _ else _] => case X end; try (intros; discriminate). intros H1 _; apply PepinTest. generalize (Fermat_pos n); intros H2. rewrite Zplus_mod; auto with zarith. rewrite <- Zpow_mod_Zpower_correct; auto with zarith. rewrite H1. rewrite (Zmod_small 1); auto with zarith. replace (FermatNumber n - 1 + 1) with (FermatNumber n); auto with zarith. apply Zdivide_mod; auto with zarith. apply Z_div_pos; auto with zarith. Qed. Theorem prime5: prime 5. exact (PepinTestOp 1 (refl_equal _)). Qed. Theorem prime17: prime 17. exact (PepinTestOp 2 (refl_equal _)). Qed. Theorem prime257: prime 257. exact (PepinTestOp 3 (refl_equal _)). Qed. Theorem prime65537: prime 65537. exact (PepinTestOp 4 (refl_equal _)). Qed. (* Too tough !! Theorem prime4294967297: prime 4294967297. refine (PepinTestOp 5 (refl_equal _)). Qed. *) coqprime-8.18/src/Coqprime/PrimalityTest/Pocklington.v000066400000000000000000000267531451023060700231420ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Require Import ZArith. Require Export Znumtheory. Require Import Tactic. Require Import ZCAux. Require Import Zp. Require Import FGroup. Require Import EGroup. Require Import Euler. Open Scope Z_scope. Theorem Pocklington: forall N F1 R1, 1 < F1 -> 0 < R1 -> N - 1 = F1 * R1 -> (forall p, prime p -> (p | F1) -> exists a, 1 < a /\ a^(N - 1) mod N = 1 /\ Z.gcd (a ^ ((N - 1)/ p) - 1) N = 1) -> forall n, prime n -> (n | N) -> n mod F1 = 1. intros N F1 R1 HF1 HR1 Neq Rec n Hn H. assert (HN: 1 < N). cut (0 < N - 1). auto with zarith. rewrite Neq. apply Z.lt_le_trans with (1* R1); auto with zarith. assert (Hn1: 1 < n). apply Z.lt_le_trans with 2; try apply prime_ge_2; auto with zarith. assert (H1: (F1 | n - 1)). 2: rewrite <- (Zmod_small 1 F1) by auto with zarith. 2: case H1; intros k H1'. 2: replace n with (1 + (n - 1)) by auto with zarith. 2: rewrite H1'; apply Z_mod_plus; auto with zarith. apply Zdivide_Zpower. auto with zarith. intros p i Hp Hi HiF1. case (Rec p Hp). apply Z.divide_trans with (2 := HiF1). apply Zpower_divide; auto with zarith. intros a (Ha1, (Ha2, Ha3)). assert (HNn: a ^ (N - 1) mod n = 1). apply Zdivide_mod_minus. auto with zarith. apply Z.divide_trans with (1 := H). apply Zmod_divide_minus; auto with zarith. assert (~(n | a)). intros H1; absurd (0 = 1). auto with zarith. rewrite <- HNn. apply sym_equal; apply Zdivide_mod. apply Z.divide_trans with (1 := H1); apply Zpower_divide; auto with zarith. assert (Hr: rel_prime a n). apply rel_prime_sym; apply prime_rel_prime; auto. assert (Hz: 0 < Zorder a n). apply Zorder_power_pos; auto. apply Z.divide_trans with (Zorder a n). apply prime_divide_Zpower_Zdiv with (N - 1). 1-2: auto with zarith. apply Zorder_div_power; auto with zarith. intros H1; absurd (1 < n); auto; apply Zle_not_lt; apply Zdivide_le. 1-2: auto with zarith. rewrite <- Ha3; apply Zdivide_Zgcd. 2: auto with zarith. apply Zmod_divide_minus. auto with zarith. case H1; intros t Ht; rewrite Ht. assert (Ht1: 0 <= t). apply Zmult_le_reg_r with (Zorder a n). auto with zarith. rewrite Zmult_0_l; rewrite <- Ht. apply Z.ge_le; apply Z_div_ge0. 2: auto with zarith. apply Z.lt_gt; apply Z.lt_le_trans with 2; try apply prime_ge_2; auto with zarith. rewrite Zmult_comm. rewrite Zpower_mult by auto with zarith. rewrite Zpower_mod by auto with zarith. rewrite Zorder_power_is_1 by auto with zarith. rewrite Zpower_1_l by auto with zarith. apply Zmod_small; auto with zarith. apply Z.divide_trans with (1:= HiF1); rewrite Neq; apply Zdivide_factor_r. apply Zorder_div; auto. Qed. Theorem PocklingtonCorollary1: forall N F1 R1, 1 < F1 -> 0 < R1 -> N - 1 = F1 * R1 -> N < F1 * F1 -> (forall p, prime p -> (p | F1) -> exists a, 1 < a /\ a^(N - 1) mod N = 1 /\ Z.gcd (a ^ ((N - 1)/ p) - 1) N = 1) -> prime N. intros N F1 R1 H H1 H2 H3 H4; case (prime_dec N); intros H5; auto. assert (HN: 1 < N). cut (0 < N - 1). auto with zarith. rewrite H2. apply Z.lt_le_trans with (1* R1); auto with zarith. case Zdivide_div_prime_le_square with (2:= H5); auto with zarith. intros n (Hn, (Hn1, Hn2)). assert (Hn3: 0 <= n). apply Z.le_trans with 2; try apply prime_ge_2; auto with zarith. absurd (n = 1). intros H6; contradict Hn; subst; apply not_prime_1. rewrite <- (Zmod_small n F1); try split; auto. apply Pocklington with (R1 := R1) (4 := H4); auto. apply Zlt_square_mult_inv; auto with zarith. Qed. Theorem PocklingtonCorollary2: forall N F1 R1, 1 < F1 -> 0 < R1 -> N - 1 = F1 * R1 -> (forall p, prime p -> (p | F1) -> exists a, 1 < a /\ a^(N - 1) mod N = 1 /\ Z.gcd (a ^ ((N - 1)/ p) - 1) N = 1) -> forall n, 0 <= n -> (n | N) -> n mod F1 = 1. intros N F1 R1 H1 H2 H3 H4 n H5; pattern n; apply prime_induction; auto. assert (HN: 1 < N). cut (0 < N - 1). auto with zarith. rewrite H3. apply Z.lt_le_trans with (1* R1); auto with zarith. intros (u, Hu); contradict HN; subst; rewrite Zmult_0_r; auto with zarith. intro H6; rewrite Zmod_small; auto with zarith. intros p q Hp Hp1 Hp2; rewrite Zmult_mod; auto with zarith. rewrite Pocklington with (n := p) (R1 := R1) (4 := H4); auto. rewrite Hp1. rewrite Zmult_1_r; rewrite Zmod_small; auto with zarith. apply Z.divide_trans with (2 := Hp2); apply Zdivide_factor_l. apply Z.divide_trans with (2 := Hp2); apply Zdivide_factor_r; auto. Qed. Definition isSquare x := exists y, x = y * y. Theorem PocklingtonExtra: forall N F1 R1, 1 < F1 -> 0 < R1 -> N - 1 = F1 * R1 -> Zeven F1 -> Zodd R1 -> (forall p, prime p -> (p | F1) -> exists a, 1 < a /\ a^(N - 1) mod N = 1 /\ Z.gcd (a ^ ((N - 1)/ p) - 1) N = 1) -> forall m, 1 <= m -> (forall l, 1 <= l < m -> ~((l * F1 + 1) | N)) -> let s := (R1 / (2 * F1)) in let r := (R1 mod (2 * F1)) in N < (m * F1 + 1) * (2 * F1 * F1 + (r - m) * F1 + 1) -> (s = 0 \/ ~ isSquare (r * r - 8 * s)) -> prime N. intros N F1 R1 H1 H2 H3 OF1 ER1 H4 m H5 H6 s r H7 H8. case (prime_dec N). auto. intros H9. assert (HN: 1 < N). cut (0 < N - 1). auto with zarith. rewrite H3. apply Z.lt_le_trans with (1* R1); auto with zarith. case Zdivide_div_prime_le_square with N. 1-2: auto. intros X (Hx1, (Hx2, Hx3)). assert (Hx0: 1 < X). apply Z.lt_le_trans with 2; try apply prime_ge_2; auto with zarith. pose (c := (X / F1)). assert(Hc1: 0 <= c). apply Z.ge_le; unfold c; apply Z_div_ge0; auto with zarith. assert (Hc2: X = c * F1 + 1). rewrite (Z_div_mod_eq_full X F1). eq_tac. rewrite (Zmult_comm F1); auto. apply PocklingtonCorollary2 with (R1 := R1) (4 := H4); auto with zarith. case Zle_lt_or_eq with (1 := Hc1); clear Hc1; intros Hc1. 2: contradict Hx0; rewrite Hc2; try rewrite <- Hc1; auto with zarith. case (Zle_or_lt m c); intros Hc3. 2: case Zle_lt_or_eq with (1 := H5); clear H5; intros H5. 2: case (H6 c); auto with zarith; rewrite <- Hc2; auto. 2: contradict Hc3; rewrite <- H5; auto with zarith. pose (d := ((N / X) / F1)). assert(Hd0: 0 <= N / X) by (apply Z_div_pos; auto with zarith). (* apply Z.ge_le; unfold d; repeat apply Z_div_ge0; auto with zarith. *) assert(Hd1: 0 <= d). apply Z.ge_le; unfold d; repeat apply Z_div_ge0; auto with zarith. assert (Hd2: N / X = d * F1 + 1). rewrite (Z_div_mod_eq_full (N / X) F1). eq_tac. rewrite (Zmult_comm F1); auto. apply PocklingtonCorollary2 with (R1 := R1) (4 := H4). 1-4: auto with zarith. exists X. apply Zdivide_Zdiv_eq; auto with zarith. case Zle_lt_or_eq with (1 := Hd0); clear Hd0; intros Hd0. 2: contradict HN; rewrite (Zdivide_Zdiv_eq X N) by auto with zarith. 2: rewrite <- Hd0; auto with zarith. case (Zle_lt_or_eq 1 (N / X)); auto with zarith; clear Hd0; intros Hd0. 2: contradict H9; rewrite (Zdivide_Zdiv_eq X N) by auto with zarith. 2: rewrite <- Hd0; rewrite Zmult_1_r; auto with zarith. case Zle_lt_or_eq with (1 := Hd1); clear Hd1; intros Hd1. 2: contradict Hd0; rewrite Hd2; try rewrite <- Hd1; auto with zarith. case (Zle_or_lt m d); intros Hd3. 2: case Zle_lt_or_eq with (1 := H5); clear H5; intros H5. 2: case (H6 d); auto with zarith; rewrite <- Hd2; auto. 2: exists X. 2: apply Zdivide_Zdiv_eq; auto with zarith. 2: contradict Hd3; rewrite <- H5; auto with zarith. assert (L5: N = (c * F1 + 1) * (d * F1 + 1)). rewrite <- Hc2; rewrite <- Hd2; apply Zdivide_Zdiv_eq; auto with zarith. assert (L6: R1 = c * d * F1 + c + d). apply trans_equal with ((N - 1) / F1). rewrite H3; rewrite Zmult_comm; apply sym_equal; apply Z_div_mult; auto with zarith. rewrite L5. match goal with |- (?X / ?Y = ?Z) => replace X with (Z * Y) end; try ring; apply Z_div_mult; auto with zarith. assert (L6_1: Zodd (c + d)). case (Zeven_odd_dec (c + d)); auto; intros O1. contradict ER1; apply Zeven_not_Zodd; rewrite L6; rewrite <- Zplus_assoc; apply Zeven_plus_Zeven; auto. apply Zeven_mult_Zeven_r; auto. assert (L6_2: Zeven (c * d)). case (Zeven_odd_dec c); intros HH1. apply Zeven_mult_Zeven_l; auto. case (Zeven_odd_dec d); intros HH2. apply Zeven_mult_Zeven_r; auto. contradict L6_1; apply Zeven_not_Zodd; apply Zodd_plus_Zodd; auto. assert ((c + d) mod (2 * F1) = r). rewrite <- Z_mod_plus with (b := Z.div2 (c * d)) by auto with zarith. match goal with |- ?X mod _ = _ => replace X with R1 end; auto. rewrite L6; pattern (c * d) at 1. rewrite Zeven_div2 with (1 := L6_2); ring. assert (L9: c + d - r < 2 * F1). apply Zplus_lt_reg_r with (r - m). apply Zmult_lt_reg_r with (F1). auto with zarith. apply Zplus_lt_reg_r with 1. match goal with |- ?X < ?Y => replace Y with (2 * F1 * F1 + (r - m) * F1 + 1); try ring; replace X with ((((c + d) - m) * F1) + 1); try ring end. apply Zmult_lt_reg_r with (m * F1 + 1). apply Z.lt_trans with (m * F1 + 0). 2: auto with zarith. rewrite Zplus_0_r; apply Zmult_lt_O_compat; auto with zarith. repeat rewrite (fun x => Zmult_comm x (m * F1 + 1)). apply Z.le_lt_trans with (2 := H7). rewrite L5. match goal with |- ?X <= ?Y => replace X with ((m * (c + d) - m * m ) * F1 * F1 + (c + d) * F1 + 1); try ring; replace Y with ((c * d) * F1 * F1 + (c + d) * F1 + 1); try ring end. repeat apply Zplus_le_compat_r. repeat (apply Zmult_le_compat_r; [ | auto with zarith ]). assert (tmp: forall p q, 0 <= p - q -> q <= p) by auto with zarith; apply tmp. match goal with |- _ <= ?X => replace X with ((c - m) * (d - m)); try ring; auto with zarith end. assert (L10: c + d = r). apply Zmod_closeby_eq with (2 * F1). 1, 3-4: auto with zarith. unfold r; apply Z_mod_lt; auto with zarith. assert (L11: 2 * s = c * d). apply Zmult_reg_r with F1. auto with zarith. apply trans_equal with (R1 - (c + d)). rewrite L10; rewrite (Z_div_mod_eq_full R1 (2 * F1)). unfold s, r; ring. rewrite L6; ring. case H8; intro H10. absurd (0 < c * d). auto with zarith. apply Zmult_lt_O_compat; auto with zarith. case H10; exists (c - d). rewrite <- L10. replace (8 * s) with (4 * (2 * s)); auto with zarith; try rewrite L11; ring. Qed. Theorem PocklingtonExtraCorollary: forall N F1 R1, 1 < F1 -> 0 < R1 -> N - 1 = F1 * R1 -> Zeven F1 -> Zodd R1 -> (forall p, prime p -> (p | F1) -> exists a, 1 < a /\ a^(N - 1) mod N = 1 /\ Z.gcd (a ^ ((N - 1)/ p) - 1) N = 1) -> let s := (R1 / (2 * F1)) in let r := (R1 mod (2 * F1)) in N < 2 * F1 * F1 * F1 -> (s = 0 \/ ~ isSquare (r * r - 8 * s)) -> prime N. intros N F1 R1 H1 H2 H3 OF1 ER1 H4 s r H5 H6. apply PocklingtonExtra with (6 := H4) (R1 := R1) (m := 1); auto with zarith. apply Z.lt_le_trans with (1 := H5). match goal with |- ?X <= ?K * ((?Y + ?Z) + ?T) => rewrite <- (Zplus_0_l X); replace (K * ((Y + Z) + T)) with ((F1 * (Z + T) + Y + Z + T) + X);[idtac | ring] end. apply Zplus_le_compat_r. case (Zle_lt_or_eq 0 r); unfold r. case (Z_mod_lt R1 (2 * F1)); auto with zarith. intros HH; repeat ((rewrite <- (Zplus_0_r 0); apply Zplus_le_compat)); auto with zarith. intros HH; contradict ER1; apply Zeven_not_Zodd. rewrite (Z_div_mod_eq_full R1 (2 * F1)). rewrite <- HH; rewrite Zplus_0_r. rewrite <- Zmult_assoc; apply Zeven_2p. Qed. Lemma Pocklington_simple_computational N p (R1 := (N-1)/p) a : prime p -> 0 < N -> 1 < p -> 0 < R1 -> N - 1 = p * R1 -> N < p * p -> 1 < a -> Zpow_mod a (N - 1) N = 1 -> Z.gcd (Zpow_mod a R1 N - 1) N = 1 -> prime N. Proof. intros. rewrite Zpow_mod_correct in * by Lia.lia. eapply Pocklington.PocklingtonCorollary1; revgoals; eauto; intros p' Hp' Hd. eapply prime_div_prime in Hd; trivial; subst. exists a; intuition idtac. eapply Zgcd_1_rel_prime in H7. eapply rel_prime_mod in H7; trivial. rewrite Zminus_mod_idemp_l in H7. eapply Zgcd_1_rel_prime. eapply rel_prime_mod_rev; trivial. Qed. coqprime-8.18/src/Coqprime/PrimalityTest/PocklingtonCertificat.v000066400000000000000000000546101451023060700251310ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Require Import List. Require Import ZArith. Require Import Zorder. Require Import ZCAux. Require Import LucasLehmer. Require Import Pocklington. Require Import ZCmisc. Require Import Pmod. (* Compatibility with Coq versions not supporting hint localities *) Set Warnings "-unsupported-attributes". Definition dec_prime := list (positive * positive). Inductive singleCertif : Set := | Proof_certif : forall N:positive, prime N -> singleCertif | Lucas_certif : forall (n:positive) (p: Z), singleCertif | Pock_certif : forall N a : positive, dec_prime -> positive -> singleCertif | SPock_certif : forall N a : positive, dec_prime -> singleCertif | Ell_certif: forall (N S: positive) (l: list (positive * positive)) (A B x y: Z), singleCertif. Definition Certif := list singleCertif. Definition nprim sc := match sc with | Proof_certif n _ => n | Lucas_certif n _ => n | Pock_certif n _ _ _ => n | SPock_certif n _ _ => n | Ell_certif n _ _ _ _ _ _ => n end. Open Scope positive_scope. Open Scope P_scope. Fixpoint pow (a p:positive) {struct p} : positive := match p with | xH => a | xO p' =>let z := pow a p' in square z | xI p' => let z := pow a p' in square z * a end. Definition mkProd' (l:dec_prime) := fold_right (fun (k:positive*positive) r => times (fst k) r) 1%positive l. Definition mkProd_pred (l:dec_prime) := fold_right (fun (k:positive*positive) r => if ((snd k) ?= 1)%P then r else times (pow (fst k) (Pos.pred (snd k))) r) 1%positive l. Definition mkProd (l:dec_prime) := fold_right (fun (k:positive*positive) r => times (pow (fst k) (snd k)) r) 1%positive l. (* [pow_mod a m n] return [a^m mod n] *) Fixpoint pow_mod (a m n : positive) {struct m} : N := match m with | xH => (a mod n)%P | xO m' => let z := pow_mod a m' n in match z with | N0 => 0%N | Npos z' => ((square z') mod n)%P end | xI m' => let z := pow_mod a m' n in match z with | N0 => 0%N | Npos z' => (((square z') * a)%P mod n)%P end end. Definition Npow_mod a m n := match a with | N0 => 0%N | Npos a => pow_mod a m n end. (* [fold_pow_mod a [q1,_;...;qn,_]] b = a ^(q1*...*qn) mod b *) (* invariant a mod N = a *) Definition fold_pow_mod a l n := fold_left (fun a' (qp:positive*positive) => Npow_mod a' (fst qp) n) l a. Definition times_mod x y n := match x, y with | N0, _ => N0 | _, N0 => N0 | Npos x, Npos y => ((x * y)%P mod n) end. Definition Npred_mod p n := match p with | N0 => Npos (Pos.pred n) | Npos p => if (p ?= 1) then N0 else Npos (Pos.pred p) end. Fixpoint all_pow_mod (prod a : N) (l:dec_prime) (n:positive) {struct l}: N*N := match l with | nil => (prod,a) | (q,_) :: l => let m := Npred_mod (fold_pow_mod a l n) n in all_pow_mod (times_mod prod m n) (Npow_mod a q n) l n end. Fixpoint pow_mod_pred (a:N) (l:dec_prime) (n:positive) {struct l} : N := match l with | nil => a | (q,p)::l => if (p ?= 1) then pow_mod_pred a l n else let a' := iter_pos _ (fun x => Npow_mod x q n) a (Pos.pred p) in pow_mod_pred a' l n end. Definition is_odd p := match p with | xO _ => false | _ => true end. Definition is_even p := match p with | xO _ => true | _ => false end. Definition check_s_r s r sqrt := match s with | N0 => true | Npos p => match (Zminus (square r) (xO (xO (xO p)))) with | Zpos x => let sqrt2 := square sqrt in let sqrt12 := square (Pos.succ sqrt) in if sqrt2 ?< x then x ?< sqrt12 else false | Zneg _ => true | Z0 => false end end. Definition test_pock N a dec sqrt := if (2 ?< N) then let Nm1 := Pos.pred N in let F1 := mkProd dec in match Nm1 / F1 with | (Npos R1, N0) => if is_odd R1 then if is_even F1 then if (1 ?< a) then let (s,r') := (R1 / (xO F1))in match r' with | Npos r => let A := pow_mod_pred (pow_mod a R1 N) dec N in match all_pow_mod 1%N A dec N with | (Npos p, Npos aNm1) => if (aNm1 ?= 1) then if gcd p N ?= 1 then if check_s_r s r sqrt then (N ?< (times ((times ((xO F1)+r+1) F1) + r) F1) + 1) else false else false else false | _ => false end | _ => false end else false else false else false | _=> false end else false. Fixpoint is_in (p : positive) (lc : Certif) {struct lc} : bool := match lc with | nil => false | c :: l => if p ?= (nprim c) then true else is_in p l end. Fixpoint all_in (lc : Certif) (lp : dec_prime) {struct lp} : bool := match lp with | nil => true | (p,_) :: lp => if all_in lc lp then is_in p lc else false end. Definition gt2 n := match n with | Zpos p => (2 ?< p)%positive | _ => false end. Fixpoint test_Certif (lc : Certif) : bool := match lc with | nil => true | (Proof_certif _ _) :: lc => test_Certif lc | (Lucas_certif n p) :: lc => if test_Certif lc then if gt2 p then match Mp p with | Zpos n' => if (n ?= n') then match SS p with | Z0 => true | _ => false end else false | _ => false end else false else false | (Pock_certif n a dec sqrt) :: lc => if test_pock n a dec sqrt then if all_in lc dec then test_Certif lc else false else false (* Shoudl be done later to do it with Z *) | (SPock_certif n a dec) :: lc => false | (Ell_certif _ _ _ _ _ _ _):: lc => false end. Lemma pos_eq_1_spec : forall p, if (p ?= 1)%P then p = xH else (1 < p). Proof. unfold Z.lt;destruct p;simpl; auto; red;reflexivity. Qed. Open Scope Z_scope. Lemma mod_unique : forall b q1 r1 q2 r2, 0 <= r1 < b -> 0 <= r2 < b -> b * q1 + r1 = b * q2 + r2 -> q1 = q2 /\ r1 = r2. Proof with auto with zarith. intros b q1 r1 q2 r2 H1 H2 H3. assert (r2 = (b * q1 + r1) -b*q2). rewrite H3;ring. assert (b*(q2 - q1) = r1 - r2 ). rewrite H;ring. assert (-b < r1 - r2 < b). lia. destruct (Ztrichotomy q1 q2) as [H5 | [H5 | H5]]. assert (q2 - q1 >= 1). lia. assert (r1- r2 >= b). rewrite <- H0. pattern b at 2; replace b with (b*1). apply Zmult_ge_compat_l; lia. ring. exfalso; lia. split;trivial. rewrite H;rewrite H5;ring. assert (r1- r2 <= -b). rewrite <- H0. replace (-b) with (b*(-1)); try (ring;fail). apply Zmult_le_compat_l; lia. exfalso; lia. Qed. Lemma Zge_0_pos : forall p:positive, p>= 0. Proof. intros;unfold Z.ge;simpl;intro;discriminate. Qed. Lemma Zge_0_pos_add : forall p:positive, p+p>= 0. Proof. intros;simpl;apply Zge_0_pos. Qed. Global Hint Resolve Zpower_gt_0 Zlt_0_pos Zge_0_pos Zlt_le_weak Zge_0_pos_add: zmisc. #[global] Hint Rewrite Zpos_mult Zpower_mult Zpower_1_r Zmod_mod Zpower_exp times_Zmult square_Zmult Psucc_Zplus: zmisc. Ltac mauto := trivial;autorewrite with zmisc;trivial;auto with zmisc zarith. Lemma mod_lt : forall a (b:positive), a mod b < b. Proof. intros a b;destruct (Z_mod_lt a b);mauto. Qed. Global Hint Resolve mod_lt : zmisc. Lemma Zmult_mod_l : forall (n:positive) a b, (a mod n * b) mod n = (a * b) mod n. Proof with mauto. intros;rewrite Zmult_mod ... rewrite (Zmult_mod a) ... Qed. Lemma Zmult_mod_r : forall (n:positive) a b, (a * (b mod n)) mod n = (a * b) mod n. Proof with mauto. intros;rewrite Zmult_mod ... rewrite (Zmult_mod a) ... Qed. Lemma Zminus_mod_l : forall (n:positive) a b, (a mod n - b) mod n = (a - b) mod n. Proof with mauto. intros;rewrite Zminus_mod ... rewrite (Zminus_mod a) ... Qed. Lemma Zminus_mod_r : forall (n:positive) a b, (a - (b mod n)) mod n = (a - b) mod n. Proof with mauto. intros;rewrite Zminus_mod ... rewrite (Zminus_mod a) ... Qed. #[global] Hint Rewrite Zmult_mod_l Zmult_mod_r Zminus_mod_l Zminus_mod_r : zmisc. #[global] Hint Rewrite <- Zpower_mod : zmisc. Lemma Pmod_Zmod : forall a b, Z_of_N (a mod b)%P = a mod b. Proof. intros a b; rewrite Pmod_div_eucl. assert (b>0). mauto. unfold Z.modulo; assert (H1 := Z_div_mod a b H). destruct (Z.div_eucl a b) as (q2, r2). assert (H2 := div_eucl_spec a b). assert (Z_of_N (fst (a / b)%P) = q2 /\ Z_of_N (snd (a/b)%P) = r2). destruct H1;destruct H2. apply mod_unique with b. 2: mauto. split. 2: mauto. unfold Z.le;destruct (snd (a / b)%P);intro;discriminate. rewrite <- H0;symmetry;rewrite Zmult_comm;trivial. destruct H0;auto. Qed. #[global] Hint Rewrite Pmod_Zmod : zmisc. Lemma Zpower_0 : forall p : positive, 0^p = 0. Proof. intros;simpl;destruct p;unfold Zpower_pos;simpl;trivial. generalize (iter_pos Z (Z.mul 0) 1 p). induction p;simpl;trivial. Qed. Lemma pow_Zpower : forall a p, Zpos (pow a p) = a ^ p. Proof. induction p; mauto; simpl; mauto; rewrite IHp; mauto. Qed. #[global] Hint Rewrite pow_Zpower : zmisc. Lemma pow_mod_spec : forall n a m, Z_of_N (pow_mod a m n) = a^m mod n. Proof. induction m; mauto; simpl; intros; mauto. rewrite Zmult_mod; auto with zmisc. rewrite (Zmult_mod (a^m)(a^m)); auto with zmisc. rewrite <- IHm; mauto. destruct (pow_mod a m n); mauto. rewrite (Zmult_mod (a^m)(a^m)); auto with zmisc. rewrite <- IHm. destruct (pow_mod a m n);simpl; mauto. Qed. #[global] Hint Rewrite pow_mod_spec Zpower_0 : zmisc. Lemma Npow_mod_spec : forall a p n, Z_of_N (Npow_mod a p n) = a^p mod n. Proof. intros a p n;destruct a; mauto; simpl; mauto. Qed. #[global] Hint Rewrite Npow_mod_spec : zmisc. Lemma iter_Npow_mod_spec : forall n q p a, Z_of_N (iter_pos N (fun x : N => Npow_mod x q n) a p) = a^q^p mod n. Proof. induction p; mauto; intros; simpl Pos.iter; mauto; repeat rewrite IHp. rewrite (Zpower_mod ((a ^ q ^ p) ^ q ^ p));auto with zmisc. rewrite (Zpower_mod (a ^ q ^ p)); mauto. mauto. Qed. #[global] Hint Rewrite iter_Npow_mod_spec : zmisc. Lemma fold_pow_mod_spec : forall (n:positive) l (a:N), Z_of_N a = a mod n -> Z_of_N (fold_pow_mod a l n) = a^(mkProd' l) mod n. Proof. unfold fold_pow_mod;induction l; simpl fold_left; simpl mkProd'; intros; mauto. rewrite IHl; mauto. Qed. #[global] Hint Rewrite fold_pow_mod_spec : zmisc. Lemma pow_mod_pred_spec : forall (n:positive) l (a:N), Z_of_N a = a mod n -> Z_of_N (pow_mod_pred a l n) = a^(mkProd_pred l) mod n. Proof. unfold pow_mod_pred;induction l;simpl mkProd;intros; mauto. destruct a as (q,p). simpl mkProd_pred. destruct (p ?= 1)%P; rewrite IHl; mauto; simpl. Qed. #[global] Hint Rewrite pow_mod_pred_spec : zmisc. Lemma mkProd_pred_mkProd : forall l, (mkProd_pred l)*(mkProd' l) = mkProd l. Proof. induction l;simpl;intros; autorewrite with zmisc. reflexivity. generalize (pos_eq_1_spec (snd a)); destruct (snd a ?= 1)%P;intros. rewrite H. autorewrite with zmisc. replace (mkProd_pred l * (fst a * mkProd' l)) with (fst a *(mkProd_pred l * mkProd' l));try ring. rewrite IHl; mauto. rewrite Zmult_assoc. rewrite times_Zmult. rewrite (Zmult_comm (pow (fst a) (Pos.pred (snd a)) * mkProd_pred l)). rewrite Zmult_assoc. rewrite pow_Zpower. rewrite <-Ppred_Zminus;trivial. rewrite <- Zpower_Zsucc. replace (Z.succ (snd a - 1)) with ((snd a - 1)+1). replace ((snd a - 1)+1) with (Zpos (snd a)) by mauto. rewrite <- IHl. repeat rewrite Zmult_assoc. mauto. destruct (snd a - 1);trivial. assert (1 < snd a); auto with zarith. Qed. #[global] Hint Rewrite mkProd_pred_mkProd : zmisc. Lemma lt_Zmod : forall p n, 0 <= p < n -> p mod n = p. Proof. intros a b H. assert ( 0 <= a mod b < b). apply Z_mod_lt; mauto. destruct (mod_unique b (a/b) (a mod b) 0 a H0 H); mauto. rewrite <- Z_div_mod_eq_full; mauto. Qed. Lemma Npred_mod_spec : forall p n, Z_of_N p < Zpos n -> 1 < Zpos n -> Z_of_N (Npred_mod p n) = (p - 1) mod n. Proof. destruct p;intros;simpl. rewrite <- Ppred_Zminus; auto. apply Zmod_unique with (q := -1); mauto. assert (H1 := pos_eq_1_spec p);destruct (p?=1)%P. rewrite H1; mauto. unfold Z_of_N;rewrite <- Ppred_Zminus; auto. simpl in H;symmetry; apply (lt_Zmod (p-1) n). assert (1 < p); auto with zarith. Qed. #[global] Hint Rewrite Npred_mod_spec : zmisc. Lemma times_mod_spec : forall x y n, Z_of_N (times_mod x y n) = (x * y) mod n. Proof. intros; destruct x; mauto. destruct y;simpl; mauto. Qed. #[global] Hint Rewrite times_mod_spec : zmisc. Lemma snd_all_pow_mod : forall n l (prod a :N), a mod (Zpos n) = a -> Z_of_N (snd (all_pow_mod prod a l n)) = (a^(mkProd' l)) mod n. Proof. induction l; simpl all_pow_mod; simpl mkProd';intros; mauto. destruct a as (q,p). rewrite IHl; mauto. Qed. Lemma fold_aux : forall a N (n:positive) l prod, fold_left (fun (r : Z) (k : positive * positive) => r * (a ^(N / fst k) - 1) mod n) l (prod mod n) mod n = fold_left (fun (r : Z) (k : positive * positive) => r * (a^(N / fst k) - 1)) l prod mod n. Proof. induction l;simpl;intros; mauto. Qed. Lemma fst_all_pow_mod : forall (n a:positive) l (R:positive) (prod A :N), 1 < n -> Z_of_N prod = prod mod n -> Z_of_N A = a^R mod n -> Z_of_N (fst (all_pow_mod prod A l n)) = (fold_left (fun r (k:positive*positive) => (r * (a ^ (R* mkProd' l / (fst k)) - 1))) l prod) mod n. Proof. induction l;simpl;intros; mauto. destruct a0 as (q,p);simpl. assert (Z_of_N A = A mod n). rewrite H1; mauto. rewrite (IHl (R * q)%positive); mauto; mauto. pattern (q * mkProd' l) at 2;rewrite (Zmult_comm q). repeat rewrite Zmult_assoc. rewrite Z_div_mult;auto with zmisc zarith. rewrite <- fold_aux. rewrite <- (fold_aux a (R * q * mkProd' l) n l (prod * (a ^ (R * mkProd' l) - 1)))... assert ( ((prod * (A ^ mkProd' l - 1)) mod n) = ((prod * ((a ^ R) ^ mkProd' l - 1)) mod n)). repeat rewrite (Zmult_mod prod);auto with zmisc. rewrite Zminus_mod;auto with zmisc. rewrite (Zminus_mod ((a ^ R) ^ mkProd' l));auto with zmisc. rewrite (Zpower_mod (a^R));auto with zmisc. rewrite H1; mauto. rewrite H3; mauto. rewrite H1; mauto. Qed. Lemma is_odd_Zodd : forall p, is_odd p = true -> Zodd p. Proof. destruct p;intros;simpl;trivial;discriminate. Qed. Lemma is_even_Zeven : forall p, is_even p = true -> Zeven p. Proof. destruct p;intros;simpl;trivial;discriminate. Qed. Lemma lt_square : forall x y, 0 < x -> x < y -> x*x < y*y. Proof. intros; apply Z.lt_trans with (x*y). apply Zmult_lt_compat_l;trivial. apply Zmult_lt_compat_r;trivial. lia. Qed. Lemma le_square : forall x y, 0 <= x -> x <= y -> x*x <= y*y. Proof. intros; apply Z.le_trans with (x*y). apply Zmult_le_compat_l;trivial. apply Zmult_le_compat_r;trivial. lia. Qed. Lemma borned_square : forall x y, 0 <= x -> 0 <= y -> x*x < y*y < (x+1)*(x+1) -> False. Proof. intros;destruct (Z_lt_ge_dec x y) as [z|z]. assert (x + 1 <= y). lia. assert (0 <= x+1). lia. assert (H4 := le_square _ _ H3 H2). lia. assert (H4 := le_square _ _ H0 (Z.ge_le _ _ z)). lia. Qed. Lemma not_square : forall (sqrt:positive) n, sqrt * sqrt < n < (sqrt+1)*(sqrt + 1) -> ~(isSquare n). Proof. intros sqrt n H (y,H0). destruct (Z_lt_ge_dec 0 y). apply (borned_square sqrt y);mauto. assert (y*y = (-y)*(-y)). ring. rewrite H1 in H0;clear H1. apply (borned_square sqrt (-y));mauto. Qed. Ltac spec_dec := repeat match goal with | [H:(?x ?= ?y)%P = _ |- _] => generalize (is_eq_spec x y); rewrite H;clear H; autorewrite with zmisc; intro | [H:(?x ?< ?y)%P = _ |- _] => generalize (is_lt_spec x y); rewrite H; clear H; autorewrite with zmisc; intro end. Ltac elimif := match goal with | [H: (if ?b then _ else _) = _ |- _] => let H1 := fresh "H" in (CaseEq b;intros H1; rewrite H1 in H; try discriminate H); elimif | _ => spec_dec end. Lemma check_s_r_correct : forall s r sqrt, check_s_r s r sqrt = true -> Z_of_N s = 0 \/ ~ isSquare (r * r - 8 * s). Proof. unfold check_s_r;intros. destruct s as [|s]; trivial;auto. right;CaseEq (square r - xO (xO (xO s)));[intros H1|intros p1 H1| intros p1 H1]; rewrite H1 in H;try discriminate H. elimif. assert (Zpos (xO (xO (xO s))) = 8 * s). repeat rewrite Zpos_xO_add;ring. generalizeclear H1; rewrite H2;mauto;intros. apply (not_square sqrt). simpl Z.of_N; rewrite H1;auto. intros (y,Heq). generalize H1 Heq;mauto. unfold Z_of_N. match goal with |- ?x = _ -> ?y = _ -> _ => replace x with y; try ring end. intros Heq1;rewrite Heq1;intros Heq2. destruct y;discriminate Heq2. Qed. Lemma in_mkProd_prime_div_in : forall p:positive, prime p -> forall (l:dec_prime), (forall k, In k l -> prime (fst k)) -> Z.divide p (mkProd l) -> exists n,In (p, n) l. Proof. induction l;simpl mkProd; simpl In; mauto. intros _ H1; absurd (p <= 1). apply Zlt_not_le; apply Z.lt_le_trans with 2; try apply prime_ge_2; auto with zarith. apply Zdivide_le; auto with zarith. intros. case prime_mult with (2 := H1); auto with zarith; intros H2. exists (snd a);left. destruct a;simpl in *. assert (Zpos p = Zpos p0). rewrite (prime_div_Zpower_prime p1 p p0); mauto. apply (H0 (p0,p1));auto. inversion H3; auto. destruct IHl as (n,H3); mauto. exists n; auto. Qed. Lemma gcd_Zis_gcd : forall a b:positive, (Zis_gcd b a (gcd b a)%P). Proof. intros a;assert (Hacc := Zwf_pos a);induction Hacc;rename x into a;intros. generalize (div_eucl_spec b a); mauto. rewrite <- (Pmod_div_eucl b a). CaseEq (b mod a)%P;[intros Heq|intros r Heq]; intros (H1,H2). simpl in H1;rewrite Zplus_0_r in H1. rewrite (gcd_mod0 _ _ Heq). constructor;mauto. apply Zdivide_intro with (fst (b/a)%P);trivial. rewrite (gcd_mod _ _ _ Heq). rewrite H1;apply Zis_gcd_sym. rewrite Zmult_comm;apply Zis_gcd_for_euclid2;simpl in *. apply Zis_gcd_sym;auto. Qed. Lemma test_pock_correct : forall N a dec sqrt, (forall k, In k dec -> prime (Zpos (fst k))) -> test_pock N a dec sqrt = true -> prime N. Proof. unfold test_pock;intros. elimif. generalize (div_eucl_spec (Pos.pred N) (mkProd dec)); destruct ((Pos.pred N) / (mkProd dec))%P as (R1,n); mauto;intros (H2,H3). destruct R1 as [|R1];try discriminate H0. destruct n;try discriminate H0. elimif. generalize (div_eucl_spec R1 (xO (mkProd dec))); destruct ((R1 / xO (mkProd dec))%P) as (s,r'); mauto;intros (H7,H8). destruct r' as [|r];try discriminate H0. generalize (fst_all_pow_mod N a dec (R1*mkProd_pred dec) 1 (pow_mod_pred (pow_mod a R1 N) dec N)). generalize (snd_all_pow_mod N dec 1 (pow_mod_pred (pow_mod a R1 N) dec N)). destruct (all_pow_mod 1 (pow_mod_pred (pow_mod a R1 N) dec N) dec N) as (prod,aNm1); mauto; simpl Z_of_N. destruct prod as [|prod];try discriminate H0. destruct aNm1 as [|aNm1];try discriminate H0;elimif. simpl in H3; simpl in H2. rewrite <- Ppred_Zminus in H2;try lia. rewrite <- Zmult_assoc;rewrite mkProd_pred_mkProd. intros H12;assert (a^(N-1) mod N = 1). { pattern 1 at 2;rewrite <- H9;symmetry. simpl Z.of_N in H12. rewrite H2; rewrite H12 by mauto. rewrite <- Zpower_mult; mauto. } clear H12. intros H14. match type of H14 with _ -> _ -> _ -> ?X => assert (H12:X); try apply H14; clear H14 end. 1, 3: mauto. rewrite Zmod_small; mauto. assert (1 < mkProd dec). { assert (H14 := Zlt_0_pos (mkProd dec)). assert (1 <= mkProd dec) by mauto. destruct (Zle_lt_or_eq _ _ H15). mauto. inversion H16. rewrite <- H18 in H5;discriminate H5. } simpl in H8. assert (Z_of_N s = R1 / (2 * mkProd dec) /\ Zpos r = R1 mod (2 * mkProd dec)). { apply mod_unique with (2 * mkProd dec). revert H8; mauto. apply Z_mod_lt; mauto. rewrite <- Z_div_mod_eq_full; rewrite H7. simpl fst; simpl snd; simpl Z_of_N. ring. } destruct H15 as (H15,Heqr). apply PocklingtonExtra with (F1:=mkProd dec) (R1:=R1) (m:=1). 1-2, 7-8: auto with zmisc zarith. rewrite H2; mauto. apply is_even_Zeven; auto. apply is_odd_Zodd; auto. intros p; case p; clear p. intros HH; contradict HH. apply not_prime_0. 2: intros p (V1, _); contradict V1; apply Zle_not_lt; red; simpl; intros; discriminate. intros p Hprime Hdec; exists (Zpos a);repeat split. 1-2: auto with zarith. apply Zis_gcd_gcd. auto with zarith. change (rel_prime (a ^ ((N - 1) / p) - 1) N). match type of H12 with _ = ?X mod _ => apply rel_prime_div with (p := X) end. apply rel_prime_mod_rev. auto with zarith. red. pattern 1 at 3; rewrite <- H10; rewrite <- H12. apply Pmod.gcd_Zis_gcd. destruct (in_mkProd_prime_div_in _ Hprime _ H Hdec) as (q,Hin). revert H2; autorewrite with zmisc; intro H2. rewrite <- H2. match goal with |- context [fold_left ?f _ _] => apply (ListAux.fold_left_invol_in _ _ f (fun k => Z.divide (a ^ ((N - 1) / p) - 1) k)) with (b := (p, q)); auto with zarith end. rewrite <- Heqr. generalizeclear H0; ring_simplify (((mkProd dec + mkProd dec + r + 1) * mkProd dec + r) * mkProd dec + 1) ((1 * mkProd dec + 1) * (2 * mkProd dec * mkProd dec + (r - 1) * mkProd dec + 1)); mauto. rewrite <- H15;rewrite <- Heqr. apply check_s_r_correct with sqrt; mauto. Qed. Lemma is_in_In : forall p lc, is_in p lc = true -> exists c, In c lc /\ p = nprim c. Proof. induction lc;simpl;try (intros;discriminate). intros;elimif. exists a;split;auto. inversion H0;trivial. destruct (IHlc H) as [c [H1 H2]];exists c;auto. Qed. Lemma all_in_In : forall lc lp, all_in lc lp = true -> forall pq, In pq lp -> exists c, In c lc /\ fst pq = nprim c. Proof. induction lp;simpl. intros H pq HF;elim HF. intros;destruct a;elimif. destruct H0;auto. rewrite <- H0;simpl;apply is_in_In;trivial. Qed. Lemma test_Certif_In_Prime : forall lc, test_Certif lc = true -> forall c, In c lc -> prime (nprim c). Proof with mauto. induction lc;simpl;intros. elim H0. destruct H0. subst c;destruct a;simpl... elimif. CaseEq (Mp p);[intros Heq|intros N' Heq|intros N' Heq];rewrite Heq in H; try discriminate H. elimif. CaseEq (SS p);[intros Heq'|intros N'' Heq'|intros N'' Heq'];rewrite Heq' in H; try discriminate H. rewrite H2;rewrite <- Heq. apply LucasLehmer;trivial. (destruct p; try discriminate H1). simpl in H1; generalize (is_lt_spec 2 p); rewrite H1; auto. elimif. apply (test_pock_correct N a d p); mauto. intros k Hin;destruct (all_in_In _ _ H1 _ Hin) as (c,(H2,H3)). rewrite H3;auto. discriminate. discriminate. destruct a;elimif;auto. discriminate. discriminate. Qed. Lemma Pocklington_refl : forall c lc, test_Certif (c::lc) = true -> prime (nprim c). Proof. intros c lc Heq;apply test_Certif_In_Prime with (c::lc);trivial;simpl;auto. Qed. coqprime-8.18/src/Coqprime/PrimalityTest/Proth.v000066400000000000000000000103511451023060700217320ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) (********************************************************************** Proth.v Proth's Test Definition: ProthTest **********************************************************************) Require Import ZArith. Require Import ZCAux. Require Import Pocklington. Open Scope Z_scope. Theorem ProthTest: forall h k a, let n := h * 2 ^ k + 1 in 1 < a -> 0 < h < 2 ^k -> (a ^ ((n - 1) / 2) + 1) mod n = 0 -> prime n. intros h k a n; unfold n; intros H H1 H2. assert (Hu: 0 < h * 2 ^ k). apply Zmult_lt_O_compat; auto with zarith. assert (Hu1: 0 < k). case (Zle_or_lt k 0); intros Hv; auto. generalize H1 Hv; case k; simpl. intros (Hv1, Hv2); contradict Hv2; auto with zarith. intros p1 _ Hv1; contradict Hv1; auto with zarith. intros p (Hv1, Hv2); contradict Hv2; auto with zarith. apply PocklingtonCorollary1 with (F1 := 2 ^ k) (R1 := h). 1-2: auto with zarith. ring. apply Z.lt_le_trans with ((h + 1) * 2 ^ k). 2: auto with zarith. rewrite Zmult_plus_distr_l; apply Zplus_lt_compat_l. rewrite Zmult_1_l; apply Z.lt_le_trans with 2; auto with zarith. intros p H3 H4. generalize H2; replace (h * 2 ^ k + 1 - 1) with (h * 2 ^k) by auto with zarith; clear H2; intros H2. exists a; split; auto; split. pattern (h * 2 ^k) at 1; rewrite (Zdivide_Zdiv_eq 2 (h * 2 ^ k)). 2: auto with zarith. rewrite (Zmult_comm 2); rewrite Zpower_mult. 3: auto with zarith. rewrite Zpower_mod by auto with zarith. assert (tmp: forall p, p = (p + 1) -1) by auto with zarith; rewrite (fun x => (tmp (a ^ x))). rewrite Zminus_mod by auto with zarith. rewrite H2. rewrite (Zmod_small 1) by auto with zarith. rewrite <- Zpower_mod by auto with zarith. rewrite Zmod_small. auto with zarith. simpl; unfold Zpower_pos; simpl; auto with zarith. apply Z_div_pos; auto with zarith. apply Z.divide_trans with (2 ^ k). apply Zpower_divide; auto with zarith. apply Zdivide_factor_l; auto with zarith. apply Zis_gcd_gcd. auto with zarith. apply Zis_gcd_intro. 1-2: auto with zarith. intros x HD1 HD2. assert (Hd1: p = 2). apply prime_div_Zpower_prime with (4 := H4). 1-2: auto with zarith. apply prime_2. assert (Hd2: (x | 2)). replace 2 with ((a ^ (h * 2 ^ k / 2) + 1) - (a ^ (h * 2 ^ k/ 2) - 1)) by auto with zarith. apply Zdivide_minus_l; auto. apply Z.divide_trans with (1 := HD2). apply Zmod_divide; auto with zarith. pattern 2 at 2; rewrite <- Hd1; auto. replace 1 with ((h * 2 ^k + 1) - (h * 2 ^ k)) by auto with zarith. apply Zdivide_minus_l; auto. apply Z.divide_trans with (1 := Hd2); auto. apply Z.divide_trans with (2 ^ k). apply Zpower_divide; auto with zarith. apply Zdivide_factor_l; auto with zarith. Qed. Definition proth_test h k a := let n := h * 2 ^ k + 1 in if (Z_lt_dec 1 a) then if (Z_lt_dec 0 h) then if (Z_lt_dec h (2 ^k)) then if Z.eq_dec (Zpow_mod a ((n - 1) / 2) n) (n - 1) then true else false else false else false else false. Theorem ProthTestOp: forall h k a, proth_test h k a = true -> prime (h * 2 ^ k + 1). intros h k a; unfold proth_test. repeat match goal with |- context[if ?X then _ else _] => case X end; try (intros; discriminate). intros H1 H2 H3 H4 _. assert (Hu: 0 < h * 2 ^ k). apply Zmult_lt_O_compat; auto with zarith. apply ProthTest with (a := a); auto. rewrite Zplus_mod; auto with zarith. rewrite <- Zpow_mod_Zpower_correct; auto with zarith. rewrite H1. rewrite (Zmod_small 1); auto with zarith. replace (h * 2 ^ k + 1 - 1 + 1) with (h * 2 ^ k + 1); auto with zarith. apply Zdivide_mod; auto with zarith. apply Z_div_pos; auto with zarith. Qed. Theorem prime5: prime 5. exact (ProthTestOp 1 2 2 (refl_equal _)). Qed. Theorem prime17: prime 17. exact (ProthTestOp 1 4 3 (refl_equal _)). Qed. Theorem prime257: prime 257. exact (ProthTestOp 1 8 3 (refl_equal _)). Qed. Theorem prime65537: prime 65537. exact (ProthTestOp 1 16 3 (refl_equal _)). Qed. (* Too tough !! Theorem prime4294967297: prime 4294967297. exact (ProthTestOp 1 32 3 (refl_equal _)). Qed. *) coqprime-8.18/src/Coqprime/PrimalityTest/Root.v000066400000000000000000000226511451023060700215670ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) (*********************************************************************** Root.v Proof that a polynomial has at most n roots ************************************************************************) Require Import ZArith. Require Import List. Require Import UList. Require Import Tactic. Require Import Permutation. Open Scope Z_scope. Section Root. Variable A: Set. Variable P: A -> Prop. Variable plus mult: A -> A -> A. Variable op: A -> A. Variable zero one: A. Let pol := list A. Definition toA z := match z with Z0 => zero | Zpos p => iter_pos _ (plus one) zero p | Zneg p => op (iter_pos _ (plus one) zero p) end. Fixpoint eval (p: pol) (x: A) {struct p} : A := match p with nil => zero | a::p1 => plus a (mult x (eval p1 x)) end. Fixpoint div (p: pol) (x: A) {struct p} : pol * A := match p with nil => (nil, zero) | a::nil => (nil, a) | a::p1 => (snd (div p1 x)::fst (div p1 x), (plus a (mult x (snd (div p1 x))))) end. Hypothesis Pzero: P zero. Hypothesis Pplus: forall x y, P x -> P y -> P (plus x y). Hypothesis Pmult: forall x y, P x -> P y -> P (mult x y). Hypothesis Pop: forall x, P x -> P (op x). Hypothesis plus_zero: forall a, P a -> plus zero a = a. Hypothesis plus_comm: forall a b, P a -> P b -> plus a b = plus b a. Hypothesis plus_assoc: forall a b c, P a -> P b -> P c -> plus a (plus b c) = plus (plus a b) c. Hypothesis mult_zero: forall a, P a -> mult zero a = zero. Hypothesis mult_comm: forall a b, P a -> P b -> mult a b = mult b a. Hypothesis mult_assoc: forall a b c, P a -> P b -> P c -> mult a (mult b c) = mult (mult a b) c. Hypothesis mult_plus_distr: forall a b c, P a -> P b -> P c -> mult a (plus b c) = plus (mult a b) (mult a c). Hypothesis plus_op_zero: forall a, P a -> plus a (op a) = zero. Hypothesis mult_integral: forall a b, P a -> P b -> mult a b = zero -> a = zero \/ b = zero. (* Not necessary in Set just handy *) Hypothesis A_dec: forall a b: A, {a = b} + {a <> b}. Theorem eval_P: forall p a, P a -> (forall i, In i p -> P i) -> P (eval p a). intros p a Pa; elim p; simpl; auto with datatypes. intros a1 l1 Rec H; apply Pplus; auto. Qed. Hint Resolve eval_P : core. Theorem div_P: forall p a, P a -> (forall i, In i p -> P i) -> (forall i, In i (fst (div p a)) -> P i) /\ P (snd (div p a)). intros p a Pa; elim p; auto with datatypes. intros a1 l1; case l1. simpl; intuition. intros a2 p2 Rec Hi; split. case Rec; auto with datatypes. intros H H1 i. replace (In i (fst (div (a1 :: a2 :: p2) a))) with (snd (div (a2::p2) a) = i \/ In i (fst (div (a2::p2) a))); auto. intros [Hi1 | Hi1]; auto. rewrite <- Hi1; auto. change ( P (plus a1 (mult a (snd (div (a2::p2) a))))); auto with datatypes. apply Pplus; auto with datatypes. apply Pmult; auto with datatypes. case Rec; auto with datatypes. Qed. Theorem div_correct: forall p x y, P x -> P y -> (forall i, In i p -> P i) -> eval p y = plus (mult (eval (fst (div p x)) y) (plus y (op x))) (snd (div p x)). intros p x y; elim p; simpl. intros; rewrite mult_zero; try rewrite plus_zero; auto. intros a l; case l; simpl; auto. intros _ px py pa; rewrite (fun x => mult_comm x zero); repeat rewrite mult_zero; try apply plus_comm; auto. intros a1 l1. generalize (div_P (a1::l1) x); simpl. match goal with |- context[fst ?A] => case A end; simpl. intros q r Hd Rec px py pi. assert (pr: P r). case Hd; auto. assert (pa1: P a1). case Hd; auto. assert (pey: P (eval q y)). apply eval_P; auto. case Hd; auto. rewrite Rec; auto with datatypes. rewrite (fun x y => plus_comm x (plus a y)); try rewrite <- plus_assoc; auto. apply f_equal2 with (f := plus); auto. repeat rewrite mult_plus_distr; auto. repeat (rewrite (fun x y => (mult_comm (plus x y))) || rewrite mult_plus_distr); auto. rewrite (fun x => (plus_comm x (mult y r))); auto. repeat rewrite plus_assoc; try apply f_equal2 with (f := plus); auto. 2: repeat rewrite mult_assoc; try rewrite (fun y => mult_comm y (op x)); repeat rewrite mult_assoc; auto. rewrite (fun z => (plus_comm z (mult (op x) r))); auto. repeat rewrite plus_assoc; try apply f_equal2 with (f := plus); auto. 2: apply f_equal2 with (f := mult); auto. repeat rewrite (fun x => mult_comm x r); try rewrite <- mult_plus_distr; auto. rewrite (plus_comm (op x)); try rewrite plus_op_zero; auto. rewrite (fun x => mult_comm x zero); try rewrite mult_zero; try rewrite plus_zero; auto. Qed. Theorem div_correct_factor: forall p a, (forall i, In i p -> P i) -> P a -> eval p a = zero -> forall x, P x -> eval p x = (mult (eval (fst (div p a)) x) (plus x (op a))). intros p a Hp Ha H x px. case (div_P p a); auto; intros Hd1 Hd2. rewrite (div_correct p a x); auto. generalize (div_correct p a a). rewrite plus_op_zero; try rewrite (fun x => mult_comm x zero); try rewrite mult_zero; try rewrite plus_zero; try rewrite H; auto. intros H1; rewrite <- H1; auto. rewrite (fun x => plus_comm x zero); auto. Qed. Theorem length_decrease: forall p x, p <> nil -> (length (fst (div p x)) < length p)%nat. intros p x; elim p; simpl; auto. intros H1; case H1; auto. intros a l; case l; simpl; auto. intros a1 l1. match goal with |- context[fst ?A] => case A end; simpl; auto with zarith. intros p1 _ H H1. apply (Nat.succ_lt_mono (length p1)); apply H; intros; discriminate. Qed. Theorem root_max: forall p l, ulist l -> (forall i, In i p -> P i) -> (forall i, In i l -> P i) -> (forall x, In x l -> eval p x = zero) -> (length p <= length l)%nat -> forall x, P x -> eval p x = zero. intros p l; generalize p; elim l; clear l p; simpl; auto. intros p; case p; simpl; auto. intros a p1 _ _ _ _ H; contradict H; auto with arith. intros a p1 Rec p; case p. simpl; auto. intros a1 p2 H H1 H2 H3 H4 x px. assert (Hu: eval (a1 :: p2) a = zero); auto with datatypes. rewrite (div_correct_factor (a1 :: p2) a); auto with datatypes. match goal with |- mult ?X _ = _ => replace X with zero end; try apply mult_zero; auto. apply sym_equal; apply Rec; auto with datatypes. apply ulist_inv with (1 := H). intros i Hi; case (div_P (a1 :: p2) a); auto. intros x1 H5; case (mult_integral (eval (fst (div (a1 :: p2) a)) x1) (plus x1 (op a))); auto. apply eval_P; auto. intros i Hi; case (div_P (a1 :: p2) a); auto. rewrite <- div_correct_factor; auto. intros H6; case (ulist_app_inv _ (a::nil) p1 x1); simpl; auto. left. apply trans_equal with (plus zero x1); auto. rewrite <- (plus_op_zero a); try rewrite <- plus_assoc; auto. rewrite (fun x => plus_comm (op x)); try rewrite H6; try rewrite plus_comm; auto. apply sym_equal; apply plus_zero; auto. apply Nat.lt_succ_r;apply Nat.lt_le_trans with (length (a1 :: p2)); auto with zarith. apply length_decrease; auto with datatypes. Qed. Theorem root_max_is_zero: forall p l, ulist l -> (forall i, In i p -> P i) -> (forall i, In i l -> P i) -> (forall x, In x l -> eval p x = zero) -> (length p <= length l)%nat -> forall x, (In x p) -> x = zero. intros p l; generalize p; elim l; clear l p; simpl; auto. intros p; case p; simpl; auto. intros _ _ _ _ _ x H; case H. intros a p1 _ _ _ _ H; contradict H; auto with arith. intros a p1 Rec p; case p. simpl; auto. intros _ _ _ _ _ x H; case H. simpl; intros a1 p2 H H1 H2 H3 H4 x H5. assert (Ha1: a1 = zero). assert (Hu: (eval (a1::p2) zero = zero)). apply root_max with (l := a :: p1); auto. rewrite <- Hu; simpl; rewrite mult_zero; try rewrite plus_comm; sauto. case H5; clear H5; intros H5; subst; auto. apply Rec with p2; auto with arith. apply ulist_inv with (1 := H). intros x1 Hx1. case (In_dec A_dec zero p1); intros Hz. case (in_permutation_ex _ zero p1); auto; intros p3 Hp3. apply root_max with (l := a::p3); auto. apply ulist_inv with zero. apply ulist_perm with (a::p1); auto. apply permutation_trans with (a:: (zero:: p3)); auto. apply permutation_skip; auto. apply permutation_sym; auto. simpl; intros x2 [Hx2 | Hx2]; subst; auto. apply H2; right; apply permutation_in with (1 := Hp3); auto with datatypes. simpl; intros x2 [Hx2 | Hx2]; subst. case (mult_integral x2 (eval p2 x2)); auto. rewrite <- H3 with x2; sauto. rewrite plus_zero; auto. intros H6; case (ulist_app_inv _ (x2::nil) p1 x2) ; auto with datatypes. rewrite H6; apply permutation_in with (1 := Hp3); auto with datatypes. case (mult_integral x2 (eval p2 x2)); auto. apply H2; right; apply permutation_in with (1 := Hp3); auto with datatypes. apply eval_P; auto. apply H2; right; apply permutation_in with (1 := Hp3); auto with datatypes. rewrite <- H3 with x2; sauto; try right. apply sym_equal; apply plus_zero; auto. apply Pmult; auto. apply H2; right; apply permutation_in with (1 := Hp3); auto with datatypes. apply eval_P; auto. apply H2; right; apply permutation_in with (1 := Hp3); auto with datatypes. apply permutation_in with (1 := Hp3); auto with datatypes. intros H6; case (ulist_app_inv _ (zero::nil) p3 x2) ; auto with datatypes. simpl; apply ulist_perm with (1:= (permutation_sym _ _ _ Hp3)). apply ulist_inv with (1 := H). rewrite H6; auto with datatypes. replace (length (a :: p3)) with (length (zero::p3)); auto. rewrite permutation_length with (1 := Hp3); auto with arith. case (mult_integral x1 (eval p2 x1)); auto. rewrite <- H3 with x1; sauto; try right. apply sym_equal; apply plus_zero; auto. intros HH; case Hz; rewrite <- HH; auto. Qed. End Root. coqprime-8.18/src/Coqprime/PrimalityTest/Zp.v000066400000000000000000000313671451023060700212410ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) (********************************************************************** Zp.v Build the group of the inversible element on {1, 2, .., n-1} for the multiplication modulo n Definition: ZpGroup **********************************************************************) Require Import ZArith Znumtheory Zpow_facts. Require Import Tactic. Require Import Wf_nat. Require Import UList. Require Import FGroup. Require Import EGroup. Require Import IGroup. Require Import Cyclic. Require Import Euler. Require Import ZProgression. Open Scope Z_scope. Section Zp. Variable n: Z. Hypothesis n_pos: 1 < n. (************************************** mkZp m creates {m, m - 1, ..., 0} **************************************) Fixpoint mkZp_aux (m: nat): list Z:= Z_of_nat m :: match m with O => nil | (S m1) => mkZp_aux m1 end. (************************************** Some properties of mkZp_aux **************************************) Theorem mkZp_aux_length: forall m, length (mkZp_aux m) = (m + 1)%nat. intros m; elim m; simpl; auto. Qed. Theorem mkZp_aux_in: forall m p, 0 <= p <= Z_of_nat m -> In p (mkZp_aux m). intros m; elim m. simpl; auto with zarith. intros n1 Rec p (H1, H2); case Zle_lt_or_eq with (1 := H2); clear H2; intro H2. rewrite inj_S in H2. simpl; right; apply Rec; split; auto with zarith. rewrite H2; simpl; auto. Qed. Theorem in_mkZp_aux: forall m p, In p (mkZp_aux m) -> 0 <= p <= Z_of_nat m. intros m; elim m; clear m. simpl; intros p H1; case H1; clear H1; intros H1; subst; auto with zarith. intros m1; generalize (inj_S m1); simpl. intros H Rec p [H1 | H1]. rewrite <- H1; rewrite H; auto with zarith. rewrite H; case (Rec p); auto with zarith. Qed. Theorem mkZp_aux_ulist: forall m, ulist (mkZp_aux m). intros m; elim m; simpl; auto. intros m1 H; apply ulist_cons; auto. change (~ In (Z_of_nat (S m1)) (mkZp_aux m1)). rewrite inj_S; intros H1. case in_mkZp_aux with (1 := H1); auto with zarith. Qed. (************************************** mkZp creates {n - 1, ..., 1, 0} **************************************) Definition mkZp := mkZp_aux (Z.abs_nat (n - 1)). (************************************** Some properties of mkZp **************************************) Theorem mkZp_length: length mkZp = Z.abs_nat n. unfold mkZp; rewrite mkZp_aux_length. apply inj_eq_rev. rewrite inj_plus. simpl; repeat rewrite inj_Zabs_nat. repeat rewrite Z.abs_eq; auto with zarith. Qed. Theorem mkZp_in: forall p, 0 <= p < n -> In p mkZp. intros p (H1, H2); unfold mkZp; apply mkZp_aux_in. rewrite inj_Zabs_nat. repeat rewrite Z.abs_eq; auto with zarith. Qed. Theorem in_mkZp: forall p, In p mkZp -> 0 <= p < n. intros p H; case (in_mkZp_aux (Z.abs_nat (n - 1)) p). auto with zarith. rewrite inj_Zabs_nat. repeat rewrite Z.abs_eq; auto with zarith. Qed. Theorem mkZp_ulist: ulist mkZp. unfold mkZp; apply mkZp_aux_ulist; auto. Qed. (************************************** Multiplication of two pairs **************************************) Definition pmult (p q: Z) := (p * q) mod n. (************************************** Properties of multiplication **************************************) Theorem pmult_assoc: forall p q r, (pmult p (pmult q r)) = (pmult (pmult p q) r). assert (Hu: 0 < n); try apply Z.lt_trans with 1; auto with zarith. generalize Zmod_mod; intros H. intros p q r; unfold pmult. rewrite (Zmult_mod p); auto. repeat rewrite Zmod_mod; auto. rewrite (Zmult_mod q); auto. rewrite <- Zmult_mod; auto. rewrite Zmult_assoc. rewrite (Zmult_mod (p * (q mod n))); auto. rewrite (Zmult_mod ((p * q) mod n)); auto. eq_tac; auto. eq_tac; auto. rewrite (Zmult_mod p); sauto. rewrite Zmod_mod; auto. rewrite <- Zmult_mod; sauto. Qed. Theorem pmult_1_l: forall p, In p mkZp -> pmult 1 p = p. intros p H; unfold pmult; rewrite Zmult_1_l. apply Zmod_small. case (in_mkZp p); auto with zarith. Qed. Theorem pmult_1_r: forall p, In p mkZp -> pmult p 1 = p. intros p H; unfold pmult; rewrite Zmult_1_r. apply Zmod_small. case (in_mkZp p); auto with zarith. Qed. Theorem pmult_comm: forall p q, pmult p q = pmult q p. intros p q; unfold pmult; rewrite Zmult_comm; auto. Qed. Definition Lrel := isupport_aux _ pmult mkZp 1 Z.eq_dec (progression Z.succ 0 (Z.abs_nat n)). Theorem rel_prime_is_inv: forall a, is_inv Z pmult mkZp 1 Z.eq_dec a = if (rel_prime_dec a n) then true else false. assert (Hu: 0 < n); try apply Z.lt_trans with 1; auto with zarith. intros a; case (rel_prime_dec a n); intros H. assert (H1: Bezout a n 1); try apply rel_prime_bezout; auto. inversion H1 as [c d Hcd]; clear H1. assert (pmult (c mod n) a = 1). unfold pmult; rewrite Zmult_mod; try rewrite Zmod_mod; auto. rewrite <- Zmult_mod; auto. replace (c * a) with (1 + (-d) * n). rewrite Z_mod_plus; auto with zarith. rewrite Zmod_small; auto with zarith. rewrite <- Hcd; ring. apply is_inv_true with (a := (c mod n)); auto. rewrite pmult_comm; auto. apply mkZp_in; auto with zarith. apply Z_mod_lt; auto with zarith. apply is_inv_false. intros c H1; left; intros H2; contradict H. apply bezout_rel_prime. apply Bezout_intro with c (- (Z.div (c * a) n)). pattern (c * a) at 1; rewrite (Z_div_mod_eq_full (c * a) n). unfold pmult in H2; rewrite (Zmult_comm c); try rewrite H2. ring. Qed. (************************************** We are now ready to build our group **************************************) Definition ZPGroup : (FGroup pmult). apply IGroup with (support := mkZp) (e:= 1). exact Z.eq_dec. apply mkZp_ulist. apply mkZp_in; auto with zarith. intros a b H1 H2; apply mkZp_in. unfold pmult; apply Z_mod_lt; auto with zarith. intros; apply pmult_assoc. exact pmult_1_l. exact pmult_1_r. Defined. Theorem in_ZPGroup: forall p, rel_prime p n -> 0 <= p < n -> In p ZPGroup.(s). intros p H (H1, H2); unfold ZPGroup; simpl. apply isupport_is_in. generalize (rel_prime_is_inv p); case (rel_prime_dec p); auto. apply mkZp_in; auto with zarith. Qed. Theorem phi_is_length: phi n = Z_of_nat (length Lrel). assert (Hu: 0 < n); try apply Z.lt_trans with 1; auto with zarith. rewrite phi_def_with_0; auto. unfold Zsum, Lrel; rewrite Zle_imp_le_bool; auto with zarith. replace (1 + (n - 1) - 0) with n; auto with zarith. elim (progression Z.succ 0 (Z.abs_nat n)); simpl; auto. intros a l1 Rec. rewrite Rec. rewrite rel_prime_is_inv. case (rel_prime_dec a n); auto with zarith. simpl length; rewrite inj_S; auto with zarith. Qed. Theorem phi_is_order: phi n = g_order ZPGroup. unfold g_order; rewrite phi_is_length. eq_tac; apply permutation_length. apply ulist_incl2_permutation. unfold Lrel; apply isupport_aux_ulist. apply ulist_Zprogression; auto. apply ZPGroup.(unique_s). intros a H; unfold ZPGroup; simpl. apply isupport_is_in. unfold Lrel in H; apply isupport_aux_is_inv_true with (1 := H). apply mkZp_in; auto. assert (In a (progression Z.succ 0 (Z.abs_nat n))). apply (isupport_aux_incl _ pmult mkZp 1 Z.eq_dec); auto. split. apply Zprogression_le_init with (1 := H0). replace n with (0 + Z_of_nat (Z.abs_nat n)). apply Zprogression_le_end with (1 := H0). rewrite inj_Zabs_nat. rewrite Z.abs_eq; auto with zarith. intros a H; unfold Lrel; simpl. apply isupport_aux_is_in. simpl in H; apply isupport_is_inv_true with (1 := H). apply in_Zprogression. rewrite Zplus_0_l; rewrite inj_Zabs_nat; auto with zarith. rewrite Z.abs_eq; auto with zarith. assert (In a mkZp). apply (isupport_aux_incl _ pmult mkZp 1 Z.eq_dec); auto. apply in_mkZp; auto. Qed. Theorem Zp_cyclic: prime n -> cyclic Z.eq_dec ZPGroup. intros H1. unfold ZPGroup, pmult; generalize (cyclic_field _ (fun x y => (x + y) mod n) (fun x y => (x * y) mod n) (fun x => (-x) mod n) 0); unfold IA; intros tmp; apply tmp; clear tmp; auto. intros; discriminate. apply mkZp_in; auto with zarith. intros; apply mkZp_in; auto with zarith. apply Z_mod_lt; auto with zarith. intros; rewrite Zplus_0_l; auto. apply Zmod_small; auto. apply in_mkZp; auto. intros; rewrite Zplus_comm; auto. intros a b c Ha Hb Hc. pattern a at 1; rewrite <- (Zmod_small a n); auto with zarith. pattern c at 2; rewrite <- (Zmod_small c n); auto with zarith. repeat rewrite <- Zplus_mod; auto with zarith. eq_tac; auto with zarith. apply in_mkZp; auto. apply in_mkZp; auto. intros; eq_tac; auto with zarith. intros a b c Ha Hb Hc. pattern a at 1; rewrite <- (Zmod_small a n); auto with zarith. repeat rewrite <- Zmult_mod; auto with zarith. repeat rewrite <- Zplus_mod; auto with zarith. eq_tac; auto with zarith. apply in_mkZp; auto. intros; apply mkZp_in; apply Z_mod_lt; auto with zarith. intros a Ha. pattern a at 1; rewrite <- (Zmod_small a n); auto with zarith. repeat rewrite <- Zplus_mod; auto with zarith. rewrite <- (Zmod_small 0 n); auto with zarith. eq_tac; auto with zarith. apply in_mkZp; auto. intros a b Ha Hb H; case (prime_mult n H1 a b). apply Zmod_divide; auto with zarith. intros H2; left. case (Zle_lt_or_eq 0 a); auto. case (in_mkZp a); auto. intros H3; absurd (n <= a). apply Zlt_not_le. case (in_mkZp a); auto. apply Zdivide_le; auto with zarith. intros H2; right. case (Zle_lt_or_eq 0 b); auto. case (in_mkZp b); auto. intros H3; absurd (n <= b). apply Zlt_not_le. case (in_mkZp b); auto. apply Zdivide_le; auto with zarith. Qed. End Zp. (* Definition of the order (0 for q < 1) *) Definition Zorder: Z -> Z -> Z. intros p q; case (Z_le_dec q 1); intros H. exact 0. refine (e_order Z.eq_dec (p mod q) (ZPGroup q _)); auto with zarith. Defined. Theorem Zorder_pos: forall p n, 0 <= Zorder p n. intros p n; unfold Zorder. case (Z_le_dec n 1); auto with zarith. intros n1. apply Zlt_le_weak; apply e_order_pos. Qed. Theorem in_mod_ZPGroup : forall (n : Z) (n_pos : 1 < n) (p : Z), rel_prime p n -> In (p mod n) (s (ZPGroup n n_pos)). intros n H p H1. apply in_ZPGroup; auto. apply rel_prime_mod; auto with zarith. apply Z_mod_lt; auto with zarith. Qed. Theorem Zpower_mod_is_gpow: forall p q n (Hn: 1 < n), rel_prime p n -> 0 <= q -> p ^ q mod n = gpow (p mod n) (ZPGroup n Hn) q. intros p q n H Hp H1; generalize H1; pattern q; apply natlike_ind; simpl; auto. intros _; apply Zmod_small; auto with zarith. intros n1 Hn1 Rec _; simpl. generalize (in_mod_ZPGroup _ H _ Hp); intros Hu. unfold Z.succ; rewrite Zpower_exp; try rewrite Zpower_1_r; auto with zarith. rewrite gpow_add; auto with zarith. rewrite gpow_1; auto; rewrite <- Rec; auto. rewrite Zmult_mod; auto. Qed. Theorem Zorder_div_power: forall p q n, 1 < n -> rel_prime p n -> p ^ q mod n = 1 -> (Zorder p n | q). intros p q n H H1 H2. assert (Hq: 0 <= q). generalize H2; case q; simpl; auto with zarith. intros p1 H3; contradict H3; rewrite Zmod_small; auto with zarith. unfold Zorder; case (Z_le_dec n 1). intros H3; contradict H; auto with zarith. intros H3; apply e_order_divide_gpow; auto. apply in_mod_ZPGroup; auto. rewrite <- Zpower_mod_is_gpow; auto with zarith. Qed. Theorem Zorder_div: forall p n, prime n -> ~(n | p) -> (Zorder p n | n - 1). intros p n H; unfold Zorder. case (Z_le_dec n 1); intros H1 H2. contradict H1; generalize (prime_ge_2 n H); auto with zarith. rewrite <- prime_phi_n_minus_1; auto. match goal with |- context[ZPGroup _ ?H2] => rewrite phi_is_order with (n_pos := H2) end. apply e_order_divide_g_order; auto. apply in_mod_ZPGroup; auto. apply rel_prime_sym; apply prime_rel_prime; auto. Qed. Theorem Zorder_power_is_1: forall p n, 1 < n -> rel_prime p n -> p ^ (Zorder p n) mod n = 1. intros p n H H1; unfold Zorder. case (Z_le_dec n 1); intros H2. contradict H; auto with zarith. let x := match goal with |- context[ZPGroup _ ?X] => X end in rewrite Zpower_mod_is_gpow with (Hn := x); auto with zarith. rewrite gpow_e_order_is_e. reflexivity. apply in_mod_ZPGroup; auto. apply Zlt_le_weak; apply e_order_pos. Qed. Theorem Zorder_power_pos: forall p n, 1 < n -> rel_prime p n -> 0 < Zorder p n. intros p n H H1; unfold Zorder. case (Z_le_dec n 1); intros H2. contradict H; auto with zarith. apply e_order_pos. Qed. Theorem phi_power_is_1: forall p n, 1 < n -> rel_prime p n -> p ^ (phi n) mod n = 1. intros p n H H1. assert (V1:= Zorder_power_pos p n H H1). assert (H2: (Zorder p n | phi n)). unfold Zorder. case (Z_le_dec n 1); intros H2. contradict H; auto with zarith. match goal with |- context[ZPGroup n ?H] => rewrite phi_is_order with (n_pos := H) end. apply e_order_divide_g_order. apply in_mod_ZPGroup; auto. case H2; clear H2; intros q H2; rewrite H2. rewrite Zmult_comm. assert (V2 := (phi_pos _ H)). assert (V3: 0 <= q). rewrite H2 in V2. apply Zlt_le_weak; apply Zmult_lt_0_reg_r with (2 := V2); auto with zarith. rewrite Zpower_mult; auto with zarith. rewrite Zpower_mod; auto with zarith. rewrite Zorder_power_is_1; auto. rewrite Zpower_1_l; auto with zarith. apply Zmod_small; auto with zarith. Qed. coqprime-8.18/src/Coqprime/Tactic/000077500000000000000000000000001451023060700170445ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/Tactic/.depend000066400000000000000000000000761451023060700203070ustar00rootroot00000000000000Tactic.vo: Tactic.v Tactic.vi: Tactic.v Tactic.html: Tactic.v coqprime-8.18/src/Coqprime/Tactic/Tactic.v000066400000000000000000000060601451023060700204440ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) (********************************************************************** Tactic.v Useful tactics **********************************************************************) (************************************** A simple tactic to end a proof **************************************) Ltac finish := intros; auto; trivial; discriminate. (************************************** A tactic for proof by contradiction with contradict H H: ~A |- B gives |- A H: ~A |- ~ B gives H: B |- A H: A |- B gives |- ~ A H: A |- B gives |- ~ A H: A |- ~ B gives H: A |- ~ A **************************************) Ltac contradict name := let term := type of name in ( match term with (~_) => match goal with |- ~ _ => let x := fresh in (intros x; case name; generalize x; clear x name; intro name) | |- _ => case name; clear name end | _ => match goal with |- ~ _ => let x := fresh in (intros x; absurd term; [idtac | exact name]; generalize x; clear x name; intros name) | |- _ => generalize name; absurd term; [idtac | exact name]; clear name end end). (************************************** A tactic to do case analysis keeping the equality **************************************) Ltac case_eq name := generalize (refl_equal name); pattern name at -1 in |- *; case name. (************************************** A tactic to use f_equal? theorems **************************************) Ltac eq_tac := match goal with |- (?g _ = ?g _) => apply f_equal with (f := g) | |- (?g ?X _ = ?g ?X _) => apply f_equal with (f := g X) | |- (?g _ _ = ?g _ _) => apply f_equal2 with (f := g) | |- (?g ?X ?Y _ = ?g ?X ?Y _) => apply f_equal with (f := g X Y) | |- (?g ?X _ _ = ?g ?X _ _) => apply f_equal2 with (f := g X) | |- (?g _ _ _ = ?g _ _ _) => apply f_equal3 with (f := g) | |- (?g ?X ?Y ?Z _ = ?g ?X ?Y ?Z _) => apply f_equal with (f := g X Y Z) | |- (?g ?X ?Y _ _ = ?g ?X ?Y _ _) => apply f_equal2 with (f := g X Y) | |- (?g ?X _ _ _ = ?g ?X _ _ _) => apply f_equal3 with (f := g X) | |- (?g _ _ _ _ _ = ?g _ _ _ _) => apply f_equal4 with (f := g) end. (************************************** A stupid tactic that tries auto also after applying sym_equal **************************************) Ltac sauto := (intros; apply sym_equal; auto; fail) || auto. coqprime-8.18/src/Coqprime/Z/000077500000000000000000000000001451023060700160465ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/Z/.depend000066400000000000000000000020031451023060700173010ustar00rootroot00000000000000Pmod.vo: Pmod.v Zmisc.vo Pmod.vi: Pmod.v Zmisc.vo ZAux.vo: ZAux.v ../Tactic/Tactic.vo ZAux.vi: ZAux.v ../Tactic/Tactic.vo ZDivModAux.vo: ZDivModAux.v ../Tactic/Tactic.vo ZAux.vo ZPowerAux.vo ZDivModAux.vi: ZDivModAux.v ../Tactic/Tactic.vo ZAux.vo ZPowerAux.vo Zmisc.vo: Zmisc.v Zmisc.vi: Zmisc.v ZPowerAux.vo: ZPowerAux.v ../Tactic/Tactic.vo ZPowerAux.vi: ZPowerAux.v ../Tactic/Tactic.vo ZSum.vo: ZSum.v ../List/ListAux.vo ZAux.vo ../List/Iterator.vo ../List/ZProgression.vo ZSum.vi: ZSum.v ../List/ListAux.vo ZAux.vo ../List/Iterator.vo ../List/ZProgression.vo Ppow.vo: Ppow.v ZAux.vo Ppow.vi: Ppow.v ZAux.vo Zmod.vo: Zmod.v ZAux.vo Zmod.vi: Zmod.v ZAux.vo Pmod.html: Pmod.v Zmisc.html ZAux.html: ZAux.v ../Tactic/Tactic.html ZDivModAux.html: ZDivModAux.v ../Tactic/Tactic.html ZAux.html ZPowerAux.html Zmisc.html: Zmisc.v ZPowerAux.html: ZPowerAux.v ../Tactic/Tactic.html ZSum.html: ZSum.v ../List/ListAux.html ZAux.html ../List/Iterator.html ../List/ZProgression.html Ppow.html: Ppow.v ZAux.html Zmod.html: Zmod.v ZAux.html coqprime-8.18/src/Coqprime/Z/Pmod.v000066400000000000000000000466661451023060700171560ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Require Export ZArith Lia. Require Export ZCmisc. (* Compatibility with Coq versions not supporting hint localities *) Set Warnings "-unsupported-attributes". Local Open Scope positive_scope. Local Open Scope P_scope. (* [div_eucl a b] return [(q,r)] such that a = q*b + r *) Fixpoint div_eucl (a b : positive) {struct a} : N * N := match a with | xH => if 1 ?< b then (0%N, 1%N) else (1%N, 0%N) | xO a' => let (q, r) := div_eucl a' b in match q, r with | N0, N0 => (0%N, 0%N) (* n'arrive jamais *) | N0, Npos r => if (xO r) ?< b then (0%N, Npos (xO r)) else (1%N,PminusN (xO r) b) | Npos q, N0 => (Npos (xO q), 0%N) | Npos q, Npos r => if (xO r) ?< b then (Npos (xO q), Npos (xO r)) else (Npos (xI q),PminusN (xO r) b) end | xI a' => let (q, r) := div_eucl a' b in match q, r with | N0, N0 => (0%N, 0%N) (* Impossible *) | N0, Npos r => if (xI r) ?< b then (0%N, Npos (xI r)) else (1%N,PminusN (xI r) b) | Npos q, N0 => if 1 ?< b then (Npos (xO q), 1%N) else (Npos (xI q), 0%N) | Npos q, Npos r => if (xI r) ?< b then (Npos (xO q), Npos (xI r)) else (Npos (xI q),PminusN (xI r) b) end end. Infix "/" := div_eucl : P_scope. Open Scope Z_scope. Opaque Zmult. Lemma div_eucl_spec : forall a b, Zpos a = fst (a/b)%P * b + snd (a/b)%P /\ snd (a/b)%P < b. Proof with zsimpl;try apply Zlt_0_pos;try ((ring;fail) || lia). intros a b;generalize a;clear a;induction a;simpl;zsimpl. case IHa; destruct (a/b)%P as [q r]. case q; case r; simpl fst; simpl snd. rewrite Zmult_0_l; rewrite Zplus_0_r; intros HH; discriminate HH. intros p H; rewrite H; match goal with | [|- context [ ?xx ?< b ]] => generalize (is_lt_spec xx b);destruct (xx ?< b) | _ => idtac end; zsimpl; simpl; intros H1 H2; split; zsimpl; auto. rewrite PminusN_le... generalize H1; zsimpl; auto. rewrite PminusN_le... intros p H; rewrite H; match goal with | [|- context [ ?xx ?< b ]] => generalize (is_lt_spec xx b);destruct (xx ?< b) | _ => idtac end; zsimpl; simpl; intros H1 H2; split; zsimpl; auto; try ring. ring_simplify. case (Zle_lt_or_eq _ _ H1); auto with zarith. intros p p1 H; rewrite H. match goal with | [|- context [ ?xx ?< b ]] => generalize (is_lt_spec xx b);destruct (xx ?< b) | _ => idtac end; zsimpl; simpl; intros H1 H2; split; zsimpl; auto; try ring. rewrite PminusN_le... generalize H1; zsimpl; auto. rewrite PminusN_le... case IHa; destruct (a/b)%P as [q r]. case q; case r; simpl fst; simpl snd. rewrite Zmult_0_l; rewrite Zplus_0_r; intros HH; discriminate HH. intros p H; rewrite H; match goal with | [|- context [ ?xx ?< b ]] => generalize (is_lt_spec xx b);destruct (xx ?< b) | _ => idtac end; zsimpl; simpl; intros H1 H2; split; zsimpl; auto. rewrite PminusN_le... generalize H1; zsimpl; auto. rewrite PminusN_le... intros p H; rewrite H; simpl; intros H1; split; auto. zsimpl; ring. intros p p1 H; rewrite H. match goal with | [|- context [ ?xx ?< b ]] => generalize (is_lt_spec xx b);destruct (xx ?< b) | _ => idtac end; zsimpl; simpl; intros H1 H2; split; zsimpl; auto; try ring. rewrite PminusN_le... generalize H1; zsimpl; auto. rewrite PminusN_le... match goal with | [|- context [ ?xx ?< b ]] => generalize (is_lt_spec xx b);destruct (xx ?< b) | _ => idtac end; zsimpl; simpl. split; auto. case (Zle_lt_or_eq 1 b). 2-3: auto with zarith. generalize (Zlt_0_pos b); auto with zarith. Qed. Transparent Zmult. (******** Definition du modulo ************) (* [mod a b] return [a] modulo [b] *) Fixpoint Pmod (a b : positive) {struct a} : N := match a with | xH => if 1 ?< b then 1%N else 0%N | xO a' => let r := Pmod a' b in match r with | N0 => 0%N | Npos r' => if (xO r') ?< b then Npos (xO r') else PminusN (xO r') b end | xI a' => let r := Pmod a' b in match r with | N0 => if 1 ?< b then 1%N else 0%N | Npos r' => if (xI r') ?< b then Npos (xI r') else PminusN (xI r') b end end. Infix "mod" := Pmod (at level 40, no associativity) : P_scope. Local Open Scope P_scope. Lemma Pmod_div_eucl : forall a b, a mod b = snd (a/b). Proof with auto. intros a b;generalize a;clear a;induction a;simpl; try (rewrite IHa; assert (H1 := div_eucl_spec a b); destruct (a/b) as [q r]; destruct q as [|q];destruct r as [|r];simpl in *; match goal with | [|- context [ ?xx ?< b ]] => assert (H2 := is_lt_spec xx b);destruct (xx ?< b) | _ => idtac end;simpl) ... destruct H1 as [H3 H4];discriminate H3. destruct (1 ?< b);simpl ... Qed. Lemma mod1: forall a, a mod 1 = 0%N. Proof. induction a;simpl;try rewrite IHa;trivial. Qed. Lemma mod_a_a_0 : forall a, a mod a = N0. Proof. intros a;generalize (div_eucl_spec a a);rewrite <- Pmod_div_eucl. destruct (fst (a / a));unfold Z_of_N at 1. rewrite Zmult_0_l;intros (H1,H2);exfalso;lia. assert (a<=p*a). pattern (Zpos a) at 1;rewrite <- (Zmult_1_l a). assert (H1:= Zlt_0_pos p);assert (H2:= Zle_0_pos a); apply Zmult_le_compat;trivial;try lia. destruct (a mod a)%P;auto with zarith. unfold Z_of_N;assert (H1:= Zlt_0_pos p0);intros (H2,H3);exfalso;lia. Qed. Lemma mod_le_2r : forall (a b r: positive) (q:N), Zpos a = b*q + r -> b <= a -> r < b -> 2*r <= a. Proof. intros a b r q H0 H1 H2. assert (H3:=Zlt_0_pos a). assert (H4:=Zlt_0_pos b). assert (H5:=Zlt_0_pos r). destruct q as [|q]. rewrite Zmult_0_r in H0. exfalso;lia. assert (H6:=Zlt_0_pos q). unfold Z_of_N in H0. assert (Zpos r = a - b*q). lia. simpl;zsimpl. pattern r at 2;rewrite H. assert (b <= b * q). pattern (Zpos b) at 1;rewrite <- (Zmult_1_r b). apply Zmult_le_compat;try lia. apply Z.le_trans with (a - b * q + b). lia. apply Z.le_trans with (a - b + b);lia. Qed. Lemma mod_lt : forall a b r, a mod b = Npos r -> r < b. Proof. intros a b r H;generalize (div_eucl_spec a b);rewrite <- Pmod_div_eucl; rewrite H;simpl;intros (H1,H2);lia. Qed. Lemma mod_le : forall a b r, a mod b = Npos r -> r <= b. Proof. intros a b r H;assert (H1:= mod_lt _ _ _ H);lia. Qed. Lemma mod_le_a : forall a b r, a mod b = r -> r <= a. Proof. intros a b r H;generalize (div_eucl_spec a b);rewrite <- Pmod_div_eucl; rewrite H;simpl;intros (H1,H2). assert (0 <= fst (a / b) * b). destruct (fst (a / b));simpl;auto with zarith. auto with zarith. Qed. Lemma lt_mod : forall a b, Zpos a < Zpos b -> (a mod b)%P = Npos a. Proof. intros a b H; rewrite Pmod_div_eucl. case (div_eucl_spec a b). assert (0 <= snd(a/b)). destruct (snd(a/b));simpl;auto with zarith. destruct (fst (a/b)). unfold Z_of_N at 1;rewrite Zmult_0_l;rewrite Zplus_0_l. destruct (snd (a/b));simpl; intros H1 H2;inversion H1;trivial. unfold Z_of_N at 1;assert (b <= p*b). pattern (Zpos b) at 1; rewrite <- (Zmult_1_l (Zpos b)). assert (H1 := Zlt_0_pos p);apply Zmult_le_compat;try lia. lia. Qed. Fixpoint gcd_log2 (a b c:positive) {struct c}: option positive := match a mod b with | N0 => Some b | Npos r => match b mod r, c with | N0, _ => Some r | Npos r', xH => None | Npos r', xO c' => gcd_log2 r r' c' | Npos r', xI c' => gcd_log2 r r' c' end end. Fixpoint egcd_log2 (a b c:positive) {struct c}: option (Z * Z * positive) := match a/b with | (_, N0) => Some (0, 1, b) | (q, Npos r) => match b/r, c with | (_, N0), _ => Some (1, -q, r) | (q', Npos r'), xH => None | (q', Npos r'), xO c' => match egcd_log2 r r' c' with None => None | Some (u', v', w') => let u := u' - v' * q' in Some (u, v' - q * u, w') end | (q', Npos r'), xI c' => match egcd_log2 r r' c' with None => None | Some (u', v', w') => let u := u' - v' * q' in Some (u, v' - q * u, w') end end end. Lemma egcd_gcd_log2: forall c a b, match egcd_log2 a b c, gcd_log2 a b c with None, None => True | Some (u,v,r), Some r' => r = r' | _, _ => False end. induction c; simpl; auto; try (intros a b; generalize (Pmod_div_eucl a b); case (a/b); simpl; intros q r1 H; subst; case (a mod b); auto; intros r; generalize (Pmod_div_eucl b r); case (b/r); simpl; intros q' r1 H; subst; case (b mod r); auto; intros r'; generalize (IHc r r'); case egcd_log2; auto; intros ((p1,p2),p3); case gcd_log2; auto). Qed. Ltac rw l := match l with | (?r, ?r1) => match type of r with True => rewrite <- r1 | _ => rw r; rw r1 end | ?r => rewrite r end. Lemma egcd_log2_ok: forall c a b, match egcd_log2 a b c with None => True | Some (u,v,r) => u * a + v * b = r end. induction c; simpl; auto; intros a b; generalize (div_eucl_spec a b); case (a/b); simpl fst; simpl snd; intros q r1; case r1; try (intros; ring); simpl; intros r (Hr1, Hr2); clear r1; generalize (div_eucl_spec b r); case (b/r); simpl fst; simpl snd; intros q' r1; case r1; try (intros; rewrite Hr1; ring); simpl; intros r' (Hr'1, Hr'2); clear r1; auto; generalize (IHc r r'); case egcd_log2; auto; intros ((u',v'),w'); case gcd_log2; auto; intros; rw ((I, H), Hr1, Hr'1); ring. Qed. Fixpoint log2 (a:positive) : positive := match a with | xH => xH | xO a => Pos.succ (log2 a) | xI a => Pos.succ (log2 a) end. Lemma gcd_log2_1: forall a c, gcd_log2 a xH c = Some xH. Proof. destruct c;simpl;try rewrite mod1;trivial. Qed. Lemma log2_Zle :forall a b, Zpos a <= Zpos b -> log2 a <= log2 b. Proof with zsimpl;try lia. induction a;destruct b;zsimpl;intros;simpl ... assert (log2 a <= log2 b) ... apply IHa ... assert (log2 a <= log2 b) ... apply IHa ... assert (log2 a <= log2 b) ... apply IHa ... assert (log2 a <= log2 b) ... apply IHa ... Qed. Lemma log2_1_inv : forall a, Zpos (log2 a) = 1 -> a = xH. Proof. destruct a;simpl;zsimpl;intros;trivial. assert (H1:= Zlt_0_pos (log2 a));exfalso;lia. assert (H1:= Zlt_0_pos (log2 a));exfalso;lia. Qed. Lemma mod_log2 : forall a b r:positive, a mod b = Npos r -> b <= a -> log2 r + 1 <= log2 a. Proof. intros; cut (log2 (xO r) <= log2 a). simpl;zsimpl;trivial. apply log2_Zle. replace (Zpos (xO r)) with (2 * r)%Z;trivial. generalize (div_eucl_spec a b);rewrite <- Pmod_div_eucl;rewrite H. rewrite Zmult_comm;intros [H1 H2];apply mod_le_2r with b (fst (a/b));trivial. Qed. Lemma gcd_log2_None_aux : forall c a b, Zpos b <= Zpos a -> log2 b <= log2 c -> gcd_log2 a b c <> None. Proof. induction c;simpl;intros; (CaseEq (a mod b);[intros Heq|intros r Heq];try (intro;discriminate)); (CaseEq (b mod r);[intros Heq'|intros r' Heq'];try (intro;discriminate)). apply IHc. apply mod_le with b;trivial. generalize H0 (mod_log2 _ _ _ Heq' (mod_le _ _ _ Heq));zsimpl;intros;lia. apply IHc. apply mod_le with b;trivial. generalize H0 (mod_log2 _ _ _ Heq' (mod_le _ _ _ Heq));zsimpl;intros;lia. assert (Zpos (log2 b) = 1). assert (H1 := Zlt_0_pos (log2 b));lia. rewrite (log2_1_inv _ H1) in Heq;rewrite mod1 in Heq;discriminate Heq. Qed. Lemma gcd_log2_None : forall a b, Zpos b <= Zpos a -> gcd_log2 a b b <> None. Proof. intros;apply gcd_log2_None_aux;auto with zarith. Qed. Lemma gcd_log2_Zle : forall c1 c2 a b, log2 c1 <= log2 c2 -> gcd_log2 a b c1 <> None -> gcd_log2 a b c2 = gcd_log2 a b c1. Proof with zsimpl;trivial;try lia. induction c1;destruct c2;simpl;intros; (destruct (a mod b) as [|r];[idtac | destruct (b mod r)]) ... apply IHc1;trivial. generalize H;zsimpl;intros;lia. apply IHc1;trivial. generalize H;zsimpl;intros;lia. apply IHc1;trivial. generalize H;zsimpl;intros;lia. apply IHc1;trivial. generalize H;zsimpl;intros;lia. elim H0;trivial. elim H0;trivial. Qed. Lemma gcd_log2_Zle_log : forall a b c, log2 b <= log2 c -> Zpos b <= Zpos a -> gcd_log2 a b c = gcd_log2 a b b. Proof. intros a b c H1 H2; apply gcd_log2_Zle; trivial. apply gcd_log2_None; trivial. Qed. Lemma gcd_log2_mod0 : forall a b c, a mod b = N0 -> gcd_log2 a b c = Some b. Proof. intros a b c H;destruct c;simpl;rewrite H;trivial. Qed. Require Import Zwf. Lemma Zwf_pos : well_founded (fun x y => Zpos x < Zpos y). Proof. unfold well_founded. assert (forall x a ,x = Zpos a -> Acc (fun x y : positive => x < y) a). intros x;assert (Hacc := Zwf_well_founded 0 x);induction Hacc;intros;subst x. constructor;intros. apply H0 with (Zpos y);trivial. split;auto with zarith. intros a;apply H with (Zpos a);trivial. Qed. Opaque Pmod. Lemma gcd_log2_mod : forall a b, Zpos b <= Zpos a -> forall r, a mod b = Npos r -> gcd_log2 a b b = gcd_log2 b r r. Proof. intros a b;generalize a;clear a; assert (Hacc := Zwf_pos b). induction Hacc; intros a Hle r Hmod. rename x into b. destruct b;simpl;rewrite Hmod. CaseEq (xI b mod r)%P;intros. rewrite gcd_log2_mod0;trivial. assert (H2 := mod_le _ _ _ H1);assert (H3 := mod_lt _ _ _ Hmod); assert (H4 := mod_le _ _ _ Hmod). rewrite (gcd_log2_Zle_log r p b);trivial. symmetry;apply H0;trivial. generalize (mod_log2 _ _ _ H1 H4);simpl;zsimpl;intros;lia. CaseEq (xO b mod r)%P;intros. rewrite gcd_log2_mod0;trivial. assert (H2 := mod_le _ _ _ H1);assert (H3 := mod_lt _ _ _ Hmod); assert (H4 := mod_le _ _ _ Hmod). rewrite (gcd_log2_Zle_log r p b);trivial. symmetry;apply H0;trivial. generalize (mod_log2 _ _ _ H1 H4);simpl;zsimpl;intros;lia. rewrite mod1 in Hmod;discriminate Hmod. Qed. Lemma gcd_log2_xO_Zle : forall a b, Zpos b <= Zpos a -> gcd_log2 a b (xO b) = gcd_log2 a b b. Proof. intros a b Hle;apply gcd_log2_Zle. simpl;zsimpl;auto with zarith. apply gcd_log2_None_aux;auto with zarith. Qed. Lemma gcd_log2_xO_Zlt : forall a b, Zpos a < Zpos b -> gcd_log2 a b (xO b) = gcd_log2 b a a. Proof. intros a b H;simpl. assert (Hlt := Zlt_0_pos a). assert (H0 := lt_mod _ _ H). rewrite H0;simpl. CaseEq (b mod a)%P;intros;simpl. symmetry;apply gcd_log2_mod0;trivial. assert (H2 := mod_lt _ _ _ H1). rewrite (gcd_log2_Zle_log a p b);auto with zarith. symmetry;apply gcd_log2_mod;auto with zarith. apply log2_Zle. replace (Zpos p) with (Z_of_N (Npos p));trivial. apply mod_le_a with a;trivial. Qed. Lemma gcd_log2_x0 : forall a b, gcd_log2 a b (xO b) <> None. Proof. intros;simpl;CaseEq (a mod b)%P;intros. intro;discriminate. CaseEq (b mod p)%P;intros. intro;discriminate. assert (H1 := mod_le_a _ _ _ H0). unfold Z_of_N in H1. assert (H2 := mod_le _ _ _ H0). apply gcd_log2_None_aux. trivial. apply log2_Zle. trivial. Qed. Lemma egcd_log2_x0 : forall a b, egcd_log2 a b (xO b) <> None. Proof. intros a b H; generalize (egcd_gcd_log2 (xO b) a b) (gcd_log2_x0 a b); rw H; case gcd_log2; auto. Qed. Definition gcd a b := match gcd_log2 a b (xO b) with | Some p => p | None => (* can not appear *) 1%positive end. Definition egcd a b := match egcd_log2 a b (xO b) with | Some p => p | None => (* can not appear *) (1,1,1%positive) end. Lemma gcd_mod0 : forall a b, (a mod b)%P = N0 -> gcd a b = b. Proof. intros a b H;unfold gcd. pattern (gcd_log2 a b (xO b)) at 1; rewrite (gcd_log2_mod0 _ _ (xO b) H);trivial. Qed. Lemma gcd1 : forall a, gcd a xH = xH. Proof. intros a;rewrite gcd_mod0;[trivial|apply mod1]. Qed. Lemma gcd_mod : forall a b r, (a mod b)%P = Npos r -> gcd a b = gcd b r. Proof. intros a b r H;unfold gcd. assert (log2 r <= log2 (xO r)). simpl;zsimpl;lia. assert (H1 := mod_lt _ _ _ H). pattern (gcd_log2 b r (xO r)) at 1; rewrite gcd_log2_Zle_log;auto with zarith. destruct (Z_lt_le_dec a b) as [z|z]. pattern (gcd_log2 a b (xO b)) at 1; rewrite gcd_log2_xO_Zlt;trivial. rewrite (lt_mod _ _ z) in H;inversion H. assert (r <= b). lia. generalize (gcd_log2_None _ _ H2). destruct (gcd_log2 b r r);intros;trivial. assert (log2 b <= log2 (xO b)). simpl;zsimpl;lia. pattern (gcd_log2 a b (xO b)) at 1; rewrite gcd_log2_Zle_log;auto with zarith. pattern (gcd_log2 a b b) at 1;rewrite (gcd_log2_mod _ _ z _ H). assert (r <= b). lia. generalize (gcd_log2_None _ _ H3). destruct (gcd_log2 b r r);intros;trivial. Qed. Require Import ZArith. Require Import Znumtheory. #[global] Hint Rewrite Zpos_mult times_Zmult square_Zmult Psucc_Zplus: zmisc. Ltac mauto := trivial;autorewrite with zmisc;trivial;auto with zarith. Lemma gcd_Zis_gcd : forall a b:positive, (Zis_gcd b a (gcd b a)%P). Proof with mauto. intros a;assert (Hacc := Zwf_pos a);induction Hacc;rename x into a;intros. generalize (div_eucl_spec b a)... rewrite <- (Pmod_div_eucl b a). CaseEq (b mod a)%P;[intros Heq|intros r Heq]; intros (H1,H2). simpl in H1;rewrite Zplus_0_r in H1. rewrite (gcd_mod0 _ _ Heq). constructor;mauto. apply Zdivide_intro with (fst (b/a)%P);trivial. rewrite (gcd_mod _ _ _ Heq). rewrite H1;apply Zis_gcd_sym. rewrite Zmult_comm;apply Zis_gcd_for_euclid2;simpl in *. apply Zis_gcd_sym;auto. Qed. Lemma egcd_Zis_gcd : forall a b:positive, let (uv,w) := egcd a b in let (u,v) := uv in u * a + v * b = w /\ (Zis_gcd b a w). Proof with mauto. intros a b; unfold egcd. generalize (egcd_log2_ok (xO b) a b) (egcd_gcd_log2 (xO b) a b) (egcd_log2_x0 a b) (gcd_Zis_gcd b a); unfold egcd, gcd. case egcd_log2; try (intros ((u,v),w)); case gcd_log2; try (intros; match goal with H: False |- _ => case H end); try (intros _ _ H1; case H1; auto; fail). intros; subst; split; try apply Zis_gcd_sym; auto. Qed. Definition Zgcd a b := match a, b with | Z0, _ => b | _, Z0 => a | Zpos a, Zneg b => Zpos (gcd a b) | Zneg a, Zpos b => Zpos (gcd a b) | Zpos a, Zpos b => Zpos (gcd a b) | Zneg a, Zneg b => Zpos (gcd a b) end. Lemma Zgcd_is_gcd : forall x y, Zis_gcd x y (Zgcd x y). Proof. destruct x;destruct y;simpl. apply Zis_gcd_0. apply Zis_gcd_sym;apply Zis_gcd_0. apply Zis_gcd_sym;apply Zis_gcd_0. apply Zis_gcd_0. apply gcd_Zis_gcd. apply Zis_gcd_sym;apply Zis_gcd_minus;simpl;apply gcd_Zis_gcd. apply Zis_gcd_0. apply Zis_gcd_minus;simpl;apply Zis_gcd_sym;apply gcd_Zis_gcd. apply Zis_gcd_minus;apply Zis_gcd_minus;simpl;apply gcd_Zis_gcd. Qed. Definition Zegcd a b := match a, b with | Z0, Z0 => (0,0,0) | Zpos _, Z0 => (1,0,a) | Zneg _, Z0 => (-1,0,-a) | Z0, Zpos _ => (0,1,b) | Z0, Zneg _ => (0,-1,-b) | Zpos a, Zneg b => match egcd a b with (u,v,w) => (u,-v, Zpos w) end | Zneg a, Zpos b => match egcd a b with (u,v,w) => (-u,v, Zpos w) end | Zpos a, Zpos b => match egcd a b with (u,v,w) => (u,v, Zpos w) end | Zneg a, Zneg b => match egcd a b with (u,v,w) => (-u,-v, Zpos w) end end. Lemma Zegcd_is_egcd : forall x y, match Zegcd x y with (u,v,w) => u * x + v * y = w /\ Zis_gcd x y w /\ 0 <= w end. Proof. assert (zx0: forall x, Zneg x = -x). simpl; auto. assert (zx1: forall x, -(-x) = x). intro x; case x; simpl; auto. destruct x;destruct y;simpl; try (split; [idtac|split]); auto; try (red; simpl; intros; discriminate); try (rewrite zx0; apply Zis_gcd_minus; try rewrite zx1; auto; apply Zis_gcd_minus; try rewrite zx1; simpl; auto); try apply Zis_gcd_0; try (apply Zis_gcd_sym;apply Zis_gcd_0); generalize (egcd_Zis_gcd p p0); case egcd; intros (u,v) w (H1, H2); split; repeat rewrite zx0; try (rewrite <- H1; ring); auto; (split; [idtac | red; intros; discriminate]). apply Zis_gcd_sym; auto. apply Zis_gcd_sym; apply Zis_gcd_minus; rw zx1; apply Zis_gcd_sym; auto. apply Zis_gcd_minus; rw zx1; auto. apply Zis_gcd_minus; rw zx1; auto. apply Zis_gcd_minus; rw zx1; auto. apply Zis_gcd_sym; auto. Qed. coqprime-8.18/src/Coqprime/Z/Ppow.v000066400000000000000000000032601451023060700171630ustar00rootroot00000000000000(*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Require Import ZArith Zpow_facts. Open Scope Z_scope. Fixpoint Ppow a z {struct z}:= match z with xH => a | xO z1 => let v := Ppow a z1 in (Pmult v v) | xI z1 => let v := Ppow a z1 in (Pmult a (Pmult v v)) end. Theorem Ppow_correct: forall a z, Zpos (Ppow a z) = (Zpos a) ^ (Zpos z). intros a z; elim z; simpl Ppow; auto; try (intros z1 Hrec; repeat rewrite Zpos_mult_morphism; rewrite Hrec). rewrite Zpos_xI; rewrite Zpower_exp. 3: auto with zarith. 2: rewrite <-Zpos_xO; red; simpl; intros; discriminate. rewrite Zpower_1_r; rewrite (Zmult_comm 2); try rewrite Zpower_mult by auto with zarith. change 2 with (1 + 1); rewrite Zpower_exp by auto with zarith. rewrite Zpower_1_r; rewrite Zmult_comm; auto. rewrite Zpos_xO; rewrite (Zmult_comm 2); rewrite Zpower_mult by auto with zarith. change 2 with (1 + 1); rewrite Zpower_exp by auto with zarith. rewrite Zpower_1_r; auto. rewrite Zpower_1_r; auto. Qed. Theorem Ppow_plus: forall a z1 z2, Ppow a (z1 + z2) = ((Ppow a z1) * (Ppow a z2))%positive. intros a z1 z2. assert (tmp: forall x y, Zpos x = Zpos y -> x = y). intros x y H; injection H; auto. apply tmp. rewrite Zpos_mult_morphism; repeat rewrite Ppow_correct. rewrite Zpos_plus_distr; rewrite Zpower_exp; auto; red; simpl; intros; discriminate. Qed. coqprime-8.18/src/Coqprime/Z/ZCAux.v000066400000000000000000000275471451023060700172460ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) (********************************************************************** ZCAux.v Auxillary functions & Theorems **********************************************************************) Require Import ArithRing. Require Export ZArith Zpow_facts. Require Export Znumtheory. Require Export Tactic. Theorem Zdivide_div_prime_le_square: forall x, 1 < x -> ~prime x -> exists p, prime p /\ (p | x) /\ p * p <= x. intros x Hx; generalize Hx; pattern x; apply Z_lt_induction. 2: auto with zarith. clear x Hx; intros x Rec H H1. case (not_prime_divide x). 1-2: auto. intros x1 ((H2, H3), H4); case (prime_dec x1); intros H5. case (Zle_or_lt (x1 * x1) x); intros H6. exists x1; auto. case H4; clear H4; intros x2 H4; subst. assert (Hx2: x2 <= x1). case (Zle_or_lt x2 x1); auto; intros H8; contradict H6; apply Zle_not_lt. apply Zmult_le_compat_r; auto with zarith. case (prime_dec x2); intros H7. exists x2. apply (conj H7). split. auto with zarith. apply Zmult_le_compat_l. auto with zarith. apply Z.le_trans with 2%Z; try apply prime_ge_2; auto with zarith. case (Zle_or_lt 0 x2); intros H8. case Zle_lt_or_eq with (1 := H8); clear H8; intros H8; subst. 2: auto with zarith. case (Zle_lt_or_eq 1 x2). auto with zarith. 1-2: clear H8; intros H8; subst. 2: auto with zarith. case (Rec x2). 1-3: auto with zarith. intros x3 (H9, (H10, H11)). exists x3; repeat (split; auto with zarith). contradict H; apply Zle_not_lt. apply Z.le_trans with (0 * x1); auto with zarith. case (Rec x1); try split; auto with zarith. intros x3 (H9, (H10, H11)). exists x3. apply (conj H9). split. 2: auto with zarith. apply Z.divide_trans with x1; auto with zarith. Qed. Theorem Zmult_interval: forall p q, 0 < p * q -> 1 < p -> 0 < q < p * q. intros p q H1 H2; assert (0 < q). case (Zle_or_lt q 0); auto; intros H3; contradict H1; apply Zle_not_lt. rewrite <- (Zmult_0_r p). apply Zmult_le_compat_l; auto with zarith. split; auto. pattern q at 1; rewrite <- (Zmult_1_l q). apply Zmult_lt_compat_r; auto with zarith. Qed. Theorem prime_induction: forall (P: Z -> Prop), P 0 -> P 1 -> (forall p q, prime p -> P q -> P (p * q)) -> forall p, 0 <= p -> P p. intros P H H1 H2 p Hp. generalize Hp; pattern p; apply Z_lt_induction; auto; clear p Hp. intros p Rec Hp. case Zle_lt_or_eq with (1 := Hp); clear Hp; intros Hp; subst; auto. case (Zle_lt_or_eq 1 p); auto with zarith; clear Hp; intros Hp; subst; auto. case (prime_dec p); intros H3. rewrite <- (Zmult_1_r p); apply H2; auto. case (Zdivide_div_prime_le_square p); auto. intros q (Hq1, ((q2, Hq2), Hq3)); subst. case (Zmult_interval q q2). rewrite Zmult_comm; apply Z.lt_trans with 1; auto with zarith. apply Z.lt_le_trans with 2; auto with zarith; apply prime_ge_2; auto. intros H4 H5; rewrite Zmult_comm; apply H2; auto. apply Rec. split. 1, 3: auto with zarith. rewrite Zmult_comm; auto. Qed. Theorem div_power_max: forall p q, 1 < p -> 0 < q -> exists n, 0 <= n /\ (p ^n | q) /\ ~(p ^(1 + n) | q). intros p q H1 H2; generalize H2; pattern q; apply Z_lt_induction; auto with zarith; clear q H2. intros q Rec H2. case (Zdivide_dec p q); intros H3. case (Zdivide_Zdiv_lt_pos p q); auto with zarith; intros H4 H5. case (Rec (Z.div q p)); auto with zarith. intros n (Ha1, (Ha2, Ha3)); exists (n + 1); split; auto with zarith; split. case Ha2; intros q1 Hq; exists q1. rewrite Zpower_exp by auto with zarith. rewrite Zpower_1_r by auto with zarith. rewrite Zmult_assoc; rewrite <- Hq. rewrite Zmult_comm; apply Zdivide_Zdiv_eq; auto with zarith. intros (q1, Hu); case Ha3; exists q1. apply Zmult_reg_r with p; auto with zarith. rewrite (Zmult_comm (q / p)); rewrite <- Zdivide_Zdiv_eq by auto with zarith. apply trans_equal with (1 := Hu). rewrite !Zpower_exp by auto with zarith. ring. exists 0; repeat split; try rewrite Zpower_1_r; auto with zarith. Qed. Theorem prime_div_induction: forall (P: Z -> Prop) n, 0 < n -> (P 1) -> (forall p i, prime p -> 0 <= i -> (p^i | n) -> P (p^i)) -> (forall p q, rel_prime p q -> P p -> P q -> P (p * q)) -> forall m, 0 <= m -> (m | n) -> P m. intros P n P1 Hn H H1 m Hm. generalize Hm; pattern m; apply Z_lt_induction; auto; clear m Hm. intros m Rec Hm H2. case (prime_dec m); intros Hm1. rewrite <- Zpower_1_r; apply H; auto with zarith. rewrite Zpower_1_r; auto. case Zle_lt_or_eq with (1 := Hm); clear Hm; intros Hm; subst. 2: contradict P1; case H2; intros; subst; auto with zarith. case (Zle_lt_or_eq 1 m); auto with zarith; clear Hm; intros Hm; subst; auto. case Zdivide_div_prime_le_square with m; auto. intros p (Hp1, (Hp2, Hp3)). case (div_power_max p m); auto with zarith. generalize (prime_ge_2 p Hp1); auto with zarith. intros i (Hi, (Hi1, Hi2)). case Zle_lt_or_eq with (1 := Hi); clear Hi; intros Hi. assert (Hpi: 0 < p ^ i). apply Zpower_gt_0; auto with zarith. apply Z.lt_le_trans with 2; try apply prime_ge_2; auto with zarith. rewrite (Z_div_exact_2 m (p ^ i)); auto with zarith. apply H1; auto with zarith. apply rel_prime_sym; apply rel_prime_Zpower_r; auto with zarith. apply rel_prime_sym. apply prime_rel_prime; auto. contradict Hi2. case Hi1; intros; subst. rewrite Z_div_mult in Hi2; auto with zarith. case Hi2; intros q0 Hq0; subst. exists q0; rewrite Zpower_exp; try rewrite Zpower_1_r; auto with zarith. apply H; auto with zarith. apply Z.divide_trans with (1 := Hi1); auto. apply Rec; auto with zarith. split; auto with zarith. apply Z_div_pos; auto with zarith. apply Z_div_lt; auto with zarith. apply Z.le_ge; apply Z.le_trans with p. apply prime_ge_2; auto. pattern p at 1; rewrite <- Zpower_1_r; apply Zpower_le_monotone; auto with zarith. apply Z.lt_le_trans with 2; try apply prime_ge_2; auto with zarith. apply Z_div_pos; auto with zarith. apply Z.divide_trans with (2 := H2); auto. exists (p ^ i); apply Z_div_exact_2; auto with zarith. apply Zdivide_mod; auto with zarith. apply Zdivide_mod; auto with zarith. case Hi2; rewrite <- Hi; rewrite Zplus_0_r; rewrite Zpower_1_r; auto. Qed. Theorem prime_div_Zpower_prime: forall n p q, 0 <= n -> prime p -> prime q -> (p | q ^ n) -> p = q. intros n p q Hp Hq; generalize p q Hq; pattern n; apply natlike_ind; auto; clear n p q Hp Hq. intros p q Hp Hq; rewrite Zpower_0_r. intros (r, H); subst. case (Zmult_interval p r); auto; try rewrite Zmult_comm. rewrite <- H; auto with zarith. apply Z.lt_le_trans with 2; try apply prime_ge_2; auto with zarith. rewrite <- H; intros H1 H2; contradict H2; auto with zarith. intros n1 H Rec p q Hp Hq; try rewrite Zpower_Zsucc; auto with zarith; intros H1. case prime_mult with (2 := H1); auto. intros H2; apply prime_div_prime; auto. Qed. Definition Zmodd a b := match a with | Z0 => 0 | Zpos a' => match b with | Z0 => ltac:(match eval hnf in (1 mod 0) with | 0 => exact 0 | _ => exact a end) | Zpos _ => Zmod_POS a' b | Zneg b' => let r := Zmod_POS a' (Zpos b') in match r with Z0 => 0 | _ => b + r end end | Zneg a' => match b with | Z0 => ltac:(match eval hnf in (1 mod 0) with | 0 => exact 0 | _ => exact a end) | Zpos _ => let r := Zmod_POS a' b in match r with Z0 => 0 | _ => b - r end | Zneg b' => - (Zmod_POS a' (Zpos b')) end end. Theorem Zmodd_correct: forall a b, Zmodd a b = Z.modulo a b. intros a b; unfold Z.modulo; case a; simpl; auto. intros p; case b; simpl; auto. intros p1; refine (Zmod_POS_correct _ _); auto. intros p1; rewrite Zmod_POS_correct; auto. case (Z.pos_div_eucl p (Zpos p1)); simpl; intros z1 z2; case z2; auto. intros p; case b; simpl; auto. intros p1; rewrite Zmod_POS_correct; auto. case (Z.pos_div_eucl p (Zpos p1)); simpl; intros z1 z2; case z2; auto. intros p1; rewrite Zmod_POS_correct; simpl; auto. case (Z.pos_div_eucl p (Zpos p1)); auto. Qed. Theorem prime_divide_prime_eq: forall p1 p2, prime p1 -> prime p2 -> Z.divide p1 p2 -> p1 = p2. intros p1 p2 Hp1 Hp2 Hp3. assert (Ha: 1 < p1). inversion Hp1; auto. assert (Ha1: 1 < p2). inversion Hp2; auto. case (Zle_lt_or_eq p1 p2); auto with zarith. apply Zdivide_le; auto with zarith. intros Hp4. case (prime_div_prime p1 p2); auto with zarith. Qed. Theorem Zdivide_Zpower: forall n m, 0 < n -> (forall p i, prime p -> 0 < i -> (p^i | n) -> (p^i | m)) -> (n | m). intros n m Hn; generalize m Hn; pattern n; apply prime_induction; auto with zarith; clear n m Hn. intros m H1; contradict H1; auto with zarith. intros p q H Rec m H1 H2. assert (H3: (p | m)). rewrite <- (Zpower_1_r p); apply H2; auto with zarith; rewrite Zpower_1_r; apply Zdivide_factor_r. case (Zmult_interval p q); auto. apply Z.lt_le_trans with 2; auto with zarith; apply prime_ge_2; auto. case H3; intros k Hk; subst. intros Hq Hq1. rewrite (Zmult_comm k); apply Zmult_divide_compat_l. apply Rec; auto. intros p1 i Hp1 Hp2 Hp3. case (Z.eq_dec p p1); intros Hpp1; subst. case (H2 p1 (Z.succ i)); auto with zarith. rewrite Zpower_Zsucc; try apply Zmult_divide_compat_l; auto with zarith. intros q2 Hq2; exists q2. apply Zmult_reg_r with p1. contradict H; subst; apply not_prime_0. rewrite Hq2; rewrite Zpower_Zsucc; try ring; auto with zarith. apply Gauss with p. rewrite Zmult_comm; apply H2; auto. apply Z.divide_trans with (1:= Hp3). apply Zdivide_factor_l. apply rel_prime_sym; apply rel_prime_Zpower_r; auto with zarith. apply prime_rel_prime; auto. contradict Hpp1; apply prime_divide_prime_eq; auto. Qed. Theorem prime_divide_Zpower_Zdiv: forall m a p i, 0 <= i -> prime p -> (m | a) -> ~(m | (a/p)) -> (p^i | a) -> (p^i | m). intros m a p i Hi Hp (k, Hk) H (l, Hl); subst. case (Zle_lt_or_eq 0 i); auto with arith; intros Hi1; subst. assert (Hp0: 0 < p). apply Z.lt_le_trans with 2; auto with zarith; apply prime_ge_2; auto. case (Zdivide_dec p k); intros H1. case H1; intros k' H2; subst. case H; replace (k' * p * m) with ((k' * m) * p); try ring; rewrite Z_div_mult; auto with zarith. apply Gauss with k. exists l; rewrite Hl; ring. apply rel_prime_sym; apply rel_prime_Zpower_r; auto. apply rel_prime_sym; apply prime_rel_prime; auto. rewrite Zpower_0_r; apply Zone_divide. Qed. Theorem Zle_square_mult: forall a b, 0 <= a <= b -> a * a <= b * b. intros a b (H1, H2); apply Z.le_trans with (a * b); auto with zarith. Qed. Theorem Zlt_square_mult_inv: forall a b, 0 <= a -> 0 <= b -> a * a < b * b -> a < b. intros a b H1 H2 H3; case (Zle_or_lt b a); auto; intros H4; apply Zmult_lt_reg_r with a; contradict H3; apply Zle_not_lt; apply Zle_square_mult; auto. Qed. Theorem Zmod_closeby_eq: forall a b n, 0 <= a -> 0 <= b < n -> a - b < n -> a mod n = b -> a = b. intros a b n H H1 H2 H3. case (Zle_or_lt 0 (a - b)); intros H4. case Zle_lt_or_eq with (1 := H4); clear H4; intros H4; auto with zarith. contradict H2; apply Zle_not_lt; apply Zdivide_le; auto with zarith. apply Zmod_divide_minus; auto with zarith. rewrite <- (Zmod_small a n); try split; auto with zarith. Qed. Theorem Zpow_mod_pos_Zpower_pos_correct: forall a m n, 0 < n -> Zpow_mod_pos a m n = (Zpower_pos a m) mod n. intros a m; elim m; simpl; auto. intros p Rec n H1; rewrite xI_succ_xO; rewrite Pplus_one_succ_r; rewrite <- Pplus_diag; auto. repeat rewrite Zpower_pos_is_exp; auto. repeat rewrite Rec; auto. replace (Zpower_pos a 1) with a; auto. 2: unfold Zpower_pos; simpl; auto with zarith. repeat rewrite (fun x => (Zmult_mod x a)); auto. rewrite (Zmult_mod (Zpower_pos a p)); auto. case (Zpower_pos a p mod n); auto. intros p Rec n H1; rewrite <- Pplus_diag; auto. repeat rewrite Zpower_pos_is_exp; auto. repeat rewrite Rec; auto. rewrite (Zmult_mod (Zpower_pos a p)); auto. case (Zpower_pos a p mod n); auto. unfold Zpower_pos; simpl; rewrite Zmult_1_r; auto with zarith. Qed. Theorem Zpow_mod_Zpower_correct: forall a m n, 1 < n -> 0 <= m -> Zpow_mod a m n = (a ^ m) mod n. intros a m n; case m; simpl; auto. intros; apply Zpow_mod_pos_Zpower_pos_correct; auto with zarith. Qed. coqprime-8.18/src/Coqprime/Z/ZCmisc.v000066400000000000000000000120671451023060700174330ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Require Export ZArith. Require Import Lia. (* Compatibility with Coq versions not supporting hint localities *) Set Warnings "-unsupported-attributes". Local Open Scope Z_scope. Coercion Zpos : positive >-> Z. Coercion Z_of_N : N >-> Z. Lemma Zpos_plus : forall p q, Zpos (p + q) = p + q. Proof. intros;trivial. Qed. Lemma Zpos_mult : forall p q, Zpos (p * q) = p * q. Proof. intros;trivial. Qed. Lemma Zpos_xI_add : forall p, Zpos (xI p) = Zpos p + Zpos p + Zpos 1. Proof. intros p;rewrite Zpos_xI;ring. Qed. Lemma Zpos_xO_add : forall p, Zpos (xO p) = Zpos p + Zpos p. Proof. intros p;rewrite Zpos_xO;ring. Qed. Lemma Psucc_Zplus : forall p, Zpos (Pos.succ p) = p + 1. Proof. intros p;rewrite Zpos_succ_morphism; unfold Z.succ; trivial. Qed. #[global] Hint Rewrite Zpos_xI_add Zpos_xO_add Pplus_carry_spec Psucc_Zplus Zpos_plus : zmisc. Lemma Zlt_0_pos : forall p, 0 < Zpos p. Proof. unfold Z.lt; trivial. Qed. Lemma Pminus_mask_carry_spec : forall p q, Pminus_mask_carry p q = Pminus_mask p (Pos.succ q). Proof. intros p q;generalize q p;clear q p. induction q;destruct p;simpl;try rewrite IHq;trivial. destruct p;trivial. destruct p;trivial. Qed. #[global] Hint Rewrite Pminus_mask_carry_spec : zmisc. Ltac zsimpl := autorewrite with zmisc. Ltac CaseEq t := generalize (refl_equal t);pattern t at -1;case t. Ltac generalizeclear H := generalize H;clear H. Lemma Pminus_mask_spec : forall p q, match Pminus_mask p q with | IsNul => Zpos p = Zpos q | IsPos k => Zpos p = q + k | IsNeg => p < q end. Proof. intros p q; case (Pos.sub_mask_spec p q). lia. all: intros r <-; lia. Qed. Definition PminusN x y := match Pminus_mask x y with | IsPos k => Npos k | _ => N0 end. Lemma PminusN_le : forall x y:positive, x <= y -> Z_of_N (PminusN y x) = y - x. Proof. intros x y Hle;unfold PminusN. assert (H := Pminus_mask_spec y x);destruct (Pminus_mask y x). rewrite H;unfold Z_of_N;auto with zarith. rewrite H;unfold Z_of_N;auto with zarith. exfalso;lia. Qed. Lemma Ppred_Zminus : forall p, 1< Zpos p -> (p-1)%Z = Pos.pred p. Proof. destruct p;simpl;trivial. intros;exfalso;lia. Qed. Local Open Scope positive_scope. Declare Scope P_scope. Delimit Scope P_scope with P. Local Open Scope P_scope. Definition is_lt (n m : positive) := match (n ?= m) with | Lt => true | _ => false end. Infix "?<" := is_lt (at level 70, no associativity) : P_scope. Lemma is_lt_spec : forall n m, if n ?< m then (n < m)%Z else (m <= n)%Z. Proof. intros n m; unfold is_lt, Z.lt , Z.le, Z.compare. rewrite Pos.compare_antisym. case (m ?= n); simpl; auto; intros HH; discriminate HH. Qed. Definition is_eq a b := match (a ?= b) with | Eq => true | _ => false end. Infix "?=" := is_eq (at level 70, no associativity) : P_scope. Lemma is_eq_refl : forall n, n ?= n = true. Proof. intros n;unfold is_eq;rewrite Pos.compare_refl;trivial. Qed. Lemma is_eq_eq : forall n m, n ?= m = true -> n = m. Proof. unfold is_eq;intros n m H; apply Pos.compare_eq. destruct (n ?= m)%positive;trivial;try discriminate. Qed. Lemma is_eq_spec_pos : forall n m, if n ?= m then n = m else m <> n. Proof. intros n m; CaseEq (n ?= m);intro H. rewrite (is_eq_eq _ _ H);trivial. intro H1;rewrite H1 in H;rewrite is_eq_refl in H;discriminate H. Qed. Lemma is_eq_spec : forall n m, if n ?= m then Zpos n = m else Zpos m <> n. Proof. intros n m; CaseEq (n ?= m);intro H. rewrite (is_eq_eq _ _ H);trivial. intro H1;inversion H1. rewrite H2 in H;rewrite is_eq_refl in H;discriminate H. Qed. Definition is_Eq a b := match a, b with | N0, N0 => true | Npos a', Npos b' => a' ?= b' | _, _ => false end. Lemma is_Eq_spec : forall n m, if is_Eq n m then Z_of_N n = m else Z_of_N m <> n. Proof. destruct n;destruct m;simpl;trivial;try (intro;discriminate). apply is_eq_spec. Qed. (* [times x y] return [x * y], a litle bit more efficiant *) Fixpoint times (x y : positive) {struct y} : positive := match x, y with | xH, _ => y | _, xH => x | xO x', xO y' => xO (xO (times x' y')) | xO x', xI y' => xO (x' + xO (times x' y')) | xI x', xO y' => xO (y' + xO (times x' y')) | xI x', xI y' => xI (x' + y' + xO (times x' y')) end. Infix "*" := times : P_scope. Lemma times_Zmult : forall p q, Zpos (p * q)%P = (p * q)%Z. Proof. intros p q;generalize q p;clear p q. induction q;destruct p; unfold times; try fold (times p q); autorewrite with zmisc; try rewrite IHq; ring. Qed. Fixpoint square (x:positive) : positive := match x with | xH => xH | xO x => xO (xO (square x)) | xI x => xI (xO (square x + x)) end. Lemma square_Zmult : forall x, Zpos (square x) = (x * x) %Z. Proof. induction x as [x IHx|x IHx |];unfold square;try (fold (square x)); autorewrite with zmisc; try rewrite IHx; ring. Qed. coqprime-8.18/src/Coqprime/Z/ZSum.v000066400000000000000000000262761451023060700171500ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) (*********************************************************************** Summation.v from Z to Z *********************************************************************) Require Import Arith. Require Import ArithRing. Require Import ListAux. Require Import ZArith. Require Import Lia. Require Import Iterator. Require Import ZProgression. Open Scope Z_scope. (* Iterated Sum *) Definition Zsum := fun n m f => if Zle_bool n m then iter 0 f Zplus (progression Z.succ n (Z.abs_nat ((1 + m) - n))) else iter 0 f Zplus (progression Z.pred n (Z.abs_nat ((1 + n) - m))). Global Hint Unfold Zsum : core. Lemma Zsum_nn: forall n f, Zsum n n f = f n. intros n f; unfold Zsum; rewrite Zle_bool_refl. replace ((1 + n) - n) with 1; auto with zarith. simpl; ring. Qed. Theorem permutation_rev: forall (A:Set) (l : list A), permutation (rev l) l. intros a l; elim l; simpl; auto. intros a1 l1 Hl1. apply permutation_trans with (cons a1 (rev l1)); [|auto]. change (permutation (rev l1 ++ (a1 :: nil)) (app (cons a1 nil) (rev l1))); auto. Qed. Lemma Zsum_swap: forall (n m : Z) (f : Z -> Z), Zsum n m f = Zsum m n f. Proof. intros n m f; revert n m. cut (forall n m, n < m -> Zsum n m f = Zsum m n f). { intros L n m. destruct (Ztrichotomy n m) as [ LT | [ -> | GT ] ]. - apply L, LT. - reflexivity. - symmetry; apply L, Z.gt_lt, GT. } intros n m n_lt_m; unfold Zsum. replace (m <=? n) with false by (symmetry; apply Z.leb_gt, n_lt_m). replace (n <=? m) with true by (symmetry; apply Z.leb_le, Z.lt_le_incl, n_lt_m). apply iter_permutation; auto with zarith. apply permutation_trans with (rev (progression Z.succ n (Z.abs_nat ((1 + m) - n)))). apply permutation_sym; apply permutation_rev. rewrite Zprogression_opp; auto with zarith. replace (n + Z_of_nat (pred (Z.abs_nat ((1 + m) - n)))) with m; auto. replace (Z.abs_nat ((1 + m) - n)) with (S (Z.abs_nat (m - n))). simpl. rewrite inj_Zabs_nat. rewrite Z.abs_eq; auto with zarith. lia. Qed. Lemma Zsum_split_up: forall (n m p : Z) (f : Z -> Z), ( n <= m < p ) -> Zsum n p f = Zsum n m f + Zsum (m + 1) p f. intros n m p f [H H0]. case (Zle_lt_or_eq _ _ H); clear H; intros H. unfold Zsum; (repeat rewrite Zle_imp_le_bool); auto with zarith. assert (H1: n < p). apply Z.lt_trans with ( 1 := H ); auto with zarith. assert (H2: m < 1 + p). apply Z.lt_trans with ( 1 := H0 ); auto with zarith. assert (H3: n < 1 + m). apply Z.lt_trans with ( 1 := H ); auto with zarith. assert (H4: n < 1 + p). apply Z.lt_trans with ( 1 := H1 ); auto with zarith. replace (Z.abs_nat ((1 + p) - (m + 1))) with (minus (Z.abs_nat ((1 + p) - n)) (Z.abs_nat ((1 + m) - n))). apply iter_progression_app. 1-3: auto with zarith. apply inj_le_rev. (repeat rewrite inj_Zabs_nat); auto with zarith. (repeat rewrite Z.abs_eq); auto with zarith. rewrite next_n_Z. rewrite inj_Zabs_nat. rewrite Z.abs_eq; auto with zarith. apply inj_eq_rev. rewrite inj_minus1. (repeat rewrite inj_Zabs_nat). (repeat rewrite Z.abs_eq); auto with zarith. apply inj_le_rev. (repeat rewrite inj_Zabs_nat). (repeat rewrite Z.abs_eq); auto with zarith. subst m. rewrite Zsum_nn; auto with zarith. unfold Zsum; generalize (Zle_cases n p); generalize (Zle_cases (n + 1) p); case (Zle_bool n p); case (Zle_bool (n + 1) p); auto with zarith. intros H1 H2. replace (Z.abs_nat ((1 + p) - n)) with (S (Z.abs_nat (p - n))). replace (n + 1) with (Z.succ n) by auto with zarith. replace ((1 + p) - Z.succ n) with (p - n); auto with zarith. apply inj_eq_rev. rewrite inj_S; (repeat rewrite inj_Zabs_nat). (repeat rewrite Z.abs_eq); auto with zarith. Qed. Lemma Zsum_S_left: forall (n m : Z) (f : Z -> Z), n < m -> Zsum n m f = f n + Zsum (n + 1) m f. intros n m f H; rewrite (Zsum_split_up n n m f); auto with zarith. rewrite Zsum_nn; auto with zarith. Qed. Lemma Zsum_S_right: forall (n m : Z) (f : Z -> Z), n <= m -> Zsum n (m + 1) f = Zsum n m f + f (m + 1). intros n m f H; rewrite (Zsum_split_up n m (m + 1) f); auto with zarith. rewrite Zsum_nn; auto with zarith. Qed. Lemma Zsum_split_down: forall (n m p : Z) (f : Z -> Z), ( p < m <= n ) -> Zsum n p f = Zsum n m f + Zsum (m - 1) p f. intros n m p f [H H0]. case (Zle_lt_or_eq p (m - 1)); auto with zarith; intros H1. pattern m at 1; replace m with ((m - 1) + 1) by auto with zarith. repeat rewrite (Zsum_swap n). rewrite (Zsum_swap (m - 1)). rewrite Zplus_comm. apply Zsum_split_up; auto with zarith. subst p. repeat rewrite (Zsum_swap n). rewrite Zsum_nn. unfold Zsum; (repeat rewrite Zle_imp_le_bool); auto with zarith. replace (Z.abs_nat ((1 + n) - (m - 1))) with (S (Z.abs_nat (n - (m - 1)))). rewrite Zplus_comm. replace (Z.abs_nat ((1 + n) - m)) with (Z.abs_nat (n - (m - 1))). pattern m at 4; replace m with (Z.succ (m - 1)); auto with zarith. apply f_equal with ( f := Z.abs_nat ); auto with zarith. apply inj_eq_rev. rewrite inj_S. (repeat rewrite inj_Zabs_nat). (repeat rewrite Z.abs_eq); auto with zarith. Qed. Lemma Zsum_ext: forall (n m : Z) (f g : Z -> Z), n <= m -> (forall (x : Z), ( n <= x <= m ) -> f x = g x) -> Zsum n m f = Zsum n m g. intros n m f g HH H. unfold Zsum; auto. unfold Zsum; (repeat rewrite Zle_imp_le_bool); auto with zarith. apply iter_ext; auto with zarith. intros a H1; apply H; auto; split. apply Zprogression_le_init with ( 1 := H1 ). cut (a < Z.succ m); auto with zarith. replace (Z.succ m) with (n + Z_of_nat (Z.abs_nat ((1 + m) - n))). apply Zprogression_le_end; auto with zarith. rewrite inj_Zabs_nat. (repeat rewrite Z.abs_eq); auto with zarith. Qed. Lemma Zsum_add: forall (n m : Z) (f g : Z -> Z), Zsum n m f + Zsum n m g = Zsum n m (fun (i : Z) => f i + g i). intros n m f g; unfold Zsum; case (Zle_bool n m); apply iter_comp; auto with zarith. Qed. Lemma Zsum_times: forall n m x f, x * Zsum n m f = Zsum n m (fun i=> x * f i). intros n m x f. unfold Zsum. case (Zle_bool n m); intros; apply iter_comp_const with (k := (fun y : Z => x * y)); auto with zarith. Qed. Lemma inv_Zsum: forall (P : Z -> Prop) (n m : Z) (f : Z -> Z), n <= m -> P 0 -> (forall (a b : Z), P a -> P b -> P (a + b)) -> (forall (x : Z), ( n <= x <= m ) -> P (f x)) -> P (Zsum n m f). intros P n m f HH H H0 H1. unfold Zsum; rewrite Zle_imp_le_bool; auto with zarith; apply iter_inv; auto. intros x H3; apply H1; auto; split. apply Zprogression_le_init with ( 1 := H3 ). cut (x < Z.succ m); auto with zarith. replace (Z.succ m) with (n + Z_of_nat (Z.abs_nat ((1 + m) - n))). apply Zprogression_le_end; auto with zarith. rewrite inj_Zabs_nat. (repeat rewrite Z.abs_eq); auto with zarith. Qed. Lemma Zsum_pred: forall (n m : Z) (f : Z -> Z), Zsum n m f = Zsum (n + 1) (m + 1) (fun (i : Z) => f (Z.pred i)). intros n m f. unfold Zsum. generalize (Zle_cases n m); generalize (Zle_cases (n + 1) (m + 1)); case (Zle_bool n m); case (Zle_bool (n + 1) (m + 1)); auto with zarith. replace ((1 + (m + 1)) - (n + 1)) with ((1 + m) - n); auto with zarith. intros H1 H2; cut (exists c , c = Z.abs_nat ((1 + m) - n) ). intros [c H3]; rewrite <- H3. generalize n; elim c; auto with zarith; clear H1 H2 H3 c n. intros c H n; simpl; eq_tac; auto with zarith. eq_tac; unfold Z.pred; auto with zarith. replace (Z.succ (n + 1)) with (Z.succ n + 1); auto with zarith. exists (Z.abs_nat ((1 + m) - n)); auto. replace ((1 + (n + 1)) - (m + 1)) with ((1 + n) - m); auto with zarith. intros H1 H2; cut (exists c , c = Z.abs_nat ((1 + n) - m) ). intros [c H3]; rewrite <- H3. generalize n; elim c; auto with zarith; clear H1 H2 H3 c n. intros c H n; simpl; (eq_tac; auto with zarith). eq_tac; unfold Z.pred; auto with zarith. replace (Z.pred (n + 1)) with (Z.pred n + 1); auto with zarith. unfold Z.pred; auto with zarith. exists (Z.abs_nat ((1 + n) - m)); auto. Qed. Theorem Zsum_c: forall (c p q : Z), p <= q -> Zsum p q (fun x => c) = ((1 + q) - p) * c. intros c p q Hq; unfold Zsum. rewrite Zle_imp_le_bool; auto with zarith. pattern ((1 + q) - p) at 2. rewrite <- Z.abs_eq; auto with zarith. rewrite <- inj_Zabs_nat; auto with zarith. cut (exists r , r = Z.abs_nat ((1 + q) - p) ); [intros [r H1]; rewrite <- H1 | exists (Z.abs_nat ((1 + q) - p))]; auto. generalize p; elim r; auto with zarith. intros n H p0; replace (Z_of_nat (S n)) with (Z_of_nat n + 1). simpl; rewrite H; ring. rewrite inj_S; auto with zarith. Qed. Theorem Zsum_Zsum_f: forall (i j k l : Z) (f : Z -> Z -> Z), i <= j -> k < l -> Zsum i j (fun x => Zsum k (l + 1) (fun y => f x y)) = Zsum i j (fun x => Zsum k l (fun y => f x y) + f x (l + 1)). intros; apply Zsum_ext; intros; auto with zarith. rewrite Zsum_S_right; auto with zarith. Qed. Theorem Zsum_com: forall (i j k l : Z) (f : Z -> Z -> Z), Zsum i j (fun x => Zsum k l (fun y => f x y)) = Zsum k l (fun y => Zsum i j (fun x => f x y)). intros; unfold Zsum; case (Zle_bool i j); case (Zle_bool k l); apply iter_com; auto with zarith. Qed. Theorem Zsum_le: forall (n m : Z) (f g : Z -> Z), n <= m -> (forall (x : Z), ( n <= x <= m ) -> (f x <= g x )) -> (Zsum n m f <= Zsum n m g ). intros n m f g Hl H. unfold Zsum; rewrite Zle_imp_le_bool; auto with zarith. unfold Zsum; cut (forall x, In x (progression Z.succ n (Z.abs_nat ((1 + m) - n))) -> ( f x <= g x )). elim (progression Z.succ n (Z.abs_nat ((1 + m) - n))); simpl; auto with zarith. intros x H1; apply H; split. apply Zprogression_le_init with ( 1 := H1 ); auto. cut (x < m + 1); auto with zarith. replace (m + 1) with (n + Z_of_nat (Z.abs_nat ((1 + m) - n))). apply Zprogression_le_end; auto with zarith. rewrite inj_Zabs_nat. rewrite Z.abs_eq; auto with zarith. Qed. Theorem iter_le: forall (f g: Z -> Z) l, (forall a, In a l -> f a <= g a) -> iter 0 f Zplus l <= iter 0 g Zplus l. intros f g l; elim l; simpl; auto with zarith. Qed. Theorem Zsum_lt: forall n m f g, (forall x, n <= x -> x <= m -> f x <= g x) -> (exists x, n <= x /\ x <= m /\ f x < g x) -> Zsum n m f < Zsum n m g. intros n m f g H (d, (Hd1, (Hd2, Hd3))); unfold Zsum; rewrite Zle_imp_le_bool; auto with zarith. cut (In d (progression Z.succ n (Z.abs_nat (1 + m - n)))). cut (forall x, In x (progression Z.succ n (Z.abs_nat (1 + m - n)))-> f x <= g x). elim (progression Z.succ n (Z.abs_nat (1 + m - n))); simpl; auto with zarith. intros a l Rec H0 [H1 | H1]; subst; auto. apply Z.le_lt_trans with (f d + iter 0 g Zplus l); auto with zarith. apply Zplus_le_compat_l. apply iter_le; auto. apply Z.lt_le_trans with (f a + iter 0 g Zplus l); auto with zarith. intros x H1; apply H. apply Zprogression_le_init with ( 1 := H1 ); auto. cut (x < m + 1); auto with zarith. replace (m + 1) with (n + Z_of_nat (Z.abs_nat ((1 + m) - n))). apply Zprogression_le_end with ( 1 := H1 ); auto with arith. rewrite inj_Zabs_nat. rewrite Z.abs_eq; auto with zarith. apply in_Zprogression. rewrite inj_Zabs_nat. rewrite Z.abs_eq; auto with zarith. Qed. Theorem Zsum_minus: forall n m f g, Zsum n m f - Zsum n m g = Zsum n m (fun x => f x - g x). intros n m f g; apply trans_equal with (Zsum n m f + (-1) * Zsum n m g); auto with zarith. rewrite Zsum_times; rewrite Zsum_add; auto with zarith. Qed. coqprime-8.18/src/Coqprime/Z/Zmod.v000066400000000000000000000050061451023060700171470ustar00rootroot00000000000000(*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Require Import ZArith Znumtheory. Set Implicit Arguments. Open Scope Z_scope. Lemma rel_prime_mod: forall a b, 1 < b -> rel_prime a b -> a mod b <> 0. Proof. intros a b H H1 H2. case (not_rel_prime_0 _ H). rewrite <- H2. apply rel_prime_mod; auto with zarith. Qed. Lemma Zmodpl: forall a b n, 0 < n -> (a mod n + b) mod n = (a + b) mod n. Proof. intros a b n H. rewrite Zplus_mod; auto. rewrite Zmod_mod; auto. apply sym_equal; apply Zplus_mod; auto. Qed. Lemma Zmodpr: forall a b n, 0 < n -> (b + a mod n) mod n = (b + a) mod n. Proof. intros a b n H; repeat rewrite (Zplus_comm b). apply Zmodpl; auto. Qed. Lemma Zmodml: forall a b n, 0 < n -> (a mod n * b) mod n = (a * b) mod n. Proof. intros a b n H. rewrite Zmult_mod; auto. rewrite Zmod_mod; auto. apply sym_equal; apply Zmult_mod; auto. Qed. Lemma Zmodmr: forall a b n, 0 < n -> (b * (a mod n)) mod n = (b * a) mod n. Proof. intros a b n H; repeat rewrite (Zmult_comm b). apply Zmodml; auto. Qed. Ltac is_ok t := match t with | (?x mod _ + ?y mod _) mod _ => constr:(false) | (?x mod _ * (?y mod _)) mod _ => constr:(false) | ?x mod _ => x end. Ltac rmod t := match t with (?x + ?y) mod _ => match (is_ok x) with | false => rmod x | ?x1 => match (is_ok y) with |false => rmod y | ?y1 => rewrite <- (Zplus_mod x1 y1) |false => rmod y end end | (?x * ?y) mod _ => match (is_ok x) with | false => rmod x | ?x1 => match (is_ok y) with |false => rmod y | ?y1 => rewrite <- (Zmult_mod x1 y1) end | false => rmod x end end. Lemma Zmod_div_mod: forall n m a, 0 < n -> 0 < m -> (n | m) -> a mod n = (a mod m) mod n. Proof. intros n m a H1 H2 H3. pattern a at 1; rewrite (Z_div_mod_eq_full a m). case H3; intros q Hq; pattern m at 1; rewrite Hq. rewrite (Zmult_comm q). rewrite Zplus_mod; auto. rewrite <- Zmult_assoc; rewrite Zmult_mod; auto. rewrite Z_mod_same; try rewrite Zmult_0_l; auto with zarith. rewrite (Zmod_small 0); auto with zarith. rewrite Zplus_0_l; rewrite Zmod_mod; auto with zarith. Qed. coqprime-8.18/src/Coqprime/elliptic/000077500000000000000000000000001451023060700174425ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/elliptic/.depend000066400000000000000000000007701451023060700207060ustar00rootroot00000000000000SMain.vo SMain.glob: SMain.v ../PrimalityTest/FGroup.vo ../List/UList.vo ZEll.vo ZEll.glob: ZEll.v ../Z/ZCAux.vo ../Z/Ppow.vo GZnZ.vo ../PrimalityTest/EGroup.vo SMain.vo ../Z/Zmod.vo GZnZ.vo GZnZ.glob: GZnZ.v ../List/UList.vo ../Z/Pmod.vo SMain.html SMain.glob: SMain.v ../PrimalityTest/FGroup.html ../List/UList.html ZEll.html ZEll.glob: ZEll.v ../Z/ZCAux.html ../Z/Ppow.html GZnZ.html ../PrimalityTest/EGroup.html SMain.html ../Z/Zmod.html GZnZ.html GZnZ.glob: GZnZ.v ../List/UList.html ../Z/Pmod.html coqprime-8.18/src/Coqprime/elliptic/GZnZ.v000066400000000000000000000176541451023060700204760ustar00rootroot00000000000000(*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Require Import ZArith Znumtheory. Require Import Eqdep_dec. Require Import List. Require Import Lia. Require Import UList. Section ZnZ. Variable n: Z. Hypothesis n_pos: 0 < n. Structure znz: Set:= mkznz {val: Z; inZnZ: val = Z.modulo val n}. Theorem znz_inj: forall a b, a = b -> val a = val b. intros; subst; auto. Qed. Theorem Zeq_iok: forall x y, x = y -> Zeq_bool x y = true. intros x y H; subst. unfold Zeq_bool; rewrite Z.compare_refl; auto. Qed. Lemma modz: forall x, (x mod n) = (x mod n) mod n. intros x; rewrite Zmod_mod; auto with zarith. Qed. Definition zero:= mkznz _ (modz 0). Definition one:= mkznz _ (modz 1). Definition add v1 v2 := mkznz _ (modz (val v1 + val v2)). Definition sub v1 v2 := mkznz _ (modz (val v1 - val v2)). Definition mul v1 v2 := mkznz _ (modz (val v1 * val v2)). Definition opp v := mkznz _ (modz (-val v)). Theorem zirr: forall x1 x2 H1 H2, x1 = x2 -> mkznz x1 H1 = mkznz x2 H2. Proof. intros x1 x2 H1 H2 H3. subst x1. rewrite (fun H => eq_proofs_unicity H H1 H2); auto. intros x y; case (Z.eq_dec x y); auto. Qed. Lemma znz1: forall x, x mod 1 = 0. intros x; apply Zdivide_mod; auto with zarith. Qed. Definition RZnZ: ring_theory zero one add mul sub opp (@eq znz). split; auto. intros p; case p; intros x H; refine (zirr _ _ _ _ _); simpl; auto. intros [x Hx] [y Hy]. refine (zirr _ _ _ _ _); simpl. rewrite Zplus_comm; auto. intros [x Hx] [y Hy] [z Hz]. refine (zirr _ _ _ _ _); simpl. rewrite Zplus_mod; auto. rewrite (Zplus_mod((x + y) mod n)); auto. repeat rewrite Zmod_mod; auto. repeat rewrite <- Zplus_mod; auto; rewrite Zplus_assoc; auto. intros p; case p; intros x H. refine (zirr _ _ _ _ _); simpl. case (Zle_lt_or_eq 1 n); auto with zarith; intros Hz. rewrite (Zmod_small 1); auto with zarith. rewrite Zmult_1_l; auto. clear p; subst n; rewrite znz1; rewrite H; rewrite znz1; auto. intros [x Hx] [y Hy]. refine (zirr _ _ _ _ _); simpl. rewrite Zmult_comm; auto. intros [x Hx] [y Hy] [z Hz]. refine (zirr _ _ _ _ _); simpl. rewrite Zmult_mod; auto. rewrite (Zmult_mod ((x * y) mod n)); auto. repeat rewrite Zmod_mod; auto. repeat rewrite <- Zmult_mod; auto; rewrite Zmult_assoc; auto. intros [x Hx] [y Hy] [z Hz]. refine (zirr _ _ _ _ _); simpl. rewrite Zmult_mod; auto. rewrite Zmod_mod; auto. rewrite <- Zmult_mod; auto. rewrite (Zplus_mod ((x*z) mod n)); auto. repeat rewrite Zmod_mod; auto. rewrite <- Zplus_mod; auto. apply f_equal2 with (f := Z.modulo); auto; ring. intros [x Hx] [y Hy]. refine (zirr _ _ _ _ _); simpl. rewrite Zplus_mod; auto. repeat rewrite Zmod_mod; auto. rewrite <- Zplus_mod; auto. intros [x Hx]. refine (zirr _ _ _ _ _); simpl. rewrite Zplus_mod; auto. repeat rewrite Zmod_mod; auto. rewrite <- Zplus_mod; auto. apply f_equal2 with (f := Z.modulo); auto; ring. Defined. Add Ring RZnZ : RZnZ. (* It is finite *) Fixpoint mklist (n: nat): list nat := match n with O => nil | (S n) => cons n (mklist n) end. Lemma mklist_length: forall n1, length (mklist n1) = n1. Proof. intros n1; elim n1; simpl; auto; clear n1. Qed. Theorem mklist_lt: forall n1 x, (In x (mklist n1)) -> (x < n1)%nat. intros n1; elim n1; simpl; auto; clear n1. intros x H; case H. intros n1 Hrec x [H1 | H1]; try subst x; auto with arith. Qed. Theorem lt_mklist_lt: forall n1 x, (x < n1)%nat -> (In x (mklist n1)). intros n1 x H; elim H; simpl; auto. Qed. Theorem uniq_mklist: forall m, ulist (mklist m). intros m; elim m; simpl; auto; clear m. intros m H; constructor; auto. intros H1; absurd (m < m)%nat; auto with arith. apply mklist_lt; auto. Qed. Theorem nat_z_kt: forall x, (x < Z.abs_nat n)%nat -> (Z_of_nat x) = (Z_of_nat x) mod n. Proof. intros x H; rewrite Zmod_small; lia. Qed. Definition mkzlist: forall (l: list nat), (forall x, In x l -> (x < Z.abs_nat n)%nat) -> list znz. fix mkzlist 1; intros l; case l. intros; exact nil. intros n1 l1 Hn. assert (F1: forall x, In x l1 -> (x < Z.abs_nat n)%nat). intros; apply Hn; simpl; auto. assert (F2: (n1 < Z.abs_nat n)%nat). apply Hn; simpl; auto. exact (cons (mkznz _ (nat_z_kt _ F2)) (mkzlist _ F1)). Defined. Lemma mkzlist_length: forall l H, length (mkzlist l H) = length l. Proof. intros l; elim l; simpl; auto; clear l. Qed. Theorem in_mkzlist: forall l a Ha Hl, In (mkznz (Z_of_nat a) Ha) (mkzlist l Hl) -> In a l. intros l1; elim l1; simpl; auto; clear l1. intros a1 l1 Hrec1 a2 l2 Hl2 [H4 | H4]. generalize (znz_inj _ _ H4); simpl; clear H4; intros H4; left. rewrite <- (Zabs_nat_Z_of_nat a1); rewrite H4; rewrite Zabs_nat_Z_of_nat; auto. right; apply (Hrec1 _ _ _ H4). Qed. Theorem mkzlist_in: forall l a Ha Hl, In (Z.abs_nat a) l -> In (mkznz a Ha) (mkzlist l Hl). intros l1; elim l1; simpl; auto; clear l1. intros a1 l1 Hrec1 a2 l2 Hl2 [H4 | H4]; auto. left; apply zirr; auto. rewrite H4; rewrite inj_Zabs_nat; auto. rewrite Z.abs_eq; auto with zarith. case (Z_mod_lt a2 n); auto with zarith. Qed. Theorem mkzlist_uniq: forall l H, ulist l -> ulist (mkzlist l H). intros l H H1; generalize H; elim H1; simpl; auto; clear l H H1. intros a l H1 H2 Hrec H3; constructor; auto. intros HH; case H1; generalize HH; clear HH H1. assert (F1: forall l a Ha Hl, In (mkznz (Z_of_nat a) Ha) (mkzlist l Hl) -> In a l); auto. intros l1; elim l1; simpl; auto; clear l1. intros a1 l1 Hrec1 a2 l2 Hl2 [H4 | H4]. generalize (znz_inj _ _ H4); simpl; clear H4; intros H4; left. rewrite <- (Zabs_nat_Z_of_nat a1); rewrite H4; rewrite Zabs_nat_Z_of_nat; auto. right; apply (Hrec1 _ _ _ H4). apply in_mkzlist. Qed. Definition all_znz: list znz := (mkzlist (mklist (Z.abs_nat n)) (mklist_lt _)). Lemma all_znz_length: length all_znz = (Z.abs_nat n). Proof. unfold all_znz; rewrite mkzlist_length. rewrite mklist_length; auto. Qed. Theorem uniq_all_znz: ulist all_znz. unfold all_znz; apply mkzlist_uniq. apply uniq_mklist. Qed. Theorem in_all_znz: forall z, In z all_znz. intros (z1, Hz1). unfold all_znz; apply mkzlist_in. apply lt_mklist_lt. case (Z_mod_lt z1 n). auto with zarith. rewrite <- Hz1; intros H1 H2. case (Nat.le_gt_cases (Z.abs_nat n) (Z.abs_nat z1)); auto; intros H3. absurd (z1 < n); auto; apply Zle_not_lt. rewrite <- Z.abs_eq; auto. rewrite <- inj_Zabs_nat; auto. rewrite <- (Z.abs_eq n) by auto with zarith. rewrite <- (inj_Zabs_nat n); auto. apply inj_le; auto. Qed. End ZnZ. Require Import Field. Require Import Pmod. Section ZpZ. Variable p: Z. Variable p_prime: prime p. Theorem p_pos: 0 < p. generalize (prime_ge_2 _ p_prime); auto with zarith. Qed. Definition inv v := mkznz _ _ (modz p (fst (fst (Zegcd (val p v) p)))). Definition div v1 v2 := mul _ v1 (inv v2). Definition FZpZ: field_theory (zero _) (one _) (add _) (mul _) (sub _) (opp _) div inv (@eq (znz p)). assert (Hmp := p_pos). split; auto. exact (RZnZ _ p_pos). intros H; injection H; repeat rewrite Zmod_small; auto with zarith. generalize (prime_ge_2 _ p_prime); auto with zarith. intros (n, Hn); unfold zero, one, inv, mul; simpl. intros H; apply zirr. generalize (Zegcd_is_egcd n p); case Zegcd; intros (u,v) w (Hu, (Hv, Hw)); simpl. assert (F1: rel_prime n p). apply rel_prime_le_prime; auto. rewrite Hn; auto. case (Z_mod_lt n p); try (intros H1 H2; split); auto with zarith. case (Zle_lt_or_eq _ _ H1); auto with zarith. rewrite <- Hn; intros H3; case H; apply zirr; rewrite <- H3; auto. red in F1. case (Zis_gcd_unique _ _ _ _ Hv F1); auto with zarith; intros; subst w. rewrite <- H0. rewrite Zmult_mod; repeat rewrite Zmod_mod; try rewrite <- Zmult_mod; auto. rewrite Z_mod_plus; auto with zarith. Defined. End ZpZ. coqprime-8.18/src/Coqprime/elliptic/SMain.v000066400000000000000000001747061451023060700206570ustar00rootroot00000000000000(*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Require Import Arith_base. Require Import Field_tac. Require Import Ring. Require Import Eqdep_dec. Require Import FGroup. Require Import List. Require Import UList. Require Import ZArith. Set Implicit Arguments. Section ELLIPTIC. (* Field elements *) Variable K:Set. Variable (kO kI : K) (kplus kmul ksub: K->K->K) (kopp : K->K) (kinv: K -> K) (kdiv: K -> K -> K). Variable (A B: K). (* Test to zero *) Variable is_zero: K -> bool. (* K notations *) Notation "x + y" := (kplus x y). Notation "x * y " := (kmul x y). Notation "x - y " := (ksub x y). Notation "- x" := (kopp x). Notation "/ x" := (kinv x). Notation "x / y" := (kdiv x y). Notation "0" := kO. Notation "1" := kI. Notation "2" := (1+1). Notation "3" := (1+1 +1). (* Non singularity *) Notation "4" := (2 * 2). Notation "27" := (3 * 3 * 3). Record ell_theory: Prop := mk_ell_theory { (* field properties *) Kfth : field_theory kO kI kplus kmul ksub kopp kdiv kinv (@eq K); NonSingular: 4 * A * A * A + 27 * B * B <> 0; (* Characteristic greater than 2 *) one_not_zero: 1 <> 0; two_not_zero: 2 <> 0; is_zero_correct: forall k, is_zero k = true <-> k = 0 }. Variable Eth: ell_theory. Fixpoint pow (k: K) (n: nat) := match n with O => 1 | 1%nat => k | S n1 => k * pow k n1 end. Notation "x ^ y" := (pow x y). Theorem pow_S: forall k n, k ^ (S n) = k * k ^ n. intros k n; simpl; auto; case n; auto. simpl; rewrite Eth.(Kfth).(F_R).(Rmul_comm). rewrite Eth.(Kfth).(F_R).(Rmul_1_l); auto. Qed. Let Mkmul := rmul_ext3_Proper (Eq_ext kplus kmul kopp). Lemma Kpower_theory : power_theory 1 kmul (eq (A:=K)) BinNat.nat_of_N pow. constructor. intros r n; case n; simpl; auto. intros p; elim p using BinPos.Pind; auto. intros p1 H. rewrite Pnat.nat_of_P_succ_morphism; rewrite pow_S. rewrite (pow_pos_succ (Eqsth K) Mkmul); auto. rewrite H; auto. exact Eth.(Kfth).(F_R).(Rmul_assoc). Qed. Ltac iskpow_coef t := match t with | (S ?x) => iskpow_coef x | O => true | _ => false end. Ltac kpow_tac t := match iskpow_coef t with | true => constr:(BinNat.N_of_nat t) | _ => constr:(NotConstant) end. Add Ring Rfth : (F_R (Eth.(Kfth))) (power_tac Kpower_theory [kpow_tac]). Add Field Kfth : Eth.(Kfth) (power_tac Kpower_theory [kpow_tac]). Let Kdiv_def := (Fdiv_def Eth.(Kfth)). Lemma Kinv_ext : forall p q, p = q -> / p = / q. Proof. intros p q H; rewrite H; auto. Qed. Let Ksth := (Eqsth K). Let Keqe := (Eq_ext kplus kmul kopp). Let AFth := Field_theory.F2AF Ksth Keqe Eth.(Kfth). Let Kmorph := InitialRing.gen_phiZ_morph Ksth Keqe (F_R Eth.(Kfth)). Hint Resolve one_not_zero two_not_zero : core. Theorem Kdiv1: forall r, r /1 = r. Proof. intros r; field; auto. Qed. (* Some stuff for K *) Notation "x ?0" := (is_zero x) (at level 10). Fixpoint n2k (n: nat) : K := match n with O => kO | (S O) => kI | (S n1) => (1 + n2k n1) end. Coercion N2k := n2k. Theorem Kdiff_2_0: (2:K) <> 0. Proof. simpl; auto. Qed. Hint Resolve Kdiff_2_0 : core. Theorem Keq_minus_eq: forall x y, x - y = 0 -> x = y. Proof. intros x y H. apply trans_equal with (y + (x - y)); try ring. rewrite H; ring. Qed. Theorem Keq_minus_eq_inv: forall x y, x = y -> x - y = 0. Proof. intros x y HH; rewrite HH; ring. Qed. Theorem Kdiff_diff_minus_eq: forall x y, x <> y -> x - y <> 0. Proof. intros x y H H1; case H; apply Keq_minus_eq; auto. Qed. Hint Resolve Kdiff_diff_minus_eq : core. Theorem Kmult_integral: forall x y, x * y = 0 -> x = 0 \/ y = 0. Proof. intros x y H. generalize (Eth.(is_zero_correct) x); case (is_zero x); intros (H1, H2); auto; right. apply trans_equal with ((/x) * (x * y)); try field. intros H3; assert (H4 := H2 H3); discriminate. rewrite H; ring. Qed. Theorem Kmult_integral_contrapositive: forall x y, x <> 0 -> y <> 0 -> x * y <> 0. Proof. intros x y H H1 H2. case (Kmult_integral H2); auto. Qed. Hint Resolve Kmult_integral_contrapositive : core. Theorem Kmult_eq_compat_l: forall x y z, y = z -> x * y = x * z. intros x y z H; rewrite H; auto. Qed. Theorem Keq_opp_is_zero: forall x, x = - x -> x = 0. Proof. intros x H. case (@Kmult_integral (1+1:K) x); simpl; auto. apply trans_equal with (x + x); simpl; try ring. pattern x at 1; rewrite H; ring. intros H1; case two_not_zero; auto. Qed. Theorem Kdiv_inv_eq_0: forall x y, x/y = 0 -> y<>0 -> x = 0. Proof. intros x y H1 H2. apply trans_equal with (y * (x/y)); try field; auto. rewrite H1; ring. Qed. Theorem is_zero_diff: forall x y, (x - y) ?0 = true -> x = y. Proof. intros x y H. apply trans_equal with (y + (x - y)); try ring. case (Eth.(is_zero_correct) (x - y)); intros H1 H2; rewrite H1; auto; ring. Qed. Theorem is_zero_diff_inv: forall x y, x = y -> (x - y) ?0 = true. Proof. intros x y H; rewrite H. case (Eth.(is_zero_correct) (y - y)); intros H1 H2; apply H2; ring. Qed. Theorem Ksqr_eq: forall x y, x^2 = y^2 -> x = y \/ x = - y. Proof. intros x y H. case (@Kmult_integral (x - y) (x + y)); auto. ring [H]. intros H1; left; apply trans_equal with (y + (x - y)); try ring. rewrite H1; ring. intros H1; right; apply trans_equal with (-y + (x + y)); try ring. rewrite H1; ring. Qed. Theorem diff_rm_quo: forall x y, x/y <> 0 -> y<>0 -> x <> 0. intros x y H H0 H1; case H; field [H1]; auto. Qed. Ltac dtac H := match type of H with ?X <> 0 => field_simplify X in H end; [ match type of H with ?X/?Y <> 0 => cut (X <> 0); [clear H; intros H | apply diff_rm_quo with Y; auto] end | auto]. (***********************************************************) (* *) (* Definition of the elements of the curve *) (* *) (***********************************************************) Inductive elt: Set := (* The infinity point *) inf_elt: elt (* A point of the curve *) | curve_elt: forall x y, y^2 = x^3 + A * x + B -> elt. Definition Kdec : forall a b: K, {a = b} + {a <> b}. intros a b; case_eq ((a - b) ?0); intros H. left; apply is_zero_diff; auto. right; intros H1. rewrite (is_zero_diff_inv H1) in H; discriminate. Defined. Theorem curve_elt_irr: forall x1 x2 y1 y2 H1 H2, x1 = x2 -> y1 = y2 -> @curve_elt x1 y1 H1 = @curve_elt x2 y2 H2. Proof. intros x1 x2 y1 y2 H1 H2 H3 H4. subst. rewrite (fun H => eq_proofs_unicity H H1 H2); auto. intros x y; case (Kdec x y); auto. Qed. Theorem curve_elt_irr1: forall x1 x2 y1 y2 H1 H2, x1 = x2 -> (x1 = x2 -> y1 = y2) -> @curve_elt x1 y1 H1 = @curve_elt x2 y2 H2. Proof. intros x1 x2 y1 y2 H1 H2 H3 H4. apply curve_elt_irr; auto. Qed. Notation "x ?= y" := (Kdec x y) (at level 70). Definition ceqb: forall a b: elt, {a = b} + {a<>b}. Proof. intros a b; case a; case b; auto; try (intros; right; intros; discriminate). intros x1 y1 H1 x2 y2 H2; case (Kdec x1 x2); intros H3. case (Kdec y1 y2); intros H4. left; apply curve_elt_irr1; auto. right; intros H; injection H; intros H5 H6; case H4; auto. right; intros H; injection H; intros H4 H5; case H3; auto. Defined. Theorem is_zero_true: forall e, is_zero e = true -> e = 0. intro e; generalize (Eth.(is_zero_correct) e); case is_zero; auto; intros (H,_); auto. Qed. Theorem is_zero_false: forall e, is_zero e = false -> e <> 0. intro e; generalize (Eth.(is_zero_correct) e); case is_zero; auto; intros (_,H); auto. intros; discriminate. intros _ H1; generalize (H H1); discriminate. Qed. Lemma opp_lem: forall x y, y ^ 2 = x ^ 3 + A * x + B -> (- y) ^ 2 = x ^ 3 + A * x + B. Proof. intros x y H. Time field [H]. Qed. (***********************************************************) (* *) (* Opposite function *) (* *) (***********************************************************) Definition opp: elt -> elt. refine (fun p => match p with inf_elt => inf_elt | @curve_elt x y H => @curve_elt x (-y) _ end). apply opp_lem; auto. Defined. Theorem opp_opp: forall p, opp (opp p) = p. Proof. intros p; case p; simpl; auto; intros; apply curve_elt_irr; ring. Qed. Theorem curve_elt_opp: forall x1 x2 y1 y2 H1 H2, x1 = x2 -> @curve_elt x1 y1 H1 = @curve_elt x2 y2 H2 \/ @curve_elt x1 y1 H1 = opp (@curve_elt x2 y2 H2). intros x1 x2 y1 y2 H1 H2 H3. case (@Kmult_integral (y1 - y2) (y1 + y2)); try intros H4. ring_simplify. ring [H1 H2 H3]. left; apply curve_elt_irr; auto. apply Keq_minus_eq; auto. right; unfold opp; apply curve_elt_irr; auto. apply Keq_minus_eq; rewrite <- H4; ring. Qed. Lemma add_lem1: forall x1 y1, y1 <> 0 -> y1 ^ 2 = x1 ^ 3 + A * x1 + B -> let l := (3 * x1 * x1 + A) / (2 * y1) in let x3 := l ^ 2 - 2 * x1 in (- y1 - l * (x3 - x1)) ^ 2 = x3 ^ 3 + A * x3 + B. Proof. intros x1 y1 H H1 l x3; unfold x3, l. Time field [H1]. split; auto. Qed. Lemma add_lem2: forall x1 y1 x2 y2, x1 <> x2 -> y1 ^ 2 = x1 ^ 3 + A * x1 + B -> y2 ^ 2 = x2 ^ 3 + A * x2 + B -> let l := (y2 - y1) / (x2 - x1) in let x3 := l ^ 2 - x1 - x2 in (- y1 - l * (x3 - x1)) ^ 2 = x3 ^ 3 + A * x3 + B. Proof. intros x1 y1 x2 y2 H H1 H2 l x3; unfold x3, l. Time field [H1 H2]; auto. Qed. Lemma add_zero: forall x1 x2 y1 y2, x1 = x2 -> y1 ^ 2 = x1 ^ 3 + A * x1 + B -> y2 ^ 2 = x2 ^ 3 + A * x2 + B -> y1 <> -y2 -> y1 = y2. Proof. intros x1 x2 y1 y2 H H1 H2 H3; subst x2. case (@Kmult_integral (y1 - y2) (y1 + y2)); try (intros H4; apply Keq_minus_eq; auto). ring [H1 H2]. case H3; apply Keq_minus_eq; rewrite <- H4; ring. Qed. Lemma add_zero_diff: forall x1 x2 y1 y2, x1 = x2 -> y1 ^ 2 = x1 ^ 3 + A * x1 + B -> y2 ^ 2 = x2 ^ 3 + A * x2 + B -> y1 <> -y2 -> y1 <>0. Proof. intros x1 x2 y1 y2 H H1 H2 H3 H4. assert (H5:= add_zero H H1 H2 H3). case H3; rewrite <- H5; ring [H4]. Qed. (***********************************************************) (* *) (* Addition *) (* *) (***********************************************************) Definition add: elt -> elt -> elt. refine (fun p1 p2 => match p1 with inf_elt => p2 | @curve_elt x1 y1 H1 => match p2 with inf_elt => p1 | @curve_elt x2 y2 H2 => if x1 ?= x2 then (* we have p1 = p2 or p1 = - p2 *) if (y1 ?= -y2) then (* we do p - p *) inf_elt else (* we do the tangent *) let l := (3*x1*x1 + A)/(2*y1) in let x3 := l^2 - 2 * x1 in @curve_elt x3 (-y1 - l * (x3 - x1)) _ else (* general case *) let l := (y2 - y1)/(x2 - x1) in let x3 := l ^ 2 - x1 -x2 in @curve_elt x3 (-y1 - l * (x3 - x1)) _ end end). apply (@add_lem1 x1 y1); auto. apply (@add_zero_diff x1 x2 y1 y2); auto. apply (@add_lem2 x1 y1 x2 y2); auto. Defined. (***********************************************************) (* *) (* Direct case predicate for add *) (* *) (***********************************************************) Ltac kauto := auto; match goal with H: ~ ?A, H1: ?A |- _ => case H; auto end. (* A little tactic to split kdec *) Ltac ksplit := let h := fresh "KD" in case Kdec; intros h; try (case h; kauto; fail). Theorem add_case: forall P, (forall p, P inf_elt p p) -> (forall p, P p inf_elt p) -> (forall p, P p (opp p) inf_elt) -> (forall p1 x1 y1 H1 p2 x2 y2 H2 l, p1 = (@curve_elt x1 y1 H1) -> p2 = (@curve_elt x2 y2 H2) -> p2 = add p1 p1 -> y1<>0 -> l = (3 * x1 * x1 + A) / (2 * y1) -> x2 = l ^ 2 - 2 * x1 -> y2 = - y1 - l * (x2 - x1) -> P p1 p1 p2) -> (forall p1 x1 y1 H1 p2 x2 y2 H2 p3 x3 y3 H3 l, p1 = (@curve_elt x1 y1 H1) -> p2 = (@curve_elt x2 y2 H2) -> p3 = (@curve_elt x3 y3 H3) -> p3 = add p1 p2 -> x1 <> x2 -> l = (y2 - y1) / (x2 - x1) -> x3 = l ^ 2 - x1 - x2 -> y3 = -y1 - l * (x3 - x1) -> P p1 p2 p3)-> forall p q, P p q (add p q). Proof. intros P H1 H2 H3 H4 H5 p q; case p; case q; auto. intros x2 y2 e2 x1 y1 e1; unfold add. repeat ksplit. replace (@curve_elt x2 y2 e2) with (opp (@curve_elt x1 y1 e1)); auto; simpl. apply curve_elt_irr; auto; ring [KD0]. assert (HH: y1 <> 0). apply (@add_zero_diff x1 x2 y1 y2); auto. replace (@curve_elt x2 y2 e2) with (@curve_elt x1 y1 e1); auto. eapply H4; eauto; simpl; repeat ksplit; try apply curve_elt_irr; auto. case HH; apply Keq_opp_is_zero; auto. apply curve_elt_irr; auto. case (@Kmult_integral (y1 - y2) (y1 + y2)); try intros HH1. ring [e1 e2 KD]. apply Keq_minus_eq; auto. case KD0; apply Keq_minus_eq; ring_simplify; auto. eapply H5; eauto; simpl; repeat ksplit. apply curve_elt_irr; auto. Qed. Theorem add_casew: forall P, (forall p, P inf_elt p p) -> (forall p, P p inf_elt p) -> (forall p, P p (opp p) inf_elt) -> (forall p1 x1 y1 H1 p2 x2 y2 H2 p3 x3 y3 H3 l, p1 = (@curve_elt x1 y1 H1) -> p2 = (@curve_elt x2 y2 H2) -> p3 = (@curve_elt x3 y3 H3) -> p3 = add p1 p2 -> p1 <> opp p2 -> ((x1 = x2 /\ y1 = y2 /\ l = (3 * x1 * x1 + A) / (2 * y1)) \/ (x1 <> x2 /\ l = (y2 - y1) / (x2 - x1)) ) -> x3 = l ^ 2 - x1 - x2 -> y3 = -y1 - l * (x3 - x1) -> P p1 p2 p3)-> forall p q, P p q (add p q). intros; apply add_case; auto. intros; eapply X2; eauto. rewrite H; simpl; intros tmp; case H4; injection tmp; apply Keq_opp_is_zero. ring [H6]. intros; eapply X2; eauto. rewrite H; rewrite H0; simpl; intros tmp; case H6; injection tmp; auto. Qed. Definition is_tangent p1 p2 := p1 <> inf_elt /\ p1 = p2 /\ p1 <> opp p2. Definition is_generic p1 p2 := p1 <> inf_elt /\ p2 <> inf_elt /\ p1 <> p2 /\ p1 <> opp p2. Definition is_gotan p1 p2 := p1 <> inf_elt /\ p2 <> inf_elt /\ p1 <> opp p2. Ltac kcase X Y := pattern X, Y, (add X Y); apply add_case; auto; clear X Y. Ltac kcasew X Y := pattern X, Y, (add X Y); apply add_casew; auto; clear X Y. (***********************************************************) (* *) (* Generic case for associativity *) (* (A + B) + C = A + (B + C) *) (* *) (***********************************************************) Theorem spec1_assoc: forall p1 p2 p3, is_generic p1 p2 -> is_generic p2 p3 -> is_generic (add p1 p2) p3 -> is_generic p1 (add p2 p3) -> add p1 (add p2 p3) = add (add p1 p2) p3. intros p1 p2; kcase p1 p2. intros p p3 _ _ (HH, _); case HH; auto. intros p3 _ _ _ p4 _ _ _ _ _ _ _ _ _ _ _ p5 (_, (_, (HH, _))); case HH; auto. intros p1 x1 y1 H1 p2 x2 y2 H2 p4 x4 y4 H4 l Hp Hp2 Hp4 Hp4b Hx Hl Hx4 Hy4 p3. generalize Hp2 Hp4b; clear Hp2 Hp4b; kcase p2 p3. intros; discriminate. intros p _ _ _ (_,(HH, _)); case HH; auto. intros p _ _ _ (_,(_,(_,HH))); case HH; rewrite opp_opp; auto. intros p2 _ _ _ p3 _ _ _ _ _ _ _ _ _ _ _ _ _ _ (_, (_, (HH, _))); case HH; auto. intros p2 x2b y2b H2b p3 x3 y3 H3 p5 x5 y5 H5 l1. intros Hp2; pattern p2 at 2; rewrite Hp2; clear Hp2. intros Hp3 Hp5 Hp5b Hd Hl1 Hx5 Hy5 tmp. injection tmp; intros; subst y2b x2b; clear tmp H2b. generalize Hp Hp5 Hp5b Hp4b H6 H9; clear Hp Hp5 Hp5b Hp4b H6 H9. kcase p1 p5. intros; discriminate. intros; discriminate. intros p _ _ _ _ _ (_,(_,(_,HH))); case HH; rewrite opp_opp; auto. intros p1 _ _ _ p5 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ (_,(_,(HH,_))); case HH; auto. intros p1 x1b y1b H1b. intros p5b x5b y5b H5b p6 x6 y6 H6 l2. intros Hp1; pattern p1 at 2; rewrite Hp1; clear Hp1. intros Hp5; pattern p5b at 2; rewrite Hp5; clear Hp5. intros Hp6 _ Hd2 Hl2 Hx6 Hy6. intros tmp; injection tmp; intros HH1 HH2; subst y1b x1b; clear tmp H1b. intros tmp; injection tmp; intros HH1 HH2; subst y5b x5b; clear tmp H5b. intros _ Hp4b _ _. generalize Hp3 Hp4 Hp4b H7 H8; clear Hp3 Hp4 Hp4b H7 H8. kcase p4 p3. intros; discriminate. intros; discriminate. intros p _ _ _ _ (_, (_, (_,HH))); case HH; rewrite opp_opp; auto. intros p3 _ _ _ p4 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ (_,(_,(HH, _))); case HH; auto. intros p4b x4b y4b H4b p3b x3b y3b H3b p7 x7 y7 H7 l3. intros Hp4b; pattern p4b at 2; rewrite Hp4b; clear Hp4b. intros Hp3b; pattern p3b at 2; rewrite Hp3b; clear Hp3b. intros Hp7 _ Hd3 Hl3 Hx7 Hy7. intros tmp; injection tmp; intros HH1 HH2; subst y3b x3b; clear tmp H3b. intros tmp; injection tmp; intros HH1 HH2; subst y4b x4b; clear tmp H4b. intros _ _ _. subst p6 p7; apply curve_elt_irr; clear H6 H7; apply Keq_minus_eq; clear H4 H5; subst. Time field [H1 H2 H3]; auto; repeat split; auto. intros VV; field_simplify_eq[H1 H2] in VV. case Hd3; symmetry; apply Keq_minus_eq; field_simplify_eq [H1 H2]; auto. intros VV; field_simplify_eq[H1 H2] in VV. case Hd2; symmetry; apply Keq_minus_eq; field_simplify_eq [H1 H2]; auto. Time field [H1 H2 H3]; auto; repeat split; auto. intros VV; field_simplify_eq[H1 H2] in VV. case Hd3; symmetry; apply Keq_minus_eq; field_simplify_eq [H1 H2]; auto. intros VV; field_simplify_eq[H1 H2] in VV. case Hd2; symmetry; apply Keq_minus_eq; field_simplify_eq [H1 H2]; auto. Qed. (***********************************************************) (* *) (* Tangent case for associativity *) (* A + (B + B) = (A + B) + B *) (* *) (***********************************************************) Theorem spec2_assoc: forall p1 p2 p3, is_generic p1 p2 -> is_tangent p2 p3 -> is_generic (add p1 p2) p3 -> is_generic p1 (add p2 p3) -> add p1 (add p2 p3) = add (add p1 p2) p3. intros p1 p2; kcase p1 p2. intros p p3 _ _ (HH, _); case HH; auto. intros p3 _ _ _ p4 _ _ _ _ _ _ _ _ _ _ _ p5 (_, (_, (HH, _))); case HH; auto. intros p1 x1 y1 H1 p2 x2 y2 H2 p4 x4 y4 H4 l Hp Hp2 Hp4 Hp4b Hx Hl Hx4 Hy4 p3. generalize Hp2 Hp4b; clear Hp2 Hp4b. kcase p2 p3. intros; discriminate. intros p _ _ _ _ (_, (HH, _)); case HH; auto. intros p _ _ _ _ _ (_, (HH, _)); case HH; auto. intros p2 x2b y2b H2b p5 x5 y5 H5 l1. intros Hp2b. intros Hp5 Hp5b Hd Hl1 Hx5 Hy5 Hp2. rewrite Hp2 in Hp2b. injection Hp2b; intros HH HH1; subst y2b x2b; clear Hp2b. generalize Hp Hp5 Hp5b; clear Hp Hp5 Hp5b. kcase p1 p5. intros; discriminate. intros; discriminate. intros p _ _ _ _ _ _ _ (_,(_,(_,HH))); case HH; rewrite opp_opp; auto. intros p1 _ _ _ p5 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ (_,(_,(HH,_))); case HH; auto. intros p1 x1b y1b H1b. intros p5b x5b y5b H5b p6 x6 y6 H6 l2. intros Hp1; pattern p1 at 2; rewrite Hp1; clear Hp1. intros Hp5; pattern p5b at 2; rewrite Hp5; clear Hp5. intros Hp6 _ Hd2 Hl2 Hx6 Hy6. intros tmp; injection tmp; intros HH1 HH2; subst y1b x1b; clear tmp H1b. intros tmp; injection tmp; intros HH1 HH2; subst y5b x5b; clear tmp H5b. intros _ Hp4b _ _. generalize Hp2 Hp4 Hp4b; clear Hp2 Hp4 Hp4b. kcase p4 p2. intros; discriminate. intros; discriminate. intros p _ _ _ (_, (_, (_,HH))); case HH; rewrite opp_opp; auto. intros p3 _ _ _ p4 _ _ _ _ _ _ _ _ _ _ _ _ _ _ (_,(_,(HH, _))); case HH; auto. intros p4b x4b y4b H4b p3b x3b y3b H3b p7 x7 y7 H7 l3. intros Hp4b; pattern p4b at 2; rewrite Hp4b; clear Hp4b. intros Hp3b; pattern p3b at 2; rewrite Hp3b; clear Hp3b. intros Hp7 _ Hd3 Hl3 Hx7 Hy7. intros tmp; injection tmp; intros HH1 HH2; subst y3b x3b; clear tmp H3b. intros tmp; injection tmp; intros HH1 HH2; subst y4b x4b; clear tmp H4b. intros _ _ _. subst p6 p7; apply curve_elt_irr; clear H6 H7 H2b; apply Keq_minus_eq; clear H4 H5; subst. Time field [H1 H2]; auto; repeat split; auto. intros VV; field_simplify_eq[H1 H2] in VV. case Hd3; symmetry; apply Keq_minus_eq; field_simplify_eq [H1 H2]; auto. intros VV; field_simplify_eq[H1 H2] in VV. case Hd2; symmetry; apply Keq_minus_eq; field_simplify_eq [H1 H2]; auto. Time field [H1 H2]; auto; repeat split; auto. intros VV; field_simplify_eq[H1 H2] in VV. case Hd3; symmetry; apply Keq_minus_eq; field_simplify_eq [H1 H2]; auto. intros VV; field_simplify_eq[H1 H2] in VV. case Hd2; symmetry; apply Keq_minus_eq; field_simplify_eq [H1 H2]; auto. intros p3 x3 y3 H3 p5 x5 y5 H5 p6 x6 y6 H6 l1 Hp3 Hp5 _ _ Hd _ _ _ _ _ _. rewrite Hp3; rewrite Hp5; intros (_, (HH,_)); case Hd; injection HH; auto. Time Qed. (***********************************************************) (* *) (* Identity case for associativity *) (* (A + A) + (A + A) = A + (A + (A + A)) *) (* *) (***********************************************************) Theorem spec3_assoc: forall p1 p2 p3, is_generic p1 p2 -> is_tangent p2 p3 -> is_generic (add p1 p2) p3 -> is_tangent p1 (add p2 p3) -> add p1 (add p2 p3) = add (add p1 p2) p3. intros p1 p2. kcase p1 p2. intros p p3 _ _ (HH, _); case HH; auto. intros p3 _ _ _ p4 _ _ _ _ _ _ _ _ _ _ _ p5 (_, (_, (HH, _))); case HH; auto. intros p1 x1 y1 H1 p2 x2 y2 H2 p4 x4 y4 H4 l Hp Hp2 Hp4 Hp4b Hx Hl Hx4 Hy4 p3. generalize Hp2 Hp4b; clear Hp2 Hp4b. kcase p2 p3. intros; discriminate. intros p _ _ _ _ (_, (HH, _)); case HH; auto. intros p _ _ _ (_ ,(_ , HH)); case HH; rewrite opp_opp; auto. intros p2 x2b y2b H2b p5 x5 y5 H5 l1. intros Hp2b. intros Hp5 Hp5b Hd Hl1 Hx5 Hy5 Hp2. rewrite Hp2 in Hp2b. injection Hp2b; intros HH HH1; subst y2b x2b; clear Hp2b H2b. generalize Hp Hp5 Hp5b; clear Hp Hp5 Hp5b. kcase p1 p5. intros; discriminate. intros; discriminate. intros p _ _ _ _ _ _ _ (_, (_,HH)); case HH; rewrite opp_opp; auto. intros p1 x1b y1b H1b. intros p6 x6 y6 H6 l2. intros Hp1; pattern p1 at 3 4; rewrite Hp1; clear Hp1. intros Hp6 _ Hd2 Hl2 Hx6 Hy6. intros tmp; injection tmp; intros HH1 HH2; subst y1b x1b; clear tmp. intros tmp; injection tmp; intros HH1 HH2. subst y5 x5; clear tmp H5. rename HH1 into Hy1; rename HH2 into Hx1. generalize Hp2 Hp4; clear Hp2 Hp4. kcase p4 p2. intros; discriminate. intros; discriminate. intros p _ _ _ _ _ _ (_, (_, (_, HH))); case HH; rewrite opp_opp; auto. intros p3 _ _ _ p4 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ (_,(_,(HH, _))); case HH; auto. intros p4b x4b y4b H4b p2b x2b y2b H2b. intros p7 x7 y7 H7 l3. intros Hp4b; pattern p4b at 2; rewrite Hp4b; clear Hp4b. intros Hp2b; pattern p2b at 2; rewrite Hp2b; clear Hp2b. intros Hp7 _ Hd1 Hl3 Hx7 Hy7. intros tmp; injection tmp; intros HH1 HH2; subst y2b x2b; clear tmp H2b. intros tmp; injection tmp; intros HH1 HH2; subst y4b x4b; clear tmp H4b. intros _ _ _ _ _ _. subst p6 p7; apply curve_elt_irr; clear H6 H7; apply Keq_minus_eq; clear H4 H1b; subst. Time field [H2]; auto; repeat split; auto; intros HH; field_simplify_eq in HH; auto. case Hx; symmetry; apply Keq_minus_eq. field_simplify_eq; auto. case Hd1; symmetry; apply Keq_minus_eq; field_simplify_eq; repeat split; auto. intros HH1; ring_simplify in HH1; auto. case Hx; symmetry; apply Keq_minus_eq. field_simplify_eq; auto. case Hd2; apply Keq_minus_eq; field_simplify_eq; auto. Time field [H2]; auto; repeat split; auto; intros HH; field_simplify_eq in HH; auto. case Hx; symmetry; apply Keq_minus_eq. field_simplify_eq; auto. case Hd1; symmetry; apply Keq_minus_eq; field_simplify_eq; repeat split; auto. intros HH1; ring_simplify in HH1; auto. case Hx; symmetry; apply Keq_minus_eq. field_simplify_eq; auto. case Hd2; apply Keq_minus_eq; field_simplify_eq; auto. intros p1b x1b y1b H1b. intros p5b x5b y5b H5b. intros p3 x3 y3 H3 l2. intros Hp1b; pattern p1b at 2 5; rewrite Hp1b; clear Hp1b. intros Hp5b; pattern p5b at 2 4; rewrite Hp5b; clear Hp5b. intros Hp3 _; rewrite Hp3; clear Hp3. intros Hx1 _ _ _. intros tmp; injection tmp; intros HH1 HH2; subst y1b x1b; clear tmp. intros tmp; injection tmp; intros HH1 HH2; subst y5b x5b; clear tmp. intros _ _ _ _ _ (_,(HH, _)); case Hx1; injection HH; auto. intros p2b x2b y2b H2b. intros p3 x3 y3 H3. intros p5 x5 y5 H5 l2. intros Hp2b; pattern p2b at 2 5; rewrite Hp2b; clear Hp2b. intros Hp3; rewrite Hp3; clear Hp3. intros _ _ Hx1 _ _ _. intros tmp; injection tmp; intros HH1 HH2; subst y2b x2b; clear tmp. intros _ _ (_,(HH, _)); case Hx1; injection HH; auto. Time Qed. (***********************************************************) (* *) (* inf_elt is the zero *) (* *) (***********************************************************) Theorem add_0_l: forall p, add inf_elt p = p. Proof. auto. Qed. Theorem add_0_r: forall p, add p inf_elt = p. Proof. intros p; case p; auto. Qed. (***********************************************************) (* *) (* opp is the opposite *) (* *) (***********************************************************) Theorem add_opp: forall p, add p (opp p) = inf_elt. Proof. intros p; case p; unfold add; simpl; auto. intros x1 y1 H1. repeat ksplit. case KD0; ring. Qed. (***********************************************************) (* *) (* Addition is commutative *) (* *) (***********************************************************) Theorem add_comm: forall p1 p2, add p1 p2 = add p2 p1. Proof. intros p1 p2; case p1. rewrite add_0_r; rewrite add_0_l; auto. intros x1 y1 H1; case p2. rewrite add_0_r; rewrite add_0_l; auto. intros x2 y2 H2; simpl; repeat ksplit. case KD2; ring [KD0]. case KD0; ring [KD2]. assert (H3 := add_zero KD H1 H2 KD0). apply curve_elt_irr; subst x2 y2; auto. case KD; auto. case KD; auto. apply curve_elt_irr; field; auto. Qed. Theorem aux1: forall x1 y1 x2 y2, y1 ^ 2 = x1 ^ 3 + A * x1 + B -> y2 ^ 2 = x2 ^ 3 + A * x2 + B -> x1 <> x2 -> y2 = 0 -> ((y2 - y1) / (x2 - x1))^2 - x1 - x2 = x2 -> False. Proof. intros x1 y1 x2 y2 H H1 H2 H3 H4. subst y2. assert (Hu : x2 ^ 3 = -(A * x2 + B)). apply trans_equal with ((x2 ^ 3 + A * x2 + B) - (A * x2 + B)); try ring. rewrite <- H1; ring. assert (H5:= (Keq_minus_eq_inv H4)); clear H4. field_simplify_eq [H Hu] in H5; auto. generalize (Kmult_eq_compat_l x2 H5); rename H5 into H4. replace (x2 * 0) with 0; try ring; intros H5. field_simplify_eq [Hu] in H5. generalize H5; clear H5. match goal with |- (?X = _ -> _) => replace X with ((x2 - x1) * (2* A *x2 + 3* B)); try ring end. intros tmp; case (Kmult_integral tmp); clear tmp; intros HH2. case H2; apply sym_equal; apply Keq_minus_eq; auto. generalize (Kmult_eq_compat_l ((2 * A )^3) (sym_equal H1)). replace ((2 * A)^3 * 0 ^ 2) with 0; try (ring). intros H5; ring_simplify in H5; auto. match type of H5 with (?X + ?Y + _ = _) => let x := (constr:(2 * A * x2)) in ((replace Y with (x ^ 3) in H5; try ring); (replace X with (4 * A^3 * x) in H5; try ring); replace x with (-(3) * B) in H5) end. 2: apply sym_equal; apply Keq_minus_eq; apply trans_equal with (2:= HH2); ring. ring_simplify in H5; auto. match type of Eth.(NonSingular) with ?X <> 0 => case (@Kmult_integral (-B) X); try intros HH3; try (case NonSingular; auto; fail) end. rewrite <- H5; ring. assert (HH3b : B = 0). replace B with (-(-B)); try ring; rewrite HH3; ring. case (@Kmult_integral 2 (A * x2)); try intros HH4; auto. apply trans_equal with (2:= HH2). rewrite HH3b; ring. case (Kmult_integral HH4); try intros HH5; auto. case Eth.(NonSingular); rewrite HH3b; rewrite HH5; simpl; ring. ring_simplify [HH5] in H4; auto. case (@Kmult_integral A x1); try intros HH6; auto. apply trans_equal with (2 := H4); rewrite HH3b; ring. case Eth.(NonSingular); rewrite HH3b; rewrite HH6; ring. case H2; rewrite HH6; auto. Qed. (***********************************************************) (* *) (* There is only one zero *) (* *) (***********************************************************) Theorem uniq_zero: forall p1 p2, add p1 p2 = p2 -> p1 = inf_elt. Proof. intros p1 p2; kcase p1 p2. intros p; case p; simpl; auto; intros; discriminate. intros. subst p1 p2; injection H8; intros H9 H10. generalize (Keq_minus_eq_inv H7); clear H7; intros H7. ring_simplify [H9 H10] in H7. case (Kmult_integral H7); auto; intros H11. case Kdiff_2_0; auto. case H4; auto. intros p1 x1 y1 H1 p2 x2 y2 H2 p3 x3 y3 H3 l Hp1 Hp2 Hp3 Hp3b Hd Hl Hx3 Hy3 Hp. apply False_ind. subst p2; subst p3; injection Hp; clear p1 Hp1 Hp Hp3b; intros. case (@aux1 x1 y1 x2 y2); auto. generalize (Keq_minus_eq_inv Hy3); rewrite Hl; rewrite H; rewrite H0; clear Hy3; intros Hy3. field_simplify_eq in Hy3; auto. assert (HH: 2 * y2 * (x2 - x1) = 0). rewrite Hy3; ring. clear Hy3; rename HH into Hy3. case (Kmult_integral Hy3); auto; clear Hy3; intros Hy3. case (Kmult_integral Hy3); auto; clear Hy3; intros Hy3. case Kdiff_2_0; auto. case Hd. symmetry; apply Keq_minus_eq; auto. rewrite <- Hl; rewrite <- Hx3; auto. Qed. (***********************************************************) (* *) (* There is only one opposite *) (* *) (***********************************************************) Theorem uniq_opp: forall p1 p2, add p1 p2 = inf_elt -> p2 = opp p1. Proof. intros p1 p2; kcase p1 p2. intros p H; rewrite H; auto. intros; subst; discriminate. intros; subst; discriminate. Qed. (***********************************************************) (* *) (* Opposite of zero is zero *) (* *) (***********************************************************) Theorem opp_0: opp (inf_elt) = inf_elt. Proof. auto. Qed. (***********************************************************) (* *) (* Opposite of a sum is the sum of opposite *) (* *) (***********************************************************) Theorem opp_add: forall p1 p2, opp (add p1 p2) = add (opp p1) (opp p2). Proof. intros p1 p2; case p1. rewrite opp_0; repeat rewrite add_0_l; auto. intros x1 y1 H1; case p2. rewrite opp_0; repeat rewrite add_0_r; auto. intros x2 y2 H2; simpl; repeat ksplit; simpl. case KD1; ring [KD0]. case KD0; apply trans_equal with (-(-y1)); try ring; rewrite KD1; ring. assert (HH:= add_zero_diff KD H1 H2 KD0). apply curve_elt_irr; try field; repeat split; auto; intros HH1; case HH; symmetry; apply Keq_minus_eq; ring_simplify; auto. apply curve_elt_irr; try field; auto. Qed. Theorem compat_add_opp: forall p1 p2, add p1 p2 = add p1 (opp p2) -> ~ p1 = opp p1 -> p2 = opp p2. Proof. intros p1 p2; kcase p1 p2. intros p H H1; case H1. apply uniq_opp. pattern p at 2; rewrite <- opp_opp; auto. intros p1 x1 y1 H1 p2 x2 y2 H2 l Hp1 Hp2 Hp2b Hy Hl Hx2 Hy2 He1 He2. apply uniq_opp. rewrite <- Hp2b; rewrite He1; rewrite add_opp; auto. intros p1 x1 y1 H1 p2 x2 y2 H2 p3 x3 y3 H3 l Hp1 Hp2 Hp3 Hp3b Hx12 Hl Hx3 Hy3 Hp3bb Hd. generalize Hp3bb; clear Hp3bb. subst p1 p2 p3; simpl; repeat ksplit. intros tmp; injection tmp; clear tmp. rewrite Hx3; rewrite Hl; intros _ HH. assert (HH1:= (Keq_minus_eq_inv HH)). field_simplify_eq in HH1; auto. case (Kmult_integral HH1); try intros HH2; auto. case (Kmult_integral HH2); try intros HH3; auto. assert (HH8: 2 * 2 = 0). replace (2*2) with (-(-(2 * 2))); try ring ; try rewrite HH3; ring. case (Kmult_integral HH8); try intro H9; case Kdiff_2_0; auto. intros; apply curve_elt_irr; try rewrite HH3; intros; ring. case Hd; simpl; apply curve_elt_irr; ring[HH2]. Qed. Theorem compat_add_triple: forall p, p <> opp p -> add p p <> opp p -> add (add p p) (opp p) = p. Proof. intro p. set (p1 := (add p p)). set (p2 := opp p). cut (p1 = add p p); auto. cut (p2 = opp p); auto. kcase p1 p2. intros p1 Hp1; subst p1. intros; symmetry; apply uniq_opp; auto. intros p1 H1 _ H2 _; case H2. rewrite <- (opp_opp p); rewrite <- H1; auto. intros p1 H1 H2 H3 H4. assert (H5: p = p1). rewrite <- (opp_opp p); rewrite <- H1; rewrite opp_opp; auto. subst p1. symmetry; apply uniq_zero with p; auto. intros; case H11; auto. case p; clear p. intros; subst p2; discriminate. intros x y H. set (p := (@curve_elt x y H)). intros p1 x1 y1 H1 p2 x2 y2 H2 p3 x3 y3 H3 l Hp1 Hp2 Hp3 Hp3b Hx12 Hl Hx3 Hy3 He1 He2 He3 He4. generalize He1; unfold p; rewrite Hp2; simpl; intros tmp; injection tmp; clear tmp. intros; subst x2 y2. rewrite Hp3. case (curve_elt_opp H3 H); auto. rewrite Hx3; rewrite Hl. generalize He2; unfold p; simpl; repeat ksplit. rewrite Hp1; intros; discriminate. rewrite Hp1; intros tmp; injection tmp; intros; subst x1 y1. set (l1 := (3 * x * x + A) / (2 * y)). field; repeat split; auto. rewrite <- Hp3; fold p; intros HH. absurd (p1 = inf_elt). rewrite Hp1; intros; discriminate. apply uniq_zero with p2. rewrite <- Hp3b; rewrite He1; auto. Qed. Theorem add_opp_double_opp: forall p1 p2, add p1 p2 = opp p1 -> p2 = add (opp p1) (opp p1). intros p1 p2; intros H1. case (ceqb p1 (opp p1)); intros H2. pattern (opp p1) at 1; rewrite <- H2. rewrite add_opp; apply uniq_zero with p1. rewrite add_comm; rewrite H1; auto. rewrite <-opp_add. assert (H: (p2 = add (opp p1) (opp p1)) \/ (p2 = opp (add (opp p1) (opp p1)))). rewrite <- opp_add; rewrite opp_opp. generalize H1 H2; clear H1 H2; kcase p1 p2. intros p H2 H1; case H1; auto. intros p H2 H1; rewrite opp_add; rewrite <- H2; auto. intros p1 x1 y1 H1 p2 x2 y2 H2 l Hp1 Hp2 Hp2b Hy1 _ _ _ He1 He2. rewrite <- Hp2b; rewrite He1; rewrite opp_opp; auto. intros p1 x1 y1 H1 p2 x2 y2 H2 p3 x3 y3 H3 l Hp1 Hp2 Hp3 Hp3b Hx12 Hl Hx3 Hy3 He1 He2. assert (Hy1: y1 <> 0). intros HH; case He2; rewrite Hp1; simpl; apply curve_elt_irr; ring[HH]. assert (Hy2: -y1 <> 0). intros Hy2; case Hy1; apply trans_equal with (-(-y1)); try ring; rewrite Hy2; ring. generalize He1; clear He1. rewrite Hp1; rewrite Hp2; rewrite Hp3; simpl; repeat ksplit. case Hy1; apply Keq_opp_is_zero; auto. intros tmp; injection tmp; intros; subst x3 y3; clear tmp Hp1 Hp2 Hp3. assert (tmp: forall P Q, P \/ Q -> Q \/ P). intuition. apply tmp; apply curve_elt_opp; clear tmp. rewrite Hl in H0. assert (HH1:= (Keq_minus_eq_inv H0)); clear H0. field_simplify_eq [H1 H2] in HH1; auto. match type of HH1 with ?XX = 0 => assert (HH2: 2 * y2 * y1 = XX + 2 * y2 * y1); try (rewrite HH1; ring); clear HH1; rename HH2 into HH1; ring_simplify in HH1 end. match type of HH1 with _ = ?X => assert (HH2: 4 * y2^2 * y1^2 = X * X); [rewrite <- HH1;ring | clear HH1; rename HH2 into HH1] end. assert (HH2:= Keq_minus_eq_inv HH1); clear HH1; rename HH2 into HH1. ring_simplify [H1 H2] in HH1. assert (HH2: (x2 - (((3 * x1* x1 + A)/(2*-y1))^2 -2 * x1)) * (x2 -x1)^2 = 0). field_simplify_eq [H1]; auto. apply trans_equal with (2 := HH1); ring. clear HH1; rename HH2 into HH1. case (Kmult_integral HH1); intros HH2. apply Keq_minus_eq; auto. rewrite <- HH2; field; auto; split; auto. simpl in HH2; auto. case (Kmult_integral HH2); intros; case Hx12; symmetry; apply Keq_minus_eq; auto. case H; auto; intros H3. rewrite <- opp_add in H3; auto. rewrite opp_add in H3; rewrite opp_opp in H3. case (ceqb (add p1 p1) (opp p1)); intros H4. rewrite H3; rewrite H4. rewrite <- H1; rewrite H3; rewrite H4. rewrite add_opp; auto. rewrite <- H3. apply compat_add_opp with p1; auto. apply trans_equal with (opp(add (add p1 p1) (opp p1))). rewrite compat_add_triple; auto. rewrite <- H3; rewrite opp_add; rewrite opp_opp. apply add_comm. Qed. (***********************************************************) (* *) (* Cancellation rule *) (* *) (***********************************************************) Theorem cancel: forall p1 p2 p3, add p1 p2 = add p1 p3 -> p2 = p3. intros p1 p2; pattern p1, p2, (add p1 p2); apply add_casew; clear p1 p2. intros; subst; auto. intros p p1 H; symmetry; apply uniq_zero with p. rewrite add_comm; auto. intros; symmetry; apply uniq_opp; auto. intros p1 x1 y1 H1 p2 x2 y2 H2 p4 x4 y4 H4 l Hp1 Hp2 Hp4 Hp4b Hd1 Hl1 Hx4 Hy4 p3. generalize Hp1 Hp4b Hd1; clear Hp1 Hp4b Hd1. rewrite Hp4; clear Hp4. pattern p1, p3, (add p1 p3); apply add_casew; clear p1 p3. intros; discriminate. intros p He1 He2 _ He3. apply uniq_zero with p. rewrite add_comm; rewrite <- He2; auto. intros; discriminate. intros p1 x1b y1b H1b p3 x3 y3 H3 p5 x5 y5 H5 l'. intros Hp1b Hp3 Hp5 Hp5b Hd1 Hl' Hx5 Hy5 He1 He2 Hd2 He3. rewrite He3 in He2; rewrite Hp5b in He2. rewrite He1 in Hp1b; injection Hp1b; clear Hp1b. intros; subst x1b y1b. generalize He3; rewrite Hp5. intros tmp; injection tmp; intros HH HH1; clear tmp. rewrite Hp5b in He3. generalize Hy5; clear Hy5. rewrite <- HH; rewrite <- HH1; rewrite Hy4; clear HH Hy4. intros HH2; generalize (Keq_minus_eq_inv HH2); clear HH2. intros HH2; ring_simplify in HH2. case (@Kmult_integral (l' - l) (x4 - x1)); try (clear HH2; intros HH2). rewrite <- HH2; ring. generalize HH1; subst x4 x5; clear HH1. rewrite (Keq_minus_eq HH2). intros HH; generalize (Keq_minus_eq_inv HH); clear HH; intros HH; ring_simplify in HH. case (curve_elt_opp H2 H3). symmetry; apply Keq_minus_eq; rewrite <- HH; ring. subst p2 p3; auto. rewrite <- Hp2; rewrite <- Hp3; intros HH1. case (ceqb p1 (opp p1)); intros HH3. case Hl1; clear Hl1. intros (Hx1, (Hy1, _)). case Hd1; rewrite <- HH1; rewrite He1; rewrite Hp2; apply curve_elt_irr; auto; clear Hd1. intros (Hdx1, Hl2); rewrite Hl2 in HH2; clear Hl2. case Hl'; clear Hl'. intros (Hx1, (Hy1, _)). case Hd2; rewrite HH1; rewrite opp_opp. rewrite He1; rewrite Hp3; apply curve_elt_irr; auto; clear Hd1. intros (Hdx3, Hl2); rewrite Hl2 in HH2; clear Hl2. generalize HH1; rewrite Hp2; rewrite Hp3; simpl; clear HH1. intros tmp; injection tmp. intros; apply curve_elt_irr; auto. subst x3 y2. field_simplify_eq in HH2; auto. case (Kmult_integral HH2); try intros HHx; auto. case Kdiff_2_0; auto. ring [HHx]. rewrite <- (opp_opp p3); rewrite <- HH1. apply compat_add_opp with p1; auto. pattern p2 at 2; rewrite HH1; rewrite opp_opp; auto. case (curve_elt_opp H4 H1); try apply Keq_minus_eq; auto; rewrite He3; rewrite <- He1; intros HH3. apply trans_equal with inf_elt; [idtac | symmetry]; apply uniq_zero with p1; rewrite add_comm; auto. rewrite <- He2; auto. apply trans_equal with (add (opp p1) (opp p1)); [idtac | symmetry]; apply add_opp_double_opp; auto. rewrite <- He2; auto. Qed. Theorem add_minus_id: forall p1 p2, (add (add p1 p2) (opp p2)) = p1. intros p1 p2. case (ceqb (add p1 p2) (opp p2)). intros Hp12; rewrite Hp12; symmetry; apply add_opp_double_opp; rewrite add_comm; auto. pattern p1, p2, (add p1 p2); apply add_case; clear p1 p2. intros; rewrite add_opp; auto. intros; rewrite add_0_r; auto. intros; rewrite opp_opp; auto. intros p1 x1 y1 H1 p2 x2 y2 H2 l Hp1 Hp2 Hp3 Hd Hl Hx2 Hy2 Hp12. rewrite Hp3. apply compat_add_triple; auto. rewrite Hp1; simpl; intros tmp; case Hd; injection tmp; intros; apply Keq_opp_is_zero; auto. rewrite <- Hp3; auto. intros p1 x1 y1 H1 p2 x2 y2 H2 p3 x3 y3 H3 l Hp1 Hp2 Hp3 Hp3b Hx1 Hl Hx3 Hy3. generalize Hp2 Hp3 Hp3b; clear Hp2 Hp3 Hp3b. pattern p2 at 1 2; rewrite <- (opp_opp p2). pattern p3, (opp p2), (add p3 (opp p2)). apply add_case. intros; discriminate. intros; discriminate. intros; symmetry; apply uniq_zero with p. pattern p at 1; rewrite <- (opp_opp p); auto. intros; case n; auto. intros p4 x4 y4 H4 p5 x5 y5 H5 p6 x6 y6 H6 l0. intros Hp4; rewrite Hp4; clear Hp4. intros Hp5; rewrite Hp5; clear Hp5. intros Hp6 _; rewrite Hp6; clear Hp6. intros Hx Hl0 Hx6 Hy6. intros tmp; injection tmp; intros HH1 HH2; clear tmp. assert (y5 = - y2). rewrite <- HH1; ring. subst y5 x5; clear HH1. intros tmp; injection tmp; intros HH1 HH2; subst y4 x4; clear tmp. intros _ _. subst p1; apply curve_elt_irr; clear H6 H5 H4 H3; subst; apply Keq_minus_eq; field [H1 H2]; split; auto; intros HH; case Hx; ring_simplify [H1 H2] in HH; symmetry; apply Keq_minus_eq; field_simplify_eq [H1 H2]; auto. Qed. Theorem add_shift_minus: forall p1 p2 p3, add p1 p2 = p3 -> p1 = add p3 (opp p2). intros p1 p2 p3 H. apply cancel with (opp (opp p2)). repeat rewrite (add_comm (opp (opp p2))). rewrite add_minus_id; rewrite opp_opp; auto. Qed. Theorem degen_assoc: forall p1 p2 p3, (p1 = inf_elt \/ p2 = inf_elt \/ p3 = inf_elt) \/ (p1 = opp p2 \/ p2 = opp p3) \/ (opp p1 = add p2 p3 \/ opp p3 = add p1 p2) -> add p1 (add p2 p3) = add (add p1 p2) p3. intros p1 p2 p3; intuition; subst; repeat (rewrite add_opp || rewrite add_0_r || rewrite add_0_l); auto. repeat rewrite (add_comm (opp p2)). rewrite add_opp; rewrite (add_comm p2); rewrite add_minus_id; auto. pattern p3 at 4; rewrite <- opp_opp; rewrite add_minus_id. rewrite (add_comm (opp p3)); rewrite add_opp; rewrite add_0_r; auto. rewrite <- H0; rewrite add_opp. rewrite <- (opp_opp p1); rewrite H0. rewrite opp_add. rewrite (add_comm (opp p2)); pattern p2 at 2; rewrite <- opp_opp; rewrite add_minus_id. rewrite add_comm; auto; rewrite add_opp; auto. pattern p3 at 1; rewrite <- opp_opp; rewrite H0. rewrite (add_comm p2). pattern p2 at 2; rewrite <- opp_opp. rewrite opp_add; rewrite add_minus_id; auto. rewrite <- H0; rewrite (add_comm (opp p3)). repeat rewrite add_opp; auto. Qed. Theorem spec4_assoc: forall p1 p2, add p1 (add p2 p2) = add (add p1 p2) p2. intros p1 p2. case (ceqb p1 inf_elt); intros H1. apply degen_assoc; auto. case (ceqb p2 inf_elt); intros H2. apply degen_assoc; auto. case (ceqb p2 (opp p2)); intros H3. apply degen_assoc; auto. case (ceqb p1 (opp p2)); intros H4. apply degen_assoc; auto. case (ceqb (opp p1) (add p2 p2)); intros H5. apply degen_assoc; auto. case (ceqb (opp p2) (add p1 p2)); intros H6. apply degen_assoc; auto. case (ceqb p1 (add p2 p2)); intros H7. subst p1; apply spec3_assoc. repeat split; auto. intros H7; case H2; apply uniq_zero with p2; auto. split; auto. repeat split; auto. intros H7; case H4; apply uniq_opp; rewrite add_comm; auto. intros H7; case H1; apply uniq_zero with p2; auto. split; auto. case (ceqb p2 (add p1 p2)); intros H8. pattern p1 at 1; rewrite (uniq_zero _ (sym_equal H8)). rewrite <- H8; auto. case (ceqb p1 p2); intros H9. subst p1; apply add_comm. apply spec2_assoc; repeat split; auto. repeat split; auto. repeat split; auto. intros H10; case H4; apply uniq_opp; rewrite add_comm; auto. intros H10; case H3; apply uniq_opp; auto. intros H10; case H5; rewrite H10; rewrite opp_opp; auto. Qed. (***********************************************************) (* *) (* Associativity for add *) (* *) (***********************************************************) Theorem add_assoc: forall p1 p2 p3, add p1 (add p2 p3) = add (add p1 p2) p3. intros p1 p2 p3. case (ceqb p1 inf_elt); intros H1. apply degen_assoc; auto. case (ceqb p2 inf_elt); intros H2. apply degen_assoc; auto. case (ceqb p3 inf_elt); intros H3. apply degen_assoc; auto. case (ceqb p1 p2); intros H4. subst p1. rewrite add_comm; rewrite (add_comm p2). rewrite <- spec4_assoc; rewrite add_comm; auto. case (ceqb p1 (opp p2)); intros H5. apply degen_assoc; auto. case (ceqb p2 p3); intros H6. subst p2. apply spec4_assoc. case (ceqb p2 (opp p3)); intros H7. apply degen_assoc; auto. case (ceqb (opp p1) (add p2 p3)); intros H8. apply degen_assoc; auto. case (ceqb (opp p3) (add p1 p2)); intros H9. apply degen_assoc; auto. case (ceqb p1 (add p2 p3)); intros H10. rewrite H10. apply cancel with (opp p3). rewrite spec4_assoc. repeat rewrite (add_comm (opp p3)). repeat rewrite add_minus_id; rewrite add_comm; auto. case (ceqb p3 (add p1 p2)); intros H11. rewrite H11. apply cancel with (opp p1). rewrite spec4_assoc. repeat rewrite (add_comm (opp p1)). repeat rewrite (add_comm p1). repeat rewrite add_minus_id; rewrite add_comm; auto. apply spec1_assoc. split; auto. split; auto. split; auto. intros HH; case H5; apply uniq_opp; auto. rewrite add_comm; auto. repeat split; auto. intros HH; case H7; apply uniq_opp; auto. rewrite add_comm; auto. intros HH; case H8; rewrite HH; rewrite opp_opp; auto. Qed. (***********************************************************) (* *) (* K is finite *) (* *) (***********************************************************) Variable LK: list K. Hypothesis ULK: ulist LK. Hypothesis CLK: forall k, In k LK. (***********************************************************) (* *) (* Exact square root function *) (* *) (***********************************************************) Fixpoint Kfind_root (r: K) (l: list K) {struct l} : option K := match l with | nil => None | r1 :: l1 => if (ksub r (kmul r1 r1)) ?0 then Some r1 else Kfind_root r l1 end. Theorem Kfind_root_root: forall r l, match Kfind_root r l with None => forall k, In k l -> kmul k k <> r | Some k => kmul k k = r end. intros r l; elim l; simpl. intros k H; case H. intros a l1 Hrec; generalize (Eth.(is_zero_correct) (ksub r (kmul a a))); case is_zero; intros HH; case HH; clear HH; intros H1 H2. apply trans_equal with (ksub r kO); [rewrite <- H1; auto | idtac]; ring. generalize Hrec; case Kfind_root; auto. intros H3 k [H4 | H4]; subst; auto. intros H4; absurd (false = true); try (intro HH; discriminate). apply H2; subst; ring. Qed. Definition KLroot r := Kfind_root r LK. Theorem KLroot_root: forall r, match KLroot r with None => forall k, kmul k k <> r | Some k => kmul k k = r end. intros r; generalize (Kfind_root_root r LK); unfold KLroot; case Kfind_root; auto. Qed. (***********************************************************) (* *) (* List of elements of the curve *) (* *) (***********************************************************) Fixpoint EKa (l: list K) : list (K * K) := match l with | nil => nil | x :: l1 => let y := kplus (kplus (x ^ 3) (kmul A x)) B in match KLroot y with | Some k => if k ?0 then (x, kO) :: EKa l1 else (x, k) :: (x, kopp k) :: EKa l1 | None => EKa l1 end end. Theorem EKa_in: forall l x y, ~ In x l -> ~ In (x, y) (EKa l). intros l x y; elim l; simpl; auto. intros a l1 Rec; case KLroot; auto. intros k Hk; case (Eth.(is_zero_correct) k); case is_zero. simpl; intros _ _ H1; case Hk; inversion_clear H1. injection H; intros; subst a; auto. case Rec; auto; case Hk; auto. simpl; intros _ H1 H2; inversion_clear H2; case Hk; auto. injection H; auto. case H; intros H2. injection H2; auto. case Rec; auto. Qed. Theorem EKa_ulist: forall l, ulist l -> ulist (EKa l). intros l; elim l; simpl; auto. intros a l1 Hrec H; inversion_clear H. generalize (KLroot_root (kplus (kplus (kmul a (kmul a a)) (kmul A a)) B)); case KLroot; auto. intros k Hk; case (Eth.(is_zero_correct) k); case is_zero. intros H2 _; constructor; auto. apply EKa_in; auto. intros _ H2; repeat constructor; auto. simpl; intros H3; inversion_clear H3. injection H; intros H3. case (@Kmult_integral (kplus kI kI) k). apply trans_equal with (kplus k (kopp k)); [rewrite H3 |idtac]; ring. intros H4; case two_not_zero; auto. intros H5; assert (H6 := H2 H5); discriminate. case (EKa_in l1 a k); auto. apply EKa_in; auto. Qed. Let In_curve x y := kmul y y = kplus (kplus (x ^ 3) (kmul A x)) B. Theorem EKa_complete: forall l x y, In x l -> In_curve x y -> In (x, y) (EKa l). unfold In_curve; intros l x y; elim l; simpl; auto. intros a l1 Hrec [H1 | H1] H2; subst; auto. generalize (KLroot_root (kplus (kplus (kmul x (kmul x x)) (kmul A x)) B)); case KLroot; auto. intros k Hk; rewrite <- Hk in H2. case (@Kmult_integral (kplus y k) (ksub y k)); try intros H3. apply trans_equal with (ksub (kmul y y) (kmul k k)); try ring. rewrite H2; ring. generalize (Eth.(is_zero_correct) k); case is_zero; intros HH; case HH; intros H4 H5; clear HH. rewrite <- H3; rewrite H4; auto; simpl; left. apply f_equal2 with (f := @pair K K); auto; ring. right; left; apply f_equal2 with (f := @pair K K); auto. apply trans_equal with (ksub (kplus y k) k); try ring; rewrite H3; ring. generalize (Eth.(is_zero_correct) k); case is_zero; intros HH; case HH; intros H4 H5; clear HH. rewrite <- H3; rewrite H4; auto; simpl; left. apply f_equal2 with (f := @pair K K); auto; ring. left; apply f_equal2 with (f := @pair K K); auto. apply trans_equal with (kplus (ksub y k) k); try ring; rewrite H3; ring. intros H3; case (H3 y); auto. case KLroot; auto. intros k; case is_zero; repeat right; auto. Qed. Theorem EKa_length: forall l, (length (EKa l) <= 2 * length l)%nat. intros l; elim l; simpl; auto. intros a l1 H; case KLroot. intros k; case is_zero; simpl. apply le_n_S. apply Nat.le_trans with (1 := H). rewrite <- plus_n_Sm; auto. rewrite <- plus_n_Sm; auto with arith. apply Nat.le_trans with (1 := H). rewrite <- plus_n_Sm; auto. Qed. Theorem EKa_elt: forall l x y, In (x, y) (EKa l) -> In_curve x y. unfold In_curve; intros l x y; elim l; simpl; auto. intros H; case H. intros a l1 Hrec. generalize (KLroot_root (kplus (kplus (kmul a (kmul a a)) (kmul A a)) B)); case KLroot; auto. intros k Hk; generalize (Eth.(is_zero_correct) k); case is_zero; simpl; intros HH HH1; case HH; intros H1 H2; case HH1; intros H3; subst; clear HH HH1; auto. injection H3; intros; subst y x; rewrite <- H1; auto. injection H3; intros; subst; auto. case H3; clear H3; intros H3; auto. injection H3; intros; subst; rewrite <- Hk; ring. Qed. Definition ELK := EKa LK. Theorem ELK_ulist: ulist ELK. unfold ELK; apply EKa_ulist; apply ULK. Qed. Theorem ELK_complete: forall x y, In_curve x y -> In (x, y) ELK. intros x y Hxy; unfold ELK; apply EKa_complete; auto. Qed. Theorem ELK_length: (length ELK <= 2 * length LK)%nat. exact (EKa_length LK). Qed. Theorem ELK_elt: forall x y, In (x, y) ELK -> In_curve x y. exact (EKa_elt LK). Qed. Definition mk_lelt: forall l, (forall x y: K, In (x, y) l -> In_curve x y) -> list elt. fix mk_lelt 1; intros l; case l. intros _; exact (@nil _). intros a l1; case a; intros x y H. assert (F1: y^2 = x^3 + A * x + B); auto. change (y^2) with (y * y). unfold In_curve in H; rewrite (H x y); try ring; simpl; auto. assert (F2: forall x1 y1, In (x1, y1) l1 -> In_curve x1 y1). intros x1 y1 Hxy1; apply H; simpl; auto. exact (cons (@curve_elt x y F1) (mk_lelt _ F2)). Defined. Theorem mk_lelt_inf: forall l H, ~In inf_elt (mk_lelt l H). intros l; elim l; simpl; auto. intros (x, y) l1 Hrec H H1; simpl. inversion_clear H1; try discriminate. case (Hrec (fun (x1 y1 : K) (Hxy1 : In (x1, y1) l1) => H x1 y1 (or_intror ((x, y) = (x1, y1)) Hxy1))); auto. Qed. Theorem mk_lelt_in: forall x1 y1 H1 l H, In (@curve_elt x1 y1 H1) (mk_lelt l H) -> In (x1, y1) l. intros x1 y1 H1 l; elim l; simpl; auto. intros (x, y) l1 Hrec H; simpl; auto. intros [H2 | H2]; auto. injection H2; intros; subst; auto. right; apply (Hrec _ H2); auto. Qed. Theorem mk_lelt_in_rev: forall x1 y1 H1 l H, In (x1, y1) l -> In (@curve_elt x1 y1 H1) (mk_lelt l H). intros x1 y1 H1 l; elim l; simpl; auto. intros (x, y) l1 Hrec H; simpl; auto. intros [H2 | H2]; auto. left; apply curve_elt_irr; injection H2; auto. Qed. Theorem mk_lelt_ulist: forall l H, ulist l -> ulist (mk_lelt l H). intros l; elim l; simpl; auto. intros (x, y) l1 Hrec H; simpl; auto. intros H1; inversion_clear H1. constructor; auto. intros H3; case H0; apply mk_lelt_in with (1 := H3). Qed. Theorem mk_lelt_length: forall l H, length (mk_lelt l H) = length l. intros l; elim l; simpl; auto. intros (x, y) l1 Hrec H; simpl; auto. Qed. Definition FELLK := inf_elt::mk_lelt _ (ELK_elt). Theorem FELLK_in: forall e, In e FELLK. intros e; case e; unfold FELLK; simpl; auto. intros x y H; right; apply mk_lelt_in_rev. apply ELK_complete; auto. Qed. Theorem FELLK_ulist: ulist FELLK. unfold FELLK; constructor. apply mk_lelt_inf. apply mk_lelt_ulist. apply ELK_ulist. Qed. Theorem FELLK_length: (length FELLK <= 2 * length LK + 1)%nat. unfold FELLK; rewrite Nat.add_comm; simpl. rewrite mk_lelt_length. generalize ELK_length; simpl; auto with arith. Qed. (***********************************************************) (* *) (* The elliptic finite group *) (* *) (***********************************************************) Definition EFGroup: FGroup add. refine (@mkGroup _ add FELLK _ _ _ inf_elt _ _ _ opp _ _ _); auto; try (intros; apply FELLK_in). exact FELLK_ulist. intros; apply add_assoc. intros a; case a; auto. intros a _; rewrite add_comm; apply add_opp. intros a _; apply add_opp. Defined. Lemma EFGroup_order: (g_order EFGroup <= 2 * Z_of_nat (length LK) + 1)%Z. unfold g_order; simpl s. change (Zpos 2) with (Z_of_nat 2). change (Zpos 1) with (Z_of_nat 1). rewrite <- inj_mult; rewrite <- inj_plus. apply inj_le; apply FELLK_length. Qed. (***********************************************************) (* *) (* Projective version *) (* *) (***********************************************************) Record pelt: Set := mk_pelt { x: K; y: K; z: K; on_curve: y^2 * z = x^3 + A * x * z^2 + B * z^3 }. Theorem curve_pelt_irr: forall x1 x2 y1 y2 z1 z2 H1 H2, x1 = x2 -> y1 = y2 -> z1 = z2 -> @mk_pelt x1 y1 z1 H1 = @mk_pelt x2 y2 z2 H2. Proof. intros x1 x2 y1 y2 z1 z2 H1 H2 H3 H4 H5. subst. rewrite (fun H => eq_proofs_unicity H H1 H2); auto. intros x1 y1; case (x1 ?= y1); auto. Qed. Lemma popp_lem: forall x y z, y ^ 2 * z = x ^ 3 + A * x * z ^ 2 + B * z ^ 3 -> (- y) ^ 2 * z = x ^ 3 + A * x * z ^ 2 + B * z ^ 3. Proof. intros x1 y1 z1 H; rewrite <- H; simpl; ring. Qed. Definition popp: pelt -> pelt. refine (fun p => let (x,y,z,H) := p in @mk_pelt x (-y) z _). apply popp_lem; auto. Defined. Let ARFth := Rth_ARth Ksth Keqe (F_R Eth.(Kfth)). Lemma add_lem0: 1 ^ 2 * 0 = 0 ^ 3 + A * 0 * 0 ^ 2 + B * 0 ^ 3. Proof. ring. Qed. Lemma add_lem_gen: forall x1 x2 y1 y2 z1 z2 (H1 : y1 ^ 2 * z1 = x1 ^ 3 + A * x1 * z1 ^ 2 + B * z1 ^ 3) (H2 : y2 ^ 2 * z2 = x2 ^ 3 + A * x2 * z2 ^ 2 + B * z2 ^ 3), let d1 := x2 * z1 in let d2 := x1 * z2 in let l := d1 - d2 in let dl := d1 + d2 in let m := y2 * z1 - y1 * z2 in let l2 := l * l in let l3 := l2 * l in let m2 := m * m in let x3 := z1 * z2 * m2 - l2 * dl in (z2 * l2 * (m * x1 - y1 * l) - m * x3) ^ 2 * (z1 * z2 * l3) = (l * x3) ^ 3 + A * (l * x3) * (z1 * z2 * l3) ^ 2 + B * (z1 * z2 * l3) ^ 3. Proof. intros x1 x2 y1 y2 z1 z2 H1 H2 d1 d2 l dl m l2 l3 m2 x3. unfold x3, m2, l3, l2, m, dl, l, d1, d2. apply Keq_minus_eq. ring [H1 H2]. Qed. Lemma add_lem_tan: forall x1 y1 z1 (H1 : y1 ^ 2 * z1 = x1 ^ 3 + A * x1 * z1 ^ 2 + B * z1 ^ 3), let m := 3 * x1 * x1 + A * z1 * z1 in let l := 2 * y1 * z1 in let m2 := m * m in let l2 := l * l in let l3 := l2 * l in let x3 := m2 * z1 - 2 * x1 * l2 in (l2 * (m * x1 - y1 * l) - m * x3) ^ 2 * (z1 * l3) = (l * x3) ^ 3 + A * (l * x3) * (z1 * l3) ^ 2 + B * (z1 * l3) ^ 3. Proof. intros x1 y1 z1 H1 m l m2 l2 l3 x3. unfold x3, l3, l2, m2, l, m. apply Keq_minus_eq. ring [H1]. Qed. (** doubling a point *) Definition pdouble := fun p1: pelt => let (x1, y1, z1, H1) := p1 in if (is_zero z1) then p1 else let m' := 3 * x1 * x1 + A * z1 * z1 in let l' := 2 * y1 * z1 in let m'2 := m' * m' in let l'2 := l' * l' in let l'3 := l'2 * l' in let x3 := m'2 * z1 - 2 * x1 * l'2 in @mk_pelt (l' * x3) (l'2 * (m' * x1 - y1 * l') - m' * x3) (z1 * l'3) (add_lem_tan H1). (* Adding two points *) Definition padd := fun p1 p2: pelt => let (x1, y1, z1, H1) := p1 in if (is_zero z1) then p2 else let (x2, y2, z2, H2) := p2 in if (is_zero z2) then p1 else let d1 := x2 * z1 in let d2 := x1 * z2 in let l := d1 - d2 in let dl := d1 + d2 in let m := y2 * z1 - y1 * z2 in if (l ?= 0) then (* we have p1 = p2 o p1 = -p2 *) if (m ?= 0) then (* we do 2p *) let m' := 3 * x1 * x1 + A * z1 * z1 in let l' := 2 * y1 * z1 in let m'2 := m' * m' in let l'2 := l' * l' in let l'3 := l'2 * l' in let x3 := m'2 * z1 - 2 * x1 * l'2 in @mk_pelt (l' * x3) (l'2 * (m' * x1 - y1 * l') - m' * x3) (z1 * l'3) (add_lem_tan H1) else (* p - p *) @mk_pelt 0 1 0 add_lem0 else let l2 := l * l in let l3 := l2 * l in let m2 := m * m in let x3 := z1 * z2 * m2 - l2 * dl in @mk_pelt (l * x3) (z2 * l2 * (m * x1 - y1 * l) - m * x3) (z1 * z2 * l3) (add_lem_gen H1 H2). Definition wb (a : bool) : {b : bool | a = b} := match a as b return a = b -> ({b' : bool | a = b'}) with true => fun (h : a = true) => exist (fun b' => a = b') true h | false => fun (h : a = false) => exist (fun b' => a = b') false h end (refl_equal a). Lemma pe2e_lem1: forall x1 y1 z1 (H1 : y1 ^ 2 * z1 = x1 ^ 3 + A * x1 * z1 ^ 2 + B * z1 ^ 3) (Hb: is_zero z1 = false), (y1 / z1) ^ 2 = (x1 / z1) ^ 3 + A * (x1 / z1) + B. Proof. intros x1 y1 z1 H1 Hb. field [H1]. intros H3; case (Eth.(is_zero_correct) z1); intros _ H4. generalize (H4 H3); rewrite Hb; intros; discriminate. Qed. (* Transfer function from projective to affine *) Definition pe2e: pelt -> elt. intros (x1,y1,z1,H1). case (wb (is_zero z1)); intros b; case b; intros Hb. exact (inf_elt). refine (@curve_elt (kdiv x1 z1) (kdiv y1 z1) (pe2e_lem1 H1 Hb)). Defined. (* Doubling is correct with respect to affine *) Theorem pe2e_double: forall p1, pe2e (pdouble p1) = add (pe2e p1) (pe2e p1). intros (x1,y1,z1,H1). unfold pdouble, pe2e. case wb; intros b; case b; intros Hb; clear b. rewrite Hb; auto. case wb; intros b; case b; intros Hz1; clear b; auto. apply False_ind; rewrite Hb in Hz1; discriminate. replace (z1 ?0) with false. unfold add. generalize (is_zero_false Hb); intros Hz1. repeat ksplit. generalize (Keq_minus_eq_inv KD0); clear KD0; intros KD0. field_simplify_eq in KD0; auto. case (Kmult_integral KD0); auto; clear KD0; intro KD0. case Kdiff_2_0; auto. subst y1. case wb; intros b; case b; intros Hb1; clear b; auto. case (is_zero_false Hb1); field; auto. case wb; intros b; case b; intros Hb1; clear b; auto. case (Kmult_integral (is_zero_true Hb1)); intros V1. case Hz1; auto. assert (V2: 2 * y1 * z1 = 0). case (Kmult_integral V1); clear V1; intros V1; auto. case (Kmult_integral V1); clear V1; intros V1; auto. case (Kmult_integral V2); clear V2; intros V2. case (Kmult_integral V2); clear V2; intros V2. case Kdiff_2_0; auto. case KD0; field[V2]; auto. case KD0; field[V2]; auto. generalize (is_zero_false Hb1); intros zH. apply curve_elt_irr; field; repeat (split; auto). intros HH; case zH; ring [HH]. intros HH; case zH; ring [HH]. Qed. Theorem pe2e_add: forall p1 p2, pe2e (padd p1 p2) = add (pe2e p1) (pe2e p2). intros (x1,y1,z1,H1) (x2,y2,z2,H2). unfold padd, pe2e. case wb; intros b; case b; intros Hb; clear b. rewrite Hb; auto. replace (z1 ?0) with false. case wb; intros b; case b; intros Hb1; clear b. rewrite Hb1; auto. case wb; intros b; case b; intros Hb2; clear b; auto. rewrite Hb in Hb2; discriminate. simpl; apply curve_elt_irr; auto. replace (z2 ?0) with false. assert (F1 := is_zero_false Hb). assert (F2 := is_zero_false Hb1). unfold add. case Kdec; intros HH1; apply sym_equal; case Kdec; intros HH2; apply sym_equal. 2: case HH2; apply Keq_minus_eq; field_simplify_eq; auto; apply trans_equal with (-0); try ring; rewrite <- HH1; ring. 2: case HH1; apply trans_equal with (x2/z2 * z2 * z1 - x1 * z2); try (field; auto); rewrite <- HH2; field; auto. ksplit; symmetry; ksplit. generalize (Keq_minus_eq_inv KD0); clear KD0; intros KD0. field_simplify_eq in KD0; auto. rewrite <- KD in KD0. generalize (Keq_minus_eq_inv KD0); clear KD0; intros KD0. field_simplify_eq in KD0; auto. case (Kmult_integral KD0); clear KD0; intros KD0; auto. 2: case F2; auto. case (Kmult_integral KD0); clear KD0; intros KD0; auto. case Kdiff_2_0; auto. case wb; intros b; case b; intros Hb2; auto. case (is_zero_false Hb2). ring [KD0]. assert (HH: y1 <> 0). intros HH. ring_simplify [HH] in KD. case (Kmult_integral KD); clear KD; intros KD; auto. case KD0; field [HH KD]; auto. case wb; intros b; case b; intros Hb2; auto. assert (F3 := is_zero_true Hb2). assert (V1: 2 * y1 * z1 = 0). case (Kmult_integral F3); clear F3; intros V1; auto. case F1; auto. case (Kmult_integral V1); clear V1; intros V1; auto. case (Kmult_integral V1); clear V1; intros V1; auto. case (Kmult_integral V1); clear V1; intros V1; auto. case (Kmult_integral V1); clear V1; intros V1; auto. case Kdiff_2_0; auto. case HH; auto. case F1; auto. apply curve_elt_irr; field; repeat (split; auto). case wb; intros b; case b; intros Hb2; auto. case (is_zero_false Hb2); auto. case (@curve_elt_opp (x1/z1) (x2/z2) (y1/z1) (y2/z2) (pe2e_lem1 H1 Hb) (pe2e_lem1 H2 Hb1)); auto; intros tmp; injection tmp; intros HH _. generalize (Keq_minus_eq_inv HH); clear HH; intros HH. field_simplify_eq in HH; auto. case KD; symmetry; apply Keq_minus_eq; apply trans_equal with (2 := HH). case KD; symmetry; apply Keq_minus_eq; apply trans_equal with (2 := HH). ring. case KD0; auto. case wb; intros b; case b; intros Hb2; auto. assert (F3 := is_zero_true Hb2). case HH1. case (Kmult_integral F3); clear F3; intros V1; auto. case (Kmult_integral V1); clear V1; intros V1; auto. case F1; auto. case F2; auto. case (Kmult_integral V1); clear V1; intros V1; auto. case (Kmult_integral V1); clear V1; intros V1; auto. apply curve_elt_irr; field; repeat (split; auto). Qed. End ELLIPTIC. Unset Implicit Arguments. coqprime-8.18/src/Coqprime/elliptic/ZEll.v000066400000000000000000001332011451023060700204770ustar00rootroot00000000000000(*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Require Import Ring. Require Import Field_tac. Require Import Ring_tac. Require Import Eqdep_dec. Require Import ZArith. Require Import ZCAux. Require Import Ppow. Require Import GZnZ. Require Import EGroup. Require Import SMain. Require Import Zmod. Set Implicit Arguments. Open Scope Z_scope. Section Nell. Variable N: Z. Variable (A B: Z). Hypothesis N_lt_2: 2 < N. Hypothesis N_not_div_2: ~(2 | N). Hypothesis NonSingular: rel_prime N (4 * A * A * A + 27 * B * B). Inductive nelt: Set := nzero | ntriple: Z -> Z -> Z -> nelt. Definition nplus x y := (Z.modulo (x + y) N). Definition nmul x y := (Z.modulo (x * y) N). Definition nsub x y := (Z.modulo (x - y) N). Definition ninv x := (Z.modulo (-x) N). Notation "x ++ y " := (nplus x y). Notation "x -- y" := (nsub x y) (at level 50, left associativity). Notation "x ** y" := (nmul x y) (at level 40, left associativity). Notation "-- x" := (ninv x) (at level 40, left associativity). Notation "x ?= y" := (Zeq_bool x y). Definition ndouble := fun (sc: Z) (p1: nelt) => match p1 with nzero => (p1, sc) | (ntriple x1 y1 z1) => if (y1 ?= 0) then (nzero, z1 ** sc) else (* we do 2p *) let m' := 3 ** x1 ** x1 ++ A ** z1 ** z1 in let l' := 2 ** y1 ** z1 in let m'2 := m' ** m' in let l'2 := l' ** l' in let l'3 := l'2 ** l' in let x3 := m'2 ** z1 -- 2 ** x1 ** l'2 in (ntriple (l' ** x3) (l'2 ** (m' ** x1 -- y1 ** l') -- m' ** x3) (z1 ** l'3), sc) end. Definition nadd := fun (sc: Z) (p1 p2: nelt) => match p1, p2 with nzero, _ => (p2, sc) | _ , nzero => (p1, sc) | (ntriple x1 y1 z1), (ntriple x2 y2 z2) => let d1 := x2 ** z1 in let d2 := x1 ** z2 in let l := d1 -- d2 in let dl := d1 ++ d2 in let m := y2 ** z1 -- y1 ** z2 in if (l ?= 0) then (* we have p1 = p2 o p1 = -p2 *) if (m ?= 0) then if (y1 ?= 0) then (nzero, z1 ** z2 ** sc) else (* we do 2p *) let m' := 3 ** x1 ** x1 ++ A ** z1 ** z1 in let l' := 2 ** y1 ** z1 in let m'2 := m' ** m' in let l'2 := l' ** l' in let l'3 := l'2 ** l' in let x3 := m'2 ** z1 -- 2 ** x1 ** l'2 in (ntriple (l' ** x3) (l'2 ** (m' ** x1 -- y1 ** l') -- m' ** x3) (z1 ** l'3), z2 ** sc) else (* p - p *) (nzero, m ** z1 ** z2 ** sc) else let l2 := l ** l in let l3 := l2 ** l in let m2 := m ** m in let x3 := z1 ** z2 ** m2 -- l2 ** dl in (ntriple (l ** x3) (z2 ** l2 ** (m ** x1 -- y1 ** l) -- m ** x3) (z1 ** z2 ** l3), sc) end. Definition inversible n x := exists y, Z.modulo (x * y) n = 1%Z. Lemma inversible_1: forall n, 1 < n -> inversible n 1. Proof. intros n Hn; exists 1%Z; rewrite Zmult_1_r; apply Zmod_small; split; auto with zarith. Qed. Notation "[ x ]" := (inversible N x). Lemma inversible_0: ~[0]. Proof. intros HH; inversion_clear HH as [xz H1]. rewrite Zmod_small in H1; auto with zarith. Qed. Lemma inversible_mult_inv: forall x y, [x ** y] -> [x] /\ [y]. Proof. assert (F1 := N_lt_2). intros x y (z, Hz); split. exists (y * z)%Z; rewrite <- Hz. unfold nmul. rewrite Zmodml; auto with zarith. rewrite Zmult_assoc; auto. exists (x * z)%Z; rewrite <- Hz. unfold nmul. rewrite Zmodml; auto with zarith. rewrite Zmult_assoc; auto. rewrite (Zmult_comm x); auto. Qed. Inductive nInversible: nelt * Z -> Prop := nInv_z: forall sc, inversible N sc -> nInversible (nzero, sc) |nInv_e: forall x y z sc, inversible N (sc ** z) -> nInversible (ntriple x y z, sc). Notation "[[ x ]]" := (nInversible x). Lemma inversible_mult: forall a b, [a] -> [b] -> [a ** b]. Proof. assert (F1 := N_lt_2). intros a b (z1, H1) (z2, H2). exists (z1 * z2)%Z. unfold nmul. rewrite Zmodml; auto with zarith. replace (a * b * (z1 * z2))%Z with ((a * z1) * (b * z2))%Z; try ring. rewrite Zmult_mod; auto with zarith. rewrite H1; rewrite H2; rewrite Zmod_small; auto with zarith. Qed. Ltac itac := match goal with H: inversible _ (_ ** _) |- _ => case (inversible_mult_inv _ _ H); clear H; let H1 := fresh "NI" in let H2 := fresh "NI" in intros H1 H2 | |- inversible _ (_ ** _) => apply inversible_mult end; auto. Lemma nInversible_double: forall sc x, [[ndouble sc x]] -> [[(x,1%Z)]] /\ [sc]. Proof. assert (F1 := N_lt_2). assert (F2: inversible N 1). apply inversible_1; auto with zarith. unfold ndouble; intros sc x; case x; auto. intros H; inversion_clear H. repeat split; auto; try constructor; auto. intros x1 y1 z1; case Zeq_bool; auto. intros H; inversion_clear H. repeat split; auto; try constructor; auto; repeat itac. intros H; inversion_clear H; auto. repeat split; auto; try constructor; repeat itac; auto. Qed. Lemma nInversible_add: forall sc x y, [[nadd sc x y]] -> [[(x,1%Z)]] /\ [[(y,1%Z)]] /\ [sc]. Proof. assert (F1 := N_lt_2). assert (F2: inversible N 1). apply inversible_1; auto with zarith. unfold nadd; intros sc x y; case x; auto. intros H; inversion_clear H. repeat split; auto; try constructor; auto. repeat split; auto; try constructor; repeat itac. intros x1 y1 z1; case y; auto. intros H; inversion_clear H. repeat split; auto; try constructor; repeat itac. intros x2 y2 z2; case Zeq_bool. case Zeq_bool. case Zeq_bool. intros H; inversion_clear H; auto. repeat split; auto; try constructor; repeat itac. intros H; inversion_clear H; auto. repeat split; auto; try constructor; repeat itac. intros H; inversion_clear H; auto. repeat split; auto; try constructor; repeat itac. intros H; inversion_clear H; auto. repeat split; auto; try constructor; repeat itac. Qed. Definition nopp p := match p with nzero => p | (ntriple x1 y1 z1) => (ntriple x1 (-- y1) z1) end. Fixpoint scalb (sc: Z) (b:bool) (a: nelt) (p: positive) {struct p}: nelt * Z := match p with xH => if b then ndouble sc a else (a,sc) | xO p1 => let (a1, sc1) := scalb sc false a p1 in if b then let (a2, sc2) := ndouble sc1 a1 in nadd sc2 a a2 else ndouble sc1 a1 | xI p1 => let (a1, sc1) := scalb sc true a p1 in if b then ndouble sc1 a1 else let (a2, sc2) := ndouble sc1 a1 in nadd sc2 (nopp a) a2 end. Definition scal sc a p := scalb sc false a p. Lemma nInversible_scalb: forall b sc a1 p1, [[scalb sc b a1 p1]] -> [[(a1,1%Z)]] /\ [sc]. Proof. assert (F1 := N_lt_2). assert (F2: [1]). apply inversible_1; auto with zarith. intros b sc a p0; generalize sc b a; elim p0; simpl; auto; clear sc b a p0. intros p0 Hrec sc b a. generalize (Hrec sc true a). case scalb. intros a1 sc1 H; case b; intros H1; try apply H; clear b H. case (nInversible_double sc1 a1 H1); auto; clear H1. intros H2 H3; inversion_clear H2; try constructor; repeat itac; auto. generalize H1 (nInversible_double sc1 a1); case ndouble. intros a2 sc2 H2 H3; case H3. generalize (nInversible_add sc2 (nopp a) a2 H2). intros H4; case H4; intros _ [H5 H6]. inversion_clear H5; constructor; repeat itac; auto. intros H4; inversion_clear H4; constructor; repeat itac; auto. intros p0 Hrec sc b a. generalize (Hrec sc false a). case scalb. intros a1 sc1 H; case b; intros H1; try apply H; clear b H. generalize H1 (nInversible_double sc1 a1); case ndouble. intros a2 sc2 H2 H3; case H3. generalize (nInversible_add sc2 a a2 H2). intros H4; case H4; intros _ [H5 H6]. inversion_clear H5; constructor; repeat itac; auto. intros H4; inversion_clear H4; constructor; repeat itac; auto. case (nInversible_double sc1 a1 H1); auto; clear H1. intros H2 H3; inversion_clear H2; try constructor; repeat itac; auto. intros sc b a; case b; intros H. case (nInversible_double _ _ H); auto; clear H. inversion_clear H; split; try constructor; repeat itac; auto. Qed. Lemma nInversible_scal: forall sc a1 p1, [[scal sc a1 p1]] -> [[(a1,1%Z)]] /\ [sc]. Proof. exact (nInversible_scalb false). Qed. Definition scal_list sc a l := List.fold_left (fun (asc: nelt * Z) p1 => let (a,sc) := asc in scal sc a p1) l (a,sc). Lemma nInversible_scal_list: forall sc a l, [[scal_list sc a l]] -> [[(a,1%Z)]] /\ [sc]. Proof. assert (F1 := N_lt_2). assert (F2: [1]). apply inversible_1; auto with zarith. intros sc a l; generalize sc a; unfold scal; elim l; simpl; auto; clear sc a l. intros sc a; unfold scal_list; simpl. intros HH; inversion_clear HH; split; auto; try constructor; repeat itac; auto. intros n1 l1 Hrec sc a. unfold scal_list; simpl. generalize (nInversible_scal sc a n1). case scal. intros n z H1 H2. case (Hrec _ _ H2). intros H3 H4; apply H1; auto. inversion_clear H3; constructor; repeat itac; auto. Qed. Definition Zmull l := List.fold_left Pmult l 1%positive. Lemma Zmull_cons: forall a l, Zmull (List.cons a l) = (a * (Zmull l))%positive. Proof. intros a l. assert (F1:= Pmult_assoc). assert (F2:= Pmult_comm). unfold Zmull. repeat rewrite List.fold_symmetric; simpl; auto; intros; rewrite F2; auto. Qed. Fixpoint scalL (sc:Z) (a: nelt) (l: List.list positive) {struct l}: (nelt * Z) := match l with List.nil => (a,sc) | List.cons n l1 => let (a1, sc1) := scal sc a n in let (a2, sc2) := scal_list sc1 a l1 in match a2 with nzero => (nzero, 0) | ntriple _ _ z => scalL (sc2 ** z) a1 l1 end end. Lemma nInversible_scalL: forall sc a l, [[scalL sc a l]] -> [[(a,1%Z)]] /\ [sc]. Proof. assert (F1 := N_lt_2). assert (F2: [1]). apply inversible_1; auto with zarith. intros sc a l; generalize sc a; elim l; simpl; auto; clear sc a l. intros sc a; unfold scal_list; simpl. intros HH; inversion_clear HH; split; auto; try constructor; repeat itac; auto. intros n1 l1 Hrec sc a. generalize (nInversible_scal sc a n1). case scal. intros n z H. generalize (nInversible_scal_list z a l1). case scal_list. intros m z1; case m. intros _ HH; inversion_clear HH. case inversible_0; auto. intros x2 y2 z2 H1 H2. case (Hrec _ _ H2). intros H3 H4. case H1; try intros H5 H6. constructor; auto. split; auto. case H; auto. inversion_clear H3; auto; constructor; auto. repeat itac. Qed. Local Coercion Zpos : positive >-> Z. Lemma Zmull_div: forall a l, List.In a l -> Zmull l = (Zmull l / a) * a :> Z. intros a l; generalize a; elim l; clear a l; auto. intros a H; inversion H. simpl List.In; intros a l Hrec b [H | H]; subst. rewrite Zmull_cons. repeat rewrite Zpos_mult_morphism. rewrite (Zmult_comm b). repeat rewrite Z_div_mult; auto. red; simpl; auto. repeat rewrite Zmull_cons. repeat rewrite Zpos_mult_morphism. rewrite (Hrec b); auto. rewrite Zmult_assoc. rewrite Z_div_mult; auto. red; simpl; auto. Qed. Definition Zmullp l := List.fold_left (fun y x => (Pmult (Ppow (fst x) (snd x)) y)) l 1%positive. Lemma Zmullp_cons: forall a l, Zmullp (List.cons a l) = ((Ppow (fst a) (snd a)) * (Zmullp l))%positive. Proof. intros a l. assert (F1:= Pmult_assoc). assert (F2:= Pmult_comm). unfold Zmullp. simpl. rewrite F2; simpl Pmult. generalize (Ppow (fst a) (snd a)). elim l; simpl. - intros p; rewrite F2; auto. - intros a1 l1 Hrec p; rewrite Hrec. symmetry; rewrite Hrec. symmetry; rewrite F1. rewrite (F2 p); rewrite (fun x => (F2 x 1%positive)); auto. Qed. Fixpoint psplit l: positive * (List.list positive) := match l with List.nil => (xH, List.nil) | List.cons (a, xH) l1 => let (v, l2) := psplit l1 in (v, (List.cons a l2)) | List.cons (a, n) l1 => let (v, l2) := psplit l1 in (Pmult (Ppow a (Pos.pred n)) v, (List.cons a l2)) end. Lemma psplit_correct: forall l, Pmult (fst (psplit l)) (Zmull (snd (psplit l))) = Zmullp l. Proof. assert (F1:= Pmult_assoc). assert (F2:= Pmult_comm). intros l; elim l; unfold psplit; fold psplit. simpl; auto. intros (a, n); case n. intros n1 l1; case_eq (psplit l1); simpl fst; simpl snd. intros p1 l2 Hp1 H1. rewrite Zmullp_cons; simpl fst; simpl snd. rewrite Zmull_cons; rewrite <- H1. simpl Ppow. symmetry; rewrite <- F1; rewrite (F2 a). rewrite (F2 a); repeat rewrite F1; auto. intros n1 l1; set (u := Pos.pred (xO n1)); case_eq (psplit l1); simpl fst; simpl snd. intros p1 l2 Hp1 H1. rewrite Zmullp_cons; simpl fst; simpl snd. case (Psucc_pred (xO n1)). intros HH; discriminate. intros HH; rewrite <- HH. rewrite Pplus_one_succ_l; rewrite Ppow_plus. fold u; simpl Ppow. rewrite Zmull_cons; rewrite <- H1. repeat rewrite F1. rewrite (F2 a). rewrite <- (F1 (Ppow a u)); rewrite (F2 p1). repeat rewrite F1; auto. intros l1; case_eq (psplit l1); simpl fst; simpl snd. intros p1 l2 Hp1 H1. rewrite Zmullp_cons; simpl fst; simpl snd. rewrite Zmull_cons; rewrite <- H1. simpl Ppow. repeat rewrite F1. rewrite (F2 a); auto. Qed. Lemma psplit_prime: forall l (p: positive), (forall (q: positive * positive), List.In q l -> prime (fst q)) -> prime p -> (p | Zmullp l)%Z -> List.In p (snd (psplit l)). Proof. intros l; elim l. unfold Zmullp; simpl. intros p _ H1 H2. case H1. absurd (p <= 1). apply Zlt_not_le; case H1; auto. apply Zdivide_le; auto with zarith. intros (a1, n1) l1 Hrec p Hp Hp1 Hp2. rewrite Zmullp_cons in Hp2. rewrite Zpos_mult_morphism in Hp2. case (prime_mult _ Hp1 _ _ Hp2); intros H1. assert (Hap: prime a1). change a1 with (fst (a1, n1)); apply Hp; auto with datatypes. simpl; case n1; try intros p1; case psplit; intros p2 l2; simpl snd; left; assert (HH: Zpos a1 = p); try (injection HH; auto); symmetry; apply prime_div_Zpower_prime with (Zpos n1); auto with zarith; rewrite <- Ppow_correct; auto. assert (HH: List.In p (snd (psplit l1))). apply Hrec; auto with datatypes. generalize HH; simpl. case psplit; case n1; simpl snd; auto with datatypes. Qed. Section pell. Variable p: Z. Hypothesis p_prime: prime p. Hypothesis p_div_N: (p | N)%Z. Let p_pos:= GZnZ.p_pos _ p_prime. Definition pK := (znz p). Let to_p x:pK := mkznz _ _ (modz _ x). Notation "x :%p" := (to_p x) (at level 30). Definition pkO: pK := (zero _). Definition pkI: pK := (one _). Definition pkplus: pK -> pK -> pK := (GZnZ.add _). Definition pkmul: pK -> pK -> pK := (mul _). Definition pksub: pK -> pK -> pK := (sub _). Definition pkopp: pK -> pK := (GZnZ.opp _). Definition pkinv: pK -> pK := (inv _). Definition pkdiv: pK -> pK -> pK := (div _). Definition pA: pK := to_p A. Definition pB: pK := to_p B. Definition pKfth: field_theory pkO pkI pkplus pkmul pksub pkopp pkdiv pkinv (@eq pK) := (FZpZ _ p_prime). (* K notations *) Notation "x + y" := (pkplus x y). Notation "x * y " := (pkmul x y). Notation "x - y " := (pksub x y). Notation "- x" := (pkopp x). Notation "/ x" := (pkinv x). Notation "x / y" := (pkdiv x y). Notation "0" := pkO. Notation "1" := pkI. Notation "2" := (1+1). Notation "3" := (1+1 +1). (* Non singularity *) Notation "4" := (2 * 2). Notation "27" := (3 * 3 * 3). Add Ring RFth : (F_R pKfth). Add Field KFth : pKfth. Lemma pNonSingular: 4 * pA * pA * pA + 27 * pB * pB <> 0. Proof. assert (F1 := p_pos). intros H; generalize (znz_inj _ _ _ H). unfold pkO,pkI,pA, pB, to_p, zero, one, pkplus, GZnZ.add, pkmul, mul, val. repeat match goal with |- ?t = 0 mod p -> _ => rmod t; auto end. rewrite (Zmod_small 0); auto with zarith. intros H1. apply (fun H HH => rel_prime_mod H HH H1). generalize (prime_ge_2 _ p_prime); auto with zarith. apply rel_prime_sym; auto. apply rel_prime_div with N; try apply p_div_N. generalize NonSingular. repeat rewrite Zmult_assoc; auto. Qed. (* Characteristic greater than 3 *) Lemma pone_not_zero: 1 <> 0. Proof. intros H; generalize (znz_inj _ _ _ H); simpl val. repeat (rewrite Zmod_small); generalize (prime_ge_2 _ p_prime); auto with zarith. Qed. Lemma ptwo_not_zero: 2 <> 0. Proof. intros H; generalize (znz_inj _ _ _ H); simpl val. repeat (rewrite Zmod_small); generalize (prime_ge_2 _ p_prime); auto with zarith. intros H1; case (Zle_lt_or_eq _ _ H1); intros H2; auto with zarith. case N_not_div_2; rewrite H2; auto. Qed. Definition pis_zero: pK -> bool. intros (k, Hk); case k; [exact true | idtac | idtac]; intros; exact false. Defined. Lemma pis_zero_correct: forall k: pK, pis_zero k = true <-> k = 0. Proof. assert (F0 := p_pos). intros (k, Hk); generalize Hk; case k; simpl. intros Hk1; split; auto; intros H; unfold pkO, zero. apply (zirr p); rewrite Zmod_small; auto with zarith. intros Hk1; split; auto; intros H; try discriminate. intros Hk1; split; auto; intros H; try discriminate. Qed. Lemma pell_theory: ell_theory pkO pkI pkplus pkmul pksub pkopp pkinv pkdiv pA pB pis_zero. Proof. constructor. apply pKfth. apply pNonSingular. exact pone_not_zero. exact ptwo_not_zero. exact pis_zero_correct. Qed. Definition pG:= (EFGroup pell_theory (uniq_all_znz _ p_pos) (in_all_znz _ p_pos)). Lemma gorder_pG: FGroup.g_order pG <= 2 * p + 1. Proof. replace p with (Z_of_nat (List.length (all_znz _ p_pos))). unfold pG; apply EFGroup_order. rewrite all_znz_length. generalize (prime_ge_2 _ p_prime). case p; simpl; auto. intros p1 Hp1; rewrite Zpos_eq_Z_of_nat_o_nat_of_P; auto. intros p1 HH; case HH; auto. Qed. Let pelt := pelt pkI pkplus pkmul pA pB. Let mk_pelt := mk_pelt pkI pkplus pkmul pA pB. Lemma is_zero_correct: forall x y, if (x ?= y) then x = y else x <> y. Proof. intros x y; unfold Zeq_bool. case (Zcompare_Eq_iff_eq x y). case Z.compare; auto. intros _ H1 H2; assert (H3:= H1 H2); discriminate. intros _ H1 H2; assert (H3:= H1 H2); discriminate. Qed. Lemma inversible_is_not_k0: forall x, [x] -> x :%p <> 0. Proof. intros x1 (k, Hk) H1. assert (F2: 2 < p). case (Zle_lt_or_eq _ _ (prime_ge_2 p p_prime)); auto. intros HH1; case N_not_div_2; rewrite HH1. apply p_div_N. assert (F3:= N_lt_2). injection H1; clear H1; rewrite (Zmod_small 0); auto with zarith; intros HH. absurd ((x1 * k) mod p = ((x1 * k) mod N) mod p). rewrite Hk. rewrite Zmult_mod; auto with zarith. rewrite HH; rewrite Zmult_0_l. repeat rewrite Zmod_small; auto with zarith. apply Zmod_div_mod; auto with zarith. Qed. Lemma inversible_is_zero: forall x, [x] -> pis_zero (x :%p) = false. Proof. intros x1 H1. case (pis_zero_correct (to_p x1)); case pis_zero; auto. intros HH _; generalize (HH (refl_equal true)); clear HH; intros HH. case (@inversible_is_not_k0 x1); auto. Qed. Lemma to_p_nmul: forall x y, (x ** y):%p = x:%p * y:%p. Proof. intros x y. unfold nmul, to_p, pkmul, mul. unfold pK; apply zirr; simpl. assert (F1:= p_pos). rewrite <- Zmod_div_mod; auto. rewrite Zmult_mod; auto. generalize N_lt_2; auto with zarith. Qed. Lemma to_p_pow: forall x n, (x ^ (Z_of_nat n)):%p = pow pkI pkmul (x:%p) n. Proof. intros x n; elim n; clear n. simpl Z_of_nat; simpl pow; rewrite Zpower_0_r; auto. intros n Hrec; rewrite inj_S; unfold Z.succ; rewrite Zpower_exp; auto with zarith. assert (tmp: forall n x, pow 1 pkmul x (S n) = x * pow 1 pkmul x n). intros n1 x1; case n1; simpl; auto; ring. rewrite tmp; clear tmp. rewrite <- Hrec; rewrite <- to_p_nmul. rewrite Zpower_1_r; rewrite Zmult_comm. unfold to_p, nmul, pkmul, pK; apply zirr; simpl. assert (F1:= p_pos). rewrite <- Zmod_div_mod; auto with zarith. Qed. Lemma to_p_nplus: forall x y, (x ++ y):%p = x:%p + y:%p. Proof. intros x y. unfold nplus, to_p, pkplus, GZnZ.add. unfold pK; apply zirr; simpl. assert (F1:= p_pos). rewrite <- Zmod_div_mod; auto. rewrite Zplus_mod; auto. generalize N_lt_2; auto with zarith. Qed. Lemma to_p_nsub: forall x y, (x -- y):%p = x:%p - y:%p. Proof. intros x y. unfold nsub, to_p, pksub, GZnZ.sub. unfold pK; apply zirr; simpl. assert (F1:= p_pos). rewrite <- Zmod_div_mod; auto. rewrite Zminus_mod; auto. generalize N_lt_2; auto with zarith. Qed. Lemma to_p_2: 2:%p = 2. Proof. unfold to_p, pkplus, pkI, GZnZ.add, pK; apply zirr; simpl. assert (F1:= p_pos). rewrite <- Zplus_mod; auto. Qed. Lemma to_p_3: 3:%p = 3. Proof. unfold to_p, pkplus, pkI, GZnZ.add, pK; apply zirr; simpl. assert (F1:= p_pos). repeat match goal with |- _ = ?t => rmod t; auto end. Qed. Ltac to_p_tac := repeat (rewrite to_p_nmul || rewrite to_p_nplus || rewrite to_p_nsub || rewrite to_p_2 || rewrite to_p_3); auto. Lemma inversible_kO: forall z1 z2, z2 = 0 -> z1:%p = z2 -> [z1] -> False. Proof. intros z1 z2 H1 H2 H3. generalize (inversible_is_not_k0 H3). rewrite H2; rewrite H1. intros H; case H; auto. Qed. Let pdouble: pelt -> pelt := pdouble (pell_theory). Let padd: pelt -> pelt -> pelt := padd (pell_theory). Let elt := (elt pkI pkplus pkmul pA pB). Let inf_elt := (inf_elt pkI pkplus pkmul pA pB). Let curve_elt := (curve_elt pkI pkplus pkmul pA pB). Inductive equiv: nelt -> elt -> Prop := z_equiv:equiv nzero inf_elt | n_equiv: forall x y z x1 y1 H, x:%p / z:%p = x1 -> y:%p / z:%p = y1 -> equiv (ntriple x y z) (@curve_elt x1 y1 H). Infix "=~~=" := equiv (at level 40, no associativity). Let pe2e := pe2e pell_theory. Let add := add pell_theory. Let opp := opp pell_theory. Let pow := pow pkI pkmul. Lemma nedouble_correct: forall sc n1 p1, n1 =~~= p1 -> [[ndouble sc n1]] -> fst (ndouble sc n1) =~~= add p1 p1. Proof. intros sc n1 p1 H; inversion_clear H. simpl; intros; constructor. intros V1. case (nInversible_double _ _ V1); intros V2 _. inversion_clear V2. simpl. case Kdec; [idtac | intros HH; case HH]; auto. intros e. match goal with |- context[?x ?= ?y] => generalize (is_zero_correct x y); case (Zeq_bool x y) end. intros HH; case Kdec. intros; constructor. intros HH1; case HH1; subst y1; rewrite HH. change (to_p 0) with pkO. field. intros HH2; apply inversible_kO with (2 := HH2); itac. intros HH1. assert (N1: inversible N y). inversion V1. generalize H3; generalize (Zeq_bool_eq y 0); case Zeq_bool. intros; case HH1; auto. intros; discriminate. generalize H3; case Zeq_bool; clear H3. intros; discriminate. intros HH; injection HH; clear HH. intros _ HH _ _; subst z0. repeat itac. assert (N2: to_p y <> pkO). intros HH; apply inversible_kO with (2 := HH); auto. assert (N3: to_p z <> pkO). intros HH; apply inversible_kO with (2 := HH); itac. case Kdec. intros HH; case N2. case (Kmult_integral pell_theory (1 + 1) y1). apply trans_equal with (y1 + y1); try ring. pattern y1 at 1; rewrite HH; ring. intros; case ptwo_not_zero; auto. intros; subst y1; field_simplify_eq in H3; auto. intros; simpl; constructor; to_p_tac; subst x1 y1; fold pA; set (v3 := (1 + (1 + 1))); set (v2 := (1 + 1)); field; repeat split; auto; apply ptwo_not_zero. Qed. Lemma neadd_correct: forall sc n1 p1 n2 p2, n1 =~~= p1 -> n2 =~~= p2 -> [[nadd sc n1 n2]] -> fst (nadd sc n1 n2) =~~= add p1 p2. Proof. intros sc n1 p1 n2 p2 H; inversion_clear H. simpl; auto. intros H; inversion_clear H. simpl; intros; constructor; auto. intros V1. case (nInversible_add _ _ _ V1); intros V2 (V3, _). inversion_clear V2. inversion_clear V3. repeat itac. simpl. assert (F0:= (inversible_is_not_k0 NI2)). assert (F0b:= (inversible_is_not_k0 NI0)). generalize V1; simpl. repeat match goal with |- context[?x ?= ?y] => generalize (is_zero_correct x y); case (Zeq_bool x y) end; repeat case Kdec; auto. intros; constructor. intros n e K1 K2 K3 U1; subst y. match type of K2 with ?X = 0%Z => cut ((to_p X) = pkO); [idtac | rewrite K2; auto]; to_p_tac; clear K2; intros K2 end. case (Kmult_integral pell_theory (to_p y0) (to_p z)); auto. rewrite <- K2; change (to_p 0) with pkO; ring. intros HH; case n; subst y1 y2; rewrite HH; auto. intros; case F0; auto. intros n K1 K2 K3 U1. case n; subst x1 x2. field_simplify_eq; auto. match type of K3 with ?X = 0%Z => cut ((to_p X) = pkO); [idtac | rewrite K3; auto]; to_p_tac; clear K3; intros K3 end. match goal with |- ?X = _ => apply trans_equal with (X + pkO); try ring end. rewrite <- K3; ring. intros K1 K2 K3 K4 _ U1; subst y1 y2. match type of K4 with ?X = 0%Z => cut ((to_p X) = pkO); [idtac | rewrite K4; auto]; to_p_tac; clear K4; intros K4 end. field_simplify_eq in K1; auto. rewrite K1 in K4. case (Kmult_integral pell_theory (1 + 1) (to_p z * to_p y0)); auto. set (u := to_p z * to_p y0) in * |- *. apply trans_equal with (u + u); try ring. unfold u; rewrite <- K4; ring. intros; case ptwo_not_zero; auto. intros HH; case (Kmult_integral pell_theory _ _ HH); clear HH; intros HH. case F0; auto. rewrite HH in K1; ring_simplify in K1. case (Kmult_integral pell_theory (to_p y) (to_p z0)); auto. (* rewrite K1; ring. *) intros HH1. inversion_clear U1. repeat itac; auto. case (@inversible_is_not_k0 y); auto. intros; case F0b; auto. intros. assert (VV: to_p y <> pkO). apply inversible_is_not_k0. inversion_clear V0. repeat itac; auto. intros; simpl fst; constructor; to_p_tac; subst x1 y1; fold pA; set (v3 := (1 + (1 + 1))); set (v2 := (1 + 1)); field; repeat split; auto; apply ptwo_not_zero. intros n K1 K2 K3; case n; subst x1 x2. field_simplify_eq; auto. match type of K3 with ?X = 0%Z => cut ((to_p X) = pkO); [idtac | rewrite K3; auto]; to_p_tac; clear K3; intros K3 end. apply trans_equal with (to_p z * to_p x0 - pkO); try ring. rewrite <- K3; try ring. intros; simpl fst; constructor. intros n K1 K2 K3 K4. inversion K4. repeat itac. case (inversible_is_not_k0 NI3). to_p_tac. rewrite <- K1 in H3. rewrite <- H3 in H0; simpl in H0. case (Kmult_integral pell_theory (y1 + y2) (y1 - y2)). ring [H0]. intros HH; case n. apply trans_equal with (y1 - pkO); try ring; rewrite <- HH; ring. intros HH; subst y1 y2. assert (HH1:= Keq_minus_eq pell_theory _ _ HH). field_simplify_eq in HH1; auto. change (znz p) with pK; ring [HH1]. intros n K1 K2 K3. case n; subst x1 x2; field_simplify_eq; auto. match type of K2 with ?X = 0%Z => cut ((to_p X) = pkO); [idtac | rewrite K2; auto]; to_p_tac; clear K2; intros K2 end. assert (HH1:= Keq_minus_eq pell_theory _ _ K2); auto. ring [HH1]. intros K1 K2 K3 K4. inversion_clear K4. repeat itac. case (inversible_is_not_k0 NI6). to_p_tac. apply (Keq_minus_eq_inv pell_theory). subst x1 x2; field_simplify_eq in K2; auto; ring [K2]. intros K1 K2 K3 K4. inversion_clear K4. repeat itac. case (inversible_is_not_k0 NI6). to_p_tac. apply (Keq_minus_eq_inv pell_theory). subst x1 x2; field_simplify_eq in K2; auto; ring [K2]. intros; simpl; constructor; to_p_tac; subst y2 x2 y1 x1; field; repeat split; auto. intros H1; case n; field_simplify_eq; auto. ring [(Keq_minus_eq pell_theory _ _ H1)]; auto. inversion_clear V0. repeat itac. intros H2; case (inversible_is_not_k0 NI6). to_p_tac. Qed. Lemma nopp_correct: forall a1 p1, a1 =~~= p1 -> [[(a1,1%Z)]] -> nopp a1 =~~= opp p1. Proof. assert (F0: 0 < p); auto with zarith. intros a1 p1 H; inversion_clear H; simpl; constructor; auto. rewrite <- H2. field_simplify_eq; auto. unfold ninv, pkopp, GZnZ.opp, to_p, pK; apply zirr. simpl; rewrite <- Zmod_div_mod; auto with zarith. pattern y at 1; rewrite (Z_div_mod_eq_full y p). rewrite Zopp_plus_distr. rewrite Zopp_mult_distr_r. rewrite Zmult_comm; rewrite Zplus_comm; rewrite Z_mod_plus; auto with zarith. inversion_clear H. case (inversible_mult_inv _ _ H3); intros _ H4. intros H5; apply (@inversible_kO z 0); auto. Qed. Lemma scalb_correct: forall p sc b a1 p1, a1 =~~= p1 -> [[scalb sc b a1 p]] -> fst (scalb sc b a1 p) =~~= EGroup.gpow p1 pG (if b then (Pos.succ p) else p). Proof. assert (F0: forall p1, List.In p1 (FGroup.s pG)). intros p1. apply (FELLK_in pell_theory _ (in_all_znz _ p_pos)). intros p0; unfold scalb; elim p0; clear p0; fold scalb. intros p0 Hrec sc b a1 p1; case b; clear b; intros H1. generalize (Hrec sc true a1 p1 H1) (nInversible_scalb true sc a1 p0); case scalb. intros a2 sc2 H2 H3. generalize (@nedouble_correct sc2 a2) (nInversible_double sc2 a2); case ndouble. intros a3 sc3 H4 H5 H6. case (H5 H6); clear H5; intros H5 H7. simpl Pos.succ. rewrite ZCmisc.Zpos_xO_add. repeat rewrite gpow_add; auto with zarith. apply H4; auto. apply H2. inversion_clear H5; try constructor; repeat itac; auto. generalize (Hrec sc true a1 p1 H1) (nInversible_scalb true sc a1 p0); case scalb. intros a2 sc2 H2 H3. generalize (@nedouble_correct sc2 a2) (nInversible_double sc2 a2); case ndouble. intros a3 sc3 H4 H5. generalize (fun p1 p2 => (@neadd_correct sc3 (nopp a1) p1 a3 p2)) (nInversible_add sc3 (nopp a1) a3); case nadd. intros a4 sc4 H6 H7 H8. case (H7 H8); clear H7; intros H7 [H9 H10]. case H5; clear H5. inversion_clear H9; try constructor; repeat itac; auto. intros H11 H12. case H3; clear H3. inversion_clear H11; try constructor; repeat itac; auto. intros H13 H14. rewrite ZCmisc.Zpos_xI_add. replace (gpow p1 pG (p0 + p0 + 1)) with (add (opp p1) (gpow p1 pG ((Pos.succ p0) + (Pos.succ p0)))). apply H6; auto. apply nopp_correct; auto. rewrite gpow_add; auto with zarith. apply H4; auto. apply H2; auto. inversion_clear H11; try constructor; repeat itac; auto. inversion_clear H9; try constructor; repeat itac; auto. rewrite ZCmisc.Psucc_Zplus. repeat rewrite gpow_add; auto with zarith. repeat rewrite gpow_1; auto with zarith. unfold add. repeat rewrite add_assoc. apply f_equal2 with (f := SMain.add pell_theory); auto. rewrite add_comm with (p2 := p1). repeat rewrite add_assoc. unfold opp; rewrite add_opp; simpl; auto. intros p0 Hrec sc b a1 p1; case b; clear b; intros H1. generalize (Hrec sc false a1 p1 H1) (nInversible_scalb false sc a1 p0); case scalb. intros a2 sc2 H2 H3. generalize (@nedouble_correct sc2 a2) (nInversible_double sc2 a2); case ndouble. intros a3 sc3 H4 H5. generalize (fun p1 p2 => (@neadd_correct sc3 a1 p1 a3 p2)) (nInversible_add sc3 a1 a3); case nadd. intros a4 sc4 H6 H7 H8. case (H7 H8); clear H7; intros H7 [H9 H10]. case H5; clear H5. inversion_clear H9; try constructor; repeat itac; auto. intros H11 H12. case H3; clear H3. inversion_clear H11; try constructor; repeat itac; auto. intros H13 H14. simpl Pos.succ. rewrite ZCmisc.Zpos_xI_add. replace (p0 + p0 + 1)%Z with (1 + (p0 + p0))%Z; auto with zarith. repeat rewrite gpow_add; auto with zarith. repeat rewrite gpow_1; auto with zarith. apply H6; auto. apply H4; auto. apply H2; auto. inversion_clear H11; try constructor; repeat itac; auto. inversion_clear H9; try constructor; repeat itac; auto. generalize (Hrec sc false a1 p1 H1) (nInversible_scalb false sc a1 p0); case scalb. intros a2 sc2 H2 H3. generalize (@nedouble_correct sc2 a2) (nInversible_double sc2 a2); case ndouble. intros a3 sc3 H4 H5 H6. case (H5 H6); clear H5; intros H5 H7. rewrite ZCmisc.Zpos_xO_add. repeat rewrite gpow_add; auto with zarith. apply H4; auto. apply H2; auto. inversion_clear H5; try constructor; repeat itac; auto. intros sc b a1 p1 H1; case b; intros H2; simpl gpow; rewrite add_0_r; auto. apply nedouble_correct; auto. Qed. Lemma scal_correct: forall p sc a1 p1, a1 =~~= p1 -> [[scal sc a1 p]] -> fst (scal sc a1 p) =~~= EGroup.gpow p1 pG p. Proof. intros p1 sc; exact (scalb_correct p1 sc false). Qed. Lemma scal_list_correct: forall l sc a1 p1, a1 =~~= p1 -> [[scal_list sc a1 l]] -> fst (scal_list sc a1 l) =~~= EGroup.gpow p1 pG (Zmull l). Proof. assert (F0: forall p1, List.In p1 (FGroup.s pG)). intros p1. apply (FELLK_in pell_theory _ (in_all_znz _ p_pos)). intros l; elim l; auto; clear l. intros sc a1 p1 H H1. change (Zmull List.nil) with (1%positive). rewrite gpow_1; auto. intros a l Hrec sc a1 p1 H1 H2. rewrite Zmull_cons. rewrite Zpos_mult_morphism. rewrite gpow_gpow; auto with zarith. unfold scal_list; simpl List.fold_left. case_eq (scal sc a1 a); intros a2 sc2 Ha2. change (equiv (fst (scal_list sc2 a2 l)) (gpow (gpow p1 pG a) pG (Zmull l))). apply Hrec. change a2 with (fst (a2, sc2)). rewrite <- Ha2. apply scal_correct; auto. case (nInversible_scal_list sc2 a2 l); auto. unfold scal_list; simpl; rewrite <- Ha2; auto. intros; rewrite Ha2. inversion_clear H; constructor; repeat itac; auto. unfold scal_list; simpl; rewrite <- Ha2; auto. Qed. Lemma scalL_not_1: forall l sc a p1 n, a =~~= p1 -> [[scalL sc a l]] -> List.In n l -> gpow p1 pG (Zmull l / n) <> pG.(FGroup.e). Proof. assert (F0: forall p1, List.In p1 (FGroup.s pG)). intros p1. apply (FELLK_in pell_theory _ (in_all_znz _ p_pos)). intros l; elim l; auto; clear l. simpl (List.In). intros a l Hrec sc a1 p1 n H H1 [H2 | H2]; subst. case (nInversible_scalL _ _ _ H1); intros H3 H4. rewrite Zmull_cons. repeat rewrite Zpos_mult_morphism. rewrite (Zmult_comm n). repeat rewrite Z_div_mult; auto. generalize H1; simpl scalL. case scal. intros n1 sc1. generalize (@scal_list_correct l sc1 a1 p1 H). case scal_list. intros n2; case n2; clear n2. intros z2 _ HH; inversion HH; case inversible_0; auto. intros x1 y1 z1 sc2 H5 H6 H7. rewrite H7 in H5. simpl fst in H5. case (nInversible_scalL _ _ _ H6); intros H8 H9. absurd (ntriple x1 y1 z1 =~~= FGroup.e pG). intros HH; inversion HH. apply H5; constructor; auto. red; simpl; auto. rewrite Zmull_cons; auto. repeat rewrite Zpos_mult_morphism. case (nInversible_scalL _ _ _ H1); intros U1 U2. rewrite (Zmull_div n); auto. rewrite Zmult_assoc. rewrite Z_div_mult; auto. rewrite gpow_gpow; auto. case (nInversible_scalL _ _ _ H1); auto. intros H3 H4. simpl in H1; revert H1. case_eq (scal sc a1 a). intros n1 sc1 Hn1. case_eq (scal_list sc1 a1 l). intros n2 sc2; case n2. intros _ HH; inversion HH. case inversible_0; auto. intros x1 y1 z1 Hn2 H5. apply (@Hrec (sc2 ** z1)%Z n1); auto. change n1 with (fst (n1, sc1)). rewrite <- Hn1. apply scal_correct; auto. case (nInversible_scalL _ _ _ H5). intros H6 H7. case (nInversible_scal_list sc1 a1 l). rewrite Hn2; constructor; auto. intros H8 H9. rewrite Hn1; inversion H6; constructor; auto; repeat itac. red; simpl; auto; intros HH; discriminate. apply Z.ge_le; apply Z_div_ge0; red; simpl; auto; intros HH; discriminate. red; simpl; auto. Qed. Lemma scalL_1: forall l sc a p1, a =~~= p1 -> [[scalL sc a l]] -> fst (scalL sc a l) =~~= gpow p1 pG (Zmull l). Proof. assert (F0: forall p1, List.In p1 (FGroup.s pG)). intros p1. apply (FELLK_in pell_theory _ (in_all_znz _ p_pos)). intros l; elim l; auto; clear l. simpl scalL; simpl fst; simpl Zmull. unfold Zmull; simpl List.fold_left. intros; rewrite gpow_1; auto. intros a l Hrec sc a1 p1 H1 H2. rewrite Zmull_cons. repeat rewrite Zpos_mult_morphism. rewrite gpow_gpow; auto. 2: red;simpl; auto; intros HH; discriminate. 2: red;simpl; auto; intros HH; discriminate. simpl in H2; revert H2; simpl scalL. case_eq (scal sc a1 a). intros n1 sc1 Hn1. case_eq (scal_list sc1 a1 l). intros n2 sc2; case n2. intros _ HH; inversion HH. case inversible_0; auto. intros x1 y1 z1 Hn2 H5. apply Hrec; auto. change n1 with (fst (n1, sc1)). rewrite <- Hn1. apply scal_correct; auto. case (nInversible_scalL _ _ _ H5). intros H6 H7. case (nInversible_scal_list sc1 a1 l). rewrite Hn2; constructor; auto. intros H8 H9. rewrite Hn1; inversion H6; constructor; auto; repeat itac. Qed. End pell. End Nell. Section pell. Variable N: Z. Variable (x y A B: Z). Hypothesis N_lt_2: 2 < N. Hypothesis N_not_div_2: ~(2 | N). Variable lR: List.list (positive * positive). Local Coercion Zpos : positive >-> Z. Hypothesis lR_prime: forall p, List.In p lR -> prime (fst p). Variable F: positive. Hypothesis lR_big: (4 * N < ((Zmullp lR) -1) ^2)%Z. Hypothesis on_curve: y^2 mod N = (x^3 + A * x + B) mod N. Notation "x ++ y " := (nplus N x y). Notation "x -- y" := (nsub N x y) (at level 50, left associativity). Notation "x ** y" := (nmul N x y) (at level 40, left associativity). Notation "x ?= y" := (Zeq_bool x y). Ltac itac := match goal with H: inversible _ (_ ** _) |- _ => case (inversible_mult_inv N_lt_2 _ _ H); clear H; let H1 := fresh "NI" in let H2 := fresh "NI" in intros H1 H2 | |- inversible _ (_ ** _) => apply inversible_mult end; auto. Let z2p x := match x with Zpos p => p | Zneg p => p | Z0 => xH end. Lemma scalL_prime: let a := ntriple x y 1 in let isc := 4 ** A ** A ** A ++ 27 ** B ** B in let (a1, sc1) := scal N A isc a F in let (S1,R1) := psplit lR in let (a2, sc2) := scal N A sc1 a1 S1 in let (a3, sc3) := scalL N A sc2 a2 R1 in match a3 with nzero => if (Zeq_bool (Z.gcd sc3 N) 1) then prime N else True | _ => True end. Proof. assert (F0: 0 < N); try auto with zarith. intros a isc. case_eq (scal N A isc a F); intros a1 sc1 Ha1. case_eq (psplit lR); intros S1 R1 HS1. case_eq (scal N A sc1 a1 S1); intros a2 sc2 Ha2. case_eq (scalL N A sc2 a2 R1); intros a3. case a3; auto. intros sc3 Hsc3. generalize (Zeq_bool_eq (Z.gcd sc3 N) 1); case Zeq_bool; intros Hz; auto. case (prime_dec N); auto; intros Hn. case (Zdivide_div_prime_le_square N); auto with zarith. intros p (Hp, (Hp1, Hp2)). pose (p_pos:= GZnZ.p_pos _ Hp). pose (to_p := fun x => mkznz _ _ (modz p x)). assert (Ni1: nInversible N (scalL N A sc2 a2 R1)). rewrite Hsc3; constructor. assert (tmp: Bezout sc3 N 1). apply Zis_gcd_bezout. rewrite <- Hz; auto; apply Zgcd_is_gcd. inversion_clear tmp as [u v Huv]. exists u. rewrite Zmult_comm. rewrite <- Z_mod_plus with (b := v); auto with zarith. rewrite Huv; rewrite Zmod_small; auto with zarith. case nInversible_scalL with (2 := Ni1); auto with zarith. intros Nt1 Nt2. assert (Ni2: nInversible N (scal N A sc1 a1 S1)). rewrite Ha2. inversion_clear Nt1; constructor; auto; repeat itac. case nInversible_scal with (2 := Ni2); auto with zarith. clear Nt1 Nt2; intros Nt1 Nt2. assert (Ni3: nInversible N (scal N A isc a F)). rewrite Ha1. inversion_clear Nt1; constructor; auto; repeat itac. case nInversible_scal with (2 := Ni3); auto with zarith. clear Nt1 Nt2; intros Ni4 Ni5. assert (Rp: rel_prime N (4 * A * A * A + 27 * B * B)). case Ni5; intros z1 Hz1. apply bezout_rel_prime. set (d := 4 * A * A * A + 27 * B * B). apply Bezout_intro with (- ((d * z1)/N)) z1. generalize Hz1; unfold isc. unfold nplus, nmul. rewrite (Zmodml (4 * A)); auto. rewrite (Zmodml (4 * A * A)); auto. rewrite (Zmodml (27 * B)); auto. rewrite <- Zplus_mod; auto. rewrite Zmodml; auto; fold d; clear Hz1; intros Hz1. rewrite (Z_div_mod_eq_full (z1 * d) N). rewrite (Zmult_comm z1). rewrite (Zmult_comm N). rewrite Zplus_assoc. rewrite (fun x y => Zplus_comm (x * y)). rewrite <- Zopp_mult_distr_l. rewrite Zplus_opp_r; auto. pose (pell := pell_theory A B N_not_div_2 Rp Hp Hp1). pose (pequiv := @equiv A B p). assert (Hoc: pow (pkI p) (@pkmul p) (to_p y) 2 = pkplus (pkplus (pow (pkI p) (@pkmul p) (to_p x) 3) (pkmul (pA A p) (to_p x))) (pB B p)). unfold pA, pB, to_p. repeat rewrite <- (to_p_pow N_lt_2 Hp); auto. simpl Z_of_nat. repeat rewrite <- (to_p_nmul N_lt_2 Hp); auto. repeat rewrite <- (to_p_nplus N_lt_2 Hp); auto. apply (zirr p). rewrite (@Zmod_div_mod p N); auto; rewrite on_curve; rewrite <- Zmod_div_mod; auto. unfold nmul, nplus. rewrite (fun xx => @Zmodpr xx (x^3)); auto. rewrite Zmodpl; auto; rewrite <- Zmod_div_mod; auto. pose (pcurve_elt := curve_elt (pkI p) (@pkplus p) (@pkmul p) (pA A p) (pB B p)). assert (E1: pequiv a (pcurve_elt (to_p x) (to_p y) Hoc)). unfold pequiv, a, pcurve_elt. apply n_equiv. unfold pkdiv, div, to_p. fold p_pos; set (pp := mkznz p (x mod p) (modz p x)). fold p_pos; set (p1 := mkznz p (1 mod p) (modz p 1)). pattern pp at 1; rewrite <- ((FZpZ _ Hp).(F_R).(Rmul_1_l) pp). unfold one; fold p_pos; fold p1. rewrite ((FZpZ _ Hp).(F_R).(Rmul_comm) p1). rewrite <- (FZpZ _ Hp).(F_R).(Rmul_assoc). rewrite ((FZpZ _ Hp).(F_R).(Rmul_comm) p1). rewrite (FZpZ _ Hp).(Finv_l); auto. rewrite (FZpZ _ Hp).(F_R).(Rmul_comm). rewrite (FZpZ _ Hp).(F_R).(Rmul_1_l); auto. apply (FZpZ _ Hp).(F_1_neq_0). unfold pkdiv, div, to_p. fold p_pos; set (pp := mkznz p (y mod p) (modz p y)). fold p_pos; set (p1 := mkznz p (1 mod p) (modz p 1)). pattern pp at 1; rewrite <- ((FZpZ _ Hp).(F_R).(Rmul_1_l) pp). unfold one; fold p_pos; fold p1. rewrite ((FZpZ _ Hp).(F_R).(Rmul_comm) p1). rewrite <- (FZpZ _ Hp).(F_R).(Rmul_assoc). rewrite ((FZpZ _ Hp).(F_R).(Rmul_comm) p1). rewrite (FZpZ _ Hp).(Finv_l); auto. rewrite (FZpZ _ Hp).(F_R).(Rmul_comm). rewrite (FZpZ _ Hp).(F_R).(Rmul_1_l); auto. apply (FZpZ _ Hp).(F_1_neq_0). assert(T1 := scal_correct N_lt_2 N_not_div_2 Rp Hp Hp1 _ _ E1 Ni3). rewrite Ha1 in T1; simpl fst in T1. match type of T1 with equiv _ ?X => set (p1 := X); fold p1 in T1 end. assert(T2 := scal_correct N_lt_2 N_not_div_2 Rp Hp Hp1 _ _ T1 Ni2). rewrite Ha2 in T2; simpl fst in T2. pose (ppG := pG A B N_not_div_2 Rp Hp Hp1). assert (F1: forall p1, List.In p1 (FGroup.s ppG)). intros p2. apply (FELLK_in pell _ (in_all_znz _ p_pos)). assert (F2 := fun u => @scalL_not_1 N A B N_lt_2 N_not_div_2 Rp _ Hp Hp1 R1 sc2 _ _ u T2 Ni1). fold ppG in F2. assert (F3 := @scalL_1 N A B N_lt_2 N_not_div_2 Rp _ Hp Hp1 R1 sc2 _ _ T2 Ni1). fold ppG in F3. rewrite <- psplit_correct in lR_big. rewrite HS1 in lR_big; simpl fst in lR_big; simpl snd in lR_big. assert (E2: e_order (ceqb pell) p1 ppG = (Zmullp lR)). apply order_div; auto. red; simpl; auto. intros z1 Hz1 Hz2. assert (E2: Zpos (z2p z1) = z1). generalize Hz1; case z1; simpl; auto; try (intros p2 HH || intro HH). case not_prime_0; auto. generalize (prime_ge_2 _ HH); unfold Z.le; simpl; intros HH1; case HH1; auto. rewrite <- psplit_correct. rewrite HS1; simpl fst; simpl snd. assert (Hl: List.In (z2p z1) R1). change R1 with (snd (S1, R1)). rewrite <- HS1. apply psplit_prime; auto. rewrite E2; auto. rewrite E2; auto. rewrite Zpos_mult_morphism. rewrite (Zmull_div (z2p z1)); auto. rewrite E2; rewrite Zmult_assoc. assert (Hpz1: z1 > 0). apply Z.lt_gt; apply Z.lt_le_trans with 2; try apply prime_ge_2; auto with zarith. red; auto. rewrite Z_div_mult; auto. rewrite gpow_gpow. rewrite <- E2; apply F2; auto. apply (FELLK_in pell _ (in_all_znz _ p_pos)); auto. red; simpl; intros HH; discriminate. apply Z_div_pos; auto with zarith. rewrite Hsc3 in F3; simpl fst in F3. rewrite <- psplit_correct. rewrite HS1; simpl fst; simpl snd. rewrite Zpos_mult_morphism; rewrite gpow_gpow; auto. set (p2 := gpow (gpow p1 ppG S1) ppG (Zmull R1)). fold p2 in F3; inversion F3; auto. red; simpl; intros; discriminate. red; simpl; intros; discriminate. absurd (e_order(ceqb pell) p1 ppG <= (FGroup.g_order ppG)). apply Zlt_not_le. apply Z.le_lt_trans with (1 := gorder_pG A B N_not_div_2 Rp Hp Hp1). rewrite E2. replace (Zpos (Zmullp lR)) with ((Zmullp lR - 1) + 1)%Z; try ring. apply Zplus_lt_compat_r. apply Zlt_square_simpl. change 0 with (1-1). unfold Zminus; apply Zplus_le_compat_r. case Zmullp; try intros p1; red; simpl; intros; discriminate. apply Z.le_lt_trans with (4 * N). replace (2 * p * (2 * p))%Z with (4 * (p * p))%Z. auto with zarith. ring. rewrite <- psplit_correct; rewrite HS1; simpl fst; simpl snd; auto. assert (tmp: forall x, x ^2 = x * x). intros x1; replace 2 with (1 + 1); auto; rewrite Zpower_exp. rewrite Zpower_1_r; auto. red; simpl; intros; discriminate. red; simpl; intros; discriminate. rewrite <- tmp; auto. apply Zdivide_le; auto. apply Zlt_le_weak. apply e_order_pos; auto. apply FGroup.g_order_pos. apply e_order_divide_g_order; auto. Qed. End pell. coqprime-8.18/src/Coqprime/examples/000077500000000000000000000000001451023060700174535ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/examples/BasePrimes.v000066400000000000000000041012451451023060700217030ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Require Import List. Require Import ZArith. From Coqprime Require Import ZCAux. Require Import Pock. Local Open Scope positive_scope. Ltac enc t := vm_cast_no_check t. Lemma prime2 : prime 2. exact prime_2. Qed. Lemma prime3 : prime 3. Proof. apply (Pocklington_refl (Pock_certif 3 2 ((2,1)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5 : prime 5. Proof. apply (Pocklington_refl (Pock_certif 5 2 ((2,2)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7 : prime 7. Proof. apply (Pocklington_refl (Pock_certif 7 3 ((2,1)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11 : prime 11. Proof. apply (Pocklington_refl (Pock_certif 11 2 ((2,1)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13 : prime 13. Proof. apply (Pocklington_refl (Pock_certif 13 2 ((2,2)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17 : prime 17. Proof. apply (Pocklington_refl (Pock_certif 17 3 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19 : prime 19. Proof. apply (Pocklington_refl (Pock_certif 19 2 ((2,1)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23 : prime 23. Proof. apply (Pocklington_refl (Pock_certif 23 5 ((2,1)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29 : prime 29. Proof. apply (Pocklington_refl (Pock_certif 29 2 ((2,2)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31 : prime 31. Proof. apply (Pocklington_refl (Pock_certif 31 3 ((2,1)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37 : prime 37. Proof. apply (Pocklington_refl (Pock_certif 37 2 ((2,2)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41 : prime 41. Proof. apply (Pocklington_refl (Pock_certif 41 3 ((2,3)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43 : prime 43. Proof. apply (Pocklington_refl (Pock_certif 43 3 ((3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47 : prime 47. Proof. apply (Pocklington_refl (Pock_certif 47 5 ((23, 1)::(2,1)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime53 : prime 53. Proof. apply (Pocklington_refl (Pock_certif 53 2 ((2,2)::nil) 4) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime59 : prime 59. Proof. apply (Pocklington_refl (Pock_certif 59 2 ((29, 1)::(2,1)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime61 : prime 61. Proof. apply (Pocklington_refl (Pock_certif 61 2 ((2,2)::nil) 6) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime67 : prime 67. Proof. apply (Pocklington_refl (Pock_certif 67 2 ((3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime71 : prime 71. Proof. apply (Pocklington_refl (Pock_certif 71 7 ((5, 1)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime73 : prime 73. Proof. apply (Pocklington_refl (Pock_certif 73 5 ((2,3)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime79 : prime 79. Proof. apply (Pocklington_refl (Pock_certif 79 3 ((3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime83 : prime 83. Proof. apply (Pocklington_refl (Pock_certif 83 2 ((41, 1)::(2,1)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime89 : prime 89. Proof. apply (Pocklington_refl (Pock_certif 89 3 ((2,3)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime97 : prime 97. Proof. apply (Pocklington_refl (Pock_certif 97 5 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime101 : prime 101. Proof. apply (Pocklington_refl (Pock_certif 101 2 ((2,2)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime103 : prime 103. Proof. apply (Pocklington_refl (Pock_certif 103 5 ((3, 1)::(2,1)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime107 : prime 107. Proof. apply (Pocklington_refl (Pock_certif 107 2 ((53, 1)::(2,1)::nil) 1) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime109 : prime 109. Proof. apply (Pocklington_refl (Pock_certif 109 2 ((2,2)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime113 : prime 113. Proof. apply (Pocklington_refl (Pock_certif 113 3 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime127 : prime 127. Proof. apply (Pocklington_refl (Pock_certif 127 3 ((3, 1)::(2,1)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime131 : prime 131. Proof. apply (Pocklington_refl (Pock_certif 131 2 ((5, 1)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime137 : prime 137. Proof. apply (Pocklington_refl (Pock_certif 137 3 ((2,3)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime139 : prime 139. Proof. apply (Pocklington_refl (Pock_certif 139 2 ((3, 1)::(2,1)::nil) 10) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime149 : prime 149. Proof. apply (Pocklington_refl (Pock_certif 149 2 ((2,2)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime151 : prime 151. Proof. apply (Pocklington_refl (Pock_certif 151 6 ((3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime157 : prime 157. Proof. apply (Pocklington_refl (Pock_certif 157 2 ((2,2)::nil) 4) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime163 : prime 163. Proof. apply (Pocklington_refl (Pock_certif 163 2 ((3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime167 : prime 167. Proof. apply (Pocklington_refl (Pock_certif 167 5 ((83, 1)::(2,1)::nil) 1) ((Proof_certif 83 prime83) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime173 : prime 173. Proof. apply (Pocklington_refl (Pock_certif 173 2 ((2,2)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime179 : prime 179. Proof. apply (Pocklington_refl (Pock_certif 179 2 ((89, 1)::(2,1)::nil) 1) ((Proof_certif 89 prime89) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime181 : prime 181. Proof. apply (Pocklington_refl (Pock_certif 181 2 ((2,2)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime191 : prime 191. Proof. apply (Pocklington_refl (Pock_certif 191 7 ((5, 1)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime193 : prime 193. Proof. apply (Pocklington_refl (Pock_certif 193 5 ((2,6)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime197 : prime 197. Proof. apply (Pocklington_refl (Pock_certif 197 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime199 : prime 199. Proof. apply (Pocklington_refl (Pock_certif 199 3 ((3, 1)::(2,1)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime211 : prime 211. Proof. apply (Pocklington_refl (Pock_certif 211 2 ((3, 1)::(2,1)::nil) 10) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime223 : prime 223. Proof. apply (Pocklington_refl (Pock_certif 223 3 ((3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime227 : prime 227. Proof. apply (Pocklington_refl (Pock_certif 227 2 ((113, 1)::(2,1)::nil) 1) ((Proof_certif 113 prime113) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime229 : prime 229. Proof. apply (Pocklington_refl (Pock_certif 229 6 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime233 : prime 233. Proof. apply (Pocklington_refl (Pock_certif 233 3 ((2,3)::nil) 12) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime239 : prime 239. Proof. apply (Pocklington_refl (Pock_certif 239 7 ((7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime241 : prime 241. Proof. apply (Pocklington_refl (Pock_certif 241 7 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime251 : prime 251. Proof. apply (Pocklington_refl (Pock_certif 251 6 ((5, 1)::(2,1)::nil) 4) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime257 : prime 257. Proof. apply (Pocklington_refl (Pock_certif 257 3 ((2,8)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime263 : prime 263. Proof. apply (Pocklington_refl (Pock_certif 263 5 ((131, 1)::(2,1)::nil) 1) ((Proof_certif 131 prime131) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime269 : prime 269. Proof. apply (Pocklington_refl (Pock_certif 269 2 ((67, 1)::(2,2)::nil) 1) ((Proof_certif 67 prime67) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime271 : prime 271. Proof. apply (Pocklington_refl (Pock_certif 271 6 ((3, 1)::(2,1)::nil) 7) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime277 : prime 277. Proof. apply (Pocklington_refl (Pock_certif 277 5 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime281 : prime 281. Proof. apply (Pocklington_refl (Pock_certif 281 3 ((2,3)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime283 : prime 283. Proof. apply (Pocklington_refl (Pock_certif 283 3 ((3, 1)::(2,1)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime293 : prime 293. Proof. apply (Pocklington_refl (Pock_certif 293 2 ((73, 1)::(2,2)::nil) 1) ((Proof_certif 73 prime73) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime307 : prime 307. Proof. apply (Pocklington_refl (Pock_certif 307 5 ((3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime311 : prime 311. Proof. apply (Pocklington_refl (Pock_certif 311 17 ((5, 1)::(2,1)::nil) 10) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime313 : prime 313. Proof. apply (Pocklington_refl (Pock_certif 313 5 ((2,3)::nil) 5) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime317 : prime 317. Proof. apply (Pocklington_refl (Pock_certif 317 2 ((79, 1)::(2,2)::nil) 1) ((Proof_certif 79 prime79) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime331 : prime 331. Proof. apply (Pocklington_refl (Pock_certif 331 2 ((3, 1)::(2,1)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime337 : prime 337. Proof. apply (Pocklington_refl (Pock_certif 337 5 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime347 : prime 347. Proof. apply (Pocklington_refl (Pock_certif 347 2 ((173, 1)::(2,1)::nil) 1) ((Proof_certif 173 prime173) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime349 : prime 349. Proof. apply (Pocklington_refl (Pock_certif 349 2 ((3, 1)::(2,2)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime353 : prime 353. Proof. apply (Pocklington_refl (Pock_certif 353 3 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime359 : prime 359. Proof. apply (Pocklington_refl (Pock_certif 359 7 ((179, 1)::(2,1)::nil) 1) ((Proof_certif 179 prime179) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime367 : prime 367. Proof. apply (Pocklington_refl (Pock_certif 367 6 ((3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime373 : prime 373. Proof. apply (Pocklington_refl (Pock_certif 373 2 ((3, 1)::(2,2)::nil) 6) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime379 : prime 379. Proof. apply (Pocklington_refl (Pock_certif 379 2 ((3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime383 : prime 383. Proof. apply (Pocklington_refl (Pock_certif 383 5 ((191, 1)::(2,1)::nil) 1) ((Proof_certif 191 prime191) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime389 : prime 389. Proof. apply (Pocklington_refl (Pock_certif 389 2 ((97, 1)::(2,2)::nil) 1) ((Proof_certif 97 prime97) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime397 : prime 397. Proof. apply (Pocklington_refl (Pock_certif 397 5 ((3, 1)::(2,2)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime401 : prime 401. Proof. apply (Pocklington_refl (Pock_certif 401 3 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime409 : prime 409. Proof. apply (Pocklington_refl (Pock_certif 409 7 ((2,3)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime419 : prime 419. Proof. apply (Pocklington_refl (Pock_certif 419 2 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime421 : prime 421. Proof. apply (Pocklington_refl (Pock_certif 421 2 ((3, 1)::(2,2)::nil) 10) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime431 : prime 431. Proof. apply (Pocklington_refl (Pock_certif 431 7 ((5, 1)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime433 : prime 433. Proof. apply (Pocklington_refl (Pock_certif 433 5 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime439 : prime 439. Proof. apply (Pocklington_refl (Pock_certif 439 15 ((3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime443 : prime 443. Proof. apply (Pocklington_refl (Pock_certif 443 2 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime449 : prime 449. Proof. apply (Pocklington_refl (Pock_certif 449 3 ((2,6)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime457 : prime 457. Proof. apply (Pocklington_refl (Pock_certif 457 5 ((2,3)::nil) 7) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime461 : prime 461. Proof. apply (Pocklington_refl (Pock_certif 461 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime463 : prime 463. Proof. apply (Pocklington_refl (Pock_certif 463 3 ((3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime467 : prime 467. Proof. apply (Pocklington_refl (Pock_certif 467 2 ((233, 1)::(2,1)::nil) 1) ((Proof_certif 233 prime233) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime479 : prime 479. Proof. apply (Pocklington_refl (Pock_certif 479 13 ((239, 1)::(2,1)::nil) 1) ((Proof_certif 239 prime239) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime487 : prime 487. Proof. apply (Pocklington_refl (Pock_certif 487 3 ((3, 1)::(2,1)::nil) 5) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime491 : prime 491. Proof. apply (Pocklington_refl (Pock_certif 491 2 ((5, 1)::(2,1)::nil) 8) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime499 : prime 499. Proof. apply (Pocklington_refl (Pock_certif 499 7 ((3, 1)::(2,1)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime503 : prime 503. Proof. apply (Pocklington_refl (Pock_certif 503 5 ((251, 1)::(2,1)::nil) 1) ((Proof_certif 251 prime251) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime509 : prime 509. Proof. apply (Pocklington_refl (Pock_certif 509 2 ((127, 1)::(2,2)::nil) 1) ((Proof_certif 127 prime127) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime521 : prime 521. Proof. apply (Pocklington_refl (Pock_certif 521 3 ((2,3)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime523 : prime 523. Proof. apply (Pocklington_refl (Pock_certif 523 2 ((3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime541 : prime 541. Proof. apply (Pocklington_refl (Pock_certif 541 2 ((3, 1)::(2,2)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime547 : prime 547. Proof. apply (Pocklington_refl (Pock_certif 547 2 ((3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime557 : prime 557. Proof. apply (Pocklington_refl (Pock_certif 557 2 ((139, 1)::(2,2)::nil) 1) ((Proof_certif 139 prime139) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime563 : prime 563. Proof. apply (Pocklington_refl (Pock_certif 563 2 ((281, 1)::(2,1)::nil) 1) ((Proof_certif 281 prime281) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime569 : prime 569. Proof. apply (Pocklington_refl (Pock_certif 569 3 ((2,3)::nil) 4) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime571 : prime 571. Proof. apply (Pocklington_refl (Pock_certif 571 2 ((3, 1)::(2,1)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime577 : prime 577. Proof. apply (Pocklington_refl (Pock_certif 577 5 ((2,6)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime587 : prime 587. Proof. apply (Pocklington_refl (Pock_certif 587 2 ((293, 1)::(2,1)::nil) 1) ((Proof_certif 293 prime293) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime593 : prime 593. Proof. apply (Pocklington_refl (Pock_certif 593 3 ((2,4)::nil) 4) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime599 : prime 599. Proof. apply (Pocklington_refl (Pock_certif 599 7 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime601 : prime 601. Proof. apply (Pocklington_refl (Pock_certif 601 7 ((2,3)::nil) 9) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime607 : prime 607. Proof. apply (Pocklington_refl (Pock_certif 607 3 ((3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime613 : prime 613. Proof. apply (Pocklington_refl (Pock_certif 613 2 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime617 : prime 617. Proof. apply (Pocklington_refl (Pock_certif 617 3 ((2,3)::nil) 11) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime619 : prime 619. Proof. apply (Pocklington_refl (Pock_certif 619 2 ((3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime631 : prime 631. Proof. apply (Pocklington_refl (Pock_certif 631 3 ((3, 1)::(2,1)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime641 : prime 641. Proof. apply (Pocklington_refl (Pock_certif 641 3 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime643 : prime 643. Proof. apply (Pocklington_refl (Pock_certif 643 11 ((3, 1)::(2,1)::nil) 7) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime647 : prime 647. Proof. apply (Pocklington_refl (Pock_certif 647 5 ((17, 1)::(2,1)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime653 : prime 653. Proof. apply (Pocklington_refl (Pock_certif 653 2 ((163, 1)::(2,2)::nil) 1) ((Proof_certif 163 prime163) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime659 : prime 659. Proof. apply (Pocklington_refl (Pock_certif 659 2 ((7, 1)::(2,1)::nil) 18) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime661 : prime 661. Proof. apply (Pocklington_refl (Pock_certif 661 2 ((3, 1)::(2,2)::nil) 5) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime673 : prime 673. Proof. apply (Pocklington_refl (Pock_certif 673 5 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime677 : prime 677. Proof. apply (Pocklington_refl (Pock_certif 677 2 ((13, 1)::(2,2)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime683 : prime 683. Proof. apply (Pocklington_refl (Pock_certif 683 2 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime691 : prime 691. Proof. apply (Pocklington_refl (Pock_certif 691 3 ((3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime701 : prime 701. Proof. apply (Pocklington_refl (Pock_certif 701 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime709 : prime 709. Proof. apply (Pocklington_refl (Pock_certif 709 2 ((3, 1)::(2,2)::nil) 10) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime719 : prime 719. Proof. apply (Pocklington_refl (Pock_certif 719 11 ((359, 1)::(2,1)::nil) 1) ((Proof_certif 359 prime359) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime727 : prime 727. Proof. apply (Pocklington_refl (Pock_certif 727 3 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime733 : prime 733. Proof. apply (Pocklington_refl (Pock_certif 733 6 ((3, 1)::(2,2)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime739 : prime 739. Proof. apply (Pocklington_refl (Pock_certif 739 3 ((3, 2)::(2,1)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime743 : prime 743. Proof. apply (Pocklington_refl (Pock_certif 743 5 ((7, 1)::(2,1)::nil) 24) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime751 : prime 751. Proof. apply (Pocklington_refl (Pock_certif 751 3 ((5, 1)::(2,1)::nil) 14) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime757 : prime 757. Proof. apply (Pocklington_refl (Pock_certif 757 2 ((3, 1)::(2,2)::nil) 14) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime761 : prime 761. Proof. apply (Pocklington_refl (Pock_certif 761 3 ((2,3)::nil) 13) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime769 : prime 769. Proof. apply (Pocklington_refl (Pock_certif 769 7 ((2,8)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime773 : prime 773. Proof. apply (Pocklington_refl (Pock_certif 773 2 ((193, 1)::(2,2)::nil) 1) ((Proof_certif 193 prime193) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime787 : prime 787. Proof. apply (Pocklington_refl (Pock_certif 787 2 ((3, 1)::(2,1)::nil) 6) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime797 : prime 797. Proof. apply (Pocklington_refl (Pock_certif 797 2 ((199, 1)::(2,2)::nil) 1) ((Proof_certif 199 prime199) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime809 : prime 809. Proof. apply (Pocklington_refl (Pock_certif 809 3 ((2,3)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime811 : prime 811. Proof. apply (Pocklington_refl (Pock_certif 811 3 ((3, 2)::(2,1)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime821 : prime 821. Proof. apply (Pocklington_refl (Pock_certif 821 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime823 : prime 823. Proof. apply (Pocklington_refl (Pock_certif 823 3 ((137, 1)::(2,1)::nil) 1) ((Proof_certif 137 prime137) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime827 : prime 827. Proof. apply (Pocklington_refl (Pock_certif 827 2 ((7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime829 : prime 829. Proof. apply (Pocklington_refl (Pock_certif 829 2 ((3, 1)::(2,2)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime839 : prime 839. Proof. apply (Pocklington_refl (Pock_certif 839 11 ((419, 1)::(2,1)::nil) 1) ((Proof_certif 419 prime419) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime853 : prime 853. Proof. apply (Pocklington_refl (Pock_certif 853 2 ((3, 1)::(2,2)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime857 : prime 857. Proof. apply (Pocklington_refl (Pock_certif 857 3 ((2,3)::nil) 8) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime859 : prime 859. Proof. apply (Pocklington_refl (Pock_certif 859 2 ((3, 1)::(2,1)::nil) 5) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime863 : prime 863. Proof. apply (Pocklington_refl (Pock_certif 863 5 ((431, 1)::(2,1)::nil) 1) ((Proof_certif 431 prime431) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime877 : prime 877. Proof. apply (Pocklington_refl (Pock_certif 877 2 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime881 : prime 881. Proof. apply (Pocklington_refl (Pock_certif 881 3 ((2,4)::nil) 22) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime883 : prime 883. Proof. apply (Pocklington_refl (Pock_certif 883 2 ((3, 2)::(2,1)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime887 : prime 887. Proof. apply (Pocklington_refl (Pock_certif 887 5 ((443, 1)::(2,1)::nil) 1) ((Proof_certif 443 prime443) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime907 : prime 907. Proof. apply (Pocklington_refl (Pock_certif 907 2 ((151, 1)::(2,1)::nil) 1) ((Proof_certif 151 prime151) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime911 : prime 911. Proof. apply (Pocklington_refl (Pock_certif 911 17 ((5, 1)::(2,1)::nil) 9) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime919 : prime 919. Proof. apply (Pocklington_refl (Pock_certif 919 7 ((3, 2)::(2,1)::nil) 14) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime929 : prime 929. Proof. apply (Pocklington_refl (Pock_certif 929 3 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime937 : prime 937. Proof. apply (Pocklington_refl (Pock_certif 937 5 ((2,3)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime941 : prime 941. Proof. apply (Pocklington_refl (Pock_certif 941 2 ((5, 1)::(2,2)::nil) 6) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime947 : prime 947. Proof. apply (Pocklington_refl (Pock_certif 947 2 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime953 : prime 953. Proof. apply (Pocklington_refl (Pock_certif 953 3 ((2,3)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime967 : prime 967. Proof. apply (Pocklington_refl (Pock_certif 967 3 ((7, 1)::(2,1)::nil) 12) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime971 : prime 971. Proof. apply (Pocklington_refl (Pock_certif 971 6 ((5, 1)::(2,1)::nil) 16) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime977 : prime 977. Proof. apply (Pocklington_refl (Pock_certif 977 3 ((2,4)::nil) 28) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime983 : prime 983. Proof. apply (Pocklington_refl (Pock_certif 983 5 ((491, 1)::(2,1)::nil) 1) ((Proof_certif 491 prime491) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime991 : prime 991. Proof. apply (Pocklington_refl (Pock_certif 991 6 ((3, 2)::(2,1)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime997 : prime 997. Proof. apply (Pocklington_refl (Pock_certif 997 7 ((3, 1)::(2,2)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1009 : prime 1009. Proof. apply (Pocklington_refl (Pock_certif 1009 11 ((2,4)::nil) 30) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1013 : prime 1013. Proof. apply (Pocklington_refl (Pock_certif 1013 3 ((11, 1)::(2,2)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1019 : prime 1019. Proof. apply (Pocklington_refl (Pock_certif 1019 2 ((509, 1)::(2,1)::nil) 1) ((Proof_certif 509 prime509) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1021 : prime 1021. Proof. apply (Pocklington_refl (Pock_certif 1021 10 ((3, 1)::(2,2)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1031 : prime 1031. Proof. apply (Pocklington_refl (Pock_certif 1031 14 ((5, 1)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1033 : prime 1033. Proof. apply (Pocklington_refl (Pock_certif 1033 5 ((2,3)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1039 : prime 1039. Proof. apply (Pocklington_refl (Pock_certif 1039 3 ((173, 1)::(2,1)::nil) 1) ((Proof_certif 173 prime173) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1049 : prime 1049. Proof. apply (Pocklington_refl (Pock_certif 1049 3 ((2,3)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1051 : prime 1051. Proof. apply (Pocklington_refl (Pock_certif 1051 2 ((5, 1)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1061 : prime 1061. Proof. apply (Pocklington_refl (Pock_certif 1061 2 ((5, 1)::(2,2)::nil) 12) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1063 : prime 1063. Proof. apply (Pocklington_refl (Pock_certif 1063 3 ((3, 2)::(2,1)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1069 : prime 1069. Proof. apply (Pocklington_refl (Pock_certif 1069 6 ((3, 1)::(2,2)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1087 : prime 1087. Proof. apply (Pocklington_refl (Pock_certif 1087 3 ((181, 1)::(2,1)::nil) 1) ((Proof_certif 181 prime181) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1091 : prime 1091. Proof. apply (Pocklington_refl (Pock_certif 1091 2 ((5, 1)::(2,1)::nil) 6) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1093 : prime 1093. Proof. apply (Pocklington_refl (Pock_certif 1093 5 ((3, 1)::(2,2)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1097 : prime 1097. Proof. apply (Pocklington_refl (Pock_certif 1097 3 ((2,3)::nil) 4) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1103 : prime 1103. Proof. apply (Pocklington_refl (Pock_certif 1103 5 ((19, 1)::(2,1)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1109 : prime 1109. Proof. apply (Pocklington_refl (Pock_certif 1109 2 ((277, 1)::(2,2)::nil) 1) ((Proof_certif 277 prime277) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1117 : prime 1117. Proof. apply (Pocklington_refl (Pock_certif 1117 2 ((3, 1)::(2,2)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1123 : prime 1123. Proof. apply (Pocklington_refl (Pock_certif 1123 2 ((11, 1)::(2,1)::nil) 6) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1129 : prime 1129. Proof. apply (Pocklington_refl (Pock_certif 1129 11 ((2,3)::nil) 10) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1151 : prime 1151. Proof. apply (Pocklington_refl (Pock_certif 1151 17 ((5, 1)::(2,1)::nil) 13) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1153 : prime 1153. Proof. apply (Pocklington_refl (Pock_certif 1153 5 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1163 : prime 1163. Proof. apply (Pocklington_refl (Pock_certif 1163 5 ((7, 1)::(2,1)::nil) 26) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1171 : prime 1171. Proof. apply (Pocklington_refl (Pock_certif 1171 2 ((3, 2)::(2,1)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1181 : prime 1181. Proof. apply (Pocklington_refl (Pock_certif 1181 3 ((5, 1)::(2,2)::nil) 18) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1187 : prime 1187. Proof. apply (Pocklington_refl (Pock_certif 1187 2 ((593, 1)::(2,1)::nil) 1) ((Proof_certif 593 prime593) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1193 : prime 1193. Proof. apply (Pocklington_refl (Pock_certif 1193 3 ((2,3)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1201 : prime 1201. Proof. apply (Pocklington_refl (Pock_certif 1201 11 ((2,4)::nil) 10) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1213 : prime 1213. Proof. apply (Pocklington_refl (Pock_certif 1213 2 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1217 : prime 1217. Proof. apply (Pocklington_refl (Pock_certif 1217 3 ((2,6)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1223 : prime 1223. Proof. apply (Pocklington_refl (Pock_certif 1223 5 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1229 : prime 1229. Proof. apply (Pocklington_refl (Pock_certif 1229 2 ((307, 1)::(2,2)::nil) 1) ((Proof_certif 307 prime307) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1231 : prime 1231. Proof. apply (Pocklington_refl (Pock_certif 1231 3 ((5, 1)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1237 : prime 1237. Proof. apply (Pocklington_refl (Pock_certif 1237 2 ((3, 1)::(2,2)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1249 : prime 1249. Proof. apply (Pocklington_refl (Pock_certif 1249 7 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1259 : prime 1259. Proof. apply (Pocklington_refl (Pock_certif 1259 2 ((17, 1)::(2,1)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1277 : prime 1277. Proof. apply (Pocklington_refl (Pock_certif 1277 2 ((11, 1)::(2,2)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1279 : prime 1279. Proof. apply (Pocklington_refl (Pock_certif 1279 3 ((3, 2)::(2,1)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1283 : prime 1283. Proof. apply (Pocklington_refl (Pock_certif 1283 2 ((641, 1)::(2,1)::nil) 1) ((Proof_certif 641 prime641) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1289 : prime 1289. Proof. apply (Pocklington_refl (Pock_certif 1289 6 ((7, 1)::(2,3)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1291 : prime 1291. Proof. apply (Pocklington_refl (Pock_certif 1291 2 ((5, 1)::(2,1)::nil) 5) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1297 : prime 1297. Proof. apply (Pocklington_refl (Pock_certif 1297 5 ((2,4)::nil) 16) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1301 : prime 1301. Proof. apply (Pocklington_refl (Pock_certif 1301 2 ((5, 1)::(2,2)::nil) 24) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1303 : prime 1303. Proof. apply (Pocklington_refl (Pock_certif 1303 3 ((7, 1)::(2,1)::nil) 7) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1307 : prime 1307. Proof. apply (Pocklington_refl (Pock_certif 1307 2 ((653, 1)::(2,1)::nil) 1) ((Proof_certif 653 prime653) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1319 : prime 1319. Proof. apply (Pocklington_refl (Pock_certif 1319 13 ((659, 1)::(2,1)::nil) 1) ((Proof_certif 659 prime659) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1321 : prime 1321. Proof. apply (Pocklington_refl (Pock_certif 1321 7 ((2,3)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1327 : prime 1327. Proof. apply (Pocklington_refl (Pock_certif 1327 3 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1361 : prime 1361. Proof. apply (Pocklington_refl (Pock_certif 1361 3 ((2,4)::nil) 20) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1367 : prime 1367. Proof. apply (Pocklington_refl (Pock_certif 1367 5 ((683, 1)::(2,1)::nil) 1) ((Proof_certif 683 prime683) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1373 : prime 1373. Proof. apply (Pocklington_refl (Pock_certif 1373 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1381 : prime 1381. Proof. apply (Pocklington_refl (Pock_certif 1381 2 ((3, 1)::(2,2)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1399 : prime 1399. Proof. apply (Pocklington_refl (Pock_certif 1399 3 ((233, 1)::(2,1)::nil) 1) ((Proof_certif 233 prime233) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1409 : prime 1409. Proof. apply (Pocklington_refl (Pock_certif 1409 3 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1423 : prime 1423. Proof. apply (Pocklington_refl (Pock_certif 1423 3 ((3, 2)::(2,1)::nil) 5) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1427 : prime 1427. Proof. apply (Pocklington_refl (Pock_certif 1427 2 ((23, 1)::(2,1)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1429 : prime 1429. Proof. apply (Pocklington_refl (Pock_certif 1429 2 ((3, 1)::(2,2)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1433 : prime 1433. Proof. apply (Pocklington_refl (Pock_certif 1433 3 ((179, 1)::(2,3)::nil) 1) ((Proof_certif 179 prime179) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1439 : prime 1439. Proof. apply (Pocklington_refl (Pock_certif 1439 7 ((719, 1)::(2,1)::nil) 1) ((Proof_certif 719 prime719) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1447 : prime 1447. Proof. apply (Pocklington_refl (Pock_certif 1447 3 ((241, 1)::(2,1)::nil) 1) ((Proof_certif 241 prime241) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1451 : prime 1451. Proof. apply (Pocklington_refl (Pock_certif 1451 2 ((5, 1)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1453 : prime 1453. Proof. apply (Pocklington_refl (Pock_certif 1453 2 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1459 : prime 1459. Proof. apply (Pocklington_refl (Pock_certif 1459 3 ((3, 2)::(2,1)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1471 : prime 1471. Proof. apply (Pocklington_refl (Pock_certif 1471 6 ((5, 1)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1481 : prime 1481. Proof. apply (Pocklington_refl (Pock_certif 1481 3 ((2,3)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1483 : prime 1483. Proof. apply (Pocklington_refl (Pock_certif 1483 2 ((13, 1)::(2,1)::nil) 4) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1487 : prime 1487. Proof. apply (Pocklington_refl (Pock_certif 1487 5 ((743, 1)::(2,1)::nil) 1) ((Proof_certif 743 prime743) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1489 : prime 1489. Proof. apply (Pocklington_refl (Pock_certif 1489 7 ((2,4)::nil) 28) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1493 : prime 1493. Proof. apply (Pocklington_refl (Pock_certif 1493 2 ((373, 1)::(2,2)::nil) 1) ((Proof_certif 373 prime373) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1499 : prime 1499. Proof. apply (Pocklington_refl (Pock_certif 1499 2 ((7, 1)::(2,1)::nil) 22) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1511 : prime 1511. Proof. apply (Pocklington_refl (Pock_certif 1511 11 ((5, 1)::(2,1)::nil) 8) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1523 : prime 1523. Proof. apply (Pocklington_refl (Pock_certif 1523 2 ((761, 1)::(2,1)::nil) 1) ((Proof_certif 761 prime761) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1531 : prime 1531. Proof. apply (Pocklington_refl (Pock_certif 1531 2 ((3, 2)::(2,1)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1543 : prime 1543. Proof. apply (Pocklington_refl (Pock_certif 1543 3 ((257, 1)::(2,1)::nil) 1) ((Proof_certif 257 prime257) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1549 : prime 1549. Proof. apply (Pocklington_refl (Pock_certif 1549 2 ((3, 1)::(2,2)::nil) 6) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1553 : prime 1553. Proof. apply (Pocklington_refl (Pock_certif 1553 3 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1559 : prime 1559. Proof. apply (Pocklington_refl (Pock_certif 1559 17 ((19, 1)::(2,1)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1567 : prime 1567. Proof. apply (Pocklington_refl (Pock_certif 1567 3 ((3, 2)::(2,1)::nil) 14) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1571 : prime 1571. Proof. apply (Pocklington_refl (Pock_certif 1571 2 ((5, 1)::(2,1)::nil) 15) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1579 : prime 1579. Proof. apply (Pocklington_refl (Pock_certif 1579 2 ((263, 1)::(2,1)::nil) 1) ((Proof_certif 263 prime263) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1583 : prime 1583. Proof. apply (Pocklington_refl (Pock_certif 1583 5 ((7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1597 : prime 1597. Proof. apply (Pocklington_refl (Pock_certif 1597 11 ((3, 1)::(2,2)::nil) 11) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1601 : prime 1601. Proof. apply (Pocklington_refl (Pock_certif 1601 3 ((2,6)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1607 : prime 1607. Proof. apply (Pocklington_refl (Pock_certif 1607 5 ((11, 1)::(2,1)::nil) 28) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1609 : prime 1609. Proof. apply (Pocklington_refl (Pock_certif 1609 7 ((2,3)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1613 : prime 1613. Proof. apply (Pocklington_refl (Pock_certif 1613 2 ((13, 1)::(2,2)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1619 : prime 1619. Proof. apply (Pocklington_refl (Pock_certif 1619 2 ((809, 1)::(2,1)::nil) 1) ((Proof_certif 809 prime809) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1621 : prime 1621. Proof. apply (Pocklington_refl (Pock_certif 1621 2 ((3, 1)::(2,2)::nil) 13) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1627 : prime 1627. Proof. apply (Pocklington_refl (Pock_certif 1627 2 ((271, 1)::(2,1)::nil) 1) ((Proof_certif 271 prime271) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1637 : prime 1637. Proof. apply (Pocklington_refl (Pock_certif 1637 2 ((409, 1)::(2,2)::nil) 1) ((Proof_certif 409 prime409) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1657 : prime 1657. Proof. apply (Pocklington_refl (Pock_certif 1657 5 ((2,3)::nil) 11) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1663 : prime 1663. Proof. apply (Pocklington_refl (Pock_certif 1663 3 ((277, 1)::(2,1)::nil) 1) ((Proof_certif 277 prime277) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1667 : prime 1667. Proof. apply (Pocklington_refl (Pock_certif 1667 2 ((7, 1)::(2,1)::nil) 4) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1669 : prime 1669. Proof. apply (Pocklington_refl (Pock_certif 1669 2 ((3, 1)::(2,2)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1693 : prime 1693. Proof. apply (Pocklington_refl (Pock_certif 1693 2 ((3, 1)::(2,2)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1697 : prime 1697. Proof. apply (Pocklington_refl (Pock_certif 1697 3 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1699 : prime 1699. Proof. apply (Pocklington_refl (Pock_certif 1699 2 ((283, 1)::(2,1)::nil) 1) ((Proof_certif 283 prime283) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1709 : prime 1709. Proof. apply (Pocklington_refl (Pock_certif 1709 3 ((7, 1)::(2,2)::nil) 4) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1721 : prime 1721. Proof. apply (Pocklington_refl (Pock_certif 1721 3 ((5, 1)::(2,3)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1723 : prime 1723. Proof. apply (Pocklington_refl (Pock_certif 1723 2 ((7, 1)::(2,1)::nil) 9) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1733 : prime 1733. Proof. apply (Pocklington_refl (Pock_certif 1733 2 ((433, 1)::(2,2)::nil) 1) ((Proof_certif 433 prime433) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1741 : prime 1741. Proof. apply (Pocklington_refl (Pock_certif 1741 2 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1747 : prime 1747. Proof. apply (Pocklington_refl (Pock_certif 1747 2 ((3, 2)::(2,1)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1753 : prime 1753. Proof. apply (Pocklington_refl (Pock_certif 1753 5 ((2,3)::nil) 4) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1759 : prime 1759. Proof. apply (Pocklington_refl (Pock_certif 1759 3 ((293, 1)::(2,1)::nil) 1) ((Proof_certif 293 prime293) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1777 : prime 1777. Proof. apply (Pocklington_refl (Pock_certif 1777 5 ((2,4)::nil) 14) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1783 : prime 1783. Proof. apply (Pocklington_refl (Pock_certif 1783 5 ((3, 2)::(2,1)::nil) 26) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1787 : prime 1787. Proof. apply (Pocklington_refl (Pock_certif 1787 2 ((19, 1)::(2,1)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1789 : prime 1789. Proof. apply (Pocklington_refl (Pock_certif 1789 6 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1801 : prime 1801. Proof. apply (Pocklington_refl (Pock_certif 1801 11 ((3, 1)::(2,3)::nil) 26) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1811 : prime 1811. Proof. apply (Pocklington_refl (Pock_certif 1811 6 ((5, 1)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1823 : prime 1823. Proof. apply (Pocklington_refl (Pock_certif 1823 5 ((911, 1)::(2,1)::nil) 1) ((Proof_certif 911 prime911) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1831 : prime 1831. Proof. apply (Pocklington_refl (Pock_certif 1831 3 ((5, 1)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1847 : prime 1847. Proof. apply (Pocklington_refl (Pock_certif 1847 5 ((13, 1)::(2,1)::nil) 18) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1861 : prime 1861. Proof. apply (Pocklington_refl (Pock_certif 1861 2 ((3, 1)::(2,2)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1867 : prime 1867. Proof. apply (Pocklington_refl (Pock_certif 1867 2 ((311, 1)::(2,1)::nil) 1) ((Proof_certif 311 prime311) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1871 : prime 1871. Proof. apply (Pocklington_refl (Pock_certif 1871 14 ((5, 1)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1873 : prime 1873. Proof. apply (Pocklington_refl (Pock_certif 1873 5 ((2,4)::nil) 20) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1877 : prime 1877. Proof. apply (Pocklington_refl (Pock_certif 1877 2 ((7, 1)::(2,2)::nil) 10) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1879 : prime 1879. Proof. apply (Pocklington_refl (Pock_certif 1879 3 ((313, 1)::(2,1)::nil) 1) ((Proof_certif 313 prime313) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1889 : prime 1889. Proof. apply (Pocklington_refl (Pock_certif 1889 3 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1901 : prime 1901. Proof. apply (Pocklington_refl (Pock_certif 1901 2 ((5, 1)::(2,2)::nil) 14) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1907 : prime 1907. Proof. apply (Pocklington_refl (Pock_certif 1907 2 ((953, 1)::(2,1)::nil) 1) ((Proof_certif 953 prime953) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1913 : prime 1913. Proof. apply (Pocklington_refl (Pock_certif 1913 3 ((2,3)::nil) 10) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1931 : prime 1931. Proof. apply (Pocklington_refl (Pock_certif 1931 2 ((5, 1)::(2,1)::nil) 9) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1933 : prime 1933. Proof. apply (Pocklington_refl (Pock_certif 1933 5 ((3, 1)::(2,2)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1949 : prime 1949. Proof. apply (Pocklington_refl (Pock_certif 1949 2 ((487, 1)::(2,2)::nil) 1) ((Proof_certif 487 prime487) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1951 : prime 1951. Proof. apply (Pocklington_refl (Pock_certif 1951 3 ((5, 1)::(2,1)::nil) 12) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1973 : prime 1973. Proof. apply (Pocklington_refl (Pock_certif 1973 2 ((17, 1)::(2,2)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1979 : prime 1979. Proof. apply (Pocklington_refl (Pock_certif 1979 2 ((23, 1)::(2,1)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1987 : prime 1987. Proof. apply (Pocklington_refl (Pock_certif 1987 2 ((331, 1)::(2,1)::nil) 1) ((Proof_certif 331 prime331) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1993 : prime 1993. Proof. apply (Pocklington_refl (Pock_certif 1993 5 ((3, 1)::(2,3)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1997 : prime 1997. Proof. apply (Pocklington_refl (Pock_certif 1997 2 ((499, 1)::(2,2)::nil) 1) ((Proof_certif 499 prime499) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime1999 : prime 1999. Proof. apply (Pocklington_refl (Pock_certif 1999 3 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2003 : prime 2003. Proof. apply (Pocklington_refl (Pock_certif 2003 5 ((7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2011 : prime 2011. Proof. apply (Pocklington_refl (Pock_certif 2011 3 ((5, 1)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2017 : prime 2017. Proof. apply (Pocklington_refl (Pock_certif 2017 5 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2027 : prime 2027. Proof. apply (Pocklington_refl (Pock_certif 2027 2 ((1013, 1)::(2,1)::nil) 1) ((Proof_certif 1013 prime1013) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2029 : prime 2029. Proof. apply (Pocklington_refl (Pock_certif 2029 2 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2039 : prime 2039. Proof. apply (Pocklington_refl (Pock_certif 2039 7 ((1019, 1)::(2,1)::nil) 1) ((Proof_certif 1019 prime1019) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2053 : prime 2053. Proof. apply (Pocklington_refl (Pock_certif 2053 2 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2063 : prime 2063. Proof. apply (Pocklington_refl (Pock_certif 2063 5 ((1031, 1)::(2,1)::nil) 1) ((Proof_certif 1031 prime1031) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2069 : prime 2069. Proof. apply (Pocklington_refl (Pock_certif 2069 2 ((11, 1)::(2,2)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2081 : prime 2081. Proof. apply (Pocklington_refl (Pock_certif 2081 3 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2083 : prime 2083. Proof. apply (Pocklington_refl (Pock_certif 2083 2 ((347, 1)::(2,1)::nil) 1) ((Proof_certif 347 prime347) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2087 : prime 2087. Proof. apply (Pocklington_refl (Pock_certif 2087 5 ((7, 1)::(2,1)::nil) 6) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2089 : prime 2089. Proof. apply (Pocklington_refl (Pock_certif 2089 7 ((3, 1)::(2,3)::nil) 38) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2099 : prime 2099. Proof. apply (Pocklington_refl (Pock_certif 2099 2 ((1049, 1)::(2,1)::nil) 1) ((Proof_certif 1049 prime1049) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2111 : prime 2111. Proof. apply (Pocklington_refl (Pock_certif 2111 7 ((5, 1)::(2,1)::nil) 6) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2113 : prime 2113. Proof. apply (Pocklington_refl (Pock_certif 2113 5 ((2,6)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2129 : prime 2129. Proof. apply (Pocklington_refl (Pock_certif 2129 3 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2131 : prime 2131. Proof. apply (Pocklington_refl (Pock_certif 2131 2 ((5, 1)::(2,1)::nil) 9) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2137 : prime 2137. Proof. apply (Pocklington_refl (Pock_certif 2137 10 ((3, 1)::(2,3)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2141 : prime 2141. Proof. apply (Pocklington_refl (Pock_certif 2141 2 ((5, 1)::(2,2)::nil) 26) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2143 : prime 2143. Proof. apply (Pocklington_refl (Pock_certif 2143 3 ((3, 2)::(2,1)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2153 : prime 2153. Proof. apply (Pocklington_refl (Pock_certif 2153 3 ((269, 1)::(2,3)::nil) 1) ((Proof_certif 269 prime269) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2161 : prime 2161. Proof. apply (Pocklington_refl (Pock_certif 2161 7 ((2,4)::nil) 4) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2179 : prime 2179. Proof. apply (Pocklington_refl (Pock_certif 2179 7 ((3, 2)::(2,1)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2203 : prime 2203. Proof. apply (Pocklington_refl (Pock_certif 2203 2 ((367, 1)::(2,1)::nil) 1) ((Proof_certif 367 prime367) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2207 : prime 2207. Proof. apply (Pocklington_refl (Pock_certif 2207 5 ((1103, 1)::(2,1)::nil) 1) ((Proof_certif 1103 prime1103) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2213 : prime 2213. Proof. apply (Pocklington_refl (Pock_certif 2213 2 ((7, 1)::(2,2)::nil) 22) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2221 : prime 2221. Proof. apply (Pocklington_refl (Pock_certif 2221 2 ((3, 1)::(2,2)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2237 : prime 2237. Proof. apply (Pocklington_refl (Pock_certif 2237 2 ((13, 1)::(2,2)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2239 : prime 2239. Proof. apply (Pocklington_refl (Pock_certif 2239 3 ((373, 1)::(2,1)::nil) 1) ((Proof_certif 373 prime373) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2243 : prime 2243. Proof. apply (Pocklington_refl (Pock_certif 2243 2 ((19, 1)::(2,1)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2251 : prime 2251. Proof. apply (Pocklington_refl (Pock_certif 2251 7 ((3, 2)::(2,1)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2267 : prime 2267. Proof. apply (Pocklington_refl (Pock_certif 2267 2 ((11, 1)::(2,1)::nil) 14) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2269 : prime 2269. Proof. apply (Pocklington_refl (Pock_certif 2269 2 ((3, 1)::(2,2)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2273 : prime 2273. Proof. apply (Pocklington_refl (Pock_certif 2273 3 ((2,5)::nil) 6) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2281 : prime 2281. Proof. apply (Pocklington_refl (Pock_certif 2281 7 ((3, 1)::(2,3)::nil) 46) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2287 : prime 2287. Proof. apply (Pocklington_refl (Pock_certif 2287 19 ((3, 2)::(2,1)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2293 : prime 2293. Proof. apply (Pocklington_refl (Pock_certif 2293 2 ((3, 1)::(2,2)::nil) 21) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2297 : prime 2297. Proof. apply (Pocklington_refl (Pock_certif 2297 5 ((7, 1)::(2,3)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2309 : prime 2309. Proof. apply (Pocklington_refl (Pock_certif 2309 2 ((577, 1)::(2,2)::nil) 1) ((Proof_certif 577 prime577) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2311 : prime 2311. Proof. apply (Pocklington_refl (Pock_certif 2311 3 ((5, 1)::(2,1)::nil) 5) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2333 : prime 2333. Proof. apply (Pocklington_refl (Pock_certif 2333 2 ((11, 1)::(2,2)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2339 : prime 2339. Proof. apply (Pocklington_refl (Pock_certif 2339 2 ((7, 1)::(2,1)::nil) 26) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2341 : prime 2341. Proof. apply (Pocklington_refl (Pock_certif 2341 7 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2347 : prime 2347. Proof. apply (Pocklington_refl (Pock_certif 2347 2 ((17, 1)::(2,1)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2351 : prime 2351. Proof. apply (Pocklington_refl (Pock_certif 2351 13 ((5, 1)::(2,1)::nil) 11) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2357 : prime 2357. Proof. apply (Pocklington_refl (Pock_certif 2357 2 ((19, 1)::(2,2)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2371 : prime 2371. Proof. apply (Pocklington_refl (Pock_certif 2371 2 ((5, 1)::(2,1)::nil) 14) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2377 : prime 2377. Proof. apply (Pocklington_refl (Pock_certif 2377 5 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2381 : prime 2381. Proof. apply (Pocklington_refl (Pock_certif 2381 3 ((5, 1)::(2,2)::nil) 38) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2383 : prime 2383. Proof. apply (Pocklington_refl (Pock_certif 2383 3 ((397, 1)::(2,1)::nil) 1) ((Proof_certif 397 prime397) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2389 : prime 2389. Proof. apply (Pocklington_refl (Pock_certif 2389 2 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2393 : prime 2393. Proof. apply (Pocklington_refl (Pock_certif 2393 3 ((13, 1)::(2,3)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2399 : prime 2399. Proof. apply (Pocklington_refl (Pock_certif 2399 11 ((11, 1)::(2,1)::nil) 20) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2411 : prime 2411. Proof. apply (Pocklington_refl (Pock_certif 2411 2 ((241, 1)::(2,1)::nil) 1) ((Proof_certif 241 prime241) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2417 : prime 2417. Proof. apply (Pocklington_refl (Pock_certif 2417 3 ((2,4)::nil) 22) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2423 : prime 2423. Proof. apply (Pocklington_refl (Pock_certif 2423 5 ((7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2437 : prime 2437. Proof. apply (Pocklington_refl (Pock_certif 2437 2 ((3, 1)::(2,2)::nil) 7) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2441 : prime 2441. Proof. apply (Pocklington_refl (Pock_certif 2441 6 ((5, 1)::(2,3)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2447 : prime 2447. Proof. apply (Pocklington_refl (Pock_certif 2447 5 ((1223, 1)::(2,1)::nil) 1) ((Proof_certif 1223 prime1223) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2459 : prime 2459. Proof. apply (Pocklington_refl (Pock_certif 2459 2 ((1229, 1)::(2,1)::nil) 1) ((Proof_certif 1229 prime1229) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2467 : prime 2467. Proof. apply (Pocklington_refl (Pock_certif 2467 2 ((3, 2)::(2,1)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2473 : prime 2473. Proof. apply (Pocklington_refl (Pock_certif 2473 5 ((3, 1)::(2,3)::nil) 5) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2477 : prime 2477. Proof. apply (Pocklington_refl (Pock_certif 2477 2 ((619, 1)::(2,2)::nil) 1) ((Proof_certif 619 prime619) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2503 : prime 2503. Proof. apply (Pocklington_refl (Pock_certif 2503 3 ((3, 2)::(2,1)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2521 : prime 2521. Proof. apply (Pocklington_refl (Pock_certif 2521 17 ((3, 1)::(2,3)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2531 : prime 2531. Proof. apply (Pocklington_refl (Pock_certif 2531 2 ((5, 1)::(2,1)::nil) 8) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2539 : prime 2539. Proof. apply (Pocklington_refl (Pock_certif 2539 2 ((3, 2)::(2,1)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2543 : prime 2543. Proof. apply (Pocklington_refl (Pock_certif 2543 5 ((31, 1)::(2,1)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2549 : prime 2549. Proof. apply (Pocklington_refl (Pock_certif 2549 2 ((7, 1)::(2,2)::nil) 34) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2551 : prime 2551. Proof. apply (Pocklington_refl (Pock_certif 2551 3 ((5, 1)::(2,1)::nil) 11) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2557 : prime 2557. Proof. apply (Pocklington_refl (Pock_certif 2557 2 ((3, 1)::(2,2)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2579 : prime 2579. Proof. apply (Pocklington_refl (Pock_certif 2579 2 ((1289, 1)::(2,1)::nil) 1) ((Proof_certif 1289 prime1289) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2591 : prime 2591. Proof. apply (Pocklington_refl (Pock_certif 2591 7 ((5, 1)::(2,1)::nil) 16) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2593 : prime 2593. Proof. apply (Pocklington_refl (Pock_certif 2593 5 ((2,5)::nil) 16) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2609 : prime 2609. Proof. apply (Pocklington_refl (Pock_certif 2609 3 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2617 : prime 2617. Proof. apply (Pocklington_refl (Pock_certif 2617 5 ((3, 1)::(2,3)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2621 : prime 2621. Proof. apply (Pocklington_refl (Pock_certif 2621 2 ((5, 1)::(2,2)::nil) 9) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2633 : prime 2633. Proof. apply (Pocklington_refl (Pock_certif 2633 3 ((7, 1)::(2,3)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2647 : prime 2647. Proof. apply (Pocklington_refl (Pock_certif 2647 3 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2657 : prime 2657. Proof. apply (Pocklington_refl (Pock_certif 2657 3 ((2,5)::nil) 18) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2659 : prime 2659. Proof. apply (Pocklington_refl (Pock_certif 2659 2 ((443, 1)::(2,1)::nil) 1) ((Proof_certif 443 prime443) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2663 : prime 2663. Proof. apply (Pocklington_refl (Pock_certif 2663 5 ((11, 1)::(2,1)::nil) 32) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2671 : prime 2671. Proof. apply (Pocklington_refl (Pock_certif 2671 3 ((5, 1)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2677 : prime 2677. Proof. apply (Pocklington_refl (Pock_certif 2677 2 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2683 : prime 2683. Proof. apply (Pocklington_refl (Pock_certif 2683 2 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2687 : prime 2687. Proof. apply (Pocklington_refl (Pock_certif 2687 5 ((17, 1)::(2,1)::nil) 10) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2689 : prime 2689. Proof. apply (Pocklington_refl (Pock_certif 2689 13 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2693 : prime 2693. Proof. apply (Pocklington_refl (Pock_certif 2693 2 ((673, 1)::(2,2)::nil) 1) ((Proof_certif 673 prime673) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2699 : prime 2699. Proof. apply (Pocklington_refl (Pock_certif 2699 2 ((19, 1)::(2,1)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2707 : prime 2707. Proof. apply (Pocklington_refl (Pock_certif 2707 2 ((11, 1)::(2,1)::nil) 34) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2711 : prime 2711. Proof. apply (Pocklington_refl (Pock_certif 2711 7 ((5, 1)::(2,1)::nil) 4) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2713 : prime 2713. Proof. apply (Pocklington_refl (Pock_certif 2713 5 ((3, 1)::(2,3)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2719 : prime 2719. Proof. apply (Pocklington_refl (Pock_certif 2719 3 ((3, 2)::(2,1)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2729 : prime 2729. Proof. apply (Pocklington_refl (Pock_certif 2729 3 ((11, 1)::(2,3)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2731 : prime 2731. Proof. apply (Pocklington_refl (Pock_certif 2731 3 ((5, 1)::(2,1)::nil) 8) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2741 : prime 2741. Proof. apply (Pocklington_refl (Pock_certif 2741 2 ((5, 1)::(2,2)::nil) 16) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2749 : prime 2749. Proof. apply (Pocklington_refl (Pock_certif 2749 6 ((3, 1)::(2,2)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2753 : prime 2753. Proof. apply (Pocklington_refl (Pock_certif 2753 3 ((2,6)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2767 : prime 2767. Proof. apply (Pocklington_refl (Pock_certif 2767 3 ((461, 1)::(2,1)::nil) 1) ((Proof_certif 461 prime461) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2777 : prime 2777. Proof. apply (Pocklington_refl (Pock_certif 2777 3 ((347, 1)::(2,3)::nil) 1) ((Proof_certif 347 prime347) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2789 : prime 2789. Proof. apply (Pocklington_refl (Pock_certif 2789 2 ((17, 1)::(2,2)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2791 : prime 2791. Proof. apply (Pocklington_refl (Pock_certif 2791 3 ((3, 2)::(2,1)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2797 : prime 2797. Proof. apply (Pocklington_refl (Pock_certif 2797 2 ((3, 1)::(2,2)::nil) 14) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2801 : prime 2801. Proof. apply (Pocklington_refl (Pock_certif 2801 3 ((2,4)::nil) 13) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2803 : prime 2803. Proof. apply (Pocklington_refl (Pock_certif 2803 2 ((467, 1)::(2,1)::nil) 1) ((Proof_certif 467 prime467) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2819 : prime 2819. Proof. apply (Pocklington_refl (Pock_certif 2819 2 ((1409, 1)::(2,1)::nil) 1) ((Proof_certif 1409 prime1409) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2833 : prime 2833. Proof. apply (Pocklington_refl (Pock_certif 2833 5 ((2,4)::nil) 15) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2837 : prime 2837. Proof. apply (Pocklington_refl (Pock_certif 2837 2 ((709, 1)::(2,2)::nil) 1) ((Proof_certif 709 prime709) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2843 : prime 2843. Proof. apply (Pocklington_refl (Pock_certif 2843 2 ((7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2851 : prime 2851. Proof. apply (Pocklington_refl (Pock_certif 2851 2 ((5, 1)::(3, 1)::(2,1)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2857 : prime 2857. Proof. apply (Pocklington_refl (Pock_certif 2857 5 ((3, 1)::(2,3)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2861 : prime 2861. Proof. apply (Pocklington_refl (Pock_certif 2861 2 ((5, 1)::(2,2)::nil) 22) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2879 : prime 2879. Proof. apply (Pocklington_refl (Pock_certif 2879 7 ((1439, 1)::(2,1)::nil) 1) ((Proof_certif 1439 prime1439) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2887 : prime 2887. Proof. apply (Pocklington_refl (Pock_certif 2887 3 ((13, 1)::(2,1)::nil) 5) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2897 : prime 2897. Proof. apply (Pocklington_refl (Pock_certif 2897 3 ((2,4)::nil) 20) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2903 : prime 2903. Proof. apply (Pocklington_refl (Pock_certif 2903 5 ((1451, 1)::(2,1)::nil) 1) ((Proof_certif 1451 prime1451) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2909 : prime 2909. Proof. apply (Pocklington_refl (Pock_certif 2909 2 ((727, 1)::(2,2)::nil) 1) ((Proof_certif 727 prime727) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2917 : prime 2917. Proof. apply (Pocklington_refl (Pock_certif 2917 5 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2927 : prime 2927. Proof. apply (Pocklington_refl (Pock_certif 2927 5 ((7, 1)::(2,1)::nil) 10) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2939 : prime 2939. Proof. apply (Pocklington_refl (Pock_certif 2939 2 ((13, 1)::(2,1)::nil) 8) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2953 : prime 2953. Proof. apply (Pocklington_refl (Pock_certif 2953 13 ((3, 1)::(2,3)::nil) 26) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2957 : prime 2957. Proof. apply (Pocklington_refl (Pock_certif 2957 2 ((739, 1)::(2,2)::nil) 1) ((Proof_certif 739 prime739) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2963 : prime 2963. Proof. apply (Pocklington_refl (Pock_certif 2963 2 ((1481, 1)::(2,1)::nil) 1) ((Proof_certif 1481 prime1481) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2969 : prime 2969. Proof. apply (Pocklington_refl (Pock_certif 2969 3 ((7, 1)::(2,3)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2971 : prime 2971. Proof. apply (Pocklington_refl (Pock_certif 2971 10 ((3, 2)::(2,1)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime2999 : prime 2999. Proof. apply (Pocklington_refl (Pock_certif 2999 17 ((1499, 1)::(2,1)::nil) 1) ((Proof_certif 1499 prime1499) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3001 : prime 3001. Proof. apply (Pocklington_refl (Pock_certif 3001 13 ((3, 1)::(2,3)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3011 : prime 3011. Proof. apply (Pocklington_refl (Pock_certif 3011 2 ((7, 1)::(2,1)::nil) 17) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3019 : prime 3019. Proof. apply (Pocklington_refl (Pock_certif 3019 2 ((503, 1)::(2,1)::nil) 1) ((Proof_certif 503 prime503) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3023 : prime 3023. Proof. apply (Pocklington_refl (Pock_certif 3023 5 ((1511, 1)::(2,1)::nil) 1) ((Proof_certif 1511 prime1511) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3037 : prime 3037. Proof. apply (Pocklington_refl (Pock_certif 3037 2 ((3, 1)::(2,2)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3041 : prime 3041. Proof. apply (Pocklington_refl (Pock_certif 3041 3 ((2,5)::nil) 30) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3049 : prime 3049. Proof. apply (Pocklington_refl (Pock_certif 3049 11 ((3, 1)::(2,3)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3061 : prime 3061. Proof. apply (Pocklington_refl (Pock_certif 3061 6 ((3, 1)::(2,2)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3067 : prime 3067. Proof. apply (Pocklington_refl (Pock_certif 3067 2 ((7, 1)::(2,1)::nil) 21) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3079 : prime 3079. Proof. apply (Pocklington_refl (Pock_certif 3079 6 ((3, 2)::(2,1)::nil) 26) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3083 : prime 3083. Proof. apply (Pocklington_refl (Pock_certif 3083 2 ((23, 1)::(2,1)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3089 : prime 3089. Proof. apply (Pocklington_refl (Pock_certif 3089 3 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3109 : prime 3109. Proof. apply (Pocklington_refl (Pock_certif 3109 2 ((3, 1)::(2,2)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3119 : prime 3119. Proof. apply (Pocklington_refl (Pock_certif 3119 7 ((1559, 1)::(2,1)::nil) 1) ((Proof_certif 1559 prime1559) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3121 : prime 3121. Proof. apply (Pocklington_refl (Pock_certif 3121 7 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3137 : prime 3137. Proof. apply (Pocklington_refl (Pock_certif 3137 3 ((2,6)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3163 : prime 3163. Proof. apply (Pocklington_refl (Pock_certif 3163 2 ((17, 1)::(2,1)::nil) 24) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3167 : prime 3167. Proof. apply (Pocklington_refl (Pock_certif 3167 5 ((1583, 1)::(2,1)::nil) 1) ((Proof_certif 1583 prime1583) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3169 : prime 3169. Proof. apply (Pocklington_refl (Pock_certif 3169 7 ((2,5)::nil) 34) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3181 : prime 3181. Proof. apply (Pocklington_refl (Pock_certif 3181 7 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3187 : prime 3187. Proof. apply (Pocklington_refl (Pock_certif 3187 2 ((3, 2)::(2,1)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3191 : prime 3191. Proof. apply (Pocklington_refl (Pock_certif 3191 11 ((5, 1)::(2,1)::nil) 15) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3203 : prime 3203. Proof. apply (Pocklington_refl (Pock_certif 3203 2 ((1601, 1)::(2,1)::nil) 1) ((Proof_certif 1601 prime1601) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3209 : prime 3209. Proof. apply (Pocklington_refl (Pock_certif 3209 3 ((401, 1)::(2,3)::nil) 1) ((Proof_certif 401 prime401) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3217 : prime 3217. Proof. apply (Pocklington_refl (Pock_certif 3217 5 ((2,4)::nil) 5) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3221 : prime 3221. Proof. apply (Pocklington_refl (Pock_certif 3221 10 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3229 : prime 3229. Proof. apply (Pocklington_refl (Pock_certif 3229 6 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3251 : prime 3251. Proof. apply (Pocklington_refl (Pock_certif 3251 6 ((5, 2)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3253 : prime 3253. Proof. apply (Pocklington_refl (Pock_certif 3253 2 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3257 : prime 3257. Proof. apply (Pocklington_refl (Pock_certif 3257 3 ((11, 1)::(2,3)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3259 : prime 3259. Proof. apply (Pocklington_refl (Pock_certif 3259 3 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3271 : prime 3271. Proof. apply (Pocklington_refl (Pock_certif 3271 3 ((5, 1)::(3, 1)::(2,1)::nil) 48) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3299 : prime 3299. Proof. apply (Pocklington_refl (Pock_certif 3299 2 ((17, 1)::(2,1)::nil) 28) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3301 : prime 3301. Proof. apply (Pocklington_refl (Pock_certif 3301 2 ((3, 1)::(2,2)::nil) 5) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3307 : prime 3307. Proof. apply (Pocklington_refl (Pock_certif 3307 2 ((19, 1)::(2,1)::nil) 10) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3313 : prime 3313. Proof. apply (Pocklington_refl (Pock_certif 3313 5 ((2,4)::nil) 13) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3319 : prime 3319. Proof. apply (Pocklington_refl (Pock_certif 3319 3 ((7, 1)::(2,1)::nil) 10) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3323 : prime 3323. Proof. apply (Pocklington_refl (Pock_certif 3323 2 ((11, 1)::(2,1)::nil) 18) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3329 : prime 3329. Proof. apply (Pocklington_refl (Pock_certif 3329 3 ((2,8)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3331 : prime 3331. Proof. apply (Pocklington_refl (Pock_certif 3331 3 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3343 : prime 3343. Proof. apply (Pocklington_refl (Pock_certif 3343 3 ((557, 1)::(2,1)::nil) 1) ((Proof_certif 557 prime557) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3347 : prime 3347. Proof. apply (Pocklington_refl (Pock_certif 3347 2 ((7, 1)::(2,1)::nil) 12) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3359 : prime 3359. Proof. apply (Pocklington_refl (Pock_certif 3359 11 ((23, 1)::(2,1)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3361 : prime 3361. Proof. apply (Pocklington_refl (Pock_certif 3361 11 ((2,5)::nil) 40) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3371 : prime 3371. Proof. apply (Pocklington_refl (Pock_certif 3371 2 ((5, 1)::(2,1)::nil) 12) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3373 : prime 3373. Proof. apply (Pocklington_refl (Pock_certif 3373 5 ((3, 1)::(2,2)::nil) 14) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3389 : prime 3389. Proof. apply (Pocklington_refl (Pock_certif 3389 3 ((7, 1)::(2,2)::nil) 8) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3391 : prime 3391. Proof. apply (Pocklington_refl (Pock_certif 3391 3 ((5, 1)::(2,1)::nil) 15) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3407 : prime 3407. Proof. apply (Pocklington_refl (Pock_certif 3407 5 ((13, 1)::(2,1)::nil) 26) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3413 : prime 3413. Proof. apply (Pocklington_refl (Pock_certif 3413 2 ((853, 1)::(2,2)::nil) 1) ((Proof_certif 853 prime853) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3433 : prime 3433. Proof. apply (Pocklington_refl (Pock_certif 3433 5 ((3, 1)::(2,3)::nil) 46) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3449 : prime 3449. Proof. apply (Pocklington_refl (Pock_certif 3449 3 ((431, 1)::(2,3)::nil) 1) ((Proof_certif 431 prime431) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3457 : prime 3457. Proof. apply (Pocklington_refl (Pock_certif 3457 5 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3461 : prime 3461. Proof. apply (Pocklington_refl (Pock_certif 3461 2 ((5, 1)::(2,2)::nil) 11) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3463 : prime 3463. Proof. apply (Pocklington_refl (Pock_certif 3463 3 ((577, 1)::(2,1)::nil) 1) ((Proof_certif 577 prime577) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3467 : prime 3467. Proof. apply (Pocklington_refl (Pock_certif 3467 2 ((1733, 1)::(2,1)::nil) 1) ((Proof_certif 1733 prime1733) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3469 : prime 3469. Proof. apply (Pocklington_refl (Pock_certif 3469 2 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3491 : prime 3491. Proof. apply (Pocklington_refl (Pock_certif 3491 2 ((349, 1)::(2,1)::nil) 1) ((Proof_certif 349 prime349) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3499 : prime 3499. Proof. apply (Pocklington_refl (Pock_certif 3499 2 ((11, 1)::(2,1)::nil) 26) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3511 : prime 3511. Proof. apply (Pocklington_refl (Pock_certif 3511 3 ((3, 2)::(2,1)::nil) 13) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3517 : prime 3517. Proof. apply (Pocklington_refl (Pock_certif 3517 2 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3527 : prime 3527. Proof. apply (Pocklington_refl (Pock_certif 3527 5 ((41, 1)::(2,1)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3529 : prime 3529. Proof. apply (Pocklington_refl (Pock_certif 3529 17 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3533 : prime 3533. Proof. apply (Pocklington_refl (Pock_certif 3533 2 ((883, 1)::(2,2)::nil) 1) ((Proof_certif 883 prime883) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3539 : prime 3539. Proof. apply (Pocklington_refl (Pock_certif 3539 2 ((29, 1)::(2,1)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3541 : prime 3541. Proof. apply (Pocklington_refl (Pock_certif 3541 6 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3547 : prime 3547. Proof. apply (Pocklington_refl (Pock_certif 3547 2 ((3, 2)::(2,1)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3557 : prime 3557. Proof. apply (Pocklington_refl (Pock_certif 3557 2 ((7, 1)::(2,2)::nil) 14) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3559 : prime 3559. Proof. apply (Pocklington_refl (Pock_certif 3559 3 ((593, 1)::(2,1)::nil) 1) ((Proof_certif 593 prime593) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3571 : prime 3571. Proof. apply (Pocklington_refl (Pock_certif 3571 2 ((5, 1)::(2,1)::nil) 12) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3581 : prime 3581. Proof. apply (Pocklington_refl (Pock_certif 3581 2 ((5, 1)::(2,2)::nil) 18) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3583 : prime 3583. Proof. apply (Pocklington_refl (Pock_certif 3583 3 ((3, 2)::(2,1)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3593 : prime 3593. Proof. apply (Pocklington_refl (Pock_certif 3593 3 ((449, 1)::(2,3)::nil) 1) ((Proof_certif 449 prime449) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3607 : prime 3607. Proof. apply (Pocklington_refl (Pock_certif 3607 3 ((601, 1)::(2,1)::nil) 1) ((Proof_certif 601 prime601) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3613 : prime 3613. Proof. apply (Pocklington_refl (Pock_certif 3613 2 ((3, 1)::(2,2)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3617 : prime 3617. Proof. apply (Pocklington_refl (Pock_certif 3617 3 ((2,5)::nil) 48) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3623 : prime 3623. Proof. apply (Pocklington_refl (Pock_certif 3623 5 ((1811, 1)::(2,1)::nil) 1) ((Proof_certif 1811 prime1811) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3631 : prime 3631. Proof. apply (Pocklington_refl (Pock_certif 3631 11 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3637 : prime 3637. Proof. apply (Pocklington_refl (Pock_certif 3637 2 ((3, 1)::(2,2)::nil) 11) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3643 : prime 3643. Proof. apply (Pocklington_refl (Pock_certif 3643 2 ((607, 1)::(2,1)::nil) 1) ((Proof_certif 607 prime607) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3659 : prime 3659. Proof. apply (Pocklington_refl (Pock_certif 3659 2 ((31, 1)::(2,1)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3671 : prime 3671. Proof. apply (Pocklington_refl (Pock_certif 3671 13 ((367, 1)::(2,1)::nil) 1) ((Proof_certif 367 prime367) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3673 : prime 3673. Proof. apply (Pocklington_refl (Pock_certif 3673 5 ((3, 1)::(2,3)::nil) 7) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3677 : prime 3677. Proof. apply (Pocklington_refl (Pock_certif 3677 2 ((919, 1)::(2,2)::nil) 1) ((Proof_certif 919 prime919) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3691 : prime 3691. Proof. apply (Pocklington_refl (Pock_certif 3691 2 ((3, 2)::(2,1)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3697 : prime 3697. Proof. apply (Pocklington_refl (Pock_certif 3697 5 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3701 : prime 3701. Proof. apply (Pocklington_refl (Pock_certif 3701 2 ((5, 1)::(2,2)::nil) 24) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3709 : prime 3709. Proof. apply (Pocklington_refl (Pock_certif 3709 2 ((3, 1)::(2,2)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3719 : prime 3719. Proof. apply (Pocklington_refl (Pock_certif 3719 7 ((11, 1)::(2,1)::nil) 36) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3727 : prime 3727. Proof. apply (Pocklington_refl (Pock_certif 3727 3 ((3, 2)::(2,1)::nil) 26) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3733 : prime 3733. Proof. apply (Pocklington_refl (Pock_certif 3733 2 ((3, 1)::(2,2)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3739 : prime 3739. Proof. apply (Pocklington_refl (Pock_certif 3739 3 ((7, 1)::(2,1)::nil) 12) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3761 : prime 3761. Proof. apply (Pocklington_refl (Pock_certif 3761 3 ((2,4)::nil) 8) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3767 : prime 3767. Proof. apply (Pocklington_refl (Pock_certif 3767 5 ((7, 1)::(2,1)::nil) 14) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3769 : prime 3769. Proof. apply (Pocklington_refl (Pock_certif 3769 7 ((3, 1)::(2,3)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3779 : prime 3779. Proof. apply (Pocklington_refl (Pock_certif 3779 2 ((1889, 1)::(2,1)::nil) 1) ((Proof_certif 1889 prime1889) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3793 : prime 3793. Proof. apply (Pocklington_refl (Pock_certif 3793 5 ((2,4)::nil) 10) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3797 : prime 3797. Proof. apply (Pocklington_refl (Pock_certif 3797 2 ((13, 1)::(2,2)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3803 : prime 3803. Proof. apply (Pocklington_refl (Pock_certif 3803 2 ((1901, 1)::(2,1)::nil) 1) ((Proof_certif 1901 prime1901) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3821 : prime 3821. Proof. apply (Pocklington_refl (Pock_certif 3821 3 ((5, 1)::(2,2)::nil) 30) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3823 : prime 3823. Proof. apply (Pocklington_refl (Pock_certif 3823 3 ((7, 1)::(2,1)::nil) 19) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3833 : prime 3833. Proof. apply (Pocklington_refl (Pock_certif 3833 3 ((479, 1)::(2,3)::nil) 1) ((Proof_certif 479 prime479) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3847 : prime 3847. Proof. apply (Pocklington_refl (Pock_certif 3847 3 ((641, 1)::(2,1)::nil) 1) ((Proof_certif 641 prime641) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3851 : prime 3851. Proof. apply (Pocklington_refl (Pock_certif 3851 2 ((5, 2)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3853 : prime 3853. Proof. apply (Pocklington_refl (Pock_certif 3853 2 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3863 : prime 3863. Proof. apply (Pocklington_refl (Pock_certif 3863 5 ((1931, 1)::(2,1)::nil) 1) ((Proof_certif 1931 prime1931) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3877 : prime 3877. Proof. apply (Pocklington_refl (Pock_certif 3877 2 ((3, 1)::(2,2)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3881 : prime 3881. Proof. apply (Pocklington_refl (Pock_certif 3881 13 ((5, 1)::(2,3)::nil) 16) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3889 : prime 3889. Proof. apply (Pocklington_refl (Pock_certif 3889 11 ((2,4)::nil) 17) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3907 : prime 3907. Proof. apply (Pocklington_refl (Pock_certif 3907 2 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3911 : prime 3911. Proof. apply (Pocklington_refl (Pock_certif 3911 13 ((17, 1)::(2,1)::nil) 46) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3917 : prime 3917. Proof. apply (Pocklington_refl (Pock_certif 3917 2 ((11, 1)::(2,2)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3919 : prime 3919. Proof. apply (Pocklington_refl (Pock_certif 3919 3 ((653, 1)::(2,1)::nil) 1) ((Proof_certif 653 prime653) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3923 : prime 3923. Proof. apply (Pocklington_refl (Pock_certif 3923 2 ((37, 1)::(2,1)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3929 : prime 3929. Proof. apply (Pocklington_refl (Pock_certif 3929 3 ((491, 1)::(2,3)::nil) 1) ((Proof_certif 491 prime491) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3931 : prime 3931. Proof. apply (Pocklington_refl (Pock_certif 3931 2 ((5, 1)::(3, 1)::(2,1)::nil) 10) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3943 : prime 3943. Proof. apply (Pocklington_refl (Pock_certif 3943 3 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3947 : prime 3947. Proof. apply (Pocklington_refl (Pock_certif 3947 2 ((1973, 1)::(2,1)::nil) 1) ((Proof_certif 1973 prime1973) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3967 : prime 3967. Proof. apply (Pocklington_refl (Pock_certif 3967 3 ((661, 1)::(2,1)::nil) 1) ((Proof_certif 661 prime661) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime3989 : prime 3989. Proof. apply (Pocklington_refl (Pock_certif 3989 2 ((997, 1)::(2,2)::nil) 1) ((Proof_certif 997 prime997) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4001 : prime 4001. Proof. apply (Pocklington_refl (Pock_certif 4001 3 ((2,5)::nil) 60) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4003 : prime 4003. Proof. apply (Pocklington_refl (Pock_certif 4003 2 ((23, 1)::(2,1)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4007 : prime 4007. Proof. apply (Pocklington_refl (Pock_certif 4007 5 ((2003, 1)::(2,1)::nil) 1) ((Proof_certif 2003 prime2003) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4013 : prime 4013. Proof. apply (Pocklington_refl (Pock_certif 4013 2 ((17, 1)::(2,2)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4019 : prime 4019. Proof. apply (Pocklington_refl (Pock_certif 4019 2 ((7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4021 : prime 4021. Proof. apply (Pocklington_refl (Pock_certif 4021 2 ((3, 1)::(2,2)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4027 : prime 4027. Proof. apply (Pocklington_refl (Pock_certif 4027 2 ((11, 1)::(2,1)::nil) 4) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4049 : prime 4049. Proof. apply (Pocklington_refl (Pock_certif 4049 3 ((2,4)::nil) 28) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4051 : prime 4051. Proof. apply (Pocklington_refl (Pock_certif 4051 3 ((3, 2)::(2,1)::nil) 5) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4057 : prime 4057. Proof. apply (Pocklington_refl (Pock_certif 4057 5 ((3, 1)::(2,3)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4073 : prime 4073. Proof. apply (Pocklington_refl (Pock_certif 4073 3 ((509, 1)::(2,3)::nil) 1) ((Proof_certif 509 prime509) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4079 : prime 4079. Proof. apply (Pocklington_refl (Pock_certif 4079 11 ((2039, 1)::(2,1)::nil) 1) ((Proof_certif 2039 prime2039) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4091 : prime 4091. Proof. apply (Pocklington_refl (Pock_certif 4091 2 ((409, 1)::(2,1)::nil) 1) ((Proof_certif 409 prime409) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4093 : prime 4093. Proof. apply (Pocklington_refl (Pock_certif 4093 2 ((3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4099 : prime 4099. Proof. apply (Pocklington_refl (Pock_certif 4099 2 ((683, 1)::(2,1)::nil) 1) ((Proof_certif 683 prime683) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4111 : prime 4111. Proof. apply (Pocklington_refl (Pock_certif 4111 12 ((5, 1)::(3, 1)::(2,1)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4127 : prime 4127. Proof. apply (Pocklington_refl (Pock_certif 4127 5 ((2063, 1)::(2,1)::nil) 1) ((Proof_certif 2063 prime2063) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4129 : prime 4129. Proof. apply (Pocklington_refl (Pock_certif 4129 7 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4133 : prime 4133. Proof. apply (Pocklington_refl (Pock_certif 4133 2 ((1033, 1)::(2,2)::nil) 1) ((Proof_certif 1033 prime1033) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4139 : prime 4139. Proof. apply (Pocklington_refl (Pock_certif 4139 2 ((2069, 1)::(2,1)::nil) 1) ((Proof_certif 2069 prime2069) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4153 : prime 4153. Proof. apply (Pocklington_refl (Pock_certif 4153 5 ((3, 1)::(2,3)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4157 : prime 4157. Proof. apply (Pocklington_refl (Pock_certif 4157 2 ((1039, 1)::(2,2)::nil) 1) ((Proof_certif 1039 prime1039) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4159 : prime 4159. Proof. apply (Pocklington_refl (Pock_certif 4159 3 ((3, 2)::(2,1)::nil) 13) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4177 : prime 4177. Proof. apply (Pocklington_refl (Pock_certif 4177 5 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4201 : prime 4201. Proof. apply (Pocklington_refl (Pock_certif 4201 11 ((3, 1)::(2,3)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4211 : prime 4211. Proof. apply (Pocklington_refl (Pock_certif 4211 2 ((421, 1)::(2,1)::nil) 1) ((Proof_certif 421 prime421) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4217 : prime 4217. Proof. apply (Pocklington_refl (Pock_certif 4217 3 ((17, 1)::(2,3)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4219 : prime 4219. Proof. apply (Pocklington_refl (Pock_certif 4219 2 ((19, 1)::(2,1)::nil) 34) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4229 : prime 4229. Proof. apply (Pocklington_refl (Pock_certif 4229 2 ((7, 1)::(2,2)::nil) 38) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4231 : prime 4231. Proof. apply (Pocklington_refl (Pock_certif 4231 3 ((3, 2)::(2,1)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4241 : prime 4241. Proof. apply (Pocklington_refl (Pock_certif 4241 3 ((2,4)::nil) 4) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4243 : prime 4243. Proof. apply (Pocklington_refl (Pock_certif 4243 2 ((7, 1)::(2,1)::nil) 21) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4253 : prime 4253. Proof. apply (Pocklington_refl (Pock_certif 4253 2 ((1063, 1)::(2,2)::nil) 1) ((Proof_certif 1063 prime1063) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4259 : prime 4259. Proof. apply (Pocklington_refl (Pock_certif 4259 2 ((2129, 1)::(2,1)::nil) 1) ((Proof_certif 2129 prime2129) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4261 : prime 4261. Proof. apply (Pocklington_refl (Pock_certif 4261 2 ((3, 1)::(2,2)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4271 : prime 4271. Proof. apply (Pocklington_refl (Pock_certif 4271 7 ((7, 1)::(2,1)::nil) 23) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4273 : prime 4273. Proof. apply (Pocklington_refl (Pock_certif 4273 5 ((2,4)::nil) 7) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4283 : prime 4283. Proof. apply (Pocklington_refl (Pock_certif 4283 2 ((2141, 1)::(2,1)::nil) 1) ((Proof_certif 2141 prime2141) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4289 : prime 4289. Proof. apply (Pocklington_refl (Pock_certif 4289 3 ((2,6)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4297 : prime 4297. Proof. apply (Pocklington_refl (Pock_certif 4297 5 ((3, 1)::(2,3)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4327 : prime 4327. Proof. apply (Pocklington_refl (Pock_certif 4327 3 ((7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4337 : prime 4337. Proof. apply (Pocklington_refl (Pock_certif 4337 3 ((2,4)::nil) 12) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4339 : prime 4339. Proof. apply (Pocklington_refl (Pock_certif 4339 10 ((3, 2)::(2,1)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4349 : prime 4349. Proof. apply (Pocklington_refl (Pock_certif 4349 2 ((1087, 1)::(2,2)::nil) 1) ((Proof_certif 1087 prime1087) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4357 : prime 4357. Proof. apply (Pocklington_refl (Pock_certif 4357 2 ((3, 2)::(2,2)::nil) 48) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4363 : prime 4363. Proof. apply (Pocklington_refl (Pock_certif 4363 2 ((727, 1)::(2,1)::nil) 1) ((Proof_certif 727 prime727) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4373 : prime 4373. Proof. apply (Pocklington_refl (Pock_certif 4373 2 ((1093, 1)::(2,2)::nil) 1) ((Proof_certif 1093 prime1093) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4391 : prime 4391. Proof. apply (Pocklington_refl (Pock_certif 4391 7 ((439, 1)::(2,1)::nil) 1) ((Proof_certif 439 prime439) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4397 : prime 4397. Proof. apply (Pocklington_refl (Pock_certif 4397 2 ((7, 1)::(2,2)::nil) 44) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4409 : prime 4409. Proof. apply (Pocklington_refl (Pock_certif 4409 3 ((19, 1)::(2,3)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4421 : prime 4421. Proof. apply (Pocklington_refl (Pock_certif 4421 2 ((5, 1)::(2,2)::nil) 20) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4423 : prime 4423. Proof. apply (Pocklington_refl (Pock_certif 4423 3 ((11, 1)::(2,1)::nil) 24) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4441 : prime 4441. Proof. apply (Pocklington_refl (Pock_certif 4441 7 ((3, 1)::(2,3)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4447 : prime 4447. Proof. apply (Pocklington_refl (Pock_certif 4447 3 ((3, 2)::(2,1)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4451 : prime 4451. Proof. apply (Pocklington_refl (Pock_certif 4451 2 ((5, 2)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4457 : prime 4457. Proof. apply (Pocklington_refl (Pock_certif 4457 3 ((557, 1)::(2,3)::nil) 1) ((Proof_certif 557 prime557) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4463 : prime 4463. Proof. apply (Pocklington_refl (Pock_certif 4463 5 ((23, 1)::(2,1)::nil) 4) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4481 : prime 4481. Proof. apply (Pocklington_refl (Pock_certif 4481 3 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4483 : prime 4483. Proof. apply (Pocklington_refl (Pock_certif 4483 2 ((3, 2)::(2,1)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4493 : prime 4493. Proof. apply (Pocklington_refl (Pock_certif 4493 2 ((1123, 1)::(2,2)::nil) 1) ((Proof_certif 1123 prime1123) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4507 : prime 4507. Proof. apply (Pocklington_refl (Pock_certif 4507 2 ((751, 1)::(2,1)::nil) 1) ((Proof_certif 751 prime751) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4513 : prime 4513. Proof. apply (Pocklington_refl (Pock_certif 4513 5 ((2,5)::nil) 12) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4517 : prime 4517. Proof. apply (Pocklington_refl (Pock_certif 4517 2 ((1129, 1)::(2,2)::nil) 1) ((Proof_certif 1129 prime1129) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4519 : prime 4519. Proof. apply (Pocklington_refl (Pock_certif 4519 3 ((3, 2)::(2,1)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4523 : prime 4523. Proof. apply (Pocklington_refl (Pock_certif 4523 2 ((7, 1)::(2,1)::nil) 11) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4547 : prime 4547. Proof. apply (Pocklington_refl (Pock_certif 4547 2 ((2273, 1)::(2,1)::nil) 1) ((Proof_certif 2273 prime2273) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4549 : prime 4549. Proof. apply (Pocklington_refl (Pock_certif 4549 6 ((3, 1)::(2,2)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4561 : prime 4561. Proof. apply (Pocklington_refl (Pock_certif 4561 11 ((2,4)::nil) 27) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4567 : prime 4567. Proof. apply (Pocklington_refl (Pock_certif 4567 3 ((761, 1)::(2,1)::nil) 1) ((Proof_certif 761 prime761) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4583 : prime 4583. Proof. apply (Pocklington_refl (Pock_certif 4583 5 ((29, 1)::(2,1)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4591 : prime 4591. Proof. apply (Pocklington_refl (Pock_certif 4591 3 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4597 : prime 4597. Proof. apply (Pocklington_refl (Pock_certif 4597 5 ((3, 1)::(2,2)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4603 : prime 4603. Proof. apply (Pocklington_refl (Pock_certif 4603 2 ((13, 1)::(2,1)::nil) 20) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4621 : prime 4621. Proof. apply (Pocklington_refl (Pock_certif 4621 2 ((5, 1)::(2,2)::nil) 30) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4637 : prime 4637. Proof. apply (Pocklington_refl (Pock_certif 4637 2 ((19, 1)::(2,2)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4639 : prime 4639. Proof. apply (Pocklington_refl (Pock_certif 4639 3 ((773, 1)::(2,1)::nil) 1) ((Proof_certif 773 prime773) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4643 : prime 4643. Proof. apply (Pocklington_refl (Pock_certif 4643 5 ((11, 1)::(2,1)::nil) 34) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4649 : prime 4649. Proof. apply (Pocklington_refl (Pock_certif 4649 3 ((7, 1)::(2,3)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4651 : prime 4651. Proof. apply (Pocklington_refl (Pock_certif 4651 3 ((5, 1)::(3, 1)::(2,1)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4657 : prime 4657. Proof. apply (Pocklington_refl (Pock_certif 4657 5 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4663 : prime 4663. Proof. apply (Pocklington_refl (Pock_certif 4663 3 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4673 : prime 4673. Proof. apply (Pocklington_refl (Pock_certif 4673 3 ((2,6)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4679 : prime 4679. Proof. apply (Pocklington_refl (Pock_certif 4679 11 ((2339, 1)::(2,1)::nil) 1) ((Proof_certif 2339 prime2339) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4691 : prime 4691. Proof. apply (Pocklington_refl (Pock_certif 4691 2 ((7, 1)::(2,1)::nil) 25) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4703 : prime 4703. Proof. apply (Pocklington_refl (Pock_certif 4703 5 ((2351, 1)::(2,1)::nil) 1) ((Proof_certif 2351 prime2351) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4721 : prime 4721. Proof. apply (Pocklington_refl (Pock_certif 4721 3 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4723 : prime 4723. Proof. apply (Pocklington_refl (Pock_certif 4723 2 ((787, 1)::(2,1)::nil) 1) ((Proof_certif 787 prime787) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4729 : prime 4729. Proof. apply (Pocklington_refl (Pock_certif 4729 17 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4733 : prime 4733. Proof. apply (Pocklington_refl (Pock_certif 4733 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4751 : prime 4751. Proof. apply (Pocklington_refl (Pock_certif 4751 19 ((5, 2)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4759 : prime 4759. Proof. apply (Pocklington_refl (Pock_certif 4759 3 ((13, 1)::(2,1)::nil) 26) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4783 : prime 4783. Proof. apply (Pocklington_refl (Pock_certif 4783 3 ((797, 1)::(2,1)::nil) 1) ((Proof_certif 797 prime797) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4787 : prime 4787. Proof. apply (Pocklington_refl (Pock_certif 4787 2 ((2393, 1)::(2,1)::nil) 1) ((Proof_certif 2393 prime2393) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4789 : prime 4789. Proof. apply (Pocklington_refl (Pock_certif 4789 2 ((3, 1)::(2,2)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4793 : prime 4793. Proof. apply (Pocklington_refl (Pock_certif 4793 3 ((599, 1)::(2,3)::nil) 1) ((Proof_certif 599 prime599) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4799 : prime 4799. Proof. apply (Pocklington_refl (Pock_certif 4799 7 ((2399, 1)::(2,1)::nil) 1) ((Proof_certif 2399 prime2399) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4801 : prime 4801. Proof. apply (Pocklington_refl (Pock_certif 4801 7 ((2,6)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4813 : prime 4813. Proof. apply (Pocklington_refl (Pock_certif 4813 2 ((3, 1)::(2,2)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4817 : prime 4817. Proof. apply (Pocklington_refl (Pock_certif 4817 3 ((2,4)::nil) 9) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4831 : prime 4831. Proof. apply (Pocklington_refl (Pock_certif 4831 3 ((5, 1)::(3, 1)::(2,1)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4861 : prime 4861. Proof. apply (Pocklington_refl (Pock_certif 4861 2 ((3, 1)::(2,2)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4871 : prime 4871. Proof. apply (Pocklington_refl (Pock_certif 4871 11 ((487, 1)::(2,1)::nil) 1) ((Proof_certif 487 prime487) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4877 : prime 4877. Proof. apply (Pocklington_refl (Pock_certif 4877 2 ((23, 1)::(2,2)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4889 : prime 4889. Proof. apply (Pocklington_refl (Pock_certif 4889 3 ((13, 1)::(2,3)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4903 : prime 4903. Proof. apply (Pocklington_refl (Pock_certif 4903 3 ((19, 1)::(2,1)::nil) 52) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4909 : prime 4909. Proof. apply (Pocklington_refl (Pock_certif 4909 2 ((409, 1)::(2,2)::nil) 1) ((Proof_certif 409 prime409) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4919 : prime 4919. Proof. apply (Pocklington_refl (Pock_certif 4919 13 ((2459, 1)::(2,1)::nil) 1) ((Proof_certif 2459 prime2459) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4931 : prime 4931. Proof. apply (Pocklington_refl (Pock_certif 4931 2 ((17, 1)::(2,1)::nil) 8) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4933 : prime 4933. Proof. apply (Pocklington_refl (Pock_certif 4933 2 ((3, 2)::(2,2)::nil) 64) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4937 : prime 4937. Proof. apply (Pocklington_refl (Pock_certif 4937 3 ((617, 1)::(2,3)::nil) 1) ((Proof_certif 617 prime617) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4943 : prime 4943. Proof. apply (Pocklington_refl (Pock_certif 4943 7 ((7, 1)::(2,1)::nil) 13) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4951 : prime 4951. Proof. apply (Pocklington_refl (Pock_certif 4951 6 ((3, 2)::(2,1)::nil) 21) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4957 : prime 4957. Proof. apply (Pocklington_refl (Pock_certif 4957 2 ((7, 1)::(2,2)::nil) 7) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4967 : prime 4967. Proof. apply (Pocklington_refl (Pock_certif 4967 5 ((13, 1)::(2,1)::nil) 34) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4969 : prime 4969. Proof. apply (Pocklington_refl (Pock_certif 4969 11 ((3, 1)::(2,3)::nil) 13) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4973 : prime 4973. Proof. apply (Pocklington_refl (Pock_certif 4973 2 ((11, 1)::(2,2)::nil) 24) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4987 : prime 4987. Proof. apply (Pocklington_refl (Pock_certif 4987 2 ((3, 2)::(2,1)::nil) 23) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4993 : prime 4993. Proof. apply (Pocklington_refl (Pock_certif 4993 5 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime4999 : prime 4999. Proof. apply (Pocklington_refl (Pock_certif 4999 3 ((7, 1)::(2,1)::nil) 18) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5003 : prime 5003. Proof. apply (Pocklington_refl (Pock_certif 5003 2 ((41, 1)::(2,1)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5009 : prime 5009. Proof. apply (Pocklington_refl (Pock_certif 5009 3 ((2,4)::nil) 23) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5011 : prime 5011. Proof. apply (Pocklington_refl (Pock_certif 5011 2 ((5, 1)::(3, 1)::(2,1)::nil) 46) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5021 : prime 5021. Proof. apply (Pocklington_refl (Pock_certif 5021 3 ((5, 1)::(2,2)::nil) 8) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5023 : prime 5023. Proof. apply (Pocklington_refl (Pock_certif 5023 3 ((3, 2)::(2,1)::nil) 25) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5039 : prime 5039. Proof. apply (Pocklington_refl (Pock_certif 5039 11 ((11, 1)::(2,1)::nil) 6) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5051 : prime 5051. Proof. apply (Pocklington_refl (Pock_certif 5051 2 ((5, 2)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5059 : prime 5059. Proof. apply (Pocklington_refl (Pock_certif 5059 2 ((3, 2)::(2,1)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5077 : prime 5077. Proof. apply (Pocklington_refl (Pock_certif 5077 2 ((3, 1)::(2,2)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5081 : prime 5081. Proof. apply (Pocklington_refl (Pock_certif 5081 3 ((5, 1)::(2,3)::nil) 46) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5087 : prime 5087. Proof. apply (Pocklington_refl (Pock_certif 5087 5 ((2543, 1)::(2,1)::nil) 1) ((Proof_certif 2543 prime2543) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5099 : prime 5099. Proof. apply (Pocklington_refl (Pock_certif 5099 2 ((2549, 1)::(2,1)::nil) 1) ((Proof_certif 2549 prime2549) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5101 : prime 5101. Proof. apply (Pocklington_refl (Pock_certif 5101 6 ((3, 1)::(2,2)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5107 : prime 5107. Proof. apply (Pocklington_refl (Pock_certif 5107 2 ((23, 1)::(2,1)::nil) 18) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5113 : prime 5113. Proof. apply (Pocklington_refl (Pock_certif 5113 19 ((3, 1)::(2,3)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5119 : prime 5119. Proof. apply (Pocklington_refl (Pock_certif 5119 3 ((853, 1)::(2,1)::nil) 1) ((Proof_certif 853 prime853) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5147 : prime 5147. Proof. apply (Pocklington_refl (Pock_certif 5147 2 ((31, 1)::(2,1)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5153 : prime 5153. Proof. apply (Pocklington_refl (Pock_certif 5153 3 ((2,5)::nil) 32) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5167 : prime 5167. Proof. apply (Pocklington_refl (Pock_certif 5167 3 ((3, 2)::(2,1)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5171 : prime 5171. Proof. apply (Pocklington_refl (Pock_certif 5171 2 ((11, 1)::(2,1)::nil) 13) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5179 : prime 5179. Proof. apply (Pocklington_refl (Pock_certif 5179 2 ((863, 1)::(2,1)::nil) 1) ((Proof_certif 863 prime863) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5189 : prime 5189. Proof. apply (Pocklington_refl (Pock_certif 5189 2 ((1297, 1)::(2,2)::nil) 1) ((Proof_certif 1297 prime1297) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5197 : prime 5197. Proof. apply (Pocklington_refl (Pock_certif 5197 2 ((433, 1)::(2,2)::nil) 1) ((Proof_certif 433 prime433) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5209 : prime 5209. Proof. apply (Pocklington_refl (Pock_certif 5209 11 ((3, 1)::(2,3)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5227 : prime 5227. Proof. apply (Pocklington_refl (Pock_certif 5227 2 ((13, 1)::(2,1)::nil) 44) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5231 : prime 5231. Proof. apply (Pocklington_refl (Pock_certif 5231 7 ((523, 1)::(2,1)::nil) 1) ((Proof_certif 523 prime523) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5233 : prime 5233. Proof. apply (Pocklington_refl (Pock_certif 5233 5 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5237 : prime 5237. Proof. apply (Pocklington_refl (Pock_certif 5237 3 ((7, 1)::(2,2)::nil) 18) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5261 : prime 5261. Proof. apply (Pocklington_refl (Pock_certif 5261 2 ((5, 1)::(2,2)::nil) 21) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5273 : prime 5273. Proof. apply (Pocklington_refl (Pock_certif 5273 3 ((659, 1)::(2,3)::nil) 1) ((Proof_certif 659 prime659) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5279 : prime 5279. Proof. apply (Pocklington_refl (Pock_certif 5279 7 ((7, 1)::(2,1)::nil) 8) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5281 : prime 5281. Proof. apply (Pocklington_refl (Pock_certif 5281 7 ((2,5)::nil) 36) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5297 : prime 5297. Proof. apply (Pocklington_refl (Pock_certif 5297 3 ((2,4)::nil) 6) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5303 : prime 5303. Proof. apply (Pocklington_refl (Pock_certif 5303 5 ((11, 1)::(2,1)::nil) 20) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5309 : prime 5309. Proof. apply (Pocklington_refl (Pock_certif 5309 2 ((1327, 1)::(2,2)::nil) 1) ((Proof_certif 1327 prime1327) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5323 : prime 5323. Proof. apply (Pocklington_refl (Pock_certif 5323 2 ((887, 1)::(2,1)::nil) 1) ((Proof_certif 887 prime887) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5333 : prime 5333. Proof. apply (Pocklington_refl (Pock_certif 5333 2 ((31, 1)::(2,2)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5347 : prime 5347. Proof. apply (Pocklington_refl (Pock_certif 5347 3 ((3, 2)::(2,1)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5351 : prime 5351. Proof. apply (Pocklington_refl (Pock_certif 5351 11 ((5, 2)::(2,1)::nil) 6) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5381 : prime 5381. Proof. apply (Pocklington_refl (Pock_certif 5381 3 ((5, 1)::(2,2)::nil) 28) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5387 : prime 5387. Proof. apply (Pocklington_refl (Pock_certif 5387 2 ((2693, 1)::(2,1)::nil) 1) ((Proof_certif 2693 prime2693) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5393 : prime 5393. Proof. apply (Pocklington_refl (Pock_certif 5393 3 ((2,4)::nil) 14) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5399 : prime 5399. Proof. apply (Pocklington_refl (Pock_certif 5399 7 ((2699, 1)::(2,1)::nil) 1) ((Proof_certif 2699 prime2699) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5407 : prime 5407. Proof. apply (Pocklington_refl (Pock_certif 5407 3 ((17, 1)::(2,1)::nil) 22) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5413 : prime 5413. Proof. apply (Pocklington_refl (Pock_certif 5413 5 ((3, 1)::(2,2)::nil) 14) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5417 : prime 5417. Proof. apply (Pocklington_refl (Pock_certif 5417 3 ((677, 1)::(2,3)::nil) 1) ((Proof_certif 677 prime677) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5419 : prime 5419. Proof. apply (Pocklington_refl (Pock_certif 5419 3 ((3, 2)::(2,1)::nil) 10) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5431 : prime 5431. Proof. apply (Pocklington_refl (Pock_certif 5431 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5437 : prime 5437. Proof. apply (Pocklington_refl (Pock_certif 5437 5 ((3, 1)::(2,2)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5441 : prime 5441. Proof. apply (Pocklington_refl (Pock_certif 5441 3 ((2,6)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5443 : prime 5443. Proof. apply (Pocklington_refl (Pock_certif 5443 2 ((907, 1)::(2,1)::nil) 1) ((Proof_certif 907 prime907) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5449 : prime 5449. Proof. apply (Pocklington_refl (Pock_certif 5449 7 ((3, 1)::(2,3)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5471 : prime 5471. Proof. apply (Pocklington_refl (Pock_certif 5471 7 ((547, 1)::(2,1)::nil) 1) ((Proof_certif 547 prime547) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5477 : prime 5477. Proof. apply (Pocklington_refl (Pock_certif 5477 2 ((37, 1)::(2,2)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5479 : prime 5479. Proof. apply (Pocklington_refl (Pock_certif 5479 3 ((11, 1)::(2,1)::nil) 28) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5483 : prime 5483. Proof. apply (Pocklington_refl (Pock_certif 5483 2 ((2741, 1)::(2,1)::nil) 1) ((Proof_certif 2741 prime2741) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5501 : prime 5501. Proof. apply (Pocklington_refl (Pock_certif 5501 2 ((5, 1)::(2,2)::nil) 34) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5503 : prime 5503. Proof. apply (Pocklington_refl (Pock_certif 5503 3 ((7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5507 : prime 5507. Proof. apply (Pocklington_refl (Pock_certif 5507 2 ((2753, 1)::(2,1)::nil) 1) ((Proof_certif 2753 prime2753) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5519 : prime 5519. Proof. apply (Pocklington_refl (Pock_certif 5519 13 ((31, 1)::(2,1)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5521 : prime 5521. Proof. apply (Pocklington_refl (Pock_certif 5521 7 ((2,4)::nil) 23) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5527 : prime 5527. Proof. apply (Pocklington_refl (Pock_certif 5527 5 ((3, 2)::(2,1)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5531 : prime 5531. Proof. apply (Pocklington_refl (Pock_certif 5531 10 ((7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5557 : prime 5557. Proof. apply (Pocklington_refl (Pock_certif 5557 2 ((463, 1)::(2,2)::nil) 1) ((Proof_certif 463 prime463) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5563 : prime 5563. Proof. apply (Pocklington_refl (Pock_certif 5563 2 ((3, 2)::(2,1)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5569 : prime 5569. Proof. apply (Pocklington_refl (Pock_certif 5569 13 ((2,6)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5573 : prime 5573. Proof. apply (Pocklington_refl (Pock_certif 5573 2 ((7, 1)::(2,2)::nil) 30) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5581 : prime 5581. Proof. apply (Pocklington_refl (Pock_certif 5581 6 ((3, 2)::(2,2)::nil) 10) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5591 : prime 5591. Proof. apply (Pocklington_refl (Pock_certif 5591 11 ((13, 1)::(2,1)::nil) 4) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5623 : prime 5623. Proof. apply (Pocklington_refl (Pock_certif 5623 3 ((937, 1)::(2,1)::nil) 1) ((Proof_certif 937 prime937) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5639 : prime 5639. Proof. apply (Pocklington_refl (Pock_certif 5639 7 ((2819, 1)::(2,1)::nil) 1) ((Proof_certif 2819 prime2819) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5641 : prime 5641. Proof. apply (Pocklington_refl (Pock_certif 5641 14 ((3, 1)::(2,3)::nil) 42) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5647 : prime 5647. Proof. apply (Pocklington_refl (Pock_certif 5647 3 ((941, 1)::(2,1)::nil) 1) ((Proof_certif 941 prime941) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5651 : prime 5651. Proof. apply (Pocklington_refl (Pock_certif 5651 2 ((5, 2)::(2,1)::nil) 12) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5653 : prime 5653. Proof. apply (Pocklington_refl (Pock_certif 5653 5 ((3, 1)::(2,2)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5657 : prime 5657. Proof. apply (Pocklington_refl (Pock_certif 5657 3 ((7, 1)::(2,3)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5659 : prime 5659. Proof. apply (Pocklington_refl (Pock_certif 5659 2 ((23, 1)::(2,1)::nil) 30) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5669 : prime 5669. Proof. apply (Pocklington_refl (Pock_certif 5669 3 ((13, 1)::(2,2)::nil) 4) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5683 : prime 5683. Proof. apply (Pocklington_refl (Pock_certif 5683 2 ((947, 1)::(2,1)::nil) 1) ((Proof_certif 947 prime947) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5689 : prime 5689. Proof. apply (Pocklington_refl (Pock_certif 5689 11 ((3, 1)::(2,3)::nil) 44) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5693 : prime 5693. Proof. apply (Pocklington_refl (Pock_certif 5693 2 ((1423, 1)::(2,2)::nil) 1) ((Proof_certif 1423 prime1423) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5701 : prime 5701. Proof. apply (Pocklington_refl (Pock_certif 5701 2 ((3, 1)::(2,2)::nil) 14) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5711 : prime 5711. Proof. apply (Pocklington_refl (Pock_certif 5711 19 ((571, 1)::(2,1)::nil) 1) ((Proof_certif 571 prime571) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5717 : prime 5717. Proof. apply (Pocklington_refl (Pock_certif 5717 2 ((1429, 1)::(2,2)::nil) 1) ((Proof_certif 1429 prime1429) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5737 : prime 5737. Proof. apply (Pocklington_refl (Pock_certif 5737 5 ((3, 1)::(2,3)::nil) 46) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5741 : prime 5741. Proof. apply (Pocklington_refl (Pock_certif 5741 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5743 : prime 5743. Proof. apply (Pocklington_refl (Pock_certif 5743 3 ((3, 2)::(2,1)::nil) 29) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5749 : prime 5749. Proof. apply (Pocklington_refl (Pock_certif 5749 2 ((3, 1)::(2,2)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5779 : prime 5779. Proof. apply (Pocklington_refl (Pock_certif 5779 2 ((3, 2)::(2,1)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5783 : prime 5783. Proof. apply (Pocklington_refl (Pock_certif 5783 7 ((7, 1)::(2,1)::nil) 18) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5791 : prime 5791. Proof. apply (Pocklington_refl (Pock_certif 5791 6 ((5, 1)::(3, 1)::(2,1)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5801 : prime 5801. Proof. apply (Pocklington_refl (Pock_certif 5801 3 ((5, 1)::(2,3)::nil) 64) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5807 : prime 5807. Proof. apply (Pocklington_refl (Pock_certif 5807 5 ((2903, 1)::(2,1)::nil) 1) ((Proof_certif 2903 prime2903) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5813 : prime 5813. Proof. apply (Pocklington_refl (Pock_certif 5813 2 ((1453, 1)::(2,2)::nil) 1) ((Proof_certif 1453 prime1453) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5821 : prime 5821. Proof. apply (Pocklington_refl (Pock_certif 5821 6 ((5, 1)::(2,2)::nil) 8) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5827 : prime 5827. Proof. apply (Pocklington_refl (Pock_certif 5827 2 ((971, 1)::(2,1)::nil) 1) ((Proof_certif 971 prime971) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5839 : prime 5839. Proof. apply (Pocklington_refl (Pock_certif 5839 3 ((7, 1)::(2,1)::nil) 22) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5843 : prime 5843. Proof. apply (Pocklington_refl (Pock_certif 5843 2 ((23, 1)::(2,1)::nil) 34) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5849 : prime 5849. Proof. apply (Pocklington_refl (Pock_certif 5849 3 ((17, 1)::(2,3)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5851 : prime 5851. Proof. apply (Pocklington_refl (Pock_certif 5851 2 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5857 : prime 5857. Proof. apply (Pocklington_refl (Pock_certif 5857 5 ((2,5)::nil) 54) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5861 : prime 5861. Proof. apply (Pocklington_refl (Pock_certif 5861 3 ((5, 1)::(2,2)::nil) 10) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5867 : prime 5867. Proof. apply (Pocklington_refl (Pock_certif 5867 5 ((7, 1)::(2,1)::nil) 24) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5869 : prime 5869. Proof. apply (Pocklington_refl (Pock_certif 5869 2 ((3, 2)::(2,2)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5879 : prime 5879. Proof. apply (Pocklington_refl (Pock_certif 5879 11 ((2939, 1)::(2,1)::nil) 1) ((Proof_certif 2939 prime2939) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5881 : prime 5881. Proof. apply (Pocklington_refl (Pock_certif 5881 19 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5897 : prime 5897. Proof. apply (Pocklington_refl (Pock_certif 5897 3 ((11, 1)::(2,3)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5903 : prime 5903. Proof. apply (Pocklington_refl (Pock_certif 5903 5 ((13, 1)::(2,1)::nil) 18) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5923 : prime 5923. Proof. apply (Pocklington_refl (Pock_certif 5923 2 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5927 : prime 5927. Proof. apply (Pocklington_refl (Pock_certif 5927 5 ((2963, 1)::(2,1)::nil) 1) ((Proof_certif 2963 prime2963) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5939 : prime 5939. Proof. apply (Pocklington_refl (Pock_certif 5939 2 ((2969, 1)::(2,1)::nil) 1) ((Proof_certif 2969 prime2969) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5953 : prime 5953. Proof. apply (Pocklington_refl (Pock_certif 5953 5 ((2,6)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5981 : prime 5981. Proof. apply (Pocklington_refl (Pock_certif 5981 2 ((5, 1)::(2,2)::nil) 17) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime5987 : prime 5987. Proof. apply (Pocklington_refl (Pock_certif 5987 2 ((41, 1)::(2,1)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6007 : prime 6007. Proof. apply (Pocklington_refl (Pock_certif 6007 3 ((7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6011 : prime 6011. Proof. apply (Pocklington_refl (Pock_certif 6011 2 ((601, 1)::(2,1)::nil) 1) ((Proof_certif 601 prime601) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6029 : prime 6029. Proof. apply (Pocklington_refl (Pock_certif 6029 2 ((11, 1)::(2,2)::nil) 48) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6037 : prime 6037. Proof. apply (Pocklington_refl (Pock_certif 6037 5 ((3, 1)::(2,2)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6043 : prime 6043. Proof. apply (Pocklington_refl (Pock_certif 6043 3 ((19, 1)::(2,1)::nil) 5) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6047 : prime 6047. Proof. apply (Pocklington_refl (Pock_certif 6047 5 ((3023, 1)::(2,1)::nil) 1) ((Proof_certif 3023 prime3023) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6053 : prime 6053. Proof. apply (Pocklington_refl (Pock_certif 6053 2 ((17, 1)::(2,2)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6067 : prime 6067. Proof. apply (Pocklington_refl (Pock_certif 6067 2 ((3, 2)::(2,1)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6073 : prime 6073. Proof. apply (Pocklington_refl (Pock_certif 6073 10 ((3, 1)::(2,3)::nil) 11) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6079 : prime 6079. Proof. apply (Pocklington_refl (Pock_certif 6079 3 ((1013, 1)::(2,1)::nil) 1) ((Proof_certif 1013 prime1013) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6089 : prime 6089. Proof. apply (Pocklington_refl (Pock_certif 6089 3 ((761, 1)::(2,3)::nil) 1) ((Proof_certif 761 prime761) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6091 : prime 6091. Proof. apply (Pocklington_refl (Pock_certif 6091 7 ((5, 1)::(3, 1)::(2,1)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6101 : prime 6101. Proof. apply (Pocklington_refl (Pock_certif 6101 2 ((5, 1)::(2,2)::nil) 23) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6113 : prime 6113. Proof. apply (Pocklington_refl (Pock_certif 6113 3 ((2,5)::nil) 62) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6121 : prime 6121. Proof. apply (Pocklington_refl (Pock_certif 6121 7 ((3, 1)::(2,3)::nil) 13) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6131 : prime 6131. Proof. apply (Pocklington_refl (Pock_certif 6131 2 ((613, 1)::(2,1)::nil) 1) ((Proof_certif 613 prime613) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6133 : prime 6133. Proof. apply (Pocklington_refl (Pock_certif 6133 2 ((7, 1)::(2,2)::nil) 50) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6143 : prime 6143. Proof. apply (Pocklington_refl (Pock_certif 6143 5 ((37, 1)::(2,1)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6151 : prime 6151. Proof. apply (Pocklington_refl (Pock_certif 6151 3 ((5, 1)::(3, 1)::(2,1)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6163 : prime 6163. Proof. apply (Pocklington_refl (Pock_certif 6163 2 ((13, 1)::(2,1)::nil) 28) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6173 : prime 6173. Proof. apply (Pocklington_refl (Pock_certif 6173 2 ((1543, 1)::(2,2)::nil) 1) ((Proof_certif 1543 prime1543) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6197 : prime 6197. Proof. apply (Pocklington_refl (Pock_certif 6197 2 ((1549, 1)::(2,2)::nil) 1) ((Proof_certif 1549 prime1549) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6199 : prime 6199. Proof. apply (Pocklington_refl (Pock_certif 6199 3 ((1033, 1)::(2,1)::nil) 1) ((Proof_certif 1033 prime1033) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6203 : prime 6203. Proof. apply (Pocklington_refl (Pock_certif 6203 2 ((7, 1)::(2,1)::nil) 20) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6211 : prime 6211. Proof. apply (Pocklington_refl (Pock_certif 6211 2 ((3, 2)::(2,1)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6217 : prime 6217. Proof. apply (Pocklington_refl (Pock_certif 6217 5 ((3, 1)::(2,3)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6221 : prime 6221. Proof. apply (Pocklington_refl (Pock_certif 6221 3 ((5, 1)::(2,2)::nil) 30) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6229 : prime 6229. Proof. apply (Pocklington_refl (Pock_certif 6229 2 ((3, 2)::(2,2)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6247 : prime 6247. Proof. apply (Pocklington_refl (Pock_certif 6247 5 ((3, 2)::(2,1)::nil) 21) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6257 : prime 6257. Proof. apply (Pocklington_refl (Pock_certif 6257 3 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6263 : prime 6263. Proof. apply (Pocklington_refl (Pock_certif 6263 5 ((31, 1)::(2,1)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6269 : prime 6269. Proof. apply (Pocklington_refl (Pock_certif 6269 2 ((1567, 1)::(2,2)::nil) 1) ((Proof_certif 1567 prime1567) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6271 : prime 6271. Proof. apply (Pocklington_refl (Pock_certif 6271 11 ((5, 1)::(3, 1)::(2,1)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6277 : prime 6277. Proof. apply (Pocklington_refl (Pock_certif 6277 2 ((3, 1)::(2,2)::nil) 13) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6287 : prime 6287. Proof. apply (Pocklington_refl (Pock_certif 6287 5 ((449, 1)::(2,1)::nil) 1) ((Proof_certif 449 prime449) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6299 : prime 6299. Proof. apply (Pocklington_refl (Pock_certif 6299 2 ((47, 1)::(2,1)::nil) 1) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6301 : prime 6301. Proof. apply (Pocklington_refl (Pock_certif 6301 10 ((3, 1)::(2,2)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6311 : prime 6311. Proof. apply (Pocklington_refl (Pock_certif 6311 7 ((631, 1)::(2,1)::nil) 1) ((Proof_certif 631 prime631) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6317 : prime 6317. Proof. apply (Pocklington_refl (Pock_certif 6317 2 ((1579, 1)::(2,2)::nil) 1) ((Proof_certif 1579 prime1579) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6323 : prime 6323. Proof. apply (Pocklington_refl (Pock_certif 6323 2 ((29, 1)::(2,1)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6329 : prime 6329. Proof. apply (Pocklington_refl (Pock_certif 6329 3 ((7, 1)::(2,3)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6337 : prime 6337. Proof. apply (Pocklington_refl (Pock_certif 6337 5 ((2,6)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6343 : prime 6343. Proof. apply (Pocklington_refl (Pock_certif 6343 3 ((7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6353 : prime 6353. Proof. apply (Pocklington_refl (Pock_certif 6353 3 ((2,4)::nil) 8) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6359 : prime 6359. Proof. apply (Pocklington_refl (Pock_certif 6359 13 ((11, 1)::(2,1)::nil) 24) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6361 : prime 6361. Proof. apply (Pocklington_refl (Pock_certif 6361 17 ((3, 1)::(2,3)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6367 : prime 6367. Proof. apply (Pocklington_refl (Pock_certif 6367 3 ((1061, 1)::(2,1)::nil) 1) ((Proof_certif 1061 prime1061) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6373 : prime 6373. Proof. apply (Pocklington_refl (Pock_certif 6373 2 ((3, 2)::(2,2)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6379 : prime 6379. Proof. apply (Pocklington_refl (Pock_certif 6379 2 ((1063, 1)::(2,1)::nil) 1) ((Proof_certif 1063 prime1063) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6389 : prime 6389. Proof. apply (Pocklington_refl (Pock_certif 6389 2 ((1597, 1)::(2,2)::nil) 1) ((Proof_certif 1597 prime1597) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6397 : prime 6397. Proof. apply (Pocklington_refl (Pock_certif 6397 2 ((13, 1)::(2,2)::nil) 18) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6421 : prime 6421. Proof. apply (Pocklington_refl (Pock_certif 6421 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6427 : prime 6427. Proof. apply (Pocklington_refl (Pock_certif 6427 3 ((3, 2)::(2,1)::nil) 31) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6449 : prime 6449. Proof. apply (Pocklington_refl (Pock_certif 6449 3 ((2,4)::nil) 16) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6451 : prime 6451. Proof. apply (Pocklington_refl (Pock_certif 6451 3 ((5, 1)::(3, 1)::(2,1)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6469 : prime 6469. Proof. apply (Pocklington_refl (Pock_certif 6469 2 ((7, 1)::(2,2)::nil) 4) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6473 : prime 6473. Proof. apply (Pocklington_refl (Pock_certif 6473 3 ((809, 1)::(2,3)::nil) 1) ((Proof_certif 809 prime809) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6481 : prime 6481. Proof. apply (Pocklington_refl (Pock_certif 6481 7 ((2,4)::nil) 18) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6491 : prime 6491. Proof. apply (Pocklington_refl (Pock_certif 6491 2 ((11, 1)::(2,1)::nil) 30) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6521 : prime 6521. Proof. apply (Pocklington_refl (Pock_certif 6521 6 ((5, 1)::(2,3)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6529 : prime 6529. Proof. apply (Pocklington_refl (Pock_certif 6529 7 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6547 : prime 6547. Proof. apply (Pocklington_refl (Pock_certif 6547 2 ((1091, 1)::(2,1)::nil) 1) ((Proof_certif 1091 prime1091) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6551 : prime 6551. Proof. apply (Pocklington_refl (Pock_certif 6551 17 ((5, 2)::(2,1)::nil) 30) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6553 : prime 6553. Proof. apply (Pocklington_refl (Pock_certif 6553 10 ((3, 1)::(2,3)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6563 : prime 6563. Proof. apply (Pocklington_refl (Pock_certif 6563 5 ((17, 1)::(2,1)::nil) 56) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6569 : prime 6569. Proof. apply (Pocklington_refl (Pock_certif 6569 3 ((821, 1)::(2,3)::nil) 1) ((Proof_certif 821 prime821) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6571 : prime 6571. Proof. apply (Pocklington_refl (Pock_certif 6571 2 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6577 : prime 6577. Proof. apply (Pocklington_refl (Pock_certif 6577 5 ((2,4)::nil) 25) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6581 : prime 6581. Proof. apply (Pocklington_refl (Pock_certif 6581 14 ((5, 1)::(2,2)::nil) 4) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6599 : prime 6599. Proof. apply (Pocklington_refl (Pock_certif 6599 13 ((3299, 1)::(2,1)::nil) 1) ((Proof_certif 3299 prime3299) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6607 : prime 6607. Proof. apply (Pocklington_refl (Pock_certif 6607 3 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6619 : prime 6619. Proof. apply (Pocklington_refl (Pock_certif 6619 2 ((1103, 1)::(2,1)::nil) 1) ((Proof_certif 1103 prime1103) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6637 : prime 6637. Proof. apply (Pocklington_refl (Pock_certif 6637 2 ((7, 1)::(2,2)::nil) 11) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6653 : prime 6653. Proof. apply (Pocklington_refl (Pock_certif 6653 2 ((1663, 1)::(2,2)::nil) 1) ((Proof_certif 1663 prime1663) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6659 : prime 6659. Proof. apply (Pocklington_refl (Pock_certif 6659 2 ((3329, 1)::(2,1)::nil) 1) ((Proof_certif 3329 prime3329) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6661 : prime 6661. Proof. apply (Pocklington_refl (Pock_certif 6661 6 ((3, 2)::(2,2)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6673 : prime 6673. Proof. apply (Pocklington_refl (Pock_certif 6673 5 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6679 : prime 6679. Proof. apply (Pocklington_refl (Pock_certif 6679 3 ((3, 2)::(2,1)::nil) 6) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6689 : prime 6689. Proof. apply (Pocklington_refl (Pock_certif 6689 3 ((2,5)::nil) 16) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6691 : prime 6691. Proof. apply (Pocklington_refl (Pock_certif 6691 2 ((5, 1)::(3, 1)::(2,1)::nil) 42) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6701 : prime 6701. Proof. apply (Pocklington_refl (Pock_certif 6701 2 ((5, 1)::(2,2)::nil) 12) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6703 : prime 6703. Proof. apply (Pocklington_refl (Pock_certif 6703 3 ((1117, 1)::(2,1)::nil) 1) ((Proof_certif 1117 prime1117) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6709 : prime 6709. Proof. apply (Pocklington_refl (Pock_certif 6709 2 ((13, 1)::(2,2)::nil) 24) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6719 : prime 6719. Proof. apply (Pocklington_refl (Pock_certif 6719 11 ((3359, 1)::(2,1)::nil) 1) ((Proof_certif 3359 prime3359) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6733 : prime 6733. Proof. apply (Pocklington_refl (Pock_certif 6733 2 ((3, 2)::(2,2)::nil) 42) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6737 : prime 6737. Proof. apply (Pocklington_refl (Pock_certif 6737 3 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6761 : prime 6761. Proof. apply (Pocklington_refl (Pock_certif 6761 3 ((5, 1)::(2,3)::nil) 8) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6763 : prime 6763. Proof. apply (Pocklington_refl (Pock_certif 6763 2 ((7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6779 : prime 6779. Proof. apply (Pocklington_refl (Pock_certif 6779 2 ((3389, 1)::(2,1)::nil) 1) ((Proof_certif 3389 prime3389) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6781 : prime 6781. Proof. apply (Pocklington_refl (Pock_certif 6781 2 ((5, 1)::(2,2)::nil) 17) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6791 : prime 6791. Proof. apply (Pocklington_refl (Pock_certif 6791 7 ((7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6793 : prime 6793. Proof. apply (Pocklington_refl (Pock_certif 6793 10 ((3, 1)::(2,3)::nil) 42) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6803 : prime 6803. Proof. apply (Pocklington_refl (Pock_certif 6803 2 ((19, 1)::(2,1)::nil) 26) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6823 : prime 6823. Proof. apply (Pocklington_refl (Pock_certif 6823 3 ((3, 2)::(2,1)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6827 : prime 6827. Proof. apply (Pocklington_refl (Pock_certif 6827 2 ((3413, 1)::(2,1)::nil) 1) ((Proof_certif 3413 prime3413) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6829 : prime 6829. Proof. apply (Pocklington_refl (Pock_certif 6829 2 ((569, 1)::(2,2)::nil) 1) ((Proof_certif 569 prime569) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6833 : prime 6833. Proof. apply (Pocklington_refl (Pock_certif 6833 3 ((2,4)::nil) 4) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6841 : prime 6841. Proof. apply (Pocklington_refl (Pock_certif 6841 22 ((3, 1)::(2,3)::nil) 44) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6857 : prime 6857. Proof. apply (Pocklington_refl (Pock_certif 6857 3 ((857, 1)::(2,3)::nil) 1) ((Proof_certif 857 prime857) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6863 : prime 6863. Proof. apply (Pocklington_refl (Pock_certif 6863 5 ((47, 1)::(2,1)::nil) 1) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6869 : prime 6869. Proof. apply (Pocklington_refl (Pock_certif 6869 2 ((17, 1)::(2,2)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6871 : prime 6871. Proof. apply (Pocklington_refl (Pock_certif 6871 3 ((5, 1)::(3, 1)::(2,1)::nil) 48) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6883 : prime 6883. Proof. apply (Pocklington_refl (Pock_certif 6883 2 ((31, 1)::(2,1)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6899 : prime 6899. Proof. apply (Pocklington_refl (Pock_certif 6899 2 ((3449, 1)::(2,1)::nil) 1) ((Proof_certif 3449 prime3449) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6907 : prime 6907. Proof. apply (Pocklington_refl (Pock_certif 6907 2 ((1151, 1)::(2,1)::nil) 1) ((Proof_certif 1151 prime1151) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6911 : prime 6911. Proof. apply (Pocklington_refl (Pock_certif 6911 7 ((691, 1)::(2,1)::nil) 1) ((Proof_certif 691 prime691) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6917 : prime 6917. Proof. apply (Pocklington_refl (Pock_certif 6917 2 ((7, 1)::(2,2)::nil) 22) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6947 : prime 6947. Proof. apply (Pocklington_refl (Pock_certif 6947 2 ((23, 1)::(2,1)::nil) 58) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6949 : prime 6949. Proof. apply (Pocklington_refl (Pock_certif 6949 2 ((3, 2)::(2,2)::nil) 48) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6959 : prime 6959. Proof. apply (Pocklington_refl (Pock_certif 6959 7 ((7, 1)::(2,1)::nil) 17) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6961 : prime 6961. Proof. apply (Pocklington_refl (Pock_certif 6961 7 ((2,4)::nil) 16) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6967 : prime 6967. Proof. apply (Pocklington_refl (Pock_certif 6967 5 ((3, 2)::(2,1)::nil) 25) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6971 : prime 6971. Proof. apply (Pocklington_refl (Pock_certif 6971 2 ((17, 1)::(2,1)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6977 : prime 6977. Proof. apply (Pocklington_refl (Pock_certif 6977 3 ((2,6)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6983 : prime 6983. Proof. apply (Pocklington_refl (Pock_certif 6983 5 ((3491, 1)::(2,1)::nil) 1) ((Proof_certif 3491 prime3491) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6991 : prime 6991. Proof. apply (Pocklington_refl (Pock_certif 6991 6 ((5, 1)::(3, 1)::(2,1)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime6997 : prime 6997. Proof. apply (Pocklington_refl (Pock_certif 6997 2 ((11, 1)::(2,2)::nil) 70) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7001 : prime 7001. Proof. apply (Pocklington_refl (Pock_certif 7001 3 ((5, 1)::(2,3)::nil) 14) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7013 : prime 7013. Proof. apply (Pocklington_refl (Pock_certif 7013 2 ((1753, 1)::(2,2)::nil) 1) ((Proof_certif 1753 prime1753) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7019 : prime 7019. Proof. apply (Pocklington_refl (Pock_certif 7019 2 ((11, 1)::(2,1)::nil) 8) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7027 : prime 7027. Proof. apply (Pocklington_refl (Pock_certif 7027 2 ((1171, 1)::(2,1)::nil) 1) ((Proof_certif 1171 prime1171) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7039 : prime 7039. Proof. apply (Pocklington_refl (Pock_certif 7039 3 ((3, 2)::(2,1)::nil) 29) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7043 : prime 7043. Proof. apply (Pocklington_refl (Pock_certif 7043 2 ((7, 1)::(2,1)::nil) 24) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7057 : prime 7057. Proof. apply (Pocklington_refl (Pock_certif 7057 5 ((2,4)::nil) 22) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7069 : prime 7069. Proof. apply (Pocklington_refl (Pock_certif 7069 2 ((19, 1)::(2,2)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7079 : prime 7079. Proof. apply (Pocklington_refl (Pock_certif 7079 7 ((3539, 1)::(2,1)::nil) 1) ((Proof_certif 3539 prime3539) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7103 : prime 7103. Proof. apply (Pocklington_refl (Pock_certif 7103 5 ((53, 1)::(2,1)::nil) 1) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7109 : prime 7109. Proof. apply (Pocklington_refl (Pock_certif 7109 2 ((1777, 1)::(2,2)::nil) 1) ((Proof_certif 1777 prime1777) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7121 : prime 7121. Proof. apply (Pocklington_refl (Pock_certif 7121 3 ((2,4)::nil) 27) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7127 : prime 7127. Proof. apply (Pocklington_refl (Pock_certif 7127 5 ((509, 1)::(2,1)::nil) 1) ((Proof_certif 509 prime509) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7129 : prime 7129. Proof. apply (Pocklington_refl (Pock_certif 7129 7 ((3, 1)::(2,3)::nil) 5) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7151 : prime 7151. Proof. apply (Pocklington_refl (Pock_certif 7151 7 ((5, 2)::(2,1)::nil) 42) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7159 : prime 7159. Proof. apply (Pocklington_refl (Pock_certif 7159 3 ((1193, 1)::(2,1)::nil) 1) ((Proof_certif 1193 prime1193) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7177 : prime 7177. Proof. apply (Pocklington_refl (Pock_certif 7177 10 ((3, 1)::(2,3)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7187 : prime 7187. Proof. apply (Pocklington_refl (Pock_certif 7187 2 ((3593, 1)::(2,1)::nil) 1) ((Proof_certif 3593 prime3593) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7193 : prime 7193. Proof. apply (Pocklington_refl (Pock_certif 7193 3 ((29, 1)::(2,3)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7207 : prime 7207. Proof. apply (Pocklington_refl (Pock_certif 7207 3 ((1201, 1)::(2,1)::nil) 1) ((Proof_certif 1201 prime1201) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7211 : prime 7211. Proof. apply (Pocklington_refl (Pock_certif 7211 2 ((7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7213 : prime 7213. Proof. apply (Pocklington_refl (Pock_certif 7213 2 ((601, 1)::(2,2)::nil) 1) ((Proof_certif 601 prime601) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7219 : prime 7219. Proof. apply (Pocklington_refl (Pock_certif 7219 2 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7229 : prime 7229. Proof. apply (Pocklington_refl (Pock_certif 7229 2 ((13, 1)::(2,2)::nil) 34) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7237 : prime 7237. Proof. apply (Pocklington_refl (Pock_certif 7237 2 ((3, 2)::(2,2)::nil) 56) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7243 : prime 7243. Proof. apply (Pocklington_refl (Pock_certif 7243 2 ((17, 1)::(2,1)::nil) 7) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7247 : prime 7247. Proof. apply (Pocklington_refl (Pock_certif 7247 5 ((3623, 1)::(2,1)::nil) 1) ((Proof_certif 3623 prime3623) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7253 : prime 7253. Proof. apply (Pocklington_refl (Pock_certif 7253 2 ((7, 1)::(2,2)::nil) 34) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7283 : prime 7283. Proof. apply (Pocklington_refl (Pock_certif 7283 2 ((11, 1)::(2,1)::nil) 21) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7297 : prime 7297. Proof. apply (Pocklington_refl (Pock_certif 7297 5 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7307 : prime 7307. Proof. apply (Pocklington_refl (Pock_certif 7307 2 ((13, 1)::(2,1)::nil) 20) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7309 : prime 7309. Proof. apply (Pocklington_refl (Pock_certif 7309 2 ((3, 2)::(2,2)::nil) 58) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7321 : prime 7321. Proof. apply (Pocklington_refl (Pock_certif 7321 7 ((3, 1)::(2,3)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7331 : prime 7331. Proof. apply (Pocklington_refl (Pock_certif 7331 2 ((733, 1)::(2,1)::nil) 1) ((Proof_certif 733 prime733) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7333 : prime 7333. Proof. apply (Pocklington_refl (Pock_certif 7333 2 ((13, 1)::(2,2)::nil) 36) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7349 : prime 7349. Proof. apply (Pocklington_refl (Pock_certif 7349 2 ((11, 1)::(2,2)::nil) 78) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7351 : prime 7351. Proof. apply (Pocklington_refl (Pock_certif 7351 6 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7369 : prime 7369. Proof. apply (Pocklington_refl (Pock_certif 7369 7 ((3, 1)::(2,3)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7393 : prime 7393. Proof. apply (Pocklington_refl (Pock_certif 7393 5 ((2,5)::nil) 38) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7411 : prime 7411. Proof. apply (Pocklington_refl (Pock_certif 7411 2 ((5, 1)::(3, 1)::(2,1)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7417 : prime 7417. Proof. apply (Pocklington_refl (Pock_certif 7417 5 ((3, 1)::(2,3)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7433 : prime 7433. Proof. apply (Pocklington_refl (Pock_certif 7433 3 ((929, 1)::(2,3)::nil) 1) ((Proof_certif 929 prime929) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7451 : prime 7451. Proof. apply (Pocklington_refl (Pock_certif 7451 2 ((5, 2)::(2,1)::nil) 48) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7457 : prime 7457. Proof. apply (Pocklington_refl (Pock_certif 7457 3 ((2,5)::nil) 40) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7459 : prime 7459. Proof. apply (Pocklington_refl (Pock_certif 7459 2 ((11, 1)::(2,1)::nil) 30) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7477 : prime 7477. Proof. apply (Pocklington_refl (Pock_certif 7477 2 ((7, 1)::(2,2)::nil) 42) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7481 : prime 7481. Proof. apply (Pocklington_refl (Pock_certif 7481 3 ((5, 1)::(2,3)::nil) 26) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7487 : prime 7487. Proof. apply (Pocklington_refl (Pock_certif 7487 5 ((19, 1)::(2,1)::nil) 44) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7489 : prime 7489. Proof. apply (Pocklington_refl (Pock_certif 7489 7 ((2,6)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7499 : prime 7499. Proof. apply (Pocklington_refl (Pock_certif 7499 2 ((23, 1)::(2,1)::nil) 70) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7507 : prime 7507. Proof. apply (Pocklington_refl (Pock_certif 7507 2 ((3, 2)::(2,1)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7517 : prime 7517. Proof. apply (Pocklington_refl (Pock_certif 7517 2 ((1879, 1)::(2,2)::nil) 1) ((Proof_certif 1879 prime1879) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7523 : prime 7523. Proof. apply (Pocklington_refl (Pock_certif 7523 2 ((3761, 1)::(2,1)::nil) 1) ((Proof_certif 3761 prime3761) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7529 : prime 7529. Proof. apply (Pocklington_refl (Pock_certif 7529 3 ((941, 1)::(2,3)::nil) 1) ((Proof_certif 941 prime941) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7537 : prime 7537. Proof. apply (Pocklington_refl (Pock_certif 7537 5 ((2,4)::nil) 20) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7541 : prime 7541. Proof. apply (Pocklington_refl (Pock_certif 7541 2 ((5, 1)::(2,2)::nil) 14) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7547 : prime 7547. Proof. apply (Pocklington_refl (Pock_certif 7547 2 ((7, 2)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7549 : prime 7549. Proof. apply (Pocklington_refl (Pock_certif 7549 2 ((17, 1)::(2,2)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7559 : prime 7559. Proof. apply (Pocklington_refl (Pock_certif 7559 13 ((3779, 1)::(2,1)::nil) 1) ((Proof_certif 3779 prime3779) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7561 : prime 7561. Proof. apply (Pocklington_refl (Pock_certif 7561 13 ((3, 1)::(2,3)::nil) 26) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7573 : prime 7573. Proof. apply (Pocklington_refl (Pock_certif 7573 2 ((631, 1)::(2,2)::nil) 1) ((Proof_certif 631 prime631) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7577 : prime 7577. Proof. apply (Pocklington_refl (Pock_certif 7577 3 ((947, 1)::(2,3)::nil) 1) ((Proof_certif 947 prime947) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7583 : prime 7583. Proof. apply (Pocklington_refl (Pock_certif 7583 5 ((17, 1)::(2,1)::nil) 18) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7589 : prime 7589. Proof. apply (Pocklington_refl (Pock_certif 7589 2 ((7, 1)::(2,2)::nil) 46) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7591 : prime 7591. Proof. apply (Pocklington_refl (Pock_certif 7591 6 ((5, 1)::(3, 1)::(2,1)::nil) 11) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7603 : prime 7603. Proof. apply (Pocklington_refl (Pock_certif 7603 2 ((7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7607 : prime 7607. Proof. apply (Pocklington_refl (Pock_certif 7607 5 ((3803, 1)::(2,1)::nil) 1) ((Proof_certif 3803 prime3803) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7621 : prime 7621. Proof. apply (Pocklington_refl (Pock_certif 7621 2 ((5, 1)::(2,2)::nil) 19) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7639 : prime 7639. Proof. apply (Pocklington_refl (Pock_certif 7639 3 ((19, 1)::(2,1)::nil) 48) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7643 : prime 7643. Proof. apply (Pocklington_refl (Pock_certif 7643 2 ((3821, 1)::(2,1)::nil) 1) ((Proof_certif 3821 prime3821) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7649 : prime 7649. Proof. apply (Pocklington_refl (Pock_certif 7649 3 ((2,5)::nil) 46) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7669 : prime 7669. Proof. apply (Pocklington_refl (Pock_certif 7669 2 ((3, 2)::(2,2)::nil) 68) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7673 : prime 7673. Proof. apply (Pocklington_refl (Pock_certif 7673 3 ((7, 1)::(2,3)::nil) 24) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7681 : prime 7681. Proof. apply (Pocklington_refl (Pock_certif 7681 13 ((2,9)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7687 : prime 7687. Proof. apply (Pocklington_refl (Pock_certif 7687 5 ((3, 2)::(2,1)::nil) 29) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7691 : prime 7691. Proof. apply (Pocklington_refl (Pock_certif 7691 2 ((769, 1)::(2,1)::nil) 1) ((Proof_certif 769 prime769) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7699 : prime 7699. Proof. apply (Pocklington_refl (Pock_certif 7699 2 ((1283, 1)::(2,1)::nil) 1) ((Proof_certif 1283 prime1283) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7703 : prime 7703. Proof. apply (Pocklington_refl (Pock_certif 7703 5 ((3851, 1)::(2,1)::nil) 1) ((Proof_certif 3851 prime3851) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7717 : prime 7717. Proof. apply (Pocklington_refl (Pock_certif 7717 2 ((643, 1)::(2,2)::nil) 1) ((Proof_certif 643 prime643) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7723 : prime 7723. Proof. apply (Pocklington_refl (Pock_certif 7723 3 ((3, 2)::(2,1)::nil) 31) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7727 : prime 7727. Proof. apply (Pocklington_refl (Pock_certif 7727 5 ((3863, 1)::(2,1)::nil) 1) ((Proof_certif 3863 prime3863) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7741 : prime 7741. Proof. apply (Pocklington_refl (Pock_certif 7741 6 ((3, 2)::(2,2)::nil) 70) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7753 : prime 7753. Proof. apply (Pocklington_refl (Pock_certif 7753 5 ((3, 1)::(2,3)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7757 : prime 7757. Proof. apply (Pocklington_refl (Pock_certif 7757 2 ((7, 1)::(2,2)::nil) 52) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7759 : prime 7759. Proof. apply (Pocklington_refl (Pock_certif 7759 3 ((3, 2)::(2,1)::nil) 33) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7789 : prime 7789. Proof. apply (Pocklington_refl (Pock_certif 7789 2 ((11, 1)::(2,2)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7793 : prime 7793. Proof. apply (Pocklington_refl (Pock_certif 7793 3 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7817 : prime 7817. Proof. apply (Pocklington_refl (Pock_certif 7817 3 ((977, 1)::(2,3)::nil) 1) ((Proof_certif 977 prime977) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7823 : prime 7823. Proof. apply (Pocklington_refl (Pock_certif 7823 5 ((3911, 1)::(2,1)::nil) 1) ((Proof_certif 3911 prime3911) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7829 : prime 7829. Proof. apply (Pocklington_refl (Pock_certif 7829 2 ((19, 1)::(2,2)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7841 : prime 7841. Proof. apply (Pocklington_refl (Pock_certif 7841 3 ((2,5)::nil) 52) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7853 : prime 7853. Proof. apply (Pocklington_refl (Pock_certif 7853 2 ((13, 1)::(2,2)::nil) 46) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7867 : prime 7867. Proof. apply (Pocklington_refl (Pock_certif 7867 3 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7873 : prime 7873. Proof. apply (Pocklington_refl (Pock_certif 7873 5 ((2,6)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7877 : prime 7877. Proof. apply (Pocklington_refl (Pock_certif 7877 2 ((11, 1)::(2,2)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7879 : prime 7879. Proof. apply (Pocklington_refl (Pock_certif 7879 3 ((13, 1)::(2,1)::nil) 42) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7883 : prime 7883. Proof. apply (Pocklington_refl (Pock_certif 7883 2 ((563, 1)::(2,1)::nil) 1) ((Proof_certif 563 prime563) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7901 : prime 7901. Proof. apply (Pocklington_refl (Pock_certif 7901 2 ((5, 1)::(2,2)::nil) 33) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7907 : prime 7907. Proof. apply (Pocklington_refl (Pock_certif 7907 2 ((59, 1)::(2,1)::nil) 1) ((Proof_certif 59 prime59) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7919 : prime 7919. Proof. apply (Pocklington_refl (Pock_certif 7919 7 ((37, 1)::(2,1)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7927 : prime 7927. Proof. apply (Pocklington_refl (Pock_certif 7927 3 ((1321, 1)::(2,1)::nil) 1) ((Proof_certif 1321 prime1321) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7933 : prime 7933. Proof. apply (Pocklington_refl (Pock_certif 7933 2 ((661, 1)::(2,2)::nil) 1) ((Proof_certif 661 prime661) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7937 : prime 7937. Proof. apply (Pocklington_refl (Pock_certif 7937 3 ((2,8)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7949 : prime 7949. Proof. apply (Pocklington_refl (Pock_certif 7949 2 ((1987, 1)::(2,2)::nil) 1) ((Proof_certif 1987 prime1987) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7951 : prime 7951. Proof. apply (Pocklington_refl (Pock_certif 7951 6 ((5, 1)::(3, 1)::(2,1)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7963 : prime 7963. Proof. apply (Pocklington_refl (Pock_certif 7963 2 ((1327, 1)::(2,1)::nil) 1) ((Proof_certif 1327 prime1327) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime7993 : prime 7993. Proof. apply (Pocklington_refl (Pock_certif 7993 5 ((3, 1)::(2,3)::nil) 44) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8009 : prime 8009. Proof. apply (Pocklington_refl (Pock_certif 8009 3 ((7, 1)::(2,3)::nil) 30) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8011 : prime 8011. Proof. apply (Pocklington_refl (Pock_certif 8011 14 ((3, 2)::(2,1)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8017 : prime 8017. Proof. apply (Pocklington_refl (Pock_certif 8017 5 ((2,4)::nil) 17) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8039 : prime 8039. Proof. apply (Pocklington_refl (Pock_certif 8039 11 ((4019, 1)::(2,1)::nil) 1) ((Proof_certif 4019 prime4019) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8053 : prime 8053. Proof. apply (Pocklington_refl (Pock_certif 8053 2 ((11, 1)::(2,2)::nil) 5) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8059 : prime 8059. Proof. apply (Pocklington_refl (Pock_certif 8059 2 ((17, 1)::(2,1)::nil) 32) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8069 : prime 8069. Proof. apply (Pocklington_refl (Pock_certif 8069 2 ((2017, 1)::(2,2)::nil) 1) ((Proof_certif 2017 prime2017) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8081 : prime 8081. Proof. apply (Pocklington_refl (Pock_certif 8081 3 ((2,4)::nil) 22) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8087 : prime 8087. Proof. apply (Pocklington_refl (Pock_certif 8087 5 ((13, 1)::(2,1)::nil) 50) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8089 : prime 8089. Proof. apply (Pocklington_refl (Pock_certif 8089 17 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8093 : prime 8093. Proof. apply (Pocklington_refl (Pock_certif 8093 2 ((7, 1)::(2,2)::nil) 6) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8101 : prime 8101. Proof. apply (Pocklington_refl (Pock_certif 8101 6 ((3, 2)::(2,2)::nil) 7) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8111 : prime 8111. Proof. apply (Pocklington_refl (Pock_certif 8111 11 ((811, 1)::(2,1)::nil) 1) ((Proof_certif 811 prime811) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8117 : prime 8117. Proof. apply (Pocklington_refl (Pock_certif 8117 2 ((2029, 1)::(2,2)::nil) 1) ((Proof_certif 2029 prime2029) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8123 : prime 8123. Proof. apply (Pocklington_refl (Pock_certif 8123 2 ((31, 1)::(2,1)::nil) 6) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8147 : prime 8147. Proof. apply (Pocklington_refl (Pock_certif 8147 2 ((4073, 1)::(2,1)::nil) 1) ((Proof_certif 4073 prime4073) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8161 : prime 8161. Proof. apply (Pocklington_refl (Pock_certif 8161 7 ((2,5)::nil) 62) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8167 : prime 8167. Proof. apply (Pocklington_refl (Pock_certif 8167 3 ((1361, 1)::(2,1)::nil) 1) ((Proof_certif 1361 prime1361) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8171 : prime 8171. Proof. apply (Pocklington_refl (Pock_certif 8171 2 ((19, 1)::(2,1)::nil) 62) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8179 : prime 8179. Proof. apply (Pocklington_refl (Pock_certif 8179 2 ((29, 1)::(2,1)::nil) 24) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8191 : prime 8191. Proof. apply (Pocklington_refl (Pock_certif 8191 7 ((3, 2)::(2,1)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8209 : prime 8209. Proof. apply (Pocklington_refl (Pock_certif 8209 7 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8219 : prime 8219. Proof. apply (Pocklington_refl (Pock_certif 8219 2 ((7, 1)::(2,1)::nil) 23) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8221 : prime 8221. Proof. apply (Pocklington_refl (Pock_certif 8221 2 ((5, 1)::(2,2)::nil) 6) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8231 : prime 8231. Proof. apply (Pocklington_refl (Pock_certif 8231 11 ((823, 1)::(2,1)::nil) 1) ((Proof_certif 823 prime823) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8233 : prime 8233. Proof. apply (Pocklington_refl (Pock_certif 8233 10 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8237 : prime 8237. Proof. apply (Pocklington_refl (Pock_certif 8237 2 ((29, 1)::(2,2)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8243 : prime 8243. Proof. apply (Pocklington_refl (Pock_certif 8243 2 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8263 : prime 8263. Proof. apply (Pocklington_refl (Pock_certif 8263 3 ((3, 2)::(2,1)::nil) 25) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8269 : prime 8269. Proof. apply (Pocklington_refl (Pock_certif 8269 2 ((13, 1)::(2,2)::nil) 54) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8273 : prime 8273. Proof. apply (Pocklington_refl (Pock_certif 8273 3 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8287 : prime 8287. Proof. apply (Pocklington_refl (Pock_certif 8287 3 ((1381, 1)::(2,1)::nil) 1) ((Proof_certif 1381 prime1381) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8291 : prime 8291. Proof. apply (Pocklington_refl (Pock_certif 8291 2 ((829, 1)::(2,1)::nil) 1) ((Proof_certif 829 prime829) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8293 : prime 8293. Proof. apply (Pocklington_refl (Pock_certif 8293 2 ((691, 1)::(2,2)::nil) 1) ((Proof_certif 691 prime691) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8297 : prime 8297. Proof. apply (Pocklington_refl (Pock_certif 8297 3 ((17, 1)::(2,3)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8311 : prime 8311. Proof. apply (Pocklington_refl (Pock_certif 8311 3 ((5, 1)::(3, 1)::(2,1)::nil) 36) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8317 : prime 8317. Proof. apply (Pocklington_refl (Pock_certif 8317 6 ((3, 2)::(2,2)::nil) 14) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8329 : prime 8329. Proof. apply (Pocklington_refl (Pock_certif 8329 7 ((3, 1)::(2,3)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8353 : prime 8353. Proof. apply (Pocklington_refl (Pock_certif 8353 5 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8363 : prime 8363. Proof. apply (Pocklington_refl (Pock_certif 8363 2 ((37, 1)::(2,1)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8369 : prime 8369. Proof. apply (Pocklington_refl (Pock_certif 8369 3 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8377 : prime 8377. Proof. apply (Pocklington_refl (Pock_certif 8377 5 ((3, 1)::(2,3)::nil) 10) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8387 : prime 8387. Proof. apply (Pocklington_refl (Pock_certif 8387 2 ((599, 1)::(2,1)::nil) 1) ((Proof_certif 599 prime599) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8389 : prime 8389. Proof. apply (Pocklington_refl (Pock_certif 8389 6 ((3, 2)::(2,2)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8419 : prime 8419. Proof. apply (Pocklington_refl (Pock_certif 8419 2 ((23, 1)::(2,1)::nil) 90) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8423 : prime 8423. Proof. apply (Pocklington_refl (Pock_certif 8423 5 ((4211, 1)::(2,1)::nil) 1) ((Proof_certif 4211 prime4211) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8429 : prime 8429. Proof. apply (Pocklington_refl (Pock_certif 8429 2 ((7, 1)::(2,2)::nil) 20) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8431 : prime 8431. Proof. apply (Pocklington_refl (Pock_certif 8431 3 ((5, 1)::(3, 1)::(2,1)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8443 : prime 8443. Proof. apply (Pocklington_refl (Pock_certif 8443 2 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8447 : prime 8447. Proof. apply (Pocklington_refl (Pock_certif 8447 5 ((41, 1)::(2,1)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8461 : prime 8461. Proof. apply (Pocklington_refl (Pock_certif 8461 2 ((3, 2)::(2,2)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8467 : prime 8467. Proof. apply (Pocklington_refl (Pock_certif 8467 2 ((17, 1)::(2,1)::nil) 44) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8501 : prime 8501. Proof. apply (Pocklington_refl (Pock_certif 8501 3 ((5, 1)::(2,2)::nil) 23) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8513 : prime 8513. Proof. apply (Pocklington_refl (Pock_certif 8513 3 ((2,6)::nil) 4) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8521 : prime 8521. Proof. apply (Pocklington_refl (Pock_certif 8521 13 ((3, 1)::(2,3)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8527 : prime 8527. Proof. apply (Pocklington_refl (Pock_certif 8527 3 ((7, 1)::(2,1)::nil) 16) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8537 : prime 8537. Proof. apply (Pocklington_refl (Pock_certif 8537 3 ((11, 1)::(2,3)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8539 : prime 8539. Proof. apply (Pocklington_refl (Pock_certif 8539 2 ((1423, 1)::(2,1)::nil) 1) ((Proof_certif 1423 prime1423) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8543 : prime 8543. Proof. apply (Pocklington_refl (Pock_certif 8543 5 ((4271, 1)::(2,1)::nil) 1) ((Proof_certif 4271 prime4271) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8563 : prime 8563. Proof. apply (Pocklington_refl (Pock_certif 8563 2 ((1427, 1)::(2,1)::nil) 1) ((Proof_certif 1427 prime1427) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8573 : prime 8573. Proof. apply (Pocklington_refl (Pock_certif 8573 2 ((2143, 1)::(2,2)::nil) 1) ((Proof_certif 2143 prime2143) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8581 : prime 8581. Proof. apply (Pocklington_refl (Pock_certif 8581 2 ((5, 1)::(2,2)::nil) 27) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8597 : prime 8597. Proof. apply (Pocklington_refl (Pock_certif 8597 2 ((7, 1)::(2,2)::nil) 26) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8599 : prime 8599. Proof. apply (Pocklington_refl (Pock_certif 8599 3 ((1433, 1)::(2,1)::nil) 1) ((Proof_certif 1433 prime1433) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8609 : prime 8609. Proof. apply (Pocklington_refl (Pock_certif 8609 3 ((2,5)::nil) 11) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8623 : prime 8623. Proof. apply (Pocklington_refl (Pock_certif 8623 3 ((3, 2)::(2,1)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8627 : prime 8627. Proof. apply (Pocklington_refl (Pock_certif 8627 2 ((19, 1)::(2,1)::nil) 74) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8629 : prime 8629. Proof. apply (Pocklington_refl (Pock_certif 8629 2 ((719, 1)::(2,2)::nil) 1) ((Proof_certif 719 prime719) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8641 : prime 8641. Proof. apply (Pocklington_refl (Pock_certif 8641 7 ((2,6)::nil) 6) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8647 : prime 8647. Proof. apply (Pocklington_refl (Pock_certif 8647 3 ((11, 1)::(2,1)::nil) 40) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8663 : prime 8663. Proof. apply (Pocklington_refl (Pock_certif 8663 5 ((61, 1)::(2,1)::nil) 1) ((Proof_certif 61 prime61) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8669 : prime 8669. Proof. apply (Pocklington_refl (Pock_certif 8669 2 ((11, 1)::(2,2)::nil) 20) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8677 : prime 8677. Proof. apply (Pocklington_refl (Pock_certif 8677 2 ((3, 2)::(2,2)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8681 : prime 8681. Proof. apply (Pocklington_refl (Pock_certif 8681 3 ((5, 1)::(2,3)::nil) 56) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8689 : prime 8689. Proof. apply (Pocklington_refl (Pock_certif 8689 11 ((2,4)::nil) 28) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8693 : prime 8693. Proof. apply (Pocklington_refl (Pock_certif 8693 2 ((41, 1)::(2,2)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8699 : prime 8699. Proof. apply (Pocklington_refl (Pock_certif 8699 2 ((4349, 1)::(2,1)::nil) 1) ((Proof_certif 4349 prime4349) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8707 : prime 8707. Proof. apply (Pocklington_refl (Pock_certif 8707 2 ((1451, 1)::(2,1)::nil) 1) ((Proof_certif 1451 prime1451) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8713 : prime 8713. Proof. apply (Pocklington_refl (Pock_certif 8713 5 ((3, 1)::(2,3)::nil) 25) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8719 : prime 8719. Proof. apply (Pocklington_refl (Pock_certif 8719 3 ((1453, 1)::(2,1)::nil) 1) ((Proof_certif 1453 prime1453) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8731 : prime 8731. Proof. apply (Pocklington_refl (Pock_certif 8731 2 ((3, 2)::(2,1)::nil) 13) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8737 : prime 8737. Proof. apply (Pocklington_refl (Pock_certif 8737 5 ((2,5)::nil) 16) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8741 : prime 8741. Proof. apply (Pocklington_refl (Pock_certif 8741 2 ((5, 1)::(2,2)::nil) 35) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8747 : prime 8747. Proof. apply (Pocklington_refl (Pock_certif 8747 2 ((4373, 1)::(2,1)::nil) 1) ((Proof_certif 4373 prime4373) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8753 : prime 8753. Proof. apply (Pocklington_refl (Pock_certif 8753 3 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8761 : prime 8761. Proof. apply (Pocklington_refl (Pock_certif 8761 19 ((3, 1)::(2,3)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8779 : prime 8779. Proof. apply (Pocklington_refl (Pock_certif 8779 11 ((7, 1)::(3, 1)::(2,1)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8783 : prime 8783. Proof. apply (Pocklington_refl (Pock_certif 8783 5 ((4391, 1)::(2,1)::nil) 1) ((Proof_certif 4391 prime4391) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8803 : prime 8803. Proof. apply (Pocklington_refl (Pock_certif 8803 2 ((3, 2)::(2,1)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8807 : prime 8807. Proof. apply (Pocklington_refl (Pock_certif 8807 5 ((17, 1)::(2,1)::nil) 54) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8819 : prime 8819. Proof. apply (Pocklington_refl (Pock_certif 8819 2 ((4409, 1)::(2,1)::nil) 1) ((Proof_certif 4409 prime4409) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8821 : prime 8821. Proof. apply (Pocklington_refl (Pock_certif 8821 2 ((3, 2)::(2,2)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8831 : prime 8831. Proof. apply (Pocklington_refl (Pock_certif 8831 7 ((883, 1)::(2,1)::nil) 1) ((Proof_certif 883 prime883) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8837 : prime 8837. Proof. apply (Pocklington_refl (Pock_certif 8837 2 ((47, 1)::(2,2)::nil) 1) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8839 : prime 8839. Proof. apply (Pocklington_refl (Pock_certif 8839 3 ((3, 2)::(2,1)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8849 : prime 8849. Proof. apply (Pocklington_refl (Pock_certif 8849 3 ((2,4)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8861 : prime 8861. Proof. apply (Pocklington_refl (Pock_certif 8861 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8863 : prime 8863. Proof. apply (Pocklington_refl (Pock_certif 8863 3 ((7, 1)::(2,1)::nil) 10) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8867 : prime 8867. Proof. apply (Pocklington_refl (Pock_certif 8867 2 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8887 : prime 8887. Proof. apply (Pocklington_refl (Pock_certif 8887 3 ((1481, 1)::(2,1)::nil) 1) ((Proof_certif 1481 prime1481) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8893 : prime 8893. Proof. apply (Pocklington_refl (Pock_certif 8893 5 ((3, 2)::(2,2)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8923 : prime 8923. Proof. apply (Pocklington_refl (Pock_certif 8923 2 ((1487, 1)::(2,1)::nil) 1) ((Proof_certif 1487 prime1487) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8929 : prime 8929. Proof. apply (Pocklington_refl (Pock_certif 8929 11 ((2,5)::nil) 22) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8933 : prime 8933. Proof. apply (Pocklington_refl (Pock_certif 8933 2 ((7, 1)::(2,2)::nil) 38) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8941 : prime 8941. Proof. apply (Pocklington_refl (Pock_certif 8941 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8951 : prime 8951. Proof. apply (Pocklington_refl (Pock_certif 8951 13 ((5, 2)::(2,1)::nil) 78) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8963 : prime 8963. Proof. apply (Pocklington_refl (Pock_certif 8963 2 ((4481, 1)::(2,1)::nil) 1) ((Proof_certif 4481 prime4481) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8969 : prime 8969. Proof. apply (Pocklington_refl (Pock_certif 8969 3 ((19, 1)::(2,3)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8971 : prime 8971. Proof. apply (Pocklington_refl (Pock_certif 8971 2 ((5, 1)::(3, 1)::(2,1)::nil) 58) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime8999 : prime 8999. Proof. apply (Pocklington_refl (Pock_certif 8999 7 ((11, 1)::(2,1)::nil) 9) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9001 : prime 9001. Proof. apply (Pocklington_refl (Pock_certif 9001 7 ((3, 1)::(2,3)::nil) 38) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9007 : prime 9007. Proof. apply (Pocklington_refl (Pock_certif 9007 3 ((19, 1)::(2,1)::nil) 7) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9011 : prime 9011. Proof. apply (Pocklington_refl (Pock_certif 9011 2 ((17, 1)::(2,1)::nil) 60) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9013 : prime 9013. Proof. apply (Pocklington_refl (Pock_certif 9013 2 ((751, 1)::(2,2)::nil) 1) ((Proof_certif 751 prime751) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9029 : prime 9029. Proof. apply (Pocklington_refl (Pock_certif 9029 2 ((37, 1)::(2,2)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9041 : prime 9041. Proof. apply (Pocklington_refl (Pock_certif 9041 3 ((2,4)::nil) 17) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9043 : prime 9043. Proof. apply (Pocklington_refl (Pock_certif 9043 2 ((11, 1)::(2,1)::nil) 12) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9049 : prime 9049. Proof. apply (Pocklington_refl (Pock_certif 9049 7 ((3, 1)::(2,3)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9059 : prime 9059. Proof. apply (Pocklington_refl (Pock_certif 9059 2 ((647, 1)::(2,1)::nil) 1) ((Proof_certif 647 prime647) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9067 : prime 9067. Proof. apply (Pocklington_refl (Pock_certif 9067 2 ((1511, 1)::(2,1)::nil) 1) ((Proof_certif 1511 prime1511) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9091 : prime 9091. Proof. apply (Pocklington_refl (Pock_certif 9091 2 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9103 : prime 9103. Proof. apply (Pocklington_refl (Pock_certif 9103 3 ((37, 1)::(2,1)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9109 : prime 9109. Proof. apply (Pocklington_refl (Pock_certif 9109 10 ((3, 2)::(2,2)::nil) 36) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9127 : prime 9127. Proof. apply (Pocklington_refl (Pock_certif 9127 3 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9133 : prime 9133. Proof. apply (Pocklington_refl (Pock_certif 9133 2 ((761, 1)::(2,2)::nil) 1) ((Proof_certif 761 prime761) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9137 : prime 9137. Proof. apply (Pocklington_refl (Pock_certif 9137 3 ((2,4)::nil) 24) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9151 : prime 9151. Proof. apply (Pocklington_refl (Pock_certif 9151 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9157 : prime 9157. Proof. apply (Pocklington_refl (Pock_certif 9157 5 ((7, 1)::(2,2)::nil) 46) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9161 : prime 9161. Proof. apply (Pocklington_refl (Pock_certif 9161 3 ((5, 1)::(2,3)::nil) 68) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9173 : prime 9173. Proof. apply (Pocklington_refl (Pock_certif 9173 2 ((2293, 1)::(2,2)::nil) 1) ((Proof_certif 2293 prime2293) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9181 : prime 9181. Proof. apply (Pocklington_refl (Pock_certif 9181 2 ((3, 2)::(2,2)::nil) 38) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9187 : prime 9187. Proof. apply (Pocklington_refl (Pock_certif 9187 2 ((1531, 1)::(2,1)::nil) 1) ((Proof_certif 1531 prime1531) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9199 : prime 9199. Proof. apply (Pocklington_refl (Pock_certif 9199 3 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9203 : prime 9203. Proof. apply (Pocklington_refl (Pock_certif 9203 2 ((43, 1)::(2,1)::nil) 1) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9209 : prime 9209. Proof. apply (Pocklington_refl (Pock_certif 9209 3 ((1151, 1)::(2,3)::nil) 1) ((Proof_certif 1151 prime1151) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9221 : prime 9221. Proof. apply (Pocklington_refl (Pock_certif 9221 2 ((5, 1)::(2,2)::nil) 18) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9227 : prime 9227. Proof. apply (Pocklington_refl (Pock_certif 9227 2 ((659, 1)::(2,1)::nil) 1) ((Proof_certif 659 prime659) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9239 : prime 9239. Proof. apply (Pocklington_refl (Pock_certif 9239 19 ((31, 1)::(2,1)::nil) 24) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9241 : prime 9241. Proof. apply (Pocklington_refl (Pock_certif 9241 13 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9257 : prime 9257. Proof. apply (Pocklington_refl (Pock_certif 9257 3 ((13, 1)::(2,3)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9277 : prime 9277. Proof. apply (Pocklington_refl (Pock_certif 9277 2 ((773, 1)::(2,2)::nil) 1) ((Proof_certif 773 prime773) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9281 : prime 9281. Proof. apply (Pocklington_refl (Pock_certif 9281 3 ((2,6)::nil) 16) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9283 : prime 9283. Proof. apply (Pocklington_refl (Pock_certif 9283 2 ((7, 1)::(2,1)::nil) 13) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9293 : prime 9293. Proof. apply (Pocklington_refl (Pock_certif 9293 2 ((23, 1)::(2,2)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9311 : prime 9311. Proof. apply (Pocklington_refl (Pock_certif 9311 7 ((7, 1)::(2,1)::nil) 16) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9319 : prime 9319. Proof. apply (Pocklington_refl (Pock_certif 9319 3 ((1553, 1)::(2,1)::nil) 1) ((Proof_certif 1553 prime1553) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9323 : prime 9323. Proof. apply (Pocklington_refl (Pock_certif 9323 2 ((59, 1)::(2,1)::nil) 1) ((Proof_certif 59 prime59) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9337 : prime 9337. Proof. apply (Pocklington_refl (Pock_certif 9337 5 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9341 : prime 9341. Proof. apply (Pocklington_refl (Pock_certif 9341 2 ((5, 1)::(2,2)::nil) 25) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9343 : prime 9343. Proof. apply (Pocklington_refl (Pock_certif 9343 5 ((3, 2)::(2,1)::nil) 10) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9349 : prime 9349. Proof. apply (Pocklington_refl (Pock_certif 9349 2 ((19, 1)::(2,2)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9371 : prime 9371. Proof. apply (Pocklington_refl (Pock_certif 9371 2 ((937, 1)::(2,1)::nil) 1) ((Proof_certif 937 prime937) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9377 : prime 9377. Proof. apply (Pocklington_refl (Pock_certif 9377 3 ((2,5)::nil) 36) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9391 : prime 9391. Proof. apply (Pocklington_refl (Pock_certif 9391 3 ((5, 1)::(3, 1)::(2,1)::nil) 11) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9397 : prime 9397. Proof. apply (Pocklington_refl (Pock_certif 9397 2 ((3, 2)::(2,2)::nil) 44) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9403 : prime 9403. Proof. apply (Pocklington_refl (Pock_certif 9403 2 ((1567, 1)::(2,1)::nil) 1) ((Proof_certif 1567 prime1567) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9413 : prime 9413. Proof. apply (Pocklington_refl (Pock_certif 9413 3 ((13, 1)::(2,2)::nil) 76) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9419 : prime 9419. Proof. apply (Pocklington_refl (Pock_certif 9419 2 ((17, 1)::(2,1)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9421 : prime 9421. Proof. apply (Pocklington_refl (Pock_certif 9421 2 ((5, 1)::(2,2)::nil) 29) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9431 : prime 9431. Proof. apply (Pocklington_refl (Pock_certif 9431 7 ((23, 1)::(2,1)::nil) 20) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9433 : prime 9433. Proof. apply (Pocklington_refl (Pock_certif 9433 5 ((3, 1)::(2,3)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9437 : prime 9437. Proof. apply (Pocklington_refl (Pock_certif 9437 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9439 : prime 9439. Proof. apply (Pocklington_refl (Pock_certif 9439 3 ((11, 1)::(2,1)::nil) 31) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9461 : prime 9461. Proof. apply (Pocklington_refl (Pock_certif 9461 3 ((5, 1)::(2,2)::nil) 31) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9463 : prime 9463. Proof. apply (Pocklington_refl (Pock_certif 9463 3 ((19, 1)::(2,1)::nil) 20) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9467 : prime 9467. Proof. apply (Pocklington_refl (Pock_certif 9467 2 ((4733, 1)::(2,1)::nil) 1) ((Proof_certif 4733 prime4733) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9473 : prime 9473. Proof. apply (Pocklington_refl (Pock_certif 9473 3 ((2,8)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9479 : prime 9479. Proof. apply (Pocklington_refl (Pock_certif 9479 7 ((677, 1)::(2,1)::nil) 1) ((Proof_certif 677 prime677) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9491 : prime 9491. Proof. apply (Pocklington_refl (Pock_certif 9491 2 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9497 : prime 9497. Proof. apply (Pocklington_refl (Pock_certif 9497 3 ((1187, 1)::(2,3)::nil) 1) ((Proof_certif 1187 prime1187) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9511 : prime 9511. Proof. apply (Pocklington_refl (Pock_certif 9511 3 ((5, 1)::(3, 1)::(2,1)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9521 : prime 9521. Proof. apply (Pocklington_refl (Pock_certif 9521 3 ((2,4)::nil) 14) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9533 : prime 9533. Proof. apply (Pocklington_refl (Pock_certif 9533 2 ((2383, 1)::(2,2)::nil) 1) ((Proof_certif 2383 prime2383) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9539 : prime 9539. Proof. apply (Pocklington_refl (Pock_certif 9539 2 ((19, 1)::(2,1)::nil) 22) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9547 : prime 9547. Proof. apply (Pocklington_refl (Pock_certif 9547 2 ((37, 1)::(2,1)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9551 : prime 9551. Proof. apply (Pocklington_refl (Pock_certif 9551 11 ((5, 2)::(2,1)::nil) 90) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9587 : prime 9587. Proof. apply (Pocklington_refl (Pock_certif 9587 2 ((4793, 1)::(2,1)::nil) 1) ((Proof_certif 4793 prime4793) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9601 : prime 9601. Proof. apply (Pocklington_refl (Pock_certif 9601 13 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9613 : prime 9613. Proof. apply (Pocklington_refl (Pock_certif 9613 2 ((3, 2)::(2,2)::nil) 50) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9619 : prime 9619. Proof. apply (Pocklington_refl (Pock_certif 9619 2 ((7, 1)::(3, 1)::(2,1)::nil) 60) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9623 : prime 9623. Proof. apply (Pocklington_refl (Pock_certif 9623 5 ((17, 1)::(2,1)::nil) 9) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9629 : prime 9629. Proof. apply (Pocklington_refl (Pock_certif 9629 2 ((29, 1)::(2,2)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9631 : prime 9631. Proof. apply (Pocklington_refl (Pock_certif 9631 3 ((3, 2)::(2,1)::nil) 29) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9643 : prime 9643. Proof. apply (Pocklington_refl (Pock_certif 9643 2 ((1607, 1)::(2,1)::nil) 1) ((Proof_certif 1607 prime1607) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9649 : prime 9649. Proof. apply (Pocklington_refl (Pock_certif 9649 7 ((2,4)::nil) 24) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9661 : prime 9661. Proof. apply (Pocklington_refl (Pock_certif 9661 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9677 : prime 9677. Proof. apply (Pocklington_refl (Pock_certif 9677 2 ((41, 1)::(2,2)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9679 : prime 9679. Proof. apply (Pocklington_refl (Pock_certif 9679 3 ((1613, 1)::(2,1)::nil) 1) ((Proof_certif 1613 prime1613) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9689 : prime 9689. Proof. apply (Pocklington_refl (Pock_certif 9689 3 ((7, 1)::(2,3)::nil) 60) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9697 : prime 9697. Proof. apply (Pocklington_refl (Pock_certif 9697 5 ((2,5)::nil) 46) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9719 : prime 9719. Proof. apply (Pocklington_refl (Pock_certif 9719 17 ((43, 1)::(2,1)::nil) 1) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9721 : prime 9721. Proof. apply (Pocklington_refl (Pock_certif 9721 7 ((3, 1)::(2,3)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9733 : prime 9733. Proof. apply (Pocklington_refl (Pock_certif 9733 2 ((811, 1)::(2,2)::nil) 1) ((Proof_certif 811 prime811) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9739 : prime 9739. Proof. apply (Pocklington_refl (Pock_certif 9739 3 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9743 : prime 9743. Proof. apply (Pocklington_refl (Pock_certif 9743 5 ((4871, 1)::(2,1)::nil) 1) ((Proof_certif 4871 prime4871) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9749 : prime 9749. Proof. apply (Pocklington_refl (Pock_certif 9749 2 ((2437, 1)::(2,2)::nil) 1) ((Proof_certif 2437 prime2437) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9767 : prime 9767. Proof. apply (Pocklington_refl (Pock_certif 9767 5 ((19, 1)::(2,1)::nil) 28) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9769 : prime 9769. Proof. apply (Pocklington_refl (Pock_certif 9769 13 ((3, 1)::(2,3)::nil) 21) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9781 : prime 9781. Proof. apply (Pocklington_refl (Pock_certif 9781 6 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9787 : prime 9787. Proof. apply (Pocklington_refl (Pock_certif 9787 2 ((7, 1)::(2,1)::nil) 23) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9791 : prime 9791. Proof. apply (Pocklington_refl (Pock_certif 9791 11 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9803 : prime 9803. Proof. apply (Pocklington_refl (Pock_certif 9803 2 ((13, 1)::(2,1)::nil) 10) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9811 : prime 9811. Proof. apply (Pocklington_refl (Pock_certif 9811 3 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9817 : prime 9817. Proof. apply (Pocklington_refl (Pock_certif 9817 5 ((3, 1)::(2,3)::nil) 23) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9829 : prime 9829. Proof. apply (Pocklington_refl (Pock_certif 9829 2 ((3, 2)::(2,2)::nil) 56) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9833 : prime 9833. Proof. apply (Pocklington_refl (Pock_certif 9833 3 ((1229, 1)::(2,3)::nil) 1) ((Proof_certif 1229 prime1229) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9839 : prime 9839. Proof. apply (Pocklington_refl (Pock_certif 9839 7 ((4919, 1)::(2,1)::nil) 1) ((Proof_certif 4919 prime4919) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9851 : prime 9851. Proof. apply (Pocklington_refl (Pock_certif 9851 2 ((5, 2)::(2,1)::nil) 96) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9857 : prime 9857. Proof. apply (Pocklington_refl (Pock_certif 9857 3 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9859 : prime 9859. Proof. apply (Pocklington_refl (Pock_certif 9859 2 ((31, 1)::(2,1)::nil) 34) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9871 : prime 9871. Proof. apply (Pocklington_refl (Pock_certif 9871 3 ((5, 1)::(3, 1)::(2,1)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9883 : prime 9883. Proof. apply (Pocklington_refl (Pock_certif 9883 2 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9887 : prime 9887. Proof. apply (Pocklington_refl (Pock_certif 9887 5 ((4943, 1)::(2,1)::nil) 1) ((Proof_certif 4943 prime4943) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9901 : prime 9901. Proof. apply (Pocklington_refl (Pock_certif 9901 2 ((3, 2)::(2,2)::nil) 58) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9907 : prime 9907. Proof. apply (Pocklington_refl (Pock_certif 9907 2 ((13, 1)::(2,1)::nil) 15) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9923 : prime 9923. Proof. apply (Pocklington_refl (Pock_certif 9923 2 ((11, 1)::(2,1)::nil) 6) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9929 : prime 9929. Proof. apply (Pocklington_refl (Pock_certif 9929 3 ((17, 1)::(2,3)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9931 : prime 9931. Proof. apply (Pocklington_refl (Pock_certif 9931 10 ((5, 1)::(3, 1)::(2,1)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9941 : prime 9941. Proof. apply (Pocklington_refl (Pock_certif 9941 2 ((5, 1)::(2,2)::nil) 13) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9949 : prime 9949. Proof. apply (Pocklington_refl (Pock_certif 9949 2 ((829, 1)::(2,2)::nil) 1) ((Proof_certif 829 prime829) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9967 : prime 9967. Proof. apply (Pocklington_refl (Pock_certif 9967 3 ((11, 1)::(2,1)::nil) 9) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime9973 : prime 9973. Proof. apply (Pocklington_refl (Pock_certif 9973 11 ((3, 2)::(2,2)::nil) 60) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10007 : prime 10007. Proof. apply (Pocklington_refl (Pock_certif 10007 5 ((5003, 1)::(2,1)::nil) 1) ((Proof_certif 5003 prime5003) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10009 : prime 10009. Proof. apply (Pocklington_refl (Pock_certif 10009 11 ((3, 1)::(2,3)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10037 : prime 10037. Proof. apply (Pocklington_refl (Pock_certif 10037 2 ((13, 1)::(2,2)::nil) 88) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10039 : prime 10039. Proof. apply (Pocklington_refl (Pock_certif 10039 3 ((7, 1)::(3, 1)::(2,1)::nil) 70) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10061 : prime 10061. Proof. apply (Pocklington_refl (Pock_certif 10061 3 ((5, 1)::(2,2)::nil) 20) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10067 : prime 10067. Proof. apply (Pocklington_refl (Pock_certif 10067 2 ((719, 1)::(2,1)::nil) 1) ((Proof_certif 719 prime719) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10069 : prime 10069. Proof. apply (Pocklington_refl (Pock_certif 10069 2 ((839, 1)::(2,2)::nil) 1) ((Proof_certif 839 prime839) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10079 : prime 10079. Proof. apply (Pocklington_refl (Pock_certif 10079 11 ((5039, 1)::(2,1)::nil) 1) ((Proof_certif 5039 prime5039) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10091 : prime 10091. Proof. apply (Pocklington_refl (Pock_certif 10091 2 ((1009, 1)::(2,1)::nil) 1) ((Proof_certif 1009 prime1009) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10093 : prime 10093. Proof. apply (Pocklington_refl (Pock_certif 10093 2 ((29, 1)::(2,2)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10099 : prime 10099. Proof. apply (Pocklington_refl (Pock_certif 10099 2 ((3, 2)::(2,1)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10103 : prime 10103. Proof. apply (Pocklington_refl (Pock_certif 10103 5 ((5051, 1)::(2,1)::nil) 1) ((Proof_certif 5051 prime5051) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10111 : prime 10111. Proof. apply (Pocklington_refl (Pock_certif 10111 12 ((5, 1)::(3, 1)::(2,1)::nil) 36) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10133 : prime 10133. Proof. apply (Pocklington_refl (Pock_certif 10133 2 ((17, 1)::(2,2)::nil) 12) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10139 : prime 10139. Proof. apply (Pocklington_refl (Pock_certif 10139 2 ((37, 1)::(2,1)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10141 : prime 10141. Proof. apply (Pocklington_refl (Pock_certif 10141 2 ((5, 1)::(2,2)::nil) 25) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10151 : prime 10151. Proof. apply (Pocklington_refl (Pock_certif 10151 7 ((5, 2)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10159 : prime 10159. Proof. apply (Pocklington_refl (Pock_certif 10159 3 ((1693, 1)::(2,1)::nil) 1) ((Proof_certif 1693 prime1693) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10163 : prime 10163. Proof. apply (Pocklington_refl (Pock_certif 10163 2 ((5081, 1)::(2,1)::nil) 1) ((Proof_certif 5081 prime5081) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10169 : prime 10169. Proof. apply (Pocklington_refl (Pock_certif 10169 3 ((31, 1)::(2,3)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10177 : prime 10177. Proof. apply (Pocklington_refl (Pock_certif 10177 5 ((2,6)::nil) 30) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10181 : prime 10181. Proof. apply (Pocklington_refl (Pock_certif 10181 2 ((5, 1)::(2,2)::nil) 27) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10193 : prime 10193. Proof. apply (Pocklington_refl (Pock_certif 10193 3 ((2,4)::nil) 26) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10211 : prime 10211. Proof. apply (Pocklington_refl (Pock_certif 10211 2 ((1021, 1)::(2,1)::nil) 1) ((Proof_certif 1021 prime1021) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10223 : prime 10223. Proof. apply (Pocklington_refl (Pock_certif 10223 5 ((19, 1)::(2,1)::nil) 40) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10243 : prime 10243. Proof. apply (Pocklington_refl (Pock_certif 10243 7 ((3, 2)::(2,1)::nil) 26) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10247 : prime 10247. Proof. apply (Pocklington_refl (Pock_certif 10247 5 ((47, 1)::(2,1)::nil) 1) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10253 : prime 10253. Proof. apply (Pocklington_refl (Pock_certif 10253 2 ((11, 1)::(2,2)::nil) 56) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10259 : prime 10259. Proof. apply (Pocklington_refl (Pock_certif 10259 2 ((23, 1)::(2,1)::nil) 38) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10267 : prime 10267. Proof. apply (Pocklington_refl (Pock_certif 10267 2 ((29, 1)::(2,1)::nil) 60) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10271 : prime 10271. Proof. apply (Pocklington_refl (Pock_certif 10271 7 ((13, 1)::(2,1)::nil) 30) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10273 : prime 10273. Proof. apply (Pocklington_refl (Pock_certif 10273 5 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10289 : prime 10289. Proof. apply (Pocklington_refl (Pock_certif 10289 3 ((643, 1)::(2,4)::nil) 1) ((Proof_certif 643 prime643) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10301 : prime 10301. Proof. apply (Pocklington_refl (Pock_certif 10301 2 ((5, 1)::(2,2)::nil) 33) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10303 : prime 10303. Proof. apply (Pocklington_refl (Pock_certif 10303 3 ((17, 1)::(2,1)::nil) 30) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10313 : prime 10313. Proof. apply (Pocklington_refl (Pock_certif 10313 3 ((1289, 1)::(2,3)::nil) 1) ((Proof_certif 1289 prime1289) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10321 : prime 10321. Proof. apply (Pocklington_refl (Pock_certif 10321 7 ((3, 1)::(2,4)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10331 : prime 10331. Proof. apply (Pocklington_refl (Pock_certif 10331 2 ((1033, 1)::(2,1)::nil) 1) ((Proof_certif 1033 prime1033) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10333 : prime 10333. Proof. apply (Pocklington_refl (Pock_certif 10333 5 ((3, 2)::(2,2)::nil) 70) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10337 : prime 10337. Proof. apply (Pocklington_refl (Pock_certif 10337 3 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10343 : prime 10343. Proof. apply (Pocklington_refl (Pock_certif 10343 5 ((5171, 1)::(2,1)::nil) 1) ((Proof_certif 5171 prime5171) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10357 : prime 10357. Proof. apply (Pocklington_refl (Pock_certif 10357 2 ((863, 1)::(2,2)::nil) 1) ((Proof_certif 863 prime863) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10369 : prime 10369. Proof. apply (Pocklington_refl (Pock_certif 10369 11 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10391 : prime 10391. Proof. apply (Pocklington_refl (Pock_certif 10391 19 ((1039, 1)::(2,1)::nil) 1) ((Proof_certif 1039 prime1039) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10399 : prime 10399. Proof. apply (Pocklington_refl (Pock_certif 10399 3 ((1733, 1)::(2,1)::nil) 1) ((Proof_certif 1733 prime1733) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10427 : prime 10427. Proof. apply (Pocklington_refl (Pock_certif 10427 2 ((13, 1)::(2,1)::nil) 36) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10429 : prime 10429. Proof. apply (Pocklington_refl (Pock_certif 10429 2 ((11, 1)::(2,2)::nil) 60) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10433 : prime 10433. Proof. apply (Pocklington_refl (Pock_certif 10433 3 ((2,6)::nil) 34) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10453 : prime 10453. Proof. apply (Pocklington_refl (Pock_certif 10453 5 ((13, 1)::(2,2)::nil) 96) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10457 : prime 10457. Proof. apply (Pocklington_refl (Pock_certif 10457 3 ((1307, 1)::(2,3)::nil) 1) ((Proof_certif 1307 prime1307) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10459 : prime 10459. Proof. apply (Pocklington_refl (Pock_certif 10459 2 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10463 : prime 10463. Proof. apply (Pocklington_refl (Pock_certif 10463 5 ((5231, 1)::(2,1)::nil) 1) ((Proof_certif 5231 prime5231) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10477 : prime 10477. Proof. apply (Pocklington_refl (Pock_certif 10477 2 ((3, 2)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10487 : prime 10487. Proof. apply (Pocklington_refl (Pock_certif 10487 5 ((7, 2)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10499 : prime 10499. Proof. apply (Pocklington_refl (Pock_certif 10499 2 ((29, 1)::(2,1)::nil) 64) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10501 : prime 10501. Proof. apply (Pocklington_refl (Pock_certif 10501 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10513 : prime 10513. Proof. apply (Pocklington_refl (Pock_certif 10513 5 ((2,4)::nil) 11) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10529 : prime 10529. Proof. apply (Pocklington_refl (Pock_certif 10529 3 ((2,5)::nil) 6) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10531 : prime 10531. Proof. apply (Pocklington_refl (Pock_certif 10531 3 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10559 : prime 10559. Proof. apply (Pocklington_refl (Pock_certif 10559 23 ((5279, 1)::(2,1)::nil) 1) ((Proof_certif 5279 prime5279) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10567 : prime 10567. Proof. apply (Pocklington_refl (Pock_certif 10567 6 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10589 : prime 10589. Proof. apply (Pocklington_refl (Pock_certif 10589 2 ((2647, 1)::(2,2)::nil) 1) ((Proof_certif 2647 prime2647) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10597 : prime 10597. Proof. apply (Pocklington_refl (Pock_certif 10597 2 ((883, 1)::(2,2)::nil) 1) ((Proof_certif 883 prime883) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10601 : prime 10601. Proof. apply (Pocklington_refl (Pock_certif 10601 3 ((5, 1)::(2,3)::nil) 24) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10607 : prime 10607. Proof. apply (Pocklington_refl (Pock_certif 10607 5 ((5303, 1)::(2,1)::nil) 1) ((Proof_certif 5303 prime5303) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10613 : prime 10613. Proof. apply (Pocklington_refl (Pock_certif 10613 2 ((7, 1)::(2,2)::nil) 42) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10627 : prime 10627. Proof. apply (Pocklington_refl (Pock_certif 10627 3 ((7, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10631 : prime 10631. Proof. apply (Pocklington_refl (Pock_certif 10631 11 ((1063, 1)::(2,1)::nil) 1) ((Proof_certif 1063 prime1063) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10639 : prime 10639. Proof. apply (Pocklington_refl (Pock_certif 10639 6 ((3, 2)::(2,1)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10651 : prime 10651. Proof. apply (Pocklington_refl (Pock_certif 10651 7 ((5, 1)::(3, 1)::(2,1)::nil) 54) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10657 : prime 10657. Proof. apply (Pocklington_refl (Pock_certif 10657 5 ((2,5)::nil) 11) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10663 : prime 10663. Proof. apply (Pocklington_refl (Pock_certif 10663 3 ((1777, 1)::(2,1)::nil) 1) ((Proof_certif 1777 prime1777) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10667 : prime 10667. Proof. apply (Pocklington_refl (Pock_certif 10667 2 ((5333, 1)::(2,1)::nil) 1) ((Proof_certif 5333 prime5333) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10687 : prime 10687. Proof. apply (Pocklington_refl (Pock_certif 10687 3 ((13, 1)::(2,1)::nil) 46) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10691 : prime 10691. Proof. apply (Pocklington_refl (Pock_certif 10691 2 ((1069, 1)::(2,1)::nil) 1) ((Proof_certif 1069 prime1069) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10709 : prime 10709. Proof. apply (Pocklington_refl (Pock_certif 10709 2 ((2677, 1)::(2,2)::nil) 1) ((Proof_certif 2677 prime2677) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10711 : prime 10711. Proof. apply (Pocklington_refl (Pock_certif 10711 3 ((3, 2)::(2,1)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10723 : prime 10723. Proof. apply (Pocklington_refl (Pock_certif 10723 2 ((1787, 1)::(2,1)::nil) 1) ((Proof_certif 1787 prime1787) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10729 : prime 10729. Proof. apply (Pocklington_refl (Pock_certif 10729 7 ((3, 1)::(2,3)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10733 : prime 10733. Proof. apply (Pocklington_refl (Pock_certif 10733 2 ((2683, 1)::(2,2)::nil) 1) ((Proof_certif 2683 prime2683) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10739 : prime 10739. Proof. apply (Pocklington_refl (Pock_certif 10739 2 ((13, 1)::(2,1)::nil) 48) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10753 : prime 10753. Proof. apply (Pocklington_refl (Pock_certif 10753 5 ((2,9)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10771 : prime 10771. Proof. apply (Pocklington_refl (Pock_certif 10771 3 ((5, 1)::(3, 1)::(2,1)::nil) 58) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10781 : prime 10781. Proof. apply (Pocklington_refl (Pock_certif 10781 3 ((5, 1)::(2,2)::nil) 16) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10789 : prime 10789. Proof. apply (Pocklington_refl (Pock_certif 10789 2 ((29, 1)::(2,2)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10799 : prime 10799. Proof. apply (Pocklington_refl (Pock_certif 10799 19 ((5399, 1)::(2,1)::nil) 1) ((Proof_certif 5399 prime5399) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10831 : prime 10831. Proof. apply (Pocklington_refl (Pock_certif 10831 7 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10837 : prime 10837. Proof. apply (Pocklington_refl (Pock_certif 10837 2 ((3, 2)::(2,2)::nil) 11) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10847 : prime 10847. Proof. apply (Pocklington_refl (Pock_certif 10847 5 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10853 : prime 10853. Proof. apply (Pocklington_refl (Pock_certif 10853 2 ((2713, 1)::(2,2)::nil) 1) ((Proof_certif 2713 prime2713) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10859 : prime 10859. Proof. apply (Pocklington_refl (Pock_certif 10859 2 ((61, 1)::(2,1)::nil) 1) ((Proof_certif 61 prime61) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10861 : prime 10861. Proof. apply (Pocklington_refl (Pock_certif 10861 2 ((5, 1)::(2,2)::nil) 20) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10867 : prime 10867. Proof. apply (Pocklington_refl (Pock_certif 10867 2 ((1811, 1)::(2,1)::nil) 1) ((Proof_certif 1811 prime1811) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10883 : prime 10883. Proof. apply (Pocklington_refl (Pock_certif 10883 2 ((5441, 1)::(2,1)::nil) 1) ((Proof_certif 5441 prime5441) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10889 : prime 10889. Proof. apply (Pocklington_refl (Pock_certif 10889 3 ((1361, 1)::(2,3)::nil) 1) ((Proof_certif 1361 prime1361) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10891 : prime 10891. Proof. apply (Pocklington_refl (Pock_certif 10891 2 ((3, 2)::(2,1)::nil) 26) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10903 : prime 10903. Proof. apply (Pocklington_refl (Pock_certif 10903 3 ((23, 1)::(2,1)::nil) 52) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10909 : prime 10909. Proof. apply (Pocklington_refl (Pock_certif 10909 2 ((3, 2)::(2,2)::nil) 13) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10937 : prime 10937. Proof. apply (Pocklington_refl (Pock_certif 10937 3 ((1367, 1)::(2,3)::nil) 1) ((Proof_certif 1367 prime1367) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10939 : prime 10939. Proof. apply (Pocklington_refl (Pock_certif 10939 2 ((1823, 1)::(2,1)::nil) 1) ((Proof_certif 1823 prime1823) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10949 : prime 10949. Proof. apply (Pocklington_refl (Pock_certif 10949 2 ((7, 1)::(2,2)::nil) 54) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10957 : prime 10957. Proof. apply (Pocklington_refl (Pock_certif 10957 2 ((11, 1)::(2,2)::nil) 72) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10973 : prime 10973. Proof. apply (Pocklington_refl (Pock_certif 10973 2 ((13, 1)::(2,2)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10979 : prime 10979. Proof. apply (Pocklington_refl (Pock_certif 10979 2 ((11, 1)::(2,1)::nil) 11) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10987 : prime 10987. Proof. apply (Pocklington_refl (Pock_certif 10987 2 ((1831, 1)::(2,1)::nil) 1) ((Proof_certif 1831 prime1831) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime10993 : prime 10993. Proof. apply (Pocklington_refl (Pock_certif 10993 5 ((2,4)::nil) 7) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11003 : prime 11003. Proof. apply (Pocklington_refl (Pock_certif 11003 2 ((5501, 1)::(2,1)::nil) 1) ((Proof_certif 5501 prime5501) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11027 : prime 11027. Proof. apply (Pocklington_refl (Pock_certif 11027 2 ((37, 1)::(2,1)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11047 : prime 11047. Proof. apply (Pocklington_refl (Pock_certif 11047 3 ((7, 1)::(3, 1)::(2,1)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11057 : prime 11057. Proof. apply (Pocklington_refl (Pock_certif 11057 3 ((2,4)::nil) 13) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11059 : prime 11059. Proof. apply (Pocklington_refl (Pock_certif 11059 2 ((19, 1)::(2,1)::nil) 62) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11069 : prime 11069. Proof. apply (Pocklington_refl (Pock_certif 11069 2 ((2767, 1)::(2,2)::nil) 1) ((Proof_certif 2767 prime2767) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11071 : prime 11071. Proof. apply (Pocklington_refl (Pock_certif 11071 3 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11083 : prime 11083. Proof. apply (Pocklington_refl (Pock_certif 11083 2 ((1847, 1)::(2,1)::nil) 1) ((Proof_certif 1847 prime1847) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11087 : prime 11087. Proof. apply (Pocklington_refl (Pock_certif 11087 5 ((23, 1)::(2,1)::nil) 56) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11093 : prime 11093. Proof. apply (Pocklington_refl (Pock_certif 11093 2 ((47, 1)::(2,2)::nil) 1) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11113 : prime 11113. Proof. apply (Pocklington_refl (Pock_certif 11113 13 ((3, 1)::(2,3)::nil) 29) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11117 : prime 11117. Proof. apply (Pocklington_refl (Pock_certif 11117 3 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11119 : prime 11119. Proof. apply (Pocklington_refl (Pock_certif 11119 3 ((17, 1)::(2,1)::nil) 54) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11131 : prime 11131. Proof. apply (Pocklington_refl (Pock_certif 11131 2 ((5, 1)::(3, 1)::(2,1)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11149 : prime 11149. Proof. apply (Pocklington_refl (Pock_certif 11149 2 ((929, 1)::(2,2)::nil) 1) ((Proof_certif 929 prime929) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11159 : prime 11159. Proof. apply (Pocklington_refl (Pock_certif 11159 7 ((797, 1)::(2,1)::nil) 1) ((Proof_certif 797 prime797) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11161 : prime 11161. Proof. apply (Pocklington_refl (Pock_certif 11161 7 ((3, 1)::(2,3)::nil) 31) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11171 : prime 11171. Proof. apply (Pocklington_refl (Pock_certif 11171 2 ((1117, 1)::(2,1)::nil) 1) ((Proof_certif 1117 prime1117) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11173 : prime 11173. Proof. apply (Pocklington_refl (Pock_certif 11173 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11177 : prime 11177. Proof. apply (Pocklington_refl (Pock_certif 11177 3 ((11, 1)::(2,3)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11197 : prime 11197. Proof. apply (Pocklington_refl (Pock_certif 11197 2 ((3, 2)::(2,2)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11213 : prime 11213. Proof. apply (Pocklington_refl (Pock_certif 11213 2 ((2803, 1)::(2,2)::nil) 1) ((Proof_certif 2803 prime2803) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11239 : prime 11239. Proof. apply (Pocklington_refl (Pock_certif 11239 3 ((1873, 1)::(2,1)::nil) 1) ((Proof_certif 1873 prime1873) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11243 : prime 11243. Proof. apply (Pocklington_refl (Pock_certif 11243 2 ((11, 1)::(2,1)::nil) 25) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11251 : prime 11251. Proof. apply (Pocklington_refl (Pock_certif 11251 2 ((3, 2)::(2,1)::nil) 5) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11257 : prime 11257. Proof. apply (Pocklington_refl (Pock_certif 11257 10 ((3, 1)::(2,3)::nil) 36) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11261 : prime 11261. Proof. apply (Pocklington_refl (Pock_certif 11261 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11273 : prime 11273. Proof. apply (Pocklington_refl (Pock_certif 11273 3 ((1409, 1)::(2,3)::nil) 1) ((Proof_certif 1409 prime1409) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11279 : prime 11279. Proof. apply (Pocklington_refl (Pock_certif 11279 7 ((5639, 1)::(2,1)::nil) 1) ((Proof_certif 5639 prime5639) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11287 : prime 11287. Proof. apply (Pocklington_refl (Pock_certif 11287 3 ((3, 2)::(2,1)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11299 : prime 11299. Proof. apply (Pocklington_refl (Pock_certif 11299 3 ((7, 1)::(3, 1)::(2,1)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11311 : prime 11311. Proof. apply (Pocklington_refl (Pock_certif 11311 3 ((5, 1)::(3, 1)::(2,1)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11317 : prime 11317. Proof. apply (Pocklington_refl (Pock_certif 11317 2 ((23, 1)::(2,2)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11321 : prime 11321. Proof. apply (Pocklington_refl (Pock_certif 11321 3 ((5, 1)::(2,3)::nil) 42) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11329 : prime 11329. Proof. apply (Pocklington_refl (Pock_certif 11329 7 ((2,6)::nil) 48) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11351 : prime 11351. Proof. apply (Pocklington_refl (Pock_certif 11351 7 ((5, 2)::(2,1)::nil) 26) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11353 : prime 11353. Proof. apply (Pocklington_refl (Pock_certif 11353 7 ((3, 1)::(2,3)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11369 : prime 11369. Proof. apply (Pocklington_refl (Pock_certif 11369 3 ((7, 1)::(2,3)::nil) 90) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11383 : prime 11383. Proof. apply (Pocklington_refl (Pock_certif 11383 5 ((7, 1)::(3, 1)::(2,1)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11393 : prime 11393. Proof. apply (Pocklington_refl (Pock_certif 11393 3 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11399 : prime 11399. Proof. apply (Pocklington_refl (Pock_certif 11399 11 ((41, 1)::(2,1)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11411 : prime 11411. Proof. apply (Pocklington_refl (Pock_certif 11411 7 ((7, 1)::(5, 1)::(2,1)::nil) 22) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11423 : prime 11423. Proof. apply (Pocklington_refl (Pock_certif 11423 5 ((5711, 1)::(2,1)::nil) 1) ((Proof_certif 5711 prime5711) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11437 : prime 11437. Proof. apply (Pocklington_refl (Pock_certif 11437 2 ((953, 1)::(2,2)::nil) 1) ((Proof_certif 953 prime953) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11443 : prime 11443. Proof. apply (Pocklington_refl (Pock_certif 11443 2 ((1907, 1)::(2,1)::nil) 1) ((Proof_certif 1907 prime1907) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11447 : prime 11447. Proof. apply (Pocklington_refl (Pock_certif 11447 5 ((59, 1)::(2,1)::nil) 1) ((Proof_certif 59 prime59) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11467 : prime 11467. Proof. apply (Pocklington_refl (Pock_certif 11467 2 ((3, 2)::(2,1)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11471 : prime 11471. Proof. apply (Pocklington_refl (Pock_certif 11471 11 ((31, 1)::(2,1)::nil) 60) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11483 : prime 11483. Proof. apply (Pocklington_refl (Pock_certif 11483 2 ((5741, 1)::(2,1)::nil) 1) ((Proof_certif 5741 prime5741) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11489 : prime 11489. Proof. apply (Pocklington_refl (Pock_certif 11489 3 ((2,5)::nil) 38) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11491 : prime 11491. Proof. apply (Pocklington_refl (Pock_certif 11491 3 ((5, 1)::(3, 1)::(2,1)::nil) 21) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11497 : prime 11497. Proof. apply (Pocklington_refl (Pock_certif 11497 7 ((3, 1)::(2,3)::nil) 46) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11503 : prime 11503. Proof. apply (Pocklington_refl (Pock_certif 11503 3 ((3, 2)::(2,1)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11519 : prime 11519. Proof. apply (Pocklington_refl (Pock_certif 11519 7 ((13, 1)::(2,1)::nil) 25) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11527 : prime 11527. Proof. apply (Pocklington_refl (Pock_certif 11527 3 ((17, 1)::(2,1)::nil) 66) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11549 : prime 11549. Proof. apply (Pocklington_refl (Pock_certif 11549 2 ((2887, 1)::(2,2)::nil) 1) ((Proof_certif 2887 prime2887) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11551 : prime 11551. Proof. apply (Pocklington_refl (Pock_certif 11551 7 ((5, 1)::(3, 1)::(2,1)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11579 : prime 11579. Proof. apply (Pocklington_refl (Pock_certif 11579 2 ((827, 1)::(2,1)::nil) 1) ((Proof_certif 827 prime827) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11587 : prime 11587. Proof. apply (Pocklington_refl (Pock_certif 11587 2 ((1931, 1)::(2,1)::nil) 1) ((Proof_certif 1931 prime1931) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11593 : prime 11593. Proof. apply (Pocklington_refl (Pock_certif 11593 5 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11597 : prime 11597. Proof. apply (Pocklington_refl (Pock_certif 11597 3 ((13, 1)::(2,2)::nil) 14) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11617 : prime 11617. Proof. apply (Pocklington_refl (Pock_certif 11617 5 ((2,5)::nil) 42) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11621 : prime 11621. Proof. apply (Pocklington_refl (Pock_certif 11621 2 ((5, 1)::(2,2)::nil) 18) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11633 : prime 11633. Proof. apply (Pocklington_refl (Pock_certif 11633 3 ((2,4)::nil) 18) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11657 : prime 11657. Proof. apply (Pocklington_refl (Pock_certif 11657 3 ((31, 1)::(2,3)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11677 : prime 11677. Proof. apply (Pocklington_refl (Pock_certif 11677 2 ((7, 1)::(2,2)::nil) 23) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11681 : prime 11681. Proof. apply (Pocklington_refl (Pock_certif 11681 3 ((2,5)::nil) 44) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11689 : prime 11689. Proof. apply (Pocklington_refl (Pock_certif 11689 7 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11699 : prime 11699. Proof. apply (Pocklington_refl (Pock_certif 11699 2 ((5849, 1)::(2,1)::nil) 1) ((Proof_certif 5849 prime5849) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11701 : prime 11701. Proof. apply (Pocklington_refl (Pock_certif 11701 2 ((3, 2)::(2,2)::nil) 36) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11717 : prime 11717. Proof. apply (Pocklington_refl (Pock_certif 11717 2 ((29, 1)::(2,2)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11719 : prime 11719. Proof. apply (Pocklington_refl (Pock_certif 11719 6 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11731 : prime 11731. Proof. apply (Pocklington_refl (Pock_certif 11731 3 ((5, 1)::(3, 1)::(2,1)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11743 : prime 11743. Proof. apply (Pocklington_refl (Pock_certif 11743 3 ((19, 1)::(2,1)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11777 : prime 11777. Proof. apply (Pocklington_refl (Pock_certif 11777 3 ((2,9)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11779 : prime 11779. Proof. apply (Pocklington_refl (Pock_certif 11779 2 ((13, 1)::(2,1)::nil) 36) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11783 : prime 11783. Proof. apply (Pocklington_refl (Pock_certif 11783 5 ((43, 1)::(2,1)::nil) 1) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11789 : prime 11789. Proof. apply (Pocklington_refl (Pock_certif 11789 2 ((7, 1)::(2,2)::nil) 28) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11801 : prime 11801. Proof. apply (Pocklington_refl (Pock_certif 11801 3 ((5, 1)::(2,3)::nil) 54) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11807 : prime 11807. Proof. apply (Pocklington_refl (Pock_certif 11807 5 ((5903, 1)::(2,1)::nil) 1) ((Proof_certif 5903 prime5903) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11813 : prime 11813. Proof. apply (Pocklington_refl (Pock_certif 11813 2 ((2953, 1)::(2,2)::nil) 1) ((Proof_certif 2953 prime2953) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11821 : prime 11821. Proof. apply (Pocklington_refl (Pock_certif 11821 2 ((5, 1)::(2,2)::nil) 29) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11827 : prime 11827. Proof. apply (Pocklington_refl (Pock_certif 11827 2 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11831 : prime 11831. Proof. apply (Pocklington_refl (Pock_certif 11831 7 ((7, 1)::(5, 1)::(2,1)::nil) 28) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11833 : prime 11833. Proof. apply (Pocklington_refl (Pock_certif 11833 5 ((3, 1)::(2,3)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11839 : prime 11839. Proof. apply (Pocklington_refl (Pock_certif 11839 3 ((1973, 1)::(2,1)::nil) 1) ((Proof_certif 1973 prime1973) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11863 : prime 11863. Proof. apply (Pocklington_refl (Pock_certif 11863 3 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11867 : prime 11867. Proof. apply (Pocklington_refl (Pock_certif 11867 2 ((17, 1)::(2,1)::nil) 6) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11887 : prime 11887. Proof. apply (Pocklington_refl (Pock_certif 11887 3 ((7, 1)::(3, 1)::(2,1)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11897 : prime 11897. Proof. apply (Pocklington_refl (Pock_certif 11897 3 ((1487, 1)::(2,3)::nil) 1) ((Proof_certif 1487 prime1487) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11903 : prime 11903. Proof. apply (Pocklington_refl (Pock_certif 11903 5 ((11, 1)::(2,1)::nil) 8) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11909 : prime 11909. Proof. apply (Pocklington_refl (Pock_certif 11909 2 ((13, 1)::(2,2)::nil) 20) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11923 : prime 11923. Proof. apply (Pocklington_refl (Pock_certif 11923 2 ((1987, 1)::(2,1)::nil) 1) ((Proof_certif 1987 prime1987) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11927 : prime 11927. Proof. apply (Pocklington_refl (Pock_certif 11927 5 ((67, 1)::(2,1)::nil) 1) ((Proof_certif 67 prime67) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11933 : prime 11933. Proof. apply (Pocklington_refl (Pock_certif 11933 2 ((19, 1)::(2,2)::nil) 4) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11939 : prime 11939. Proof. apply (Pocklington_refl (Pock_certif 11939 2 ((47, 1)::(2,1)::nil) 1) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11941 : prime 11941. Proof. apply (Pocklington_refl (Pock_certif 11941 7 ((5, 1)::(2,2)::nil) 35) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11953 : prime 11953. Proof. apply (Pocklington_refl (Pock_certif 11953 5 ((3, 1)::(2,4)::nil) 56) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11959 : prime 11959. Proof. apply (Pocklington_refl (Pock_certif 11959 3 ((1993, 1)::(2,1)::nil) 1) ((Proof_certif 1993 prime1993) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11969 : prime 11969. Proof. apply (Pocklington_refl (Pock_certif 11969 3 ((2,6)::nil) 58) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11971 : prime 11971. Proof. apply (Pocklington_refl (Pock_certif 11971 10 ((3, 2)::(2,1)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11981 : prime 11981. Proof. apply (Pocklington_refl (Pock_certif 11981 2 ((5, 1)::(2,2)::nil) 37) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime11987 : prime 11987. Proof. apply (Pocklington_refl (Pock_certif 11987 2 ((13, 1)::(2,1)::nil) 44) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12007 : prime 12007. Proof. apply (Pocklington_refl (Pock_certif 12007 13 ((3, 2)::(2,1)::nil) 14) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12011 : prime 12011. Proof. apply (Pocklington_refl (Pock_certif 12011 2 ((1201, 1)::(2,1)::nil) 1) ((Proof_certif 1201 prime1201) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12037 : prime 12037. Proof. apply (Pocklington_refl (Pock_certif 12037 5 ((17, 1)::(2,2)::nil) 40) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12041 : prime 12041. Proof. apply (Pocklington_refl (Pock_certif 12041 3 ((5, 1)::(2,3)::nil) 60) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12043 : prime 12043. Proof. apply (Pocklington_refl (Pock_certif 12043 2 ((3, 2)::(2,1)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12049 : prime 12049. Proof. apply (Pocklington_refl (Pock_certif 12049 13 ((2,4)::nil) 10) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12071 : prime 12071. Proof. apply (Pocklington_refl (Pock_certif 12071 11 ((17, 1)::(2,1)::nil) 13) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12073 : prime 12073. Proof. apply (Pocklington_refl (Pock_certif 12073 7 ((3, 1)::(2,3)::nil) 21) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12097 : prime 12097. Proof. apply (Pocklington_refl (Pock_certif 12097 5 ((2,6)::nil) 60) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12101 : prime 12101. Proof. apply (Pocklington_refl (Pock_certif 12101 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12107 : prime 12107. Proof. apply (Pocklington_refl (Pock_certif 12107 2 ((6053, 1)::(2,1)::nil) 1) ((Proof_certif 6053 prime6053) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12109 : prime 12109. Proof. apply (Pocklington_refl (Pock_certif 12109 2 ((1009, 1)::(2,2)::nil) 1) ((Proof_certif 1009 prime1009) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12113 : prime 12113. Proof. apply (Pocklington_refl (Pock_certif 12113 3 ((2,4)::nil) 16) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12119 : prime 12119. Proof. apply (Pocklington_refl (Pock_certif 12119 7 ((73, 1)::(2,1)::nil) 1) ((Proof_certif 73 prime73) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12143 : prime 12143. Proof. apply (Pocklington_refl (Pock_certif 12143 10 ((13, 1)::(2,1)::nil) 50) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12149 : prime 12149. Proof. apply (Pocklington_refl (Pock_certif 12149 2 ((3037, 1)::(2,2)::nil) 1) ((Proof_certif 3037 prime3037) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12157 : prime 12157. Proof. apply (Pocklington_refl (Pock_certif 12157 2 ((1013, 1)::(2,2)::nil) 1) ((Proof_certif 1013 prime1013) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12161 : prime 12161. Proof. apply (Pocklington_refl (Pock_certif 12161 3 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12163 : prime 12163. Proof. apply (Pocklington_refl (Pock_certif 12163 2 ((2027, 1)::(2,1)::nil) 1) ((Proof_certif 2027 prime2027) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12197 : prime 12197. Proof. apply (Pocklington_refl (Pock_certif 12197 2 ((3049, 1)::(2,2)::nil) 1) ((Proof_certif 3049 prime3049) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12203 : prime 12203. Proof. apply (Pocklington_refl (Pock_certif 12203 2 ((6101, 1)::(2,1)::nil) 1) ((Proof_certif 6101 prime6101) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12211 : prime 12211. Proof. apply (Pocklington_refl (Pock_certif 12211 2 ((5, 1)::(3, 1)::(2,1)::nil) 46) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12227 : prime 12227. Proof. apply (Pocklington_refl (Pock_certif 12227 2 ((6113, 1)::(2,1)::nil) 1) ((Proof_certif 6113 prime6113) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12239 : prime 12239. Proof. apply (Pocklington_refl (Pock_certif 12239 13 ((29, 1)::(2,1)::nil) 94) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12241 : prime 12241. Proof. apply (Pocklington_refl (Pock_certif 12241 7 ((2,4)::nil) 25) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12251 : prime 12251. Proof. apply (Pocklington_refl (Pock_certif 12251 2 ((5, 2)::(2,1)::nil) 44) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12253 : prime 12253. Proof. apply (Pocklington_refl (Pock_certif 12253 2 ((1021, 1)::(2,2)::nil) 1) ((Proof_certif 1021 prime1021) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12263 : prime 12263. Proof. apply (Pocklington_refl (Pock_certif 12263 5 ((6131, 1)::(2,1)::nil) 1) ((Proof_certif 6131 prime6131) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12269 : prime 12269. Proof. apply (Pocklington_refl (Pock_certif 12269 2 ((3067, 1)::(2,2)::nil) 1) ((Proof_certif 3067 prime3067) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12277 : prime 12277. Proof. apply (Pocklington_refl (Pock_certif 12277 2 ((3, 2)::(2,2)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12281 : prime 12281. Proof. apply (Pocklington_refl (Pock_certif 12281 3 ((5, 1)::(2,3)::nil) 66) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12289 : prime 12289. Proof. apply (Pocklington_refl (Pock_certif 12289 11 ((2,12)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12301 : prime 12301. Proof. apply (Pocklington_refl (Pock_certif 12301 2 ((5, 1)::(2,2)::nil) 10) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12323 : prime 12323. Proof. apply (Pocklington_refl (Pock_certif 12323 2 ((61, 1)::(2,1)::nil) 1) ((Proof_certif 61 prime61) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12329 : prime 12329. Proof. apply (Pocklington_refl (Pock_certif 12329 3 ((23, 1)::(2,3)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12343 : prime 12343. Proof. apply (Pocklington_refl (Pock_certif 12343 3 ((11, 1)::(2,1)::nil) 31) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12347 : prime 12347. Proof. apply (Pocklington_refl (Pock_certif 12347 2 ((6173, 1)::(2,1)::nil) 1) ((Proof_certif 6173 prime6173) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12373 : prime 12373. Proof. apply (Pocklington_refl (Pock_certif 12373 2 ((1031, 1)::(2,2)::nil) 1) ((Proof_certif 1031 prime1031) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12377 : prime 12377. Proof. apply (Pocklington_refl (Pock_certif 12377 3 ((7, 1)::(2,3)::nil) 108) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12379 : prime 12379. Proof. apply (Pocklington_refl (Pock_certif 12379 2 ((2063, 1)::(2,1)::nil) 1) ((Proof_certif 2063 prime2063) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12391 : prime 12391. Proof. apply (Pocklington_refl (Pock_certif 12391 13 ((5, 1)::(3, 1)::(2,1)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12401 : prime 12401. Proof. apply (Pocklington_refl (Pock_certif 12401 3 ((5, 1)::(2,4)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12409 : prime 12409. Proof. apply (Pocklington_refl (Pock_certif 12409 7 ((3, 1)::(2,3)::nil) 35) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12413 : prime 12413. Proof. apply (Pocklington_refl (Pock_certif 12413 2 ((29, 1)::(2,2)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12421 : prime 12421. Proof. apply (Pocklington_refl (Pock_certif 12421 7 ((3, 2)::(2,2)::nil) 56) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12433 : prime 12433. Proof. apply (Pocklington_refl (Pock_certif 12433 5 ((3, 1)::(2,4)::nil) 66) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12437 : prime 12437. Proof. apply (Pocklington_refl (Pock_certif 12437 2 ((3109, 1)::(2,2)::nil) 1) ((Proof_certif 3109 prime3109) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12451 : prime 12451. Proof. apply (Pocklington_refl (Pock_certif 12451 3 ((5, 1)::(3, 1)::(2,1)::nil) 54) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12457 : prime 12457. Proof. apply (Pocklington_refl (Pock_certif 12457 10 ((3, 1)::(2,3)::nil) 37) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12473 : prime 12473. Proof. apply (Pocklington_refl (Pock_certif 12473 3 ((1559, 1)::(2,3)::nil) 1) ((Proof_certif 1559 prime1559) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12479 : prime 12479. Proof. apply (Pocklington_refl (Pock_certif 12479 23 ((17, 1)::(2,1)::nil) 26) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12487 : prime 12487. Proof. apply (Pocklington_refl (Pock_certif 12487 3 ((2081, 1)::(2,1)::nil) 1) ((Proof_certif 2081 prime2081) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12491 : prime 12491. Proof. apply (Pocklington_refl (Pock_certif 12491 2 ((1249, 1)::(2,1)::nil) 1) ((Proof_certif 1249 prime1249) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12497 : prime 12497. Proof. apply (Pocklington_refl (Pock_certif 12497 3 ((11, 1)::(2,4)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12503 : prime 12503. Proof. apply (Pocklington_refl (Pock_certif 12503 5 ((19, 1)::(2,1)::nil) 24) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12511 : prime 12511. Proof. apply (Pocklington_refl (Pock_certif 12511 3 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12517 : prime 12517. Proof. apply (Pocklington_refl (Pock_certif 12517 2 ((7, 1)::(2,2)::nil) 54) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12527 : prime 12527. Proof. apply (Pocklington_refl (Pock_certif 12527 5 ((6263, 1)::(2,1)::nil) 1) ((Proof_certif 6263 prime6263) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12539 : prime 12539. Proof. apply (Pocklington_refl (Pock_certif 12539 2 ((6269, 1)::(2,1)::nil) 1) ((Proof_certif 6269 prime6269) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12541 : prime 12541. Proof. apply (Pocklington_refl (Pock_certif 12541 6 ((5, 1)::(2,2)::nil) 24) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12547 : prime 12547. Proof. apply (Pocklington_refl (Pock_certif 12547 2 ((3, 2)::(2,1)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12553 : prime 12553. Proof. apply (Pocklington_refl (Pock_certif 12553 5 ((3, 1)::(2,3)::nil) 42) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12569 : prime 12569. Proof. apply (Pocklington_refl (Pock_certif 12569 3 ((1571, 1)::(2,3)::nil) 1) ((Proof_certif 1571 prime1571) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12577 : prime 12577. Proof. apply (Pocklington_refl (Pock_certif 12577 5 ((2,5)::nil) 5) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12583 : prime 12583. Proof. apply (Pocklington_refl (Pock_certif 12583 5 ((3, 2)::(2,1)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12589 : prime 12589. Proof. apply (Pocklington_refl (Pock_certif 12589 2 ((1049, 1)::(2,2)::nil) 1) ((Proof_certif 1049 prime1049) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12601 : prime 12601. Proof. apply (Pocklington_refl (Pock_certif 12601 11 ((3, 1)::(2,3)::nil) 44) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12611 : prime 12611. Proof. apply (Pocklington_refl (Pock_certif 12611 2 ((13, 1)::(2,1)::nil) 14) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12613 : prime 12613. Proof. apply (Pocklington_refl (Pock_certif 12613 2 ((1051, 1)::(2,2)::nil) 1) ((Proof_certif 1051 prime1051) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12619 : prime 12619. Proof. apply (Pocklington_refl (Pock_certif 12619 2 ((3, 2)::(2,1)::nil) 11) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12637 : prime 12637. Proof. apply (Pocklington_refl (Pock_certif 12637 2 ((3, 2)::(2,2)::nil) 62) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12641 : prime 12641. Proof. apply (Pocklington_refl (Pock_certif 12641 3 ((2,5)::nil) 8) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12647 : prime 12647. Proof. apply (Pocklington_refl (Pock_certif 12647 5 ((6323, 1)::(2,1)::nil) 1) ((Proof_certif 6323 prime6323) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12653 : prime 12653. Proof. apply (Pocklington_refl (Pock_certif 12653 2 ((3163, 1)::(2,2)::nil) 1) ((Proof_certif 3163 prime3163) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12659 : prime 12659. Proof. apply (Pocklington_refl (Pock_certif 12659 2 ((6329, 1)::(2,1)::nil) 1) ((Proof_certif 6329 prime6329) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12671 : prime 12671. Proof. apply (Pocklington_refl (Pock_certif 12671 14 ((7, 1)::(5, 1)::(2,1)::nil) 40) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12689 : prime 12689. Proof. apply (Pocklington_refl (Pock_certif 12689 3 ((2,4)::nil) 20) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12697 : prime 12697. Proof. apply (Pocklington_refl (Pock_certif 12697 7 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12703 : prime 12703. Proof. apply (Pocklington_refl (Pock_certif 12703 3 ((29, 1)::(2,1)::nil) 102) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12713 : prime 12713. Proof. apply (Pocklington_refl (Pock_certif 12713 3 ((7, 1)::(2,3)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12721 : prime 12721. Proof. apply (Pocklington_refl (Pock_certif 12721 13 ((2,4)::nil) 23) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12739 : prime 12739. Proof. apply (Pocklington_refl (Pock_certif 12739 2 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12743 : prime 12743. Proof. apply (Pocklington_refl (Pock_certif 12743 5 ((23, 1)::(2,1)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12757 : prime 12757. Proof. apply (Pocklington_refl (Pock_certif 12757 2 ((1063, 1)::(2,2)::nil) 1) ((Proof_certif 1063 prime1063) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12763 : prime 12763. Proof. apply (Pocklington_refl (Pock_certif 12763 2 ((3, 2)::(2,1)::nil) 21) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12781 : prime 12781. Proof. apply (Pocklington_refl (Pock_certif 12781 2 ((3, 2)::(2,2)::nil) 66) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12791 : prime 12791. Proof. apply (Pocklington_refl (Pock_certif 12791 7 ((1279, 1)::(2,1)::nil) 1) ((Proof_certif 1279 prime1279) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12799 : prime 12799. Proof. apply (Pocklington_refl (Pock_certif 12799 13 ((3, 2)::(2,1)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12809 : prime 12809. Proof. apply (Pocklington_refl (Pock_certif 12809 3 ((1601, 1)::(2,3)::nil) 1) ((Proof_certif 1601 prime1601) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12821 : prime 12821. Proof. apply (Pocklington_refl (Pock_certif 12821 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12823 : prime 12823. Proof. apply (Pocklington_refl (Pock_certif 12823 3 ((2137, 1)::(2,1)::nil) 1) ((Proof_certif 2137 prime2137) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12829 : prime 12829. Proof. apply (Pocklington_refl (Pock_certif 12829 2 ((1069, 1)::(2,2)::nil) 1) ((Proof_certif 1069 prime1069) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12841 : prime 12841. Proof. apply (Pocklington_refl (Pock_certif 12841 21 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12853 : prime 12853. Proof. apply (Pocklington_refl (Pock_certif 12853 5 ((3, 2)::(2,2)::nil) 68) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12889 : prime 12889. Proof. apply (Pocklington_refl (Pock_certif 12889 13 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12893 : prime 12893. Proof. apply (Pocklington_refl (Pock_certif 12893 3 ((11, 1)::(2,2)::nil) 28) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12899 : prime 12899. Proof. apply (Pocklington_refl (Pock_certif 12899 2 ((6449, 1)::(2,1)::nil) 1) ((Proof_certif 6449 prime6449) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12907 : prime 12907. Proof. apply (Pocklington_refl (Pock_certif 12907 2 ((3, 2)::(2,1)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12911 : prime 12911. Proof. apply (Pocklington_refl (Pock_certif 12911 13 ((1291, 1)::(2,1)::nil) 1) ((Proof_certif 1291 prime1291) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12917 : prime 12917. Proof. apply (Pocklington_refl (Pock_certif 12917 2 ((3229, 1)::(2,2)::nil) 1) ((Proof_certif 3229 prime3229) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12919 : prime 12919. Proof. apply (Pocklington_refl (Pock_certif 12919 3 ((2153, 1)::(2,1)::nil) 1) ((Proof_certif 2153 prime2153) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12923 : prime 12923. Proof. apply (Pocklington_refl (Pock_certif 12923 2 ((13, 1)::(2,1)::nil) 27) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12941 : prime 12941. Proof. apply (Pocklington_refl (Pock_certif 12941 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12953 : prime 12953. Proof. apply (Pocklington_refl (Pock_certif 12953 3 ((1619, 1)::(2,3)::nil) 1) ((Proof_certif 1619 prime1619) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12959 : prime 12959. Proof. apply (Pocklington_refl (Pock_certif 12959 7 ((11, 1)::(2,1)::nil) 13) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12967 : prime 12967. Proof. apply (Pocklington_refl (Pock_certif 12967 3 ((2161, 1)::(2,1)::nil) 1) ((Proof_certif 2161 prime2161) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12973 : prime 12973. Proof. apply (Pocklington_refl (Pock_certif 12973 2 ((23, 1)::(2,2)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12979 : prime 12979. Proof. apply (Pocklington_refl (Pock_certif 12979 2 ((7, 1)::(3, 1)::(2,1)::nil) 56) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime12983 : prime 12983. Proof. apply (Pocklington_refl (Pock_certif 12983 5 ((6491, 1)::(2,1)::nil) 1) ((Proof_certif 6491 prime6491) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13001 : prime 13001. Proof. apply (Pocklington_refl (Pock_certif 13001 3 ((5, 1)::(2,3)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13003 : prime 13003. Proof. apply (Pocklington_refl (Pock_certif 13003 2 ((11, 1)::(2,1)::nil) 16) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13007 : prime 13007. Proof. apply (Pocklington_refl (Pock_certif 13007 5 ((929, 1)::(2,1)::nil) 1) ((Proof_certif 929 prime929) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13009 : prime 13009. Proof. apply (Pocklington_refl (Pock_certif 13009 7 ((3, 1)::(2,4)::nil) 78) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13033 : prime 13033. Proof. apply (Pocklington_refl (Pock_certif 13033 5 ((3, 1)::(2,3)::nil) 11) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13037 : prime 13037. Proof. apply (Pocklington_refl (Pock_certif 13037 2 ((3259, 1)::(2,2)::nil) 1) ((Proof_certif 3259 prime3259) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13043 : prime 13043. Proof. apply (Pocklington_refl (Pock_certif 13043 2 ((6521, 1)::(2,1)::nil) 1) ((Proof_certif 6521 prime6521) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13049 : prime 13049. Proof. apply (Pocklington_refl (Pock_certif 13049 3 ((7, 1)::(2,3)::nil) 8) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13063 : prime 13063. Proof. apply (Pocklington_refl (Pock_certif 13063 5 ((7, 1)::(3, 1)::(2,1)::nil) 58) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13093 : prime 13093. Proof. apply (Pocklington_refl (Pock_certif 13093 2 ((1091, 1)::(2,2)::nil) 1) ((Proof_certif 1091 prime1091) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13099 : prime 13099. Proof. apply (Pocklington_refl (Pock_certif 13099 3 ((37, 1)::(2,1)::nil) 28) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13103 : prime 13103. Proof. apply (Pocklington_refl (Pock_certif 13103 5 ((6551, 1)::(2,1)::nil) 1) ((Proof_certif 6551 prime6551) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13109 : prime 13109. Proof. apply (Pocklington_refl (Pock_certif 13109 2 ((29, 1)::(2,2)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13121 : prime 13121. Proof. apply (Pocklington_refl (Pock_certif 13121 3 ((2,6)::nil) 76) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13127 : prime 13127. Proof. apply (Pocklington_refl (Pock_certif 13127 5 ((6563, 1)::(2,1)::nil) 1) ((Proof_certif 6563 prime6563) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13147 : prime 13147. Proof. apply (Pocklington_refl (Pock_certif 13147 2 ((7, 1)::(3, 1)::(2,1)::nil) 60) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13151 : prime 13151. Proof. apply (Pocklington_refl (Pock_certif 13151 13 ((5, 2)::(2,1)::nil) 62) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13159 : prime 13159. Proof. apply (Pocklington_refl (Pock_certif 13159 3 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13163 : prime 13163. Proof. apply (Pocklington_refl (Pock_certif 13163 2 ((6581, 1)::(2,1)::nil) 1) ((Proof_certif 6581 prime6581) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13171 : prime 13171. Proof. apply (Pocklington_refl (Pock_certif 13171 11 ((5, 1)::(3, 1)::(2,1)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13177 : prime 13177. Proof. apply (Pocklington_refl (Pock_certif 13177 5 ((3, 1)::(2,3)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13183 : prime 13183. Proof. apply (Pocklington_refl (Pock_certif 13183 3 ((13, 1)::(2,1)::nil) 38) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13187 : prime 13187. Proof. apply (Pocklington_refl (Pock_certif 13187 2 ((19, 1)::(2,1)::nil) 42) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13217 : prime 13217. Proof. apply (Pocklington_refl (Pock_certif 13217 3 ((2,5)::nil) 28) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13219 : prime 13219. Proof. apply (Pocklington_refl (Pock_certif 13219 2 ((2203, 1)::(2,1)::nil) 1) ((Proof_certif 2203 prime2203) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13229 : prime 13229. Proof. apply (Pocklington_refl (Pock_certif 13229 2 ((3307, 1)::(2,2)::nil) 1) ((Proof_certif 3307 prime3307) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13241 : prime 13241. Proof. apply (Pocklington_refl (Pock_certif 13241 3 ((5, 1)::(2,3)::nil) 9) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13249 : prime 13249. Proof. apply (Pocklington_refl (Pock_certif 13249 7 ((2,6)::nil) 78) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13259 : prime 13259. Proof. apply (Pocklington_refl (Pock_certif 13259 2 ((947, 1)::(2,1)::nil) 1) ((Proof_certif 947 prime947) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13267 : prime 13267. Proof. apply (Pocklington_refl (Pock_certif 13267 3 ((3, 2)::(2,1)::nil) 11) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13291 : prime 13291. Proof. apply (Pocklington_refl (Pock_certif 13291 2 ((5, 1)::(3, 1)::(2,1)::nil) 21) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13297 : prime 13297. Proof. apply (Pocklington_refl (Pock_certif 13297 5 ((2,4)::nil) 27) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13309 : prime 13309. Proof. apply (Pocklington_refl (Pock_certif 13309 2 ((1109, 1)::(2,2)::nil) 1) ((Proof_certif 1109 prime1109) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13313 : prime 13313. Proof. apply (Pocklington_refl (Pock_certif 13313 3 ((2,10)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13327 : prime 13327. Proof. apply (Pocklington_refl (Pock_certif 13327 3 ((2221, 1)::(2,1)::nil) 1) ((Proof_certif 2221 prime2221) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13331 : prime 13331. Proof. apply (Pocklington_refl (Pock_certif 13331 2 ((31, 1)::(2,1)::nil) 90) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13337 : prime 13337. Proof. apply (Pocklington_refl (Pock_certif 13337 3 ((1667, 1)::(2,3)::nil) 1) ((Proof_certif 1667 prime1667) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13339 : prime 13339. Proof. apply (Pocklington_refl (Pock_certif 13339 2 ((3, 2)::(2,1)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13367 : prime 13367. Proof. apply (Pocklington_refl (Pock_certif 13367 5 ((41, 1)::(2,1)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13381 : prime 13381. Proof. apply (Pocklington_refl (Pock_certif 13381 6 ((5, 1)::(2,2)::nil) 26) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13397 : prime 13397. Proof. apply (Pocklington_refl (Pock_certif 13397 2 ((17, 1)::(2,2)::nil) 60) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13399 : prime 13399. Proof. apply (Pocklington_refl (Pock_certif 13399 3 ((7, 1)::(3, 1)::(2,1)::nil) 66) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13411 : prime 13411. Proof. apply (Pocklington_refl (Pock_certif 13411 2 ((3, 2)::(2,1)::nil) 21) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13417 : prime 13417. Proof. apply (Pocklington_refl (Pock_certif 13417 5 ((3, 1)::(2,3)::nil) 29) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13421 : prime 13421. Proof. apply (Pocklington_refl (Pock_certif 13421 10 ((5, 1)::(2,2)::nil) 28) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13441 : prime 13441. Proof. apply (Pocklington_refl (Pock_certif 13441 11 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13451 : prime 13451. Proof. apply (Pocklington_refl (Pock_certif 13451 2 ((5, 2)::(2,1)::nil) 68) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13457 : prime 13457. Proof. apply (Pocklington_refl (Pock_certif 13457 3 ((29, 1)::(2,4)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13463 : prime 13463. Proof. apply (Pocklington_refl (Pock_certif 13463 5 ((53, 1)::(2,1)::nil) 1) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13469 : prime 13469. Proof. apply (Pocklington_refl (Pock_certif 13469 2 ((7, 1)::(2,2)::nil) 32) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13477 : prime 13477. Proof. apply (Pocklington_refl (Pock_certif 13477 2 ((1123, 1)::(2,2)::nil) 1) ((Proof_certif 1123 prime1123) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13487 : prime 13487. Proof. apply (Pocklington_refl (Pock_certif 13487 5 ((11, 1)::(2,1)::nil) 39) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13499 : prime 13499. Proof. apply (Pocklington_refl (Pock_certif 13499 6 ((17, 1)::(2,1)::nil) 56) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13513 : prime 13513. Proof. apply (Pocklington_refl (Pock_certif 13513 5 ((3, 1)::(2,3)::nil) 33) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13523 : prime 13523. Proof. apply (Pocklington_refl (Pock_certif 13523 2 ((6761, 1)::(2,1)::nil) 1) ((Proof_certif 6761 prime6761) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13537 : prime 13537. Proof. apply (Pocklington_refl (Pock_certif 13537 5 ((2,5)::nil) 38) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13553 : prime 13553. Proof. apply (Pocklington_refl (Pock_certif 13553 3 ((7, 1)::(2,4)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13567 : prime 13567. Proof. apply (Pocklington_refl (Pock_certif 13567 3 ((7, 1)::(3, 1)::(2,1)::nil) 70) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13577 : prime 13577. Proof. apply (Pocklington_refl (Pock_certif 13577 3 ((1697, 1)::(2,3)::nil) 1) ((Proof_certif 1697 prime1697) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13591 : prime 13591. Proof. apply (Pocklington_refl (Pock_certif 13591 3 ((3, 2)::(2,1)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13597 : prime 13597. Proof. apply (Pocklington_refl (Pock_certif 13597 2 ((11, 1)::(2,2)::nil) 44) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13613 : prime 13613. Proof. apply (Pocklington_refl (Pock_certif 13613 2 ((41, 1)::(2,2)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13619 : prime 13619. Proof. apply (Pocklington_refl (Pock_certif 13619 2 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13627 : prime 13627. Proof. apply (Pocklington_refl (Pock_certif 13627 2 ((757, 1)::(2,1)::nil) 1) ((Proof_certif 757 prime757) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13633 : prime 13633. Proof. apply (Pocklington_refl (Pock_certif 13633 5 ((2,6)::nil) 84) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13649 : prime 13649. Proof. apply (Pocklington_refl (Pock_certif 13649 3 ((2,4)::nil) 15) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13669 : prime 13669. Proof. apply (Pocklington_refl (Pock_certif 13669 2 ((17, 1)::(2,2)::nil) 64) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13679 : prime 13679. Proof. apply (Pocklington_refl (Pock_certif 13679 7 ((977, 1)::(2,1)::nil) 1) ((Proof_certif 977 prime977) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13681 : prime 13681. Proof. apply (Pocklington_refl (Pock_certif 13681 7 ((2,4)::nil) 17) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13687 : prime 13687. Proof. apply (Pocklington_refl (Pock_certif 13687 3 ((2281, 1)::(2,1)::nil) 1) ((Proof_certif 2281 prime2281) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13691 : prime 13691. Proof. apply (Pocklington_refl (Pock_certif 13691 2 ((37, 1)::(2,1)::nil) 36) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13693 : prime 13693. Proof. apply (Pocklington_refl (Pock_certif 13693 2 ((7, 1)::(2,2)::nil) 40) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13697 : prime 13697. Proof. apply (Pocklington_refl (Pock_certif 13697 3 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13709 : prime 13709. Proof. apply (Pocklington_refl (Pock_certif 13709 2 ((23, 1)::(2,2)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13711 : prime 13711. Proof. apply (Pocklington_refl (Pock_certif 13711 6 ((5, 1)::(3, 1)::(2,1)::nil) 36) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13721 : prime 13721. Proof. apply (Pocklington_refl (Pock_certif 13721 3 ((5, 1)::(2,3)::nil) 22) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13723 : prime 13723. Proof. apply (Pocklington_refl (Pock_certif 13723 2 ((2287, 1)::(2,1)::nil) 1) ((Proof_certif 2287 prime2287) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13729 : prime 13729. Proof. apply (Pocklington_refl (Pock_certif 13729 17 ((2,5)::nil) 44) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13751 : prime 13751. Proof. apply (Pocklington_refl (Pock_certif 13751 11 ((5, 2)::(2,1)::nil) 74) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13757 : prime 13757. Proof. apply (Pocklington_refl (Pock_certif 13757 2 ((19, 1)::(2,2)::nil) 28) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13759 : prime 13759. Proof. apply (Pocklington_refl (Pock_certif 13759 3 ((2293, 1)::(2,1)::nil) 1) ((Proof_certif 2293 prime2293) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13763 : prime 13763. Proof. apply (Pocklington_refl (Pock_certif 13763 2 ((983, 1)::(2,1)::nil) 1) ((Proof_certif 983 prime983) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13781 : prime 13781. Proof. apply (Pocklington_refl (Pock_certif 13781 7 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13789 : prime 13789. Proof. apply (Pocklington_refl (Pock_certif 13789 7 ((3, 2)::(2,2)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13799 : prime 13799. Proof. apply (Pocklington_refl (Pock_certif 13799 7 ((6899, 1)::(2,1)::nil) 1) ((Proof_certif 6899 prime6899) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13807 : prime 13807. Proof. apply (Pocklington_refl (Pock_certif 13807 5 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13829 : prime 13829. Proof. apply (Pocklington_refl (Pock_certif 13829 2 ((3457, 1)::(2,2)::nil) 1) ((Proof_certif 3457 prime3457) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13831 : prime 13831. Proof. apply (Pocklington_refl (Pock_certif 13831 6 ((5, 1)::(3, 1)::(2,1)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13841 : prime 13841. Proof. apply (Pocklington_refl (Pock_certif 13841 6 ((5, 1)::(2,4)::nil) 12) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13859 : prime 13859. Proof. apply (Pocklington_refl (Pock_certif 13859 2 ((13, 1)::(2,1)::nil) 9) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13873 : prime 13873. Proof. apply (Pocklington_refl (Pock_certif 13873 5 ((3, 1)::(2,4)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13877 : prime 13877. Proof. apply (Pocklington_refl (Pock_certif 13877 2 ((3469, 1)::(2,2)::nil) 1) ((Proof_certif 3469 prime3469) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13879 : prime 13879. Proof. apply (Pocklington_refl (Pock_certif 13879 6 ((3, 2)::(2,1)::nil) 7) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13883 : prime 13883. Proof. apply (Pocklington_refl (Pock_certif 13883 2 ((11, 1)::(2,1)::nil) 10) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13901 : prime 13901. Proof. apply (Pocklington_refl (Pock_certif 13901 2 ((5, 1)::(2,2)::nil) 9) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13903 : prime 13903. Proof. apply (Pocklington_refl (Pock_certif 13903 3 ((7, 1)::(3, 1)::(2,1)::nil) 78) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13907 : prime 13907. Proof. apply (Pocklington_refl (Pock_certif 13907 2 ((17, 1)::(2,1)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13913 : prime 13913. Proof. apply (Pocklington_refl (Pock_certif 13913 3 ((37, 1)::(2,3)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13921 : prime 13921. Proof. apply (Pocklington_refl (Pock_certif 13921 7 ((2,5)::nil) 50) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13931 : prime 13931. Proof. apply (Pocklington_refl (Pock_certif 13931 2 ((7, 1)::(5, 1)::(2,1)::nil) 58) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13933 : prime 13933. Proof. apply (Pocklington_refl (Pock_certif 13933 2 ((3, 2)::(2,2)::nil) 26) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13963 : prime 13963. Proof. apply (Pocklington_refl (Pock_certif 13963 3 ((13, 1)::(2,1)::nil) 14) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13967 : prime 13967. Proof. apply (Pocklington_refl (Pock_certif 13967 5 ((6983, 1)::(2,1)::nil) 1) ((Proof_certif 6983 prime6983) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13997 : prime 13997. Proof. apply (Pocklington_refl (Pock_certif 13997 2 ((3499, 1)::(2,2)::nil) 1) ((Proof_certif 3499 prime3499) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime13999 : prime 13999. Proof. apply (Pocklington_refl (Pock_certif 13999 3 ((2333, 1)::(2,1)::nil) 1) ((Proof_certif 2333 prime2333) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14009 : prime 14009. Proof. apply (Pocklington_refl (Pock_certif 14009 3 ((17, 1)::(2,3)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14011 : prime 14011. Proof. apply (Pocklington_refl (Pock_certif 14011 2 ((5, 1)::(3, 1)::(2,1)::nil) 46) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14029 : prime 14029. Proof. apply (Pocklington_refl (Pock_certif 14029 2 ((7, 1)::(2,2)::nil) 52) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14033 : prime 14033. Proof. apply (Pocklington_refl (Pock_certif 14033 3 ((877, 1)::(2,4)::nil) 1) ((Proof_certif 877 prime877) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14051 : prime 14051. Proof. apply (Pocklington_refl (Pock_certif 14051 2 ((5, 2)::(2,1)::nil) 80) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14057 : prime 14057. Proof. apply (Pocklington_refl (Pock_certif 14057 3 ((7, 1)::(2,3)::nil) 26) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14071 : prime 14071. Proof. apply (Pocklington_refl (Pock_certif 14071 7 ((5, 1)::(3, 1)::(2,1)::nil) 48) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14081 : prime 14081. Proof. apply (Pocklington_refl (Pock_certif 14081 3 ((2,8)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14083 : prime 14083. Proof. apply (Pocklington_refl (Pock_certif 14083 2 ((2347, 1)::(2,1)::nil) 1) ((Proof_certif 2347 prime2347) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14087 : prime 14087. Proof. apply (Pocklington_refl (Pock_certif 14087 5 ((7043, 1)::(2,1)::nil) 1) ((Proof_certif 7043 prime7043) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14107 : prime 14107. Proof. apply (Pocklington_refl (Pock_certif 14107 2 ((2351, 1)::(2,1)::nil) 1) ((Proof_certif 2351 prime2351) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14143 : prime 14143. Proof. apply (Pocklington_refl (Pock_certif 14143 3 ((2357, 1)::(2,1)::nil) 1) ((Proof_certif 2357 prime2357) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14149 : prime 14149. Proof. apply (Pocklington_refl (Pock_certif 14149 6 ((3, 2)::(2,2)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14153 : prime 14153. Proof. apply (Pocklington_refl (Pock_certif 14153 3 ((29, 1)::(2,3)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14159 : prime 14159. Proof. apply (Pocklington_refl (Pock_certif 14159 13 ((7079, 1)::(2,1)::nil) 1) ((Proof_certif 7079 prime7079) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14173 : prime 14173. Proof. apply (Pocklington_refl (Pock_certif 14173 2 ((1181, 1)::(2,2)::nil) 1) ((Proof_certif 1181 prime1181) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14177 : prime 14177. Proof. apply (Pocklington_refl (Pock_certif 14177 3 ((2,5)::nil) 58) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14197 : prime 14197. Proof. apply (Pocklington_refl (Pock_certif 14197 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14207 : prime 14207. Proof. apply (Pocklington_refl (Pock_certif 14207 5 ((7103, 1)::(2,1)::nil) 1) ((Proof_certif 7103 prime7103) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14221 : prime 14221. Proof. apply (Pocklington_refl (Pock_certif 14221 2 ((3, 2)::(2,2)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14243 : prime 14243. Proof. apply (Pocklington_refl (Pock_certif 14243 2 ((7121, 1)::(2,1)::nil) 1) ((Proof_certif 7121 prime7121) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14249 : prime 14249. Proof. apply (Pocklington_refl (Pock_certif 14249 3 ((13, 1)::(2,3)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14251 : prime 14251. Proof. apply (Pocklington_refl (Pock_certif 14251 3 ((5, 1)::(3, 1)::(2,1)::nil) 54) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14281 : prime 14281. Proof. apply (Pocklington_refl (Pock_certif 14281 19 ((3, 1)::(2,3)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14293 : prime 14293. Proof. apply (Pocklington_refl (Pock_certif 14293 6 ((3, 2)::(2,2)::nil) 36) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14303 : prime 14303. Proof. apply (Pocklington_refl (Pock_certif 14303 5 ((7151, 1)::(2,1)::nil) 1) ((Proof_certif 7151 prime7151) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14321 : prime 14321. Proof. apply (Pocklington_refl (Pock_certif 14321 3 ((2,4)::nil) 27) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14323 : prime 14323. Proof. apply (Pocklington_refl (Pock_certif 14323 2 ((7, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14327 : prime 14327. Proof. apply (Pocklington_refl (Pock_certif 14327 5 ((13, 1)::(2,1)::nil) 29) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14341 : prime 14341. Proof. apply (Pocklington_refl (Pock_certif 14341 2 ((5, 1)::(2,2)::nil) 35) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14347 : prime 14347. Proof. apply (Pocklington_refl (Pock_certif 14347 2 ((797, 1)::(2,1)::nil) 1) ((Proof_certif 797 prime797) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14369 : prime 14369. Proof. apply (Pocklington_refl (Pock_certif 14369 3 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14387 : prime 14387. Proof. apply (Pocklington_refl (Pock_certif 14387 2 ((7193, 1)::(2,1)::nil) 1) ((Proof_certif 7193 prime7193) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14389 : prime 14389. Proof. apply (Pocklington_refl (Pock_certif 14389 2 ((11, 1)::(2,2)::nil) 62) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14401 : prime 14401. Proof. apply (Pocklington_refl (Pock_certif 14401 11 ((2,6)::nil) 96) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14407 : prime 14407. Proof. apply (Pocklington_refl (Pock_certif 14407 19 ((7, 1)::(3, 1)::(2,1)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14411 : prime 14411. Proof. apply (Pocklington_refl (Pock_certif 14411 2 ((11, 1)::(2,1)::nil) 37) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14419 : prime 14419. Proof. apply (Pocklington_refl (Pock_certif 14419 2 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14423 : prime 14423. Proof. apply (Pocklington_refl (Pock_certif 14423 5 ((7211, 1)::(2,1)::nil) 1) ((Proof_certif 7211 prime7211) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14431 : prime 14431. Proof. apply (Pocklington_refl (Pock_certif 14431 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14437 : prime 14437. Proof. apply (Pocklington_refl (Pock_certif 14437 5 ((3, 2)::(2,2)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14447 : prime 14447. Proof. apply (Pocklington_refl (Pock_certif 14447 5 ((31, 1)::(2,1)::nil) 108) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14449 : prime 14449. Proof. apply (Pocklington_refl (Pock_certif 14449 11 ((3, 1)::(2,4)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14461 : prime 14461. Proof. apply (Pocklington_refl (Pock_certif 14461 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14479 : prime 14479. Proof. apply (Pocklington_refl (Pock_certif 14479 3 ((19, 1)::(2,1)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14489 : prime 14489. Proof. apply (Pocklington_refl (Pock_certif 14489 3 ((1811, 1)::(2,3)::nil) 1) ((Proof_certif 1811 prime1811) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14503 : prime 14503. Proof. apply (Pocklington_refl (Pock_certif 14503 3 ((2417, 1)::(2,1)::nil) 1) ((Proof_certif 2417 prime2417) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14519 : prime 14519. Proof. apply (Pocklington_refl (Pock_certif 14519 7 ((17, 1)::(2,1)::nil) 17) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14533 : prime 14533. Proof. apply (Pocklington_refl (Pock_certif 14533 2 ((7, 1)::(2,2)::nil) 12) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14537 : prime 14537. Proof. apply (Pocklington_refl (Pock_certif 14537 3 ((23, 1)::(2,3)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14543 : prime 14543. Proof. apply (Pocklington_refl (Pock_certif 14543 5 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14549 : prime 14549. Proof. apply (Pocklington_refl (Pock_certif 14549 2 ((3637, 1)::(2,2)::nil) 1) ((Proof_certif 3637 prime3637) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14551 : prime 14551. Proof. apply (Pocklington_refl (Pock_certif 14551 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14557 : prime 14557. Proof. apply (Pocklington_refl (Pock_certif 14557 2 ((1213, 1)::(2,2)::nil) 1) ((Proof_certif 1213 prime1213) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14561 : prime 14561. Proof. apply (Pocklington_refl (Pock_certif 14561 3 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14563 : prime 14563. Proof. apply (Pocklington_refl (Pock_certif 14563 3 ((3, 2)::(2,1)::nil) 10) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14591 : prime 14591. Proof. apply (Pocklington_refl (Pock_certif 14591 11 ((1459, 1)::(2,1)::nil) 1) ((Proof_certif 1459 prime1459) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14593 : prime 14593. Proof. apply (Pocklington_refl (Pock_certif 14593 5 ((2,8)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14621 : prime 14621. Proof. apply (Pocklington_refl (Pock_certif 14621 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14627 : prime 14627. Proof. apply (Pocklington_refl (Pock_certif 14627 2 ((71, 1)::(2,1)::nil) 1) ((Proof_certif 71 prime71) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14629 : prime 14629. Proof. apply (Pocklington_refl (Pock_certif 14629 2 ((23, 1)::(2,2)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14633 : prime 14633. Proof. apply (Pocklington_refl (Pock_certif 14633 3 ((31, 1)::(2,3)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14639 : prime 14639. Proof. apply (Pocklington_refl (Pock_certif 14639 11 ((13, 1)::(2,1)::nil) 42) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14653 : prime 14653. Proof. apply (Pocklington_refl (Pock_certif 14653 2 ((3, 2)::(2,2)::nil) 46) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14657 : prime 14657. Proof. apply (Pocklington_refl (Pock_certif 14657 3 ((2,6)::nil) 100) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14669 : prime 14669. Proof. apply (Pocklington_refl (Pock_certif 14669 2 ((19, 1)::(2,2)::nil) 40) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14683 : prime 14683. Proof. apply (Pocklington_refl (Pock_certif 14683 2 ((2447, 1)::(2,1)::nil) 1) ((Proof_certif 2447 prime2447) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14699 : prime 14699. Proof. apply (Pocklington_refl (Pock_certif 14699 2 ((7349, 1)::(2,1)::nil) 1) ((Proof_certif 7349 prime7349) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14713 : prime 14713. Proof. apply (Pocklington_refl (Pock_certif 14713 5 ((3, 1)::(2,3)::nil) 35) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14717 : prime 14717. Proof. apply (Pocklington_refl (Pock_certif 14717 2 ((13, 1)::(2,2)::nil) 74) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14723 : prime 14723. Proof. apply (Pocklington_refl (Pock_certif 14723 2 ((17, 1)::(2,1)::nil) 24) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14731 : prime 14731. Proof. apply (Pocklington_refl (Pock_certif 14731 10 ((5, 1)::(3, 1)::(2,1)::nil) 7) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14737 : prime 14737. Proof. apply (Pocklington_refl (Pock_certif 14737 5 ((2,4)::nil) 20) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14741 : prime 14741. Proof. apply (Pocklington_refl (Pock_certif 14741 2 ((5, 1)::(2,2)::nil) 12) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14747 : prime 14747. Proof. apply (Pocklington_refl (Pock_certif 14747 2 ((73, 1)::(2,1)::nil) 1) ((Proof_certif 73 prime73) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14753 : prime 14753. Proof. apply (Pocklington_refl (Pock_certif 14753 3 ((2,5)::nil) 10) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14759 : prime 14759. Proof. apply (Pocklington_refl (Pock_certif 14759 17 ((47, 1)::(2,1)::nil) 1) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14767 : prime 14767. Proof. apply (Pocklington_refl (Pock_certif 14767 3 ((23, 1)::(2,1)::nil) 44) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14771 : prime 14771. Proof. apply (Pocklington_refl (Pock_certif 14771 2 ((7, 1)::(5, 1)::(2,1)::nil) 70) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14779 : prime 14779. Proof. apply (Pocklington_refl (Pock_certif 14779 3 ((3, 2)::(2,1)::nil) 25) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14783 : prime 14783. Proof. apply (Pocklington_refl (Pock_certif 14783 5 ((19, 1)::(2,1)::nil) 6) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14797 : prime 14797. Proof. apply (Pocklington_refl (Pock_certif 14797 2 ((3, 2)::(2,2)::nil) 50) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14813 : prime 14813. Proof. apply (Pocklington_refl (Pock_certif 14813 2 ((7, 1)::(2,2)::nil) 23) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14821 : prime 14821. Proof. apply (Pocklington_refl (Pock_certif 14821 2 ((5, 1)::(2,2)::nil) 17) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14827 : prime 14827. Proof. apply (Pocklington_refl (Pock_certif 14827 2 ((7, 1)::(3, 1)::(2,1)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14831 : prime 14831. Proof. apply (Pocklington_refl (Pock_certif 14831 11 ((1483, 1)::(2,1)::nil) 1) ((Proof_certif 1483 prime1483) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14843 : prime 14843. Proof. apply (Pocklington_refl (Pock_certif 14843 2 ((41, 1)::(2,1)::nil) 16) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14851 : prime 14851. Proof. apply (Pocklington_refl (Pock_certif 14851 2 ((3, 2)::(2,1)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14867 : prime 14867. Proof. apply (Pocklington_refl (Pock_certif 14867 2 ((7433, 1)::(2,1)::nil) 1) ((Proof_certif 7433 prime7433) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14869 : prime 14869. Proof. apply (Pocklington_refl (Pock_certif 14869 2 ((3, 2)::(2,2)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14879 : prime 14879. Proof. apply (Pocklington_refl (Pock_certif 14879 7 ((43, 1)::(2,1)::nil) 1) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14887 : prime 14887. Proof. apply (Pocklington_refl (Pock_certif 14887 3 ((3, 2)::(2,1)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14891 : prime 14891. Proof. apply (Pocklington_refl (Pock_certif 14891 2 ((1489, 1)::(2,1)::nil) 1) ((Proof_certif 1489 prime1489) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14897 : prime 14897. Proof. apply (Pocklington_refl (Pock_certif 14897 3 ((7, 1)::(2,4)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14923 : prime 14923. Proof. apply (Pocklington_refl (Pock_certif 14923 2 ((829, 1)::(2,1)::nil) 1) ((Proof_certif 829 prime829) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14929 : prime 14929. Proof. apply (Pocklington_refl (Pock_certif 14929 7 ((3, 1)::(2,4)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14939 : prime 14939. Proof. apply (Pocklington_refl (Pock_certif 14939 2 ((11, 1)::(2,1)::nil) 15) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14947 : prime 14947. Proof. apply (Pocklington_refl (Pock_certif 14947 2 ((47, 1)::(2,1)::nil) 1) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14951 : prime 14951. Proof. apply (Pocklington_refl (Pock_certif 14951 19 ((5, 2)::(2,1)::nil) 98) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14957 : prime 14957. Proof. apply (Pocklington_refl (Pock_certif 14957 2 ((3739, 1)::(2,2)::nil) 1) ((Proof_certif 3739 prime3739) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14969 : prime 14969. Proof. apply (Pocklington_refl (Pock_certif 14969 3 ((1871, 1)::(2,3)::nil) 1) ((Proof_certif 1871 prime1871) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime14983 : prime 14983. Proof. apply (Pocklington_refl (Pock_certif 14983 3 ((11, 1)::(2,1)::nil) 17) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15013 : prime 15013. Proof. apply (Pocklington_refl (Pock_certif 15013 2 ((3, 2)::(2,2)::nil) 56) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15017 : prime 15017. Proof. apply (Pocklington_refl (Pock_certif 15017 3 ((1877, 1)::(2,3)::nil) 1) ((Proof_certif 1877 prime1877) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15031 : prime 15031. Proof. apply (Pocklington_refl (Pock_certif 15031 3 ((5, 1)::(3, 1)::(2,1)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15053 : prime 15053. Proof. apply (Pocklington_refl (Pock_certif 15053 2 ((53, 1)::(2,2)::nil) 1) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15061 : prime 15061. Proof. apply (Pocklington_refl (Pock_certif 15061 2 ((5, 1)::(2,2)::nil) 30) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15073 : prime 15073. Proof. apply (Pocklington_refl (Pock_certif 15073 5 ((2,5)::nil) 21) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15077 : prime 15077. Proof. apply (Pocklington_refl (Pock_certif 15077 2 ((3769, 1)::(2,2)::nil) 1) ((Proof_certif 3769 prime3769) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15083 : prime 15083. Proof. apply (Pocklington_refl (Pock_certif 15083 2 ((7541, 1)::(2,1)::nil) 1) ((Proof_certif 7541 prime7541) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15091 : prime 15091. Proof. apply (Pocklington_refl (Pock_certif 15091 2 ((5, 1)::(3, 1)::(2,1)::nil) 21) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15101 : prime 15101. Proof. apply (Pocklington_refl (Pock_certif 15101 2 ((5, 1)::(2,2)::nil) 32) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15107 : prime 15107. Proof. apply (Pocklington_refl (Pock_certif 15107 2 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15121 : prime 15121. Proof. apply (Pocklington_refl (Pock_certif 15121 11 ((3, 1)::(2,4)::nil) 26) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15131 : prime 15131. Proof. apply (Pocklington_refl (Pock_certif 15131 2 ((17, 1)::(2,1)::nil) 36) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15137 : prime 15137. Proof. apply (Pocklington_refl (Pock_certif 15137 3 ((2,5)::nil) 23) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15139 : prime 15139. Proof. apply (Pocklington_refl (Pock_certif 15139 2 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15149 : prime 15149. Proof. apply (Pocklington_refl (Pock_certif 15149 2 ((7, 1)::(2,2)::nil) 36) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15161 : prime 15161. Proof. apply (Pocklington_refl (Pock_certif 15161 3 ((5, 1)::(2,3)::nil) 58) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15173 : prime 15173. Proof. apply (Pocklington_refl (Pock_certif 15173 2 ((3793, 1)::(2,2)::nil) 1) ((Proof_certif 3793 prime3793) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15187 : prime 15187. Proof. apply (Pocklington_refl (Pock_certif 15187 2 ((2531, 1)::(2,1)::nil) 1) ((Proof_certif 2531 prime2531) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15193 : prime 15193. Proof. apply (Pocklington_refl (Pock_certif 15193 5 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15199 : prime 15199. Proof. apply (Pocklington_refl (Pock_certif 15199 6 ((17, 1)::(2,1)::nil) 38) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15217 : prime 15217. Proof. apply (Pocklington_refl (Pock_certif 15217 10 ((3, 1)::(2,4)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15227 : prime 15227. Proof. apply (Pocklington_refl (Pock_certif 15227 2 ((23, 1)::(2,1)::nil) 54) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15233 : prime 15233. Proof. apply (Pocklington_refl (Pock_certif 15233 3 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15241 : prime 15241. Proof. apply (Pocklington_refl (Pock_certif 15241 11 ((3, 1)::(2,3)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15259 : prime 15259. Proof. apply (Pocklington_refl (Pock_certif 15259 2 ((2543, 1)::(2,1)::nil) 1) ((Proof_certif 2543 prime2543) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15263 : prime 15263. Proof. apply (Pocklington_refl (Pock_certif 15263 5 ((13, 1)::(2,1)::nil) 11) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15269 : prime 15269. Proof. apply (Pocklington_refl (Pock_certif 15269 2 ((11, 1)::(2,2)::nil) 82) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15271 : prime 15271. Proof. apply (Pocklington_refl (Pock_certif 15271 11 ((5, 1)::(3, 1)::(2,1)::nil) 27) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15277 : prime 15277. Proof. apply (Pocklington_refl (Pock_certif 15277 2 ((19, 1)::(2,2)::nil) 48) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15287 : prime 15287. Proof. apply (Pocklington_refl (Pock_certif 15287 5 ((7643, 1)::(2,1)::nil) 1) ((Proof_certif 7643 prime7643) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15289 : prime 15289. Proof. apply (Pocklington_refl (Pock_certif 15289 11 ((3, 1)::(2,3)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15299 : prime 15299. Proof. apply (Pocklington_refl (Pock_certif 15299 2 ((7649, 1)::(2,1)::nil) 1) ((Proof_certif 7649 prime7649) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15307 : prime 15307. Proof. apply (Pocklington_refl (Pock_certif 15307 2 ((2551, 1)::(2,1)::nil) 1) ((Proof_certif 2551 prime2551) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15313 : prime 15313. Proof. apply (Pocklington_refl (Pock_certif 15313 5 ((2,4)::nil) 24) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15319 : prime 15319. Proof. apply (Pocklington_refl (Pock_certif 15319 3 ((3, 2)::(2,1)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15329 : prime 15329. Proof. apply (Pocklington_refl (Pock_certif 15329 3 ((2,5)::nil) 30) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15331 : prime 15331. Proof. apply (Pocklington_refl (Pock_certif 15331 2 ((5, 1)::(3, 1)::(2,1)::nil) 29) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15349 : prime 15349. Proof. apply (Pocklington_refl (Pock_certif 15349 2 ((1279, 1)::(2,2)::nil) 1) ((Proof_certif 1279 prime1279) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15359 : prime 15359. Proof. apply (Pocklington_refl (Pock_certif 15359 7 ((1097, 1)::(2,1)::nil) 1) ((Proof_certif 1097 prime1097) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15361 : prime 15361. Proof. apply (Pocklington_refl (Pock_certif 15361 7 ((2,10)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15373 : prime 15373. Proof. apply (Pocklington_refl (Pock_certif 15373 2 ((3, 2)::(2,2)::nil) 66) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15377 : prime 15377. Proof. apply (Pocklington_refl (Pock_certif 15377 3 ((31, 1)::(2,4)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15383 : prime 15383. Proof. apply (Pocklington_refl (Pock_certif 15383 5 ((7691, 1)::(2,1)::nil) 1) ((Proof_certif 7691 prime7691) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15391 : prime 15391. Proof. apply (Pocklington_refl (Pock_certif 15391 6 ((3, 2)::(2,1)::nil) 23) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15401 : prime 15401. Proof. apply (Pocklington_refl (Pock_certif 15401 6 ((5, 1)::(2,3)::nil) 64) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15413 : prime 15413. Proof. apply (Pocklington_refl (Pock_certif 15413 2 ((3853, 1)::(2,2)::nil) 1) ((Proof_certif 3853 prime3853) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15427 : prime 15427. Proof. apply (Pocklington_refl (Pock_certif 15427 2 ((3, 2)::(2,1)::nil) 25) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15439 : prime 15439. Proof. apply (Pocklington_refl (Pock_certif 15439 3 ((31, 1)::(2,1)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15443 : prime 15443. Proof. apply (Pocklington_refl (Pock_certif 15443 2 ((1103, 1)::(2,1)::nil) 1) ((Proof_certif 1103 prime1103) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15451 : prime 15451. Proof. apply (Pocklington_refl (Pock_certif 15451 3 ((5, 1)::(3, 1)::(2,1)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15461 : prime 15461. Proof. apply (Pocklington_refl (Pock_certif 15461 2 ((5, 1)::(2,2)::nil) 4) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15467 : prime 15467. Proof. apply (Pocklington_refl (Pock_certif 15467 2 ((11, 1)::(2,1)::nil) 41) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15473 : prime 15473. Proof. apply (Pocklington_refl (Pock_certif 15473 3 ((967, 1)::(2,4)::nil) 1) ((Proof_certif 967 prime967) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15493 : prime 15493. Proof. apply (Pocklington_refl (Pock_certif 15493 2 ((1291, 1)::(2,2)::nil) 1) ((Proof_certif 1291 prime1291) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15497 : prime 15497. Proof. apply (Pocklington_refl (Pock_certif 15497 3 ((13, 1)::(2,3)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15511 : prime 15511. Proof. apply (Pocklington_refl (Pock_certif 15511 3 ((5, 1)::(3, 1)::(2,1)::nil) 36) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15527 : prime 15527. Proof. apply (Pocklington_refl (Pock_certif 15527 5 ((1109, 1)::(2,1)::nil) 1) ((Proof_certif 1109 prime1109) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15541 : prime 15541. Proof. apply (Pocklington_refl (Pock_certif 15541 6 ((5, 1)::(2,2)::nil) 11) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15551 : prime 15551. Proof. apply (Pocklington_refl (Pock_certif 15551 7 ((5, 2)::(2,1)::nil) 9) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15559 : prime 15559. Proof. apply (Pocklington_refl (Pock_certif 15559 3 ((2593, 1)::(2,1)::nil) 1) ((Proof_certif 2593 prime2593) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15569 : prime 15569. Proof. apply (Pocklington_refl (Pock_certif 15569 3 ((7, 1)::(2,4)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15581 : prime 15581. Proof. apply (Pocklington_refl (Pock_certif 15581 2 ((5, 1)::(2,2)::nil) 14) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15583 : prime 15583. Proof. apply (Pocklington_refl (Pock_certif 15583 3 ((7, 1)::(3, 1)::(2,1)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15601 : prime 15601. Proof. apply (Pocklington_refl (Pock_certif 15601 17 ((3, 1)::(2,4)::nil) 36) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15607 : prime 15607. Proof. apply (Pocklington_refl (Pock_certif 15607 3 ((3, 3)::(2,1)::nil) 72) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15619 : prime 15619. Proof. apply (Pocklington_refl (Pock_certif 15619 3 ((19, 1)::(2,1)::nil) 30) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15629 : prime 15629. Proof. apply (Pocklington_refl (Pock_certif 15629 2 ((3907, 1)::(2,2)::nil) 1) ((Proof_certif 3907 prime3907) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15641 : prime 15641. Proof. apply (Pocklington_refl (Pock_certif 15641 3 ((5, 1)::(2,3)::nil) 70) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15643 : prime 15643. Proof. apply (Pocklington_refl (Pock_certif 15643 2 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15647 : prime 15647. Proof. apply (Pocklington_refl (Pock_certif 15647 5 ((7823, 1)::(2,1)::nil) 1) ((Proof_certif 7823 prime7823) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15649 : prime 15649. Proof. apply (Pocklington_refl (Pock_certif 15649 11 ((2,5)::nil) 40) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15661 : prime 15661. Proof. apply (Pocklington_refl (Pock_certif 15661 2 ((3, 2)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15667 : prime 15667. Proof. apply (Pocklington_refl (Pock_certif 15667 2 ((7, 1)::(3, 1)::(2,1)::nil) 36) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15671 : prime 15671. Proof. apply (Pocklington_refl (Pock_certif 15671 13 ((1567, 1)::(2,1)::nil) 1) ((Proof_certif 1567 prime1567) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15679 : prime 15679. Proof. apply (Pocklington_refl (Pock_certif 15679 3 ((13, 1)::(2,1)::nil) 29) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15683 : prime 15683. Proof. apply (Pocklington_refl (Pock_certif 15683 2 ((7841, 1)::(2,1)::nil) 1) ((Proof_certif 7841 prime7841) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15727 : prime 15727. Proof. apply (Pocklington_refl (Pock_certif 15727 3 ((2621, 1)::(2,1)::nil) 1) ((Proof_certif 2621 prime2621) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15731 : prime 15731. Proof. apply (Pocklington_refl (Pock_certif 15731 2 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15733 : prime 15733. Proof. apply (Pocklington_refl (Pock_certif 15733 6 ((3, 2)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15737 : prime 15737. Proof. apply (Pocklington_refl (Pock_certif 15737 3 ((7, 1)::(2,3)::nil) 56) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15739 : prime 15739. Proof. apply (Pocklington_refl (Pock_certif 15739 2 ((43, 1)::(2,1)::nil) 10) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15749 : prime 15749. Proof. apply (Pocklington_refl (Pock_certif 15749 2 ((31, 1)::(2,2)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15761 : prime 15761. Proof. apply (Pocklington_refl (Pock_certif 15761 3 ((5, 1)::(2,4)::nil) 36) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15767 : prime 15767. Proof. apply (Pocklington_refl (Pock_certif 15767 5 ((7883, 1)::(2,1)::nil) 1) ((Proof_certif 7883 prime7883) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15773 : prime 15773. Proof. apply (Pocklington_refl (Pock_certif 15773 2 ((3943, 1)::(2,2)::nil) 1) ((Proof_certif 3943 prime3943) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15787 : prime 15787. Proof. apply (Pocklington_refl (Pock_certif 15787 2 ((3, 2)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15791 : prime 15791. Proof. apply (Pocklington_refl (Pock_certif 15791 23 ((1579, 1)::(2,1)::nil) 1) ((Proof_certif 1579 prime1579) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15797 : prime 15797. Proof. apply (Pocklington_refl (Pock_certif 15797 2 ((11, 1)::(2,2)::nil) 4) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15803 : prime 15803. Proof. apply (Pocklington_refl (Pock_certif 15803 2 ((7901, 1)::(2,1)::nil) 1) ((Proof_certif 7901 prime7901) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15809 : prime 15809. Proof. apply (Pocklington_refl (Pock_certif 15809 3 ((2,6)::nil) 118) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15817 : prime 15817. Proof. apply (Pocklington_refl (Pock_certif 15817 5 ((3, 1)::(2,3)::nil) 33) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15823 : prime 15823. Proof. apply (Pocklington_refl (Pock_certif 15823 3 ((3, 2)::(2,1)::nil) 5) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15859 : prime 15859. Proof. apply (Pocklington_refl (Pock_certif 15859 2 ((3, 2)::(2,1)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15877 : prime 15877. Proof. apply (Pocklington_refl (Pock_certif 15877 5 ((3, 2)::(2,2)::nil) 5) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15881 : prime 15881. Proof. apply (Pocklington_refl (Pock_certif 15881 3 ((5, 1)::(2,3)::nil) 76) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15887 : prime 15887. Proof. apply (Pocklington_refl (Pock_certif 15887 5 ((13, 1)::(2,1)::nil) 37) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15889 : prime 15889. Proof. apply (Pocklington_refl (Pock_certif 15889 21 ((3, 1)::(2,4)::nil) 42) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15901 : prime 15901. Proof. apply (Pocklington_refl (Pock_certif 15901 2 ((5, 1)::(2,2)::nil) 32) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15907 : prime 15907. Proof. apply (Pocklington_refl (Pock_certif 15907 2 ((11, 1)::(2,1)::nil) 15) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15913 : prime 15913. Proof. apply (Pocklington_refl (Pock_certif 15913 5 ((3, 1)::(2,3)::nil) 37) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15919 : prime 15919. Proof. apply (Pocklington_refl (Pock_certif 15919 6 ((7, 1)::(3, 1)::(2,1)::nil) 42) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15923 : prime 15923. Proof. apply (Pocklington_refl (Pock_certif 15923 2 ((19, 1)::(2,1)::nil) 38) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15937 : prime 15937. Proof. apply (Pocklington_refl (Pock_certif 15937 5 ((2,6)::nil) 120) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15959 : prime 15959. Proof. apply (Pocklington_refl (Pock_certif 15959 11 ((79, 1)::(2,1)::nil) 1) ((Proof_certif 79 prime79) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15971 : prime 15971. Proof. apply (Pocklington_refl (Pock_certif 15971 2 ((1597, 1)::(2,1)::nil) 1) ((Proof_certif 1597 prime1597) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15973 : prime 15973. Proof. apply (Pocklington_refl (Pock_certif 15973 2 ((11, 1)::(2,2)::nil) 9) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime15991 : prime 15991. Proof. apply (Pocklington_refl (Pock_certif 15991 12 ((5, 1)::(3, 1)::(2,1)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16001 : prime 16001. Proof. apply (Pocklington_refl (Pock_certif 16001 3 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16007 : prime 16007. Proof. apply (Pocklington_refl (Pock_certif 16007 5 ((53, 1)::(2,1)::nil) 1) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16033 : prime 16033. Proof. apply (Pocklington_refl (Pock_certif 16033 5 ((2,5)::nil) 52) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16057 : prime 16057. Proof. apply (Pocklington_refl (Pock_certif 16057 7 ((3, 1)::(2,3)::nil) 43) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16061 : prime 16061. Proof. apply (Pocklington_refl (Pock_certif 16061 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16063 : prime 16063. Proof. apply (Pocklington_refl (Pock_certif 16063 3 ((2677, 1)::(2,1)::nil) 1) ((Proof_certif 2677 prime2677) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16067 : prime 16067. Proof. apply (Pocklington_refl (Pock_certif 16067 2 ((29, 1)::(2,1)::nil) 44) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16069 : prime 16069. Proof. apply (Pocklington_refl (Pock_certif 16069 2 ((13, 1)::(2,2)::nil) 100) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16073 : prime 16073. Proof. apply (Pocklington_refl (Pock_certif 16073 3 ((7, 1)::(2,3)::nil) 62) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16087 : prime 16087. Proof. apply (Pocklington_refl (Pock_certif 16087 5 ((7, 1)::(3, 1)::(2,1)::nil) 46) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16091 : prime 16091. Proof. apply (Pocklington_refl (Pock_certif 16091 2 ((1609, 1)::(2,1)::nil) 1) ((Proof_certif 1609 prime1609) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16097 : prime 16097. Proof. apply (Pocklington_refl (Pock_certif 16097 3 ((2,5)::nil) 54) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16103 : prime 16103. Proof. apply (Pocklington_refl (Pock_certif 16103 5 ((83, 1)::(2,1)::nil) 1) ((Proof_certif 83 prime83) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16111 : prime 16111. Proof. apply (Pocklington_refl (Pock_certif 16111 7 ((3, 2)::(2,1)::nil) 27) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16127 : prime 16127. Proof. apply (Pocklington_refl (Pock_certif 16127 5 ((11, 1)::(2,1)::nil) 26) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16139 : prime 16139. Proof. apply (Pocklington_refl (Pock_certif 16139 2 ((8069, 1)::(2,1)::nil) 1) ((Proof_certif 8069 prime8069) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16141 : prime 16141. Proof. apply (Pocklington_refl (Pock_certif 16141 6 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16183 : prime 16183. Proof. apply (Pocklington_refl (Pock_certif 16183 3 ((3, 2)::(2,1)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16187 : prime 16187. Proof. apply (Pocklington_refl (Pock_certif 16187 2 ((8093, 1)::(2,1)::nil) 1) ((Proof_certif 8093 prime8093) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16189 : prime 16189. Proof. apply (Pocklington_refl (Pock_certif 16189 2 ((19, 1)::(2,2)::nil) 60) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16193 : prime 16193. Proof. apply (Pocklington_refl (Pock_certif 16193 3 ((2,6)::nil) 124) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16217 : prime 16217. Proof. apply (Pocklington_refl (Pock_certif 16217 3 ((2027, 1)::(2,3)::nil) 1) ((Proof_certif 2027 prime2027) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16223 : prime 16223. Proof. apply (Pocklington_refl (Pock_certif 16223 5 ((8111, 1)::(2,1)::nil) 1) ((Proof_certif 8111 prime8111) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16229 : prime 16229. Proof. apply (Pocklington_refl (Pock_certif 16229 2 ((4057, 1)::(2,2)::nil) 1) ((Proof_certif 4057 prime4057) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16231 : prime 16231. Proof. apply (Pocklington_refl (Pock_certif 16231 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16249 : prime 16249. Proof. apply (Pocklington_refl (Pock_certif 16249 17 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16253 : prime 16253. Proof. apply (Pocklington_refl (Pock_certif 16253 2 ((17, 1)::(2,2)::nil) 102) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16267 : prime 16267. Proof. apply (Pocklington_refl (Pock_certif 16267 2 ((2711, 1)::(2,1)::nil) 1) ((Proof_certif 2711 prime2711) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16273 : prime 16273. Proof. apply (Pocklington_refl (Pock_certif 16273 7 ((3, 1)::(2,4)::nil) 50) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16301 : prime 16301. Proof. apply (Pocklington_refl (Pock_certif 16301 2 ((5, 1)::(2,2)::nil) 8) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16319 : prime 16319. Proof. apply (Pocklington_refl (Pock_certif 16319 7 ((41, 1)::(2,1)::nil) 34) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16333 : prime 16333. Proof. apply (Pocklington_refl (Pock_certif 16333 2 ((1361, 1)::(2,2)::nil) 1) ((Proof_certif 1361 prime1361) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16339 : prime 16339. Proof. apply (Pocklington_refl (Pock_certif 16339 2 ((7, 1)::(3, 1)::(2,1)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16349 : prime 16349. Proof. apply (Pocklington_refl (Pock_certif 16349 2 ((61, 1)::(2,2)::nil) 1) ((Proof_certif 61 prime61) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16361 : prime 16361. Proof. apply (Pocklington_refl (Pock_certif 16361 3 ((5, 1)::(2,3)::nil) 6) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16363 : prime 16363. Proof. apply (Pocklington_refl (Pock_certif 16363 2 ((3, 3)::(2,1)::nil) 86) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16369 : prime 16369. Proof. apply (Pocklington_refl (Pock_certif 16369 7 ((2,4)::nil) 26) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16381 : prime 16381. Proof. apply (Pocklington_refl (Pock_certif 16381 2 ((3, 2)::(2,2)::nil) 21) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16411 : prime 16411. Proof. apply (Pocklington_refl (Pock_certif 16411 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16417 : prime 16417. Proof. apply (Pocklington_refl (Pock_certif 16417 5 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16421 : prime 16421. Proof. apply (Pocklington_refl (Pock_certif 16421 2 ((5, 1)::(2,2)::nil) 16) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16427 : prime 16427. Proof. apply (Pocklington_refl (Pock_certif 16427 2 ((43, 1)::(2,1)::nil) 18) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16433 : prime 16433. Proof. apply (Pocklington_refl (Pock_certif 16433 3 ((13, 1)::(2,4)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16447 : prime 16447. Proof. apply (Pocklington_refl (Pock_certif 16447 3 ((2741, 1)::(2,1)::nil) 1) ((Proof_certif 2741 prime2741) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16451 : prime 16451. Proof. apply (Pocklington_refl (Pock_certif 16451 7 ((5, 2)::(2,1)::nil) 28) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16453 : prime 16453. Proof. apply (Pocklington_refl (Pock_certif 16453 2 ((3, 2)::(2,2)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16477 : prime 16477. Proof. apply (Pocklington_refl (Pock_certif 16477 2 ((1373, 1)::(2,2)::nil) 1) ((Proof_certif 1373 prime1373) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16481 : prime 16481. Proof. apply (Pocklington_refl (Pock_certif 16481 3 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16487 : prime 16487. Proof. apply (Pocklington_refl (Pock_certif 16487 5 ((8243, 1)::(2,1)::nil) 1) ((Proof_certif 8243 prime8243) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16493 : prime 16493. Proof. apply (Pocklington_refl (Pock_certif 16493 2 ((7, 1)::(2,2)::nil) 27) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16519 : prime 16519. Proof. apply (Pocklington_refl (Pock_certif 16519 3 ((2753, 1)::(2,1)::nil) 1) ((Proof_certif 2753 prime2753) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16529 : prime 16529. Proof. apply (Pocklington_refl (Pock_certif 16529 3 ((1033, 1)::(2,4)::nil) 1) ((Proof_certif 1033 prime1033) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16547 : prime 16547. Proof. apply (Pocklington_refl (Pock_certif 16547 2 ((8273, 1)::(2,1)::nil) 1) ((Proof_certif 8273 prime8273) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16553 : prime 16553. Proof. apply (Pocklington_refl (Pock_certif 16553 3 ((2069, 1)::(2,3)::nil) 1) ((Proof_certif 2069 prime2069) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16561 : prime 16561. Proof. apply (Pocklington_refl (Pock_certif 16561 7 ((3, 1)::(2,4)::nil) 56) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16567 : prime 16567. Proof. apply (Pocklington_refl (Pock_certif 16567 3 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16573 : prime 16573. Proof. apply (Pocklington_refl (Pock_certif 16573 2 ((1381, 1)::(2,2)::nil) 1) ((Proof_certif 1381 prime1381) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16603 : prime 16603. Proof. apply (Pocklington_refl (Pock_certif 16603 2 ((2767, 1)::(2,1)::nil) 1) ((Proof_certif 2767 prime2767) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16607 : prime 16607. Proof. apply (Pocklington_refl (Pock_certif 16607 5 ((19, 1)::(2,1)::nil) 56) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16619 : prime 16619. Proof. apply (Pocklington_refl (Pock_certif 16619 2 ((1187, 1)::(2,1)::nil) 1) ((Proof_certif 1187 prime1187) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16631 : prime 16631. Proof. apply (Pocklington_refl (Pock_certif 16631 17 ((1663, 1)::(2,1)::nil) 1) ((Proof_certif 1663 prime1663) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16633 : prime 16633. Proof. apply (Pocklington_refl (Pock_certif 16633 5 ((3, 1)::(2,3)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16649 : prime 16649. Proof. apply (Pocklington_refl (Pock_certif 16649 3 ((2081, 1)::(2,3)::nil) 1) ((Proof_certif 2081 prime2081) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16651 : prime 16651. Proof. apply (Pocklington_refl (Pock_certif 16651 2 ((3, 2)::(2,1)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16657 : prime 16657. Proof. apply (Pocklington_refl (Pock_certif 16657 5 ((3, 1)::(2,4)::nil) 58) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16661 : prime 16661. Proof. apply (Pocklington_refl (Pock_certif 16661 10 ((5, 1)::(2,2)::nil) 30) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16673 : prime 16673. Proof. apply (Pocklington_refl (Pock_certif 16673 3 ((2,5)::nil) 4) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16691 : prime 16691. Proof. apply (Pocklington_refl (Pock_certif 16691 2 ((1669, 1)::(2,1)::nil) 1) ((Proof_certif 1669 prime1669) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16693 : prime 16693. Proof. apply (Pocklington_refl (Pock_certif 16693 2 ((13, 1)::(2,2)::nil) 7) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16699 : prime 16699. Proof. apply (Pocklington_refl (Pock_certif 16699 2 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16703 : prime 16703. Proof. apply (Pocklington_refl (Pock_certif 16703 5 ((1193, 1)::(2,1)::nil) 1) ((Proof_certif 1193 prime1193) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16729 : prime 16729. Proof. apply (Pocklington_refl (Pock_certif 16729 13 ((3, 1)::(2,3)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16741 : prime 16741. Proof. apply (Pocklington_refl (Pock_certif 16741 6 ((3, 2)::(2,2)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16747 : prime 16747. Proof. apply (Pocklington_refl (Pock_certif 16747 2 ((2791, 1)::(2,1)::nil) 1) ((Proof_certif 2791 prime2791) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16759 : prime 16759. Proof. apply (Pocklington_refl (Pock_certif 16759 3 ((3, 2)::(2,1)::nil) 27) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16763 : prime 16763. Proof. apply (Pocklington_refl (Pock_certif 16763 2 ((17, 1)::(2,1)::nil) 15) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16787 : prime 16787. Proof. apply (Pocklington_refl (Pock_certif 16787 2 ((11, 1)::(2,1)::nil) 9) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16811 : prime 16811. Proof. apply (Pocklington_refl (Pock_certif 16811 2 ((41, 1)::(2,1)::nil) 40) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16823 : prime 16823. Proof. apply (Pocklington_refl (Pock_certif 16823 5 ((13, 1)::(2,1)::nil) 20) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16829 : prime 16829. Proof. apply (Pocklington_refl (Pock_certif 16829 2 ((7, 1)::(2,2)::nil) 40) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16831 : prime 16831. Proof. apply (Pocklington_refl (Pock_certif 16831 6 ((3, 2)::(2,1)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16843 : prime 16843. Proof. apply (Pocklington_refl (Pock_certif 16843 2 ((7, 1)::(3, 1)::(2,1)::nil) 64) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16871 : prime 16871. Proof. apply (Pocklington_refl (Pock_certif 16871 17 ((7, 1)::(5, 1)::(2,1)::nil) 100) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16879 : prime 16879. Proof. apply (Pocklington_refl (Pock_certif 16879 3 ((29, 1)::(2,1)::nil) 58) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16883 : prime 16883. Proof. apply (Pocklington_refl (Pock_certif 16883 2 ((23, 1)::(2,1)::nil) 90) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16889 : prime 16889. Proof. apply (Pocklington_refl (Pock_certif 16889 3 ((2111, 1)::(2,3)::nil) 1) ((Proof_certif 2111 prime2111) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16901 : prime 16901. Proof. apply (Pocklington_refl (Pock_certif 16901 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16903 : prime 16903. Proof. apply (Pocklington_refl (Pock_certif 16903 3 ((3, 3)::(2,1)::nil) 96) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16921 : prime 16921. Proof. apply (Pocklington_refl (Pock_certif 16921 17 ((3, 1)::(2,3)::nil) 31) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16927 : prime 16927. Proof. apply (Pocklington_refl (Pock_certif 16927 6 ((7, 1)::(3, 1)::(2,1)::nil) 66) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16931 : prime 16931. Proof. apply (Pocklington_refl (Pock_certif 16931 2 ((1693, 1)::(2,1)::nil) 1) ((Proof_certif 1693 prime1693) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16937 : prime 16937. Proof. apply (Pocklington_refl (Pock_certif 16937 3 ((29, 1)::(2,3)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16943 : prime 16943. Proof. apply (Pocklington_refl (Pock_certif 16943 5 ((43, 1)::(2,1)::nil) 24) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16963 : prime 16963. Proof. apply (Pocklington_refl (Pock_certif 16963 2 ((11, 1)::(2,1)::nil) 19) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16979 : prime 16979. Proof. apply (Pocklington_refl (Pock_certif 16979 2 ((13, 1)::(2,1)::nil) 27) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16981 : prime 16981. Proof. apply (Pocklington_refl (Pock_certif 16981 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16987 : prime 16987. Proof. apply (Pocklington_refl (Pock_certif 16987 2 ((19, 1)::(2,1)::nil) 66) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime16993 : prime 16993. Proof. apply (Pocklington_refl (Pock_certif 16993 5 ((2,5)::nil) 17) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17011 : prime 17011. Proof. apply (Pocklington_refl (Pock_certif 17011 2 ((3, 3)::(2,1)::nil) 98) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17021 : prime 17021. Proof. apply (Pocklington_refl (Pock_certif 17021 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17027 : prime 17027. Proof. apply (Pocklington_refl (Pock_certif 17027 2 ((8513, 1)::(2,1)::nil) 1) ((Proof_certif 8513 prime8513) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17029 : prime 17029. Proof. apply (Pocklington_refl (Pock_certif 17029 10 ((3, 2)::(2,2)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17033 : prime 17033. Proof. apply (Pocklington_refl (Pock_certif 17033 3 ((2129, 1)::(2,3)::nil) 1) ((Proof_certif 2129 prime2129) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17041 : prime 17041. Proof. apply (Pocklington_refl (Pock_certif 17041 7 ((3, 1)::(2,4)::nil) 66) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17047 : prime 17047. Proof. apply (Pocklington_refl (Pock_certif 17047 3 ((947, 1)::(2,1)::nil) 1) ((Proof_certif 947 prime947) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17053 : prime 17053. Proof. apply (Pocklington_refl (Pock_certif 17053 2 ((7, 1)::(2,2)::nil) 48) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17077 : prime 17077. Proof. apply (Pocklington_refl (Pock_certif 17077 2 ((1423, 1)::(2,2)::nil) 1) ((Proof_certif 1423 prime1423) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17093 : prime 17093. Proof. apply (Pocklington_refl (Pock_certif 17093 2 ((4273, 1)::(2,2)::nil) 1) ((Proof_certif 4273 prime4273) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17099 : prime 17099. Proof. apply (Pocklington_refl (Pock_certif 17099 2 ((83, 1)::(2,1)::nil) 1) ((Proof_certif 83 prime83) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17107 : prime 17107. Proof. apply (Pocklington_refl (Pock_certif 17107 2 ((2851, 1)::(2,1)::nil) 1) ((Proof_certif 2851 prime2851) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17117 : prime 17117. Proof. apply (Pocklington_refl (Pock_certif 17117 3 ((11, 1)::(2,2)::nil) 36) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17123 : prime 17123. Proof. apply (Pocklington_refl (Pock_certif 17123 2 ((1223, 1)::(2,1)::nil) 1) ((Proof_certif 1223 prime1223) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17137 : prime 17137. Proof. apply (Pocklington_refl (Pock_certif 17137 5 ((3, 1)::(2,4)::nil) 68) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17159 : prime 17159. Proof. apply (Pocklington_refl (Pock_certif 17159 7 ((23, 1)::(2,1)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17167 : prime 17167. Proof. apply (Pocklington_refl (Pock_certif 17167 3 ((2861, 1)::(2,1)::nil) 1) ((Proof_certif 2861 prime2861) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17183 : prime 17183. Proof. apply (Pocklington_refl (Pock_certif 17183 5 ((11, 1)::(2,1)::nil) 30) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17189 : prime 17189. Proof. apply (Pocklington_refl (Pock_certif 17189 2 ((4297, 1)::(2,2)::nil) 1) ((Proof_certif 4297 prime4297) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17191 : prime 17191. Proof. apply (Pocklington_refl (Pock_certif 17191 3 ((3, 2)::(2,1)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17203 : prime 17203. Proof. apply (Pocklington_refl (Pock_certif 17203 2 ((47, 1)::(2,1)::nil) 1) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17207 : prime 17207. Proof. apply (Pocklington_refl (Pock_certif 17207 5 ((1229, 1)::(2,1)::nil) 1) ((Proof_certif 1229 prime1229) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17209 : prime 17209. Proof. apply (Pocklington_refl (Pock_certif 17209 14 ((3, 1)::(2,3)::nil) 43) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17231 : prime 17231. Proof. apply (Pocklington_refl (Pock_certif 17231 7 ((1723, 1)::(2,1)::nil) 1) ((Proof_certif 1723 prime1723) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17239 : prime 17239. Proof. apply (Pocklington_refl (Pock_certif 17239 3 ((13, 1)::(2,1)::nil) 37) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17257 : prime 17257. Proof. apply (Pocklington_refl (Pock_certif 17257 5 ((3, 1)::(2,3)::nil) 45) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17291 : prime 17291. Proof. apply (Pocklington_refl (Pock_certif 17291 6 ((7, 1)::(5, 1)::(2,1)::nil) 106) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17293 : prime 17293. Proof. apply (Pocklington_refl (Pock_certif 17293 2 ((11, 1)::(2,2)::nil) 40) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17299 : prime 17299. Proof. apply (Pocklington_refl (Pock_certif 17299 2 ((3, 2)::(2,1)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17317 : prime 17317. Proof. apply (Pocklington_refl (Pock_certif 17317 2 ((3, 2)::(2,2)::nil) 48) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17321 : prime 17321. Proof. apply (Pocklington_refl (Pock_certif 17321 3 ((5, 1)::(2,3)::nil) 32) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17327 : prime 17327. Proof. apply (Pocklington_refl (Pock_certif 17327 5 ((8663, 1)::(2,1)::nil) 1) ((Proof_certif 8663 prime8663) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17333 : prime 17333. Proof. apply (Pocklington_refl (Pock_certif 17333 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17341 : prime 17341. Proof. apply (Pocklington_refl (Pock_certif 17341 2 ((5, 1)::(2,2)::nil) 23) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17351 : prime 17351. Proof. apply (Pocklington_refl (Pock_certif 17351 11 ((5, 2)::(2,1)::nil) 46) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17359 : prime 17359. Proof. apply (Pocklington_refl (Pock_certif 17359 3 ((11, 1)::(2,1)::nil) 39) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17377 : prime 17377. Proof. apply (Pocklington_refl (Pock_certif 17377 5 ((2,5)::nil) 29) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17383 : prime 17383. Proof. apply (Pocklington_refl (Pock_certif 17383 3 ((2897, 1)::(2,1)::nil) 1) ((Proof_certif 2897 prime2897) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17387 : prime 17387. Proof. apply (Pocklington_refl (Pock_certif 17387 2 ((8693, 1)::(2,1)::nil) 1) ((Proof_certif 8693 prime8693) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17389 : prime 17389. Proof. apply (Pocklington_refl (Pock_certif 17389 2 ((3, 2)::(2,2)::nil) 50) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17393 : prime 17393. Proof. apply (Pocklington_refl (Pock_certif 17393 3 ((1087, 1)::(2,4)::nil) 1) ((Proof_certif 1087 prime1087) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17401 : prime 17401. Proof. apply (Pocklington_refl (Pock_certif 17401 7 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17417 : prime 17417. Proof. apply (Pocklington_refl (Pock_certif 17417 3 ((7, 1)::(2,3)::nil) 86) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17419 : prime 17419. Proof. apply (Pocklington_refl (Pock_certif 17419 2 ((2903, 1)::(2,1)::nil) 1) ((Proof_certif 2903 prime2903) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17431 : prime 17431. Proof. apply (Pocklington_refl (Pock_certif 17431 3 ((5, 1)::(3, 1)::(2,1)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17443 : prime 17443. Proof. apply (Pocklington_refl (Pock_certif 17443 2 ((3, 2)::(2,1)::nil) 29) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17449 : prime 17449. Proof. apply (Pocklington_refl (Pock_certif 17449 14 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17467 : prime 17467. Proof. apply (Pocklington_refl (Pock_certif 17467 3 ((41, 1)::(2,1)::nil) 48) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17471 : prime 17471. Proof. apply (Pocklington_refl (Pock_certif 17471 11 ((1747, 1)::(2,1)::nil) 1) ((Proof_certif 1747 prime1747) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17477 : prime 17477. Proof. apply (Pocklington_refl (Pock_certif 17477 2 ((17, 1)::(2,2)::nil) 120) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17483 : prime 17483. Proof. apply (Pocklington_refl (Pock_certif 17483 2 ((8741, 1)::(2,1)::nil) 1) ((Proof_certif 8741 prime8741) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17489 : prime 17489. Proof. apply (Pocklington_refl (Pock_certif 17489 3 ((1093, 1)::(2,4)::nil) 1) ((Proof_certif 1093 prime1093) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17491 : prime 17491. Proof. apply (Pocklington_refl (Pock_certif 17491 3 ((5, 1)::(3, 1)::(2,1)::nil) 42) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17497 : prime 17497. Proof. apply (Pocklington_refl (Pock_certif 17497 5 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17509 : prime 17509. Proof. apply (Pocklington_refl (Pock_certif 17509 2 ((1459, 1)::(2,2)::nil) 1) ((Proof_certif 1459 prime1459) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17519 : prime 17519. Proof. apply (Pocklington_refl (Pock_certif 17519 13 ((19, 1)::(2,1)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17539 : prime 17539. Proof. apply (Pocklington_refl (Pock_certif 17539 2 ((37, 1)::(2,1)::nil) 88) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17551 : prime 17551. Proof. apply (Pocklington_refl (Pock_certif 17551 3 ((3, 3)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17569 : prime 17569. Proof. apply (Pocklington_refl (Pock_certif 17569 7 ((2,5)::nil) 36) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17573 : prime 17573. Proof. apply (Pocklington_refl (Pock_certif 17573 2 ((23, 1)::(2,2)::nil) 6) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17579 : prime 17579. Proof. apply (Pocklington_refl (Pock_certif 17579 2 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17581 : prime 17581. Proof. apply (Pocklington_refl (Pock_certif 17581 10 ((5, 1)::(2,2)::nil) 36) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17597 : prime 17597. Proof. apply (Pocklington_refl (Pock_certif 17597 2 ((53, 1)::(2,2)::nil) 1) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17599 : prime 17599. Proof. apply (Pocklington_refl (Pock_certif 17599 6 ((7, 1)::(3, 1)::(2,1)::nil) 82) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17609 : prime 17609. Proof. apply (Pocklington_refl (Pock_certif 17609 3 ((31, 1)::(2,3)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17623 : prime 17623. Proof. apply (Pocklington_refl (Pock_certif 17623 3 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17627 : prime 17627. Proof. apply (Pocklington_refl (Pock_certif 17627 2 ((1259, 1)::(2,1)::nil) 1) ((Proof_certif 1259 prime1259) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17657 : prime 17657. Proof. apply (Pocklington_refl (Pock_certif 17657 3 ((2207, 1)::(2,3)::nil) 1) ((Proof_certif 2207 prime2207) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17659 : prime 17659. Proof. apply (Pocklington_refl (Pock_certif 17659 3 ((3, 3)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17669 : prime 17669. Proof. apply (Pocklington_refl (Pock_certif 17669 2 ((7, 1)::(2,2)::nil) 11) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17681 : prime 17681. Proof. apply (Pocklington_refl (Pock_certif 17681 3 ((5, 1)::(2,4)::nil) 60) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17683 : prime 17683. Proof. apply (Pocklington_refl (Pock_certif 17683 5 ((7, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17707 : prime 17707. Proof. apply (Pocklington_refl (Pock_certif 17707 2 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17713 : prime 17713. Proof. apply (Pocklington_refl (Pock_certif 17713 7 ((3, 1)::(2,4)::nil) 80) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17729 : prime 17729. Proof. apply (Pocklington_refl (Pock_certif 17729 3 ((2,6)::nil) 20) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17737 : prime 17737. Proof. apply (Pocklington_refl (Pock_certif 17737 7 ((3, 1)::(2,3)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17747 : prime 17747. Proof. apply (Pocklington_refl (Pock_certif 17747 2 ((19, 1)::(2,1)::nil) 8) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17749 : prime 17749. Proof. apply (Pocklington_refl (Pock_certif 17749 2 ((3, 2)::(2,2)::nil) 60) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17761 : prime 17761. Proof. apply (Pocklington_refl (Pock_certif 17761 11 ((2,5)::nil) 42) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17783 : prime 17783. Proof. apply (Pocklington_refl (Pock_certif 17783 5 ((17, 1)::(2,1)::nil) 46) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17789 : prime 17789. Proof. apply (Pocklington_refl (Pock_certif 17789 2 ((4447, 1)::(2,2)::nil) 1) ((Proof_certif 4447 prime4447) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17791 : prime 17791. Proof. apply (Pocklington_refl (Pock_certif 17791 3 ((5, 1)::(3, 1)::(2,1)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17807 : prime 17807. Proof. apply (Pocklington_refl (Pock_certif 17807 5 ((29, 1)::(2,1)::nil) 74) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17827 : prime 17827. Proof. apply (Pocklington_refl (Pock_certif 17827 2 ((2971, 1)::(2,1)::nil) 1) ((Proof_certif 2971 prime2971) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17837 : prime 17837. Proof. apply (Pocklington_refl (Pock_certif 17837 2 ((7, 1)::(2,2)::nil) 18) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17839 : prime 17839. Proof. apply (Pocklington_refl (Pock_certif 17839 6 ((3, 2)::(2,1)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17851 : prime 17851. Proof. apply (Pocklington_refl (Pock_certif 17851 2 ((5, 1)::(3, 1)::(2,1)::nil) 54) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17863 : prime 17863. Proof. apply (Pocklington_refl (Pock_certif 17863 3 ((13, 1)::(2,1)::nil) 4) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17881 : prime 17881. Proof. apply (Pocklington_refl (Pock_certif 17881 7 ((3, 1)::(2,3)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17891 : prime 17891. Proof. apply (Pocklington_refl (Pock_certif 17891 2 ((1789, 1)::(2,1)::nil) 1) ((Proof_certif 1789 prime1789) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17903 : prime 17903. Proof. apply (Pocklington_refl (Pock_certif 17903 5 ((8951, 1)::(2,1)::nil) 1) ((Proof_certif 8951 prime8951) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17909 : prime 17909. Proof. apply (Pocklington_refl (Pock_certif 17909 2 ((11, 1)::(2,2)::nil) 54) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17911 : prime 17911. Proof. apply (Pocklington_refl (Pock_certif 17911 3 ((3, 2)::(2,1)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17921 : prime 17921. Proof. apply (Pocklington_refl (Pock_certif 17921 3 ((2,9)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17923 : prime 17923. Proof. apply (Pocklington_refl (Pock_certif 17923 2 ((29, 1)::(2,1)::nil) 76) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17929 : prime 17929. Proof. apply (Pocklington_refl (Pock_certif 17929 11 ((3, 1)::(2,3)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17939 : prime 17939. Proof. apply (Pocklington_refl (Pock_certif 17939 2 ((8969, 1)::(2,1)::nil) 1) ((Proof_certif 8969 prime8969) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17957 : prime 17957. Proof. apply (Pocklington_refl (Pock_certif 17957 2 ((67, 1)::(2,2)::nil) 1) ((Proof_certif 67 prime67) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17959 : prime 17959. Proof. apply (Pocklington_refl (Pock_certif 17959 3 ((41, 1)::(2,1)::nil) 54) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17971 : prime 17971. Proof. apply (Pocklington_refl (Pock_certif 17971 3 ((5, 1)::(3, 1)::(2,1)::nil) 58) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17977 : prime 17977. Proof. apply (Pocklington_refl (Pock_certif 17977 5 ((3, 1)::(2,3)::nil) 26) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17981 : prime 17981. Proof. apply (Pocklington_refl (Pock_certif 17981 2 ((5, 1)::(2,2)::nil) 13) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17987 : prime 17987. Proof. apply (Pocklington_refl (Pock_certif 17987 5 ((17, 1)::(2,1)::nil) 52) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime17989 : prime 17989. Proof. apply (Pocklington_refl (Pock_certif 17989 2 ((1499, 1)::(2,2)::nil) 1) ((Proof_certif 1499 prime1499) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18013 : prime 18013. Proof. apply (Pocklington_refl (Pock_certif 18013 2 ((19, 1)::(2,2)::nil) 84) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18041 : prime 18041. Proof. apply (Pocklington_refl (Pock_certif 18041 3 ((5, 1)::(2,3)::nil) 50) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18043 : prime 18043. Proof. apply (Pocklington_refl (Pock_certif 18043 2 ((31, 1)::(2,1)::nil) 42) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18047 : prime 18047. Proof. apply (Pocklington_refl (Pock_certif 18047 5 ((1289, 1)::(2,1)::nil) 1) ((Proof_certif 1289 prime1289) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18049 : prime 18049. Proof. apply (Pocklington_refl (Pock_certif 18049 7 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18059 : prime 18059. Proof. apply (Pocklington_refl (Pock_certif 18059 2 ((9029, 1)::(2,1)::nil) 1) ((Proof_certif 9029 prime9029) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18061 : prime 18061. Proof. apply (Pocklington_refl (Pock_certif 18061 6 ((5, 1)::(2,2)::nil) 18) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18077 : prime 18077. Proof. apply (Pocklington_refl (Pock_certif 18077 2 ((4519, 1)::(2,2)::nil) 1) ((Proof_certif 4519 prime4519) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18089 : prime 18089. Proof. apply (Pocklington_refl (Pock_certif 18089 3 ((7, 1)::(2,3)::nil) 98) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18097 : prime 18097. Proof. apply (Pocklington_refl (Pock_certif 18097 5 ((3, 1)::(2,4)::nil) 88) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18119 : prime 18119. Proof. apply (Pocklington_refl (Pock_certif 18119 17 ((9059, 1)::(2,1)::nil) 1) ((Proof_certif 9059 prime9059) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18121 : prime 18121. Proof. apply (Pocklington_refl (Pock_certif 18121 21 ((3, 1)::(2,3)::nil) 33) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18127 : prime 18127. Proof. apply (Pocklington_refl (Pock_certif 18127 3 ((3, 2)::(2,1)::nil) 31) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18131 : prime 18131. Proof. apply (Pocklington_refl (Pock_certif 18131 7 ((7, 1)::(5, 1)::(2,1)::nil) 118) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18133 : prime 18133. Proof. apply (Pocklington_refl (Pock_certif 18133 2 ((1511, 1)::(2,2)::nil) 1) ((Proof_certif 1511 prime1511) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18143 : prime 18143. Proof. apply (Pocklington_refl (Pock_certif 18143 5 ((47, 1)::(2,1)::nil) 4) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18149 : prime 18149. Proof. apply (Pocklington_refl (Pock_certif 18149 2 ((13, 1)::(2,2)::nil) 36) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18169 : prime 18169. Proof. apply (Pocklington_refl (Pock_certif 18169 11 ((3, 1)::(2,3)::nil) 35) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18181 : prime 18181. Proof. apply (Pocklington_refl (Pock_certif 18181 2 ((3, 2)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18191 : prime 18191. Proof. apply (Pocklington_refl (Pock_certif 18191 29 ((17, 1)::(2,1)::nil) 58) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18199 : prime 18199. Proof. apply (Pocklington_refl (Pock_certif 18199 11 ((3, 3)::(2,1)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18211 : prime 18211. Proof. apply (Pocklington_refl (Pock_certif 18211 7 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18217 : prime 18217. Proof. apply (Pocklington_refl (Pock_certif 18217 7 ((3, 1)::(2,3)::nil) 37) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18223 : prime 18223. Proof. apply (Pocklington_refl (Pock_certif 18223 3 ((3037, 1)::(2,1)::nil) 1) ((Proof_certif 3037 prime3037) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18229 : prime 18229. Proof. apply (Pocklington_refl (Pock_certif 18229 2 ((7, 1)::(2,2)::nil) 33) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18233 : prime 18233. Proof. apply (Pocklington_refl (Pock_certif 18233 3 ((43, 1)::(2,3)::nil) 1) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18251 : prime 18251. Proof. apply (Pocklington_refl (Pock_certif 18251 2 ((5, 2)::(2,1)::nil) 64) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18253 : prime 18253. Proof. apply (Pocklington_refl (Pock_certif 18253 5 ((3, 2)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18257 : prime 18257. Proof. apply (Pocklington_refl (Pock_certif 18257 5 ((7, 1)::(2,4)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18269 : prime 18269. Proof. apply (Pocklington_refl (Pock_certif 18269 2 ((4567, 1)::(2,2)::nil) 1) ((Proof_certif 4567 prime4567) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18287 : prime 18287. Proof. apply (Pocklington_refl (Pock_certif 18287 5 ((41, 1)::(2,1)::nil) 58) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18289 : prime 18289. Proof. apply (Pocklington_refl (Pock_certif 18289 13 ((3, 1)::(2,4)::nil) 92) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18301 : prime 18301. Proof. apply (Pocklington_refl (Pock_certif 18301 2 ((5, 1)::(2,2)::nil) 32) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18307 : prime 18307. Proof. apply (Pocklington_refl (Pock_certif 18307 11 ((3, 3)::(2,1)::nil) 14) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18311 : prime 18311. Proof. apply (Pocklington_refl (Pock_certif 18311 13 ((1831, 1)::(2,1)::nil) 1) ((Proof_certif 1831 prime1831) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18313 : prime 18313. Proof. apply (Pocklington_refl (Pock_certif 18313 10 ((3, 1)::(2,3)::nil) 41) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18329 : prime 18329. Proof. apply (Pocklington_refl (Pock_certif 18329 3 ((29, 1)::(2,3)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18341 : prime 18341. Proof. apply (Pocklington_refl (Pock_certif 18341 3 ((5, 1)::(2,2)::nil) 34) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18353 : prime 18353. Proof. apply (Pocklington_refl (Pock_certif 18353 3 ((31, 1)::(2,4)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18367 : prime 18367. Proof. apply (Pocklington_refl (Pock_certif 18367 3 ((3061, 1)::(2,1)::nil) 1) ((Proof_certif 3061 prime3061) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18371 : prime 18371. Proof. apply (Pocklington_refl (Pock_certif 18371 2 ((11, 1)::(2,1)::nil) 41) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18379 : prime 18379. Proof. apply (Pocklington_refl (Pock_certif 18379 2 ((1021, 1)::(2,1)::nil) 1) ((Proof_certif 1021 prime1021) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18397 : prime 18397. Proof. apply (Pocklington_refl (Pock_certif 18397 5 ((3, 2)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18401 : prime 18401. Proof. apply (Pocklington_refl (Pock_certif 18401 3 ((2,5)::nil) 62) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18413 : prime 18413. Proof. apply (Pocklington_refl (Pock_certif 18413 2 ((4603, 1)::(2,2)::nil) 1) ((Proof_certif 4603 prime4603) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18427 : prime 18427. Proof. apply (Pocklington_refl (Pock_certif 18427 2 ((37, 1)::(2,1)::nil) 100) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18433 : prime 18433. Proof. apply (Pocklington_refl (Pock_certif 18433 5 ((2,11)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18439 : prime 18439. Proof. apply (Pocklington_refl (Pock_certif 18439 3 ((7, 1)::(3, 1)::(2,1)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18443 : prime 18443. Proof. apply (Pocklington_refl (Pock_certif 18443 2 ((9221, 1)::(2,1)::nil) 1) ((Proof_certif 9221 prime9221) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18451 : prime 18451. Proof. apply (Pocklington_refl (Pock_certif 18451 3 ((5, 1)::(3, 1)::(2,1)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18457 : prime 18457. Proof. apply (Pocklington_refl (Pock_certif 18457 5 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18461 : prime 18461. Proof. apply (Pocklington_refl (Pock_certif 18461 2 ((13, 1)::(2,2)::nil) 42) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18481 : prime 18481. Proof. apply (Pocklington_refl (Pock_certif 18481 13 ((3, 1)::(2,4)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18493 : prime 18493. Proof. apply (Pocklington_refl (Pock_certif 18493 2 ((23, 1)::(2,2)::nil) 16) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18503 : prime 18503. Proof. apply (Pocklington_refl (Pock_certif 18503 5 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18517 : prime 18517. Proof. apply (Pocklington_refl (Pock_certif 18517 2 ((1543, 1)::(2,2)::nil) 1) ((Proof_certif 1543 prime1543) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18521 : prime 18521. Proof. apply (Pocklington_refl (Pock_certif 18521 3 ((5, 1)::(2,3)::nil) 62) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18523 : prime 18523. Proof. apply (Pocklington_refl (Pock_certif 18523 3 ((3, 2)::(2,1)::nil) 14) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18539 : prime 18539. Proof. apply (Pocklington_refl (Pock_certif 18539 2 ((13, 1)::(2,1)::nil) 35) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18541 : prime 18541. Proof. apply (Pocklington_refl (Pock_certif 18541 6 ((3, 2)::(2,2)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18553 : prime 18553. Proof. apply (Pocklington_refl (Pock_certif 18553 5 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18583 : prime 18583. Proof. apply (Pocklington_refl (Pock_certif 18583 3 ((19, 1)::(2,1)::nil) 32) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18587 : prime 18587. Proof. apply (Pocklington_refl (Pock_certif 18587 2 ((9293, 1)::(2,1)::nil) 1) ((Proof_certif 9293 prime9293) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18593 : prime 18593. Proof. apply (Pocklington_refl (Pock_certif 18593 3 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18617 : prime 18617. Proof. apply (Pocklington_refl (Pock_certif 18617 3 ((13, 1)::(2,3)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18637 : prime 18637. Proof. apply (Pocklington_refl (Pock_certif 18637 2 ((1553, 1)::(2,2)::nil) 1) ((Proof_certif 1553 prime1553) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18661 : prime 18661. Proof. apply (Pocklington_refl (Pock_certif 18661 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18671 : prime 18671. Proof. apply (Pocklington_refl (Pock_certif 18671 7 ((1867, 1)::(2,1)::nil) 1) ((Proof_certif 1867 prime1867) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18679 : prime 18679. Proof. apply (Pocklington_refl (Pock_certif 18679 3 ((11, 1)::(2,1)::nil) 4) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18691 : prime 18691. Proof. apply (Pocklington_refl (Pock_certif 18691 3 ((5, 1)::(3, 1)::(2,1)::nil) 21) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18701 : prime 18701. Proof. apply (Pocklington_refl (Pock_certif 18701 2 ((5, 1)::(2,2)::nil) 6) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18713 : prime 18713. Proof. apply (Pocklington_refl (Pock_certif 18713 3 ((2339, 1)::(2,3)::nil) 1) ((Proof_certif 2339 prime2339) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18719 : prime 18719. Proof. apply (Pocklington_refl (Pock_certif 18719 7 ((7, 2)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18731 : prime 18731. Proof. apply (Pocklington_refl (Pock_certif 18731 2 ((1873, 1)::(2,1)::nil) 1) ((Proof_certif 1873 prime1873) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18743 : prime 18743. Proof. apply (Pocklington_refl (Pock_certif 18743 5 ((9371, 1)::(2,1)::nil) 1) ((Proof_certif 9371 prime9371) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18749 : prime 18749. Proof. apply (Pocklington_refl (Pock_certif 18749 2 ((43, 1)::(2,2)::nil) 1) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18757 : prime 18757. Proof. apply (Pocklington_refl (Pock_certif 18757 2 ((3, 2)::(2,2)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18773 : prime 18773. Proof. apply (Pocklington_refl (Pock_certif 18773 2 ((13, 1)::(2,2)::nil) 48) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18787 : prime 18787. Proof. apply (Pocklington_refl (Pock_certif 18787 2 ((31, 1)::(2,1)::nil) 54) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18793 : prime 18793. Proof. apply (Pocklington_refl (Pock_certif 18793 5 ((3, 1)::(2,3)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18797 : prime 18797. Proof. apply (Pocklington_refl (Pock_certif 18797 3 ((37, 1)::(2,2)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18803 : prime 18803. Proof. apply (Pocklington_refl (Pock_certif 18803 2 ((17, 1)::(2,1)::nil) 4) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18839 : prime 18839. Proof. apply (Pocklington_refl (Pock_certif 18839 7 ((9419, 1)::(2,1)::nil) 1) ((Proof_certif 9419 prime9419) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18859 : prime 18859. Proof. apply (Pocklington_refl (Pock_certif 18859 2 ((7, 1)::(3, 1)::(2,1)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18869 : prime 18869. Proof. apply (Pocklington_refl (Pock_certif 18869 2 ((53, 1)::(2,2)::nil) 1) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18899 : prime 18899. Proof. apply (Pocklington_refl (Pock_certif 18899 2 ((11, 1)::(2,1)::nil) 19) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18911 : prime 18911. Proof. apply (Pocklington_refl (Pock_certif 18911 7 ((31, 1)::(2,1)::nil) 56) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18913 : prime 18913. Proof. apply (Pocklington_refl (Pock_certif 18913 5 ((2,5)::nil) 12) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18917 : prime 18917. Proof. apply (Pocklington_refl (Pock_certif 18917 2 ((4729, 1)::(2,2)::nil) 1) ((Proof_certif 4729 prime4729) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18919 : prime 18919. Proof. apply (Pocklington_refl (Pock_certif 18919 3 ((1051, 1)::(2,1)::nil) 1) ((Proof_certif 1051 prime1051) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18947 : prime 18947. Proof. apply (Pocklington_refl (Pock_certif 18947 2 ((9473, 1)::(2,1)::nil) 1) ((Proof_certif 9473 prime9473) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18959 : prime 18959. Proof. apply (Pocklington_refl (Pock_certif 18959 13 ((9479, 1)::(2,1)::nil) 1) ((Proof_certif 9479 prime9479) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18973 : prime 18973. Proof. apply (Pocklington_refl (Pock_certif 18973 2 ((3, 2)::(2,2)::nil) 21) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime18979 : prime 18979. Proof. apply (Pocklington_refl (Pock_certif 18979 2 ((3163, 1)::(2,1)::nil) 1) ((Proof_certif 3163 prime3163) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19001 : prime 19001. Proof. apply (Pocklington_refl (Pock_certif 19001 3 ((5, 1)::(2,3)::nil) 74) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19009 : prime 19009. Proof. apply (Pocklington_refl (Pock_certif 19009 17 ((2,6)::nil) 40) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19013 : prime 19013. Proof. apply (Pocklington_refl (Pock_certif 19013 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19031 : prime 19031. Proof. apply (Pocklington_refl (Pock_certif 19031 11 ((11, 1)::(2,1)::nil) 26) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19037 : prime 19037. Proof. apply (Pocklington_refl (Pock_certif 19037 2 ((4759, 1)::(2,2)::nil) 1) ((Proof_certif 4759 prime4759) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19051 : prime 19051. Proof. apply (Pocklington_refl (Pock_certif 19051 2 ((5, 1)::(3, 1)::(2,1)::nil) 33) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19069 : prime 19069. Proof. apply (Pocklington_refl (Pock_certif 19069 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19073 : prime 19073. Proof. apply (Pocklington_refl (Pock_certif 19073 3 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19079 : prime 19079. Proof. apply (Pocklington_refl (Pock_certif 19079 7 ((9539, 1)::(2,1)::nil) 1) ((Proof_certif 9539 prime9539) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19081 : prime 19081. Proof. apply (Pocklington_refl (Pock_certif 19081 17 ((3, 1)::(2,3)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19087 : prime 19087. Proof. apply (Pocklington_refl (Pock_certif 19087 3 ((3181, 1)::(2,1)::nil) 1) ((Proof_certif 3181 prime3181) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19121 : prime 19121. Proof. apply (Pocklington_refl (Pock_certif 19121 6 ((5, 1)::(2,4)::nil) 78) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19139 : prime 19139. Proof. apply (Pocklington_refl (Pock_certif 19139 2 ((1367, 1)::(2,1)::nil) 1) ((Proof_certif 1367 prime1367) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19141 : prime 19141. Proof. apply (Pocklington_refl (Pock_certif 19141 2 ((5, 1)::(2,2)::nil) 34) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19157 : prime 19157. Proof. apply (Pocklington_refl (Pock_certif 19157 2 ((4789, 1)::(2,2)::nil) 1) ((Proof_certif 4789 prime4789) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19163 : prime 19163. Proof. apply (Pocklington_refl (Pock_certif 19163 2 ((11, 1)::(2,1)::nil) 32) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19181 : prime 19181. Proof. apply (Pocklington_refl (Pock_certif 19181 2 ((5, 1)::(2,2)::nil) 36) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19183 : prime 19183. Proof. apply (Pocklington_refl (Pock_certif 19183 3 ((23, 1)::(2,1)::nil) 48) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19207 : prime 19207. Proof. apply (Pocklington_refl (Pock_certif 19207 3 ((3, 2)::(2,1)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19211 : prime 19211. Proof. apply (Pocklington_refl (Pock_certif 19211 6 ((17, 1)::(2,1)::nil) 19) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19213 : prime 19213. Proof. apply (Pocklington_refl (Pock_certif 19213 2 ((1601, 1)::(2,2)::nil) 1) ((Proof_certif 1601 prime1601) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19219 : prime 19219. Proof. apply (Pocklington_refl (Pock_certif 19219 2 ((3203, 1)::(2,1)::nil) 1) ((Proof_certif 3203 prime3203) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19231 : prime 19231. Proof. apply (Pocklington_refl (Pock_certif 19231 6 ((5, 1)::(3, 1)::(2,1)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19237 : prime 19237. Proof. apply (Pocklington_refl (Pock_certif 19237 2 ((7, 1)::(2,2)::nil) 11) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19249 : prime 19249. Proof. apply (Pocklington_refl (Pock_certif 19249 7 ((3, 1)::(2,4)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19259 : prime 19259. Proof. apply (Pocklington_refl (Pock_certif 19259 2 ((9629, 1)::(2,1)::nil) 1) ((Proof_certif 9629 prime9629) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19267 : prime 19267. Proof. apply (Pocklington_refl (Pock_certif 19267 3 ((13, 1)::(2,1)::nil) 7) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19273 : prime 19273. Proof. apply (Pocklington_refl (Pock_certif 19273 5 ((3, 1)::(2,3)::nil) 33) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19289 : prime 19289. Proof. apply (Pocklington_refl (Pock_certif 19289 3 ((2411, 1)::(2,3)::nil) 1) ((Proof_certif 2411 prime2411) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19301 : prime 19301. Proof. apply (Pocklington_refl (Pock_certif 19301 2 ((5, 2)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19309 : prime 19309. Proof. apply (Pocklington_refl (Pock_certif 19309 2 ((1609, 1)::(2,2)::nil) 1) ((Proof_certif 1609 prime1609) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19319 : prime 19319. Proof. apply (Pocklington_refl (Pock_certif 19319 11 ((13, 1)::(2,1)::nil) 10) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19333 : prime 19333. Proof. apply (Pocklington_refl (Pock_certif 19333 2 ((3, 2)::(2,2)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19373 : prime 19373. Proof. apply (Pocklington_refl (Pock_certif 19373 2 ((29, 1)::(2,2)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19379 : prime 19379. Proof. apply (Pocklington_refl (Pock_certif 19379 2 ((9689, 1)::(2,1)::nil) 1) ((Proof_certif 9689 prime9689) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19381 : prime 19381. Proof. apply (Pocklington_refl (Pock_certif 19381 6 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19387 : prime 19387. Proof. apply (Pocklington_refl (Pock_certif 19387 2 ((3, 2)::(2,1)::nil) 29) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19391 : prime 19391. Proof. apply (Pocklington_refl (Pock_certif 19391 11 ((7, 1)::(5, 1)::(2,1)::nil) 136) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19403 : prime 19403. Proof. apply (Pocklington_refl (Pock_certif 19403 2 ((89, 1)::(2,1)::nil) 1) ((Proof_certif 89 prime89) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19417 : prime 19417. Proof. apply (Pocklington_refl (Pock_certif 19417 5 ((3, 1)::(2,3)::nil) 39) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19421 : prime 19421. Proof. apply (Pocklington_refl (Pock_certif 19421 3 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19423 : prime 19423. Proof. apply (Pocklington_refl (Pock_certif 19423 3 ((3, 2)::(2,1)::nil) 31) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19427 : prime 19427. Proof. apply (Pocklington_refl (Pock_certif 19427 2 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19429 : prime 19429. Proof. apply (Pocklington_refl (Pock_certif 19429 2 ((1619, 1)::(2,2)::nil) 1) ((Proof_certif 1619 prime1619) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19433 : prime 19433. Proof. apply (Pocklington_refl (Pock_certif 19433 3 ((7, 1)::(2,3)::nil) 9) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19441 : prime 19441. Proof. apply (Pocklington_refl (Pock_certif 19441 13 ((3, 1)::(2,4)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19447 : prime 19447. Proof. apply (Pocklington_refl (Pock_certif 19447 3 ((7, 1)::(3, 1)::(2,1)::nil) 42) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19457 : prime 19457. Proof. apply (Pocklington_refl (Pock_certif 19457 3 ((2,10)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19463 : prime 19463. Proof. apply (Pocklington_refl (Pock_certif 19463 5 ((37, 1)::(2,1)::nil) 114) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19469 : prime 19469. Proof. apply (Pocklington_refl (Pock_certif 19469 2 ((31, 1)::(2,2)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19471 : prime 19471. Proof. apply (Pocklington_refl (Pock_certif 19471 11 ((5, 1)::(3, 1)::(2,1)::nil) 48) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19477 : prime 19477. Proof. apply (Pocklington_refl (Pock_certif 19477 6 ((3, 2)::(2,2)::nil) 36) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19483 : prime 19483. Proof. apply (Pocklington_refl (Pock_certif 19483 2 ((17, 1)::(2,1)::nil) 27) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19489 : prime 19489. Proof. apply (Pocklington_refl (Pock_certif 19489 11 ((2,5)::nil) 31) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19501 : prime 19501. Proof. apply (Pocklington_refl (Pock_certif 19501 2 ((5, 1)::(2,2)::nil) 5) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19507 : prime 19507. Proof. apply (Pocklington_refl (Pock_certif 19507 2 ((3251, 1)::(2,1)::nil) 1) ((Proof_certif 3251 prime3251) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19531 : prime 19531. Proof. apply (Pocklington_refl (Pock_certif 19531 13 ((5, 1)::(3, 1)::(2,1)::nil) 50) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19541 : prime 19541. Proof. apply (Pocklington_refl (Pock_certif 19541 2 ((5, 1)::(2,2)::nil) 9) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19543 : prime 19543. Proof. apply (Pocklington_refl (Pock_certif 19543 3 ((3257, 1)::(2,1)::nil) 1) ((Proof_certif 3257 prime3257) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19553 : prime 19553. Proof. apply (Pocklington_refl (Pock_certif 19553 3 ((2,5)::nil) 33) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19559 : prime 19559. Proof. apply (Pocklington_refl (Pock_certif 19559 7 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19571 : prime 19571. Proof. apply (Pocklington_refl (Pock_certif 19571 2 ((19, 1)::(2,1)::nil) 58) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19577 : prime 19577. Proof. apply (Pocklington_refl (Pock_certif 19577 3 ((2447, 1)::(2,3)::nil) 1) ((Proof_certif 2447 prime2447) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19583 : prime 19583. Proof. apply (Pocklington_refl (Pock_certif 19583 5 ((9791, 1)::(2,1)::nil) 1) ((Proof_certif 9791 prime9791) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19597 : prime 19597. Proof. apply (Pocklington_refl (Pock_certif 19597 2 ((23, 1)::(2,2)::nil) 28) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19603 : prime 19603. Proof. apply (Pocklington_refl (Pock_certif 19603 2 ((3, 3)::(2,1)::nil) 38) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19609 : prime 19609. Proof. apply (Pocklington_refl (Pock_certif 19609 13 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19661 : prime 19661. Proof. apply (Pocklington_refl (Pock_certif 19661 2 ((5, 1)::(2,2)::nil) 18) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19681 : prime 19681. Proof. apply (Pocklington_refl (Pock_certif 19681 11 ((2,5)::nil) 38) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19687 : prime 19687. Proof. apply (Pocklington_refl (Pock_certif 19687 3 ((17, 1)::(2,1)::nil) 34) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19697 : prime 19697. Proof. apply (Pocklington_refl (Pock_certif 19697 3 ((1231, 1)::(2,4)::nil) 1) ((Proof_certif 1231 prime1231) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19699 : prime 19699. Proof. apply (Pocklington_refl (Pock_certif 19699 7 ((7, 1)::(3, 1)::(2,1)::nil) 48) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19709 : prime 19709. Proof. apply (Pocklington_refl (Pock_certif 19709 2 ((13, 1)::(2,2)::nil) 66) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19717 : prime 19717. Proof. apply (Pocklington_refl (Pock_certif 19717 2 ((31, 1)::(2,2)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19727 : prime 19727. Proof. apply (Pocklington_refl (Pock_certif 19727 5 ((1409, 1)::(2,1)::nil) 1) ((Proof_certif 1409 prime1409) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19739 : prime 19739. Proof. apply (Pocklington_refl (Pock_certif 19739 2 ((71, 1)::(2,1)::nil) 1) ((Proof_certif 71 prime71) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19751 : prime 19751. Proof. apply (Pocklington_refl (Pock_certif 19751 7 ((5, 2)::(2,1)::nil) 94) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19753 : prime 19753. Proof. apply (Pocklington_refl (Pock_certif 19753 5 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19759 : prime 19759. Proof. apply (Pocklington_refl (Pock_certif 19759 3 ((37, 1)::(2,1)::nil) 118) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19763 : prime 19763. Proof. apply (Pocklington_refl (Pock_certif 19763 2 ((41, 1)::(2,1)::nil) 76) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19777 : prime 19777. Proof. apply (Pocklington_refl (Pock_certif 19777 5 ((2,6)::nil) 52) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19793 : prime 19793. Proof. apply (Pocklington_refl (Pock_certif 19793 3 ((1237, 1)::(2,4)::nil) 1) ((Proof_certif 1237 prime1237) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19801 : prime 19801. Proof. apply (Pocklington_refl (Pock_certif 19801 7 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19813 : prime 19813. Proof. apply (Pocklington_refl (Pock_certif 19813 2 ((13, 1)::(2,2)::nil) 68) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19819 : prime 19819. Proof. apply (Pocklington_refl (Pock_certif 19819 3 ((3, 3)::(2,1)::nil) 42) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19841 : prime 19841. Proof. apply (Pocklington_refl (Pock_certif 19841 3 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19843 : prime 19843. Proof. apply (Pocklington_refl (Pock_certif 19843 2 ((3307, 1)::(2,1)::nil) 1) ((Proof_certif 3307 prime3307) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19853 : prime 19853. Proof. apply (Pocklington_refl (Pock_certif 19853 2 ((7, 1)::(2,2)::nil) 35) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19861 : prime 19861. Proof. apply (Pocklington_refl (Pock_certif 19861 2 ((5, 1)::(2,2)::nil) 29) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19867 : prime 19867. Proof. apply (Pocklington_refl (Pock_certif 19867 2 ((7, 1)::(3, 1)::(2,1)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19889 : prime 19889. Proof. apply (Pocklington_refl (Pock_certif 19889 3 ((11, 1)::(2,4)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19891 : prime 19891. Proof. apply (Pocklington_refl (Pock_certif 19891 2 ((3, 2)::(2,1)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19913 : prime 19913. Proof. apply (Pocklington_refl (Pock_certif 19913 3 ((19, 1)::(2,3)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19919 : prime 19919. Proof. apply (Pocklington_refl (Pock_certif 19919 7 ((23, 1)::(2,1)::nil) 64) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19927 : prime 19927. Proof. apply (Pocklington_refl (Pock_certif 19927 6 ((3, 2)::(2,1)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19937 : prime 19937. Proof. apply (Pocklington_refl (Pock_certif 19937 3 ((2,5)::nil) 46) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19949 : prime 19949. Proof. apply (Pocklington_refl (Pock_certif 19949 2 ((4987, 1)::(2,2)::nil) 1) ((Proof_certif 4987 prime4987) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19961 : prime 19961. Proof. apply (Pocklington_refl (Pock_certif 19961 6 ((5, 1)::(2,3)::nil) 17) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19963 : prime 19963. Proof. apply (Pocklington_refl (Pock_certif 19963 2 ((3, 2)::(2,1)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19973 : prime 19973. Proof. apply (Pocklington_refl (Pock_certif 19973 2 ((4993, 1)::(2,2)::nil) 1) ((Proof_certif 4993 prime4993) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19979 : prime 19979. Proof. apply (Pocklington_refl (Pock_certif 19979 2 ((1427, 1)::(2,1)::nil) 1) ((Proof_certif 1427 prime1427) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19991 : prime 19991. Proof. apply (Pocklington_refl (Pock_certif 19991 11 ((1999, 1)::(2,1)::nil) 1) ((Proof_certif 1999 prime1999) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19993 : prime 19993. Proof. apply (Pocklington_refl (Pock_certif 19993 10 ((3, 1)::(2,3)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime19997 : prime 19997. Proof. apply (Pocklington_refl (Pock_certif 19997 2 ((4999, 1)::(2,2)::nil) 1) ((Proof_certif 4999 prime4999) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20011 : prime 20011. Proof. apply (Pocklington_refl (Pock_certif 20011 12 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20021 : prime 20021. Proof. apply (Pocklington_refl (Pock_certif 20021 2 ((7, 1)::(2,2)::nil) 41) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20023 : prime 20023. Proof. apply (Pocklington_refl (Pock_certif 20023 3 ((47, 1)::(2,1)::nil) 24) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20029 : prime 20029. Proof. apply (Pocklington_refl (Pock_certif 20029 2 ((1669, 1)::(2,2)::nil) 1) ((Proof_certif 1669 prime1669) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20047 : prime 20047. Proof. apply (Pocklington_refl (Pock_certif 20047 3 ((13, 1)::(2,1)::nil) 41) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20051 : prime 20051. Proof. apply (Pocklington_refl (Pock_certif 20051 2 ((5, 2)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20063 : prime 20063. Proof. apply (Pocklington_refl (Pock_certif 20063 5 ((1433, 1)::(2,1)::nil) 1) ((Proof_certif 1433 prime1433) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20071 : prime 20071. Proof. apply (Pocklington_refl (Pock_certif 20071 3 ((3, 2)::(2,1)::nil) 31) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20089 : prime 20089. Proof. apply (Pocklington_refl (Pock_certif 20089 7 ((3, 1)::(2,3)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20101 : prime 20101. Proof. apply (Pocklington_refl (Pock_certif 20101 6 ((5, 1)::(3, 1)::(2,2)::nil) 94) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20107 : prime 20107. Proof. apply (Pocklington_refl (Pock_certif 20107 2 ((1117, 1)::(2,1)::nil) 1) ((Proof_certif 1117 prime1117) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20113 : prime 20113. Proof. apply (Pocklington_refl (Pock_certif 20113 10 ((3, 1)::(2,4)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20117 : prime 20117. Proof. apply (Pocklington_refl (Pock_certif 20117 2 ((47, 1)::(2,2)::nil) 1) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20123 : prime 20123. Proof. apply (Pocklington_refl (Pock_certif 20123 2 ((10061, 1)::(2,1)::nil) 1) ((Proof_certif 10061 prime10061) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20129 : prime 20129. Proof. apply (Pocklington_refl (Pock_certif 20129 3 ((2,5)::nil) 52) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20143 : prime 20143. Proof. apply (Pocklington_refl (Pock_certif 20143 5 ((3, 3)::(2,1)::nil) 48) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20147 : prime 20147. Proof. apply (Pocklington_refl (Pock_certif 20147 2 ((1439, 1)::(2,1)::nil) 1) ((Proof_certif 1439 prime1439) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20149 : prime 20149. Proof. apply (Pocklington_refl (Pock_certif 20149 2 ((23, 1)::(2,2)::nil) 34) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20161 : prime 20161. Proof. apply (Pocklington_refl (Pock_certif 20161 13 ((2,6)::nil) 58) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20173 : prime 20173. Proof. apply (Pocklington_refl (Pock_certif 20173 2 ((41, 1)::(2,2)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20177 : prime 20177. Proof. apply (Pocklington_refl (Pock_certif 20177 3 ((13, 1)::(2,4)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20183 : prime 20183. Proof. apply (Pocklington_refl (Pock_certif 20183 5 ((10091, 1)::(2,1)::nil) 1) ((Proof_certif 10091 prime10091) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20201 : prime 20201. Proof. apply (Pocklington_refl (Pock_certif 20201 6 ((5, 1)::(2,3)::nil) 24) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20219 : prime 20219. Proof. apply (Pocklington_refl (Pock_certif 20219 2 ((11, 1)::(2,1)::nil) 36) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20231 : prime 20231. Proof. apply (Pocklington_refl (Pock_certif 20231 29 ((7, 1)::(5, 1)::(2,1)::nil) 8) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20233 : prime 20233. Proof. apply (Pocklington_refl (Pock_certif 20233 5 ((3, 1)::(2,3)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20249 : prime 20249. Proof. apply (Pocklington_refl (Pock_certif 20249 3 ((2531, 1)::(2,3)::nil) 1) ((Proof_certif 2531 prime2531) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20261 : prime 20261. Proof. apply (Pocklington_refl (Pock_certif 20261 2 ((5, 1)::(2,2)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20269 : prime 20269. Proof. apply (Pocklington_refl (Pock_certif 20269 2 ((3, 2)::(2,2)::nil) 58) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20287 : prime 20287. Proof. apply (Pocklington_refl (Pock_certif 20287 5 ((7, 1)::(3, 1)::(2,1)::nil) 62) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20297 : prime 20297. Proof. apply (Pocklington_refl (Pock_certif 20297 3 ((43, 1)::(2,3)::nil) 1) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20323 : prime 20323. Proof. apply (Pocklington_refl (Pock_certif 20323 2 ((1129, 1)::(2,1)::nil) 1) ((Proof_certif 1129 prime1129) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20327 : prime 20327. Proof. apply (Pocklington_refl (Pock_certif 20327 5 ((10163, 1)::(2,1)::nil) 1) ((Proof_certif 10163 prime10163) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20333 : prime 20333. Proof. apply (Pocklington_refl (Pock_certif 20333 2 ((13, 1)::(2,2)::nil) 78) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20341 : prime 20341. Proof. apply (Pocklington_refl (Pock_certif 20341 2 ((3, 2)::(2,2)::nil) 60) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20347 : prime 20347. Proof. apply (Pocklington_refl (Pock_certif 20347 2 ((3391, 1)::(2,1)::nil) 1) ((Proof_certif 3391 prime3391) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20353 : prime 20353. Proof. apply (Pocklington_refl (Pock_certif 20353 5 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20357 : prime 20357. Proof. apply (Pocklington_refl (Pock_certif 20357 2 ((7, 1)::(2,2)::nil) 54) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20359 : prime 20359. Proof. apply (Pocklington_refl (Pock_certif 20359 11 ((3, 3)::(2,1)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20369 : prime 20369. Proof. apply (Pocklington_refl (Pock_certif 20369 3 ((19, 1)::(2,4)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20389 : prime 20389. Proof. apply (Pocklington_refl (Pock_certif 20389 2 ((1699, 1)::(2,2)::nil) 1) ((Proof_certif 1699 prime1699) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20393 : prime 20393. Proof. apply (Pocklington_refl (Pock_certif 20393 3 ((2549, 1)::(2,3)::nil) 1) ((Proof_certif 2549 prime2549) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20399 : prime 20399. Proof. apply (Pocklington_refl (Pock_certif 20399 7 ((31, 1)::(2,1)::nil) 80) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20407 : prime 20407. Proof. apply (Pocklington_refl (Pock_certif 20407 3 ((19, 1)::(2,1)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20411 : prime 20411. Proof. apply (Pocklington_refl (Pock_certif 20411 2 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20431 : prime 20431. Proof. apply (Pocklington_refl (Pock_certif 20431 3 ((5, 1)::(3, 1)::(2,1)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20441 : prime 20441. Proof. apply (Pocklington_refl (Pock_certif 20441 3 ((5, 1)::(2,3)::nil) 30) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20443 : prime 20443. Proof. apply (Pocklington_refl (Pock_certif 20443 2 ((3407, 1)::(2,1)::nil) 1) ((Proof_certif 3407 prime3407) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20477 : prime 20477. Proof. apply (Pocklington_refl (Pock_certif 20477 2 ((5119, 1)::(2,2)::nil) 1) ((Proof_certif 5119 prime5119) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20479 : prime 20479. Proof. apply (Pocklington_refl (Pock_certif 20479 3 ((3413, 1)::(2,1)::nil) 1) ((Proof_certif 3413 prime3413) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20483 : prime 20483. Proof. apply (Pocklington_refl (Pock_certif 20483 5 ((7, 2)::(2,1)::nil) 12) ((Proof_certif 7 prime7) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20507 : prime 20507. Proof. apply (Pocklington_refl (Pock_certif 20507 2 ((10253, 1)::(2,1)::nil) 1) ((Proof_certif 10253 prime10253) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20509 : prime 20509. Proof. apply (Pocklington_refl (Pock_certif 20509 2 ((1709, 1)::(2,2)::nil) 1) ((Proof_certif 1709 prime1709) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20521 : prime 20521. Proof. apply (Pocklington_refl (Pock_certif 20521 11 ((3, 1)::(2,3)::nil) 37) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20533 : prime 20533. Proof. apply (Pocklington_refl (Pock_certif 20533 2 ((29, 1)::(2,2)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20543 : prime 20543. Proof. apply (Pocklington_refl (Pock_certif 20543 5 ((10271, 1)::(2,1)::nil) 1) ((Proof_certif 10271 prime10271) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20549 : prime 20549. Proof. apply (Pocklington_refl (Pock_certif 20549 2 ((11, 1)::(2,2)::nil) 26) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20551 : prime 20551. Proof. apply (Pocklington_refl (Pock_certif 20551 3 ((5, 1)::(3, 1)::(2,1)::nil) 23) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20563 : prime 20563. Proof. apply (Pocklington_refl (Pock_certif 20563 2 ((23, 1)::(2,1)::nil) 78) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20593 : prime 20593. Proof. apply (Pocklington_refl (Pock_certif 20593 5 ((3, 1)::(2,4)::nil) 44) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20599 : prime 20599. Proof. apply (Pocklington_refl (Pock_certif 20599 3 ((3433, 1)::(2,1)::nil) 1) ((Proof_certif 3433 prime3433) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20611 : prime 20611. Proof. apply (Pocklington_refl (Pock_certif 20611 2 ((3, 2)::(2,1)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20627 : prime 20627. Proof. apply (Pocklington_refl (Pock_certif 20627 2 ((10313, 1)::(2,1)::nil) 1) ((Proof_certif 10313 prime10313) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20639 : prime 20639. Proof. apply (Pocklington_refl (Pock_certif 20639 11 ((17, 1)::(2,1)::nil) 62) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20641 : prime 20641. Proof. apply (Pocklington_refl (Pock_certif 20641 7 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20663 : prime 20663. Proof. apply (Pocklington_refl (Pock_certif 20663 5 ((10331, 1)::(2,1)::nil) 1) ((Proof_certif 10331 prime10331) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20681 : prime 20681. Proof. apply (Pocklington_refl (Pock_certif 20681 3 ((5, 1)::(2,3)::nil) 36) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20693 : prime 20693. Proof. apply (Pocklington_refl (Pock_certif 20693 2 ((7, 1)::(2,2)::nil) 4) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20707 : prime 20707. Proof. apply (Pocklington_refl (Pock_certif 20707 5 ((7, 1)::(3, 1)::(2,1)::nil) 72) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20717 : prime 20717. Proof. apply (Pocklington_refl (Pock_certif 20717 2 ((5179, 1)::(2,2)::nil) 1) ((Proof_certif 5179 prime5179) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20719 : prime 20719. Proof. apply (Pocklington_refl (Pock_certif 20719 3 ((3, 2)::(2,1)::nil) 31) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20731 : prime 20731. Proof. apply (Pocklington_refl (Pock_certif 20731 2 ((5, 1)::(3, 1)::(2,1)::nil) 29) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20743 : prime 20743. Proof. apply (Pocklington_refl (Pock_certif 20743 3 ((3457, 1)::(2,1)::nil) 1) ((Proof_certif 3457 prime3457) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20747 : prime 20747. Proof. apply (Pocklington_refl (Pock_certif 20747 2 ((11, 1)::(2,1)::nil) 13) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20749 : prime 20749. Proof. apply (Pocklington_refl (Pock_certif 20749 2 ((7, 1)::(2,2)::nil) 8) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20753 : prime 20753. Proof. apply (Pocklington_refl (Pock_certif 20753 3 ((1297, 1)::(2,4)::nil) 1) ((Proof_certif 1297 prime1297) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20759 : prime 20759. Proof. apply (Pocklington_refl (Pock_certif 20759 7 ((97, 1)::(2,1)::nil) 1) ((Proof_certif 97 prime97) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20771 : prime 20771. Proof. apply (Pocklington_refl (Pock_certif 20771 2 ((31, 1)::(2,1)::nil) 86) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20773 : prime 20773. Proof. apply (Pocklington_refl (Pock_certif 20773 2 ((3, 2)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20789 : prime 20789. Proof. apply (Pocklington_refl (Pock_certif 20789 2 ((5197, 1)::(2,2)::nil) 1) ((Proof_certif 5197 prime5197) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20807 : prime 20807. Proof. apply (Pocklington_refl (Pock_certif 20807 5 ((101, 1)::(2,1)::nil) 1) ((Proof_certif 101 prime101) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20809 : prime 20809. Proof. apply (Pocklington_refl (Pock_certif 20809 7 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20849 : prime 20849. Proof. apply (Pocklington_refl (Pock_certif 20849 3 ((1303, 1)::(2,4)::nil) 1) ((Proof_certif 1303 prime1303) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20857 : prime 20857. Proof. apply (Pocklington_refl (Pock_certif 20857 10 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20873 : prime 20873. Proof. apply (Pocklington_refl (Pock_certif 20873 3 ((2609, 1)::(2,3)::nil) 1) ((Proof_certif 2609 prime2609) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20879 : prime 20879. Proof. apply (Pocklington_refl (Pock_certif 20879 11 ((11, 1)::(2,1)::nil) 21) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20887 : prime 20887. Proof. apply (Pocklington_refl (Pock_certif 20887 3 ((59, 1)::(2,1)::nil) 1) ((Proof_certif 59 prime59) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20897 : prime 20897. Proof. apply (Pocklington_refl (Pock_certif 20897 3 ((2,5)::nil) 9) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20899 : prime 20899. Proof. apply (Pocklington_refl (Pock_certif 20899 2 ((3, 3)::(2,1)::nil) 62) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20903 : prime 20903. Proof. apply (Pocklington_refl (Pock_certif 20903 5 ((1493, 1)::(2,1)::nil) 1) ((Proof_certif 1493 prime1493) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20921 : prime 20921. Proof. apply (Pocklington_refl (Pock_certif 20921 3 ((5, 1)::(2,3)::nil) 42) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20929 : prime 20929. Proof. apply (Pocklington_refl (Pock_certif 20929 7 ((2,6)::nil) 70) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20939 : prime 20939. Proof. apply (Pocklington_refl (Pock_certif 20939 2 ((19, 1)::(2,1)::nil) 17) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20947 : prime 20947. Proof. apply (Pocklington_refl (Pock_certif 20947 2 ((3491, 1)::(2,1)::nil) 1) ((Proof_certif 3491 prime3491) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20959 : prime 20959. Proof. apply (Pocklington_refl (Pock_certif 20959 7 ((7, 1)::(3, 1)::(2,1)::nil) 78) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20963 : prime 20963. Proof. apply (Pocklington_refl (Pock_certif 20963 2 ((47, 1)::(2,1)::nil) 34) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20981 : prime 20981. Proof. apply (Pocklington_refl (Pock_certif 20981 2 ((1049, 1)::(2,2)::nil) 1) ((Proof_certif 1049 prime1049) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime20983 : prime 20983. Proof. apply (Pocklington_refl (Pock_certif 20983 3 ((13, 1)::(2,1)::nil) 24) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21001 : prime 21001. Proof. apply (Pocklington_refl (Pock_certif 21001 11 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21011 : prime 21011. Proof. apply (Pocklington_refl (Pock_certif 21011 2 ((11, 1)::(2,1)::nil) 28) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21013 : prime 21013. Proof. apply (Pocklington_refl (Pock_certif 21013 2 ((17, 1)::(2,2)::nil) 36) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21017 : prime 21017. Proof. apply (Pocklington_refl (Pock_certif 21017 3 ((37, 1)::(2,3)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21019 : prime 21019. Proof. apply (Pocklington_refl (Pock_certif 21019 2 ((31, 1)::(2,1)::nil) 90) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21023 : prime 21023. Proof. apply (Pocklington_refl (Pock_certif 21023 5 ((23, 1)::(2,1)::nil) 88) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21031 : prime 21031. Proof. apply (Pocklington_refl (Pock_certif 21031 12 ((5, 1)::(3, 1)::(2,1)::nil) 39) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21059 : prime 21059. Proof. apply (Pocklington_refl (Pock_certif 21059 2 ((10529, 1)::(2,1)::nil) 1) ((Proof_certif 10529 prime10529) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21061 : prime 21061. Proof. apply (Pocklington_refl (Pock_certif 21061 6 ((3, 2)::(2,2)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21067 : prime 21067. Proof. apply (Pocklington_refl (Pock_certif 21067 2 ((3511, 1)::(2,1)::nil) 1) ((Proof_certif 3511 prime3511) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21089 : prime 21089. Proof. apply (Pocklington_refl (Pock_certif 21089 3 ((2,5)::nil) 16) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21101 : prime 21101. Proof. apply (Pocklington_refl (Pock_certif 21101 2 ((5, 1)::(2,2)::nil) 4) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21107 : prime 21107. Proof. apply (Pocklington_refl (Pock_certif 21107 2 ((61, 1)::(2,1)::nil) 1) ((Proof_certif 61 prime61) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21121 : prime 21121. Proof. apply (Pocklington_refl (Pock_certif 21121 17 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21139 : prime 21139. Proof. apply (Pocklington_refl (Pock_certif 21139 2 ((13, 1)::(2,1)::nil) 31) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21143 : prime 21143. Proof. apply (Pocklington_refl (Pock_certif 21143 5 ((11, 1)::(2,1)::nil) 34) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21149 : prime 21149. Proof. apply (Pocklington_refl (Pock_certif 21149 3 ((17, 1)::(2,2)::nil) 38) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21157 : prime 21157. Proof. apply (Pocklington_refl (Pock_certif 21157 2 ((41, 1)::(2,2)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21163 : prime 21163. Proof. apply (Pocklington_refl (Pock_certif 21163 2 ((3527, 1)::(2,1)::nil) 1) ((Proof_certif 3527 prime3527) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21169 : prime 21169. Proof. apply (Pocklington_refl (Pock_certif 21169 13 ((3, 1)::(2,4)::nil) 56) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21179 : prime 21179. Proof. apply (Pocklington_refl (Pock_certif 21179 2 ((10589, 1)::(2,1)::nil) 1) ((Proof_certif 10589 prime10589) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21187 : prime 21187. Proof. apply (Pocklington_refl (Pock_certif 21187 2 ((11, 1)::(2,1)::nil) 36) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21191 : prime 21191. Proof. apply (Pocklington_refl (Pock_certif 21191 7 ((13, 1)::(2,1)::nil) 33) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21193 : prime 21193. Proof. apply (Pocklington_refl (Pock_certif 21193 11 ((3, 1)::(2,3)::nil) 14) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21211 : prime 21211. Proof. apply (Pocklington_refl (Pock_certif 21211 2 ((5, 1)::(3, 1)::(2,1)::nil) 46) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21221 : prime 21221. Proof. apply (Pocklington_refl (Pock_certif 21221 2 ((5, 1)::(2,2)::nil) 15) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21227 : prime 21227. Proof. apply (Pocklington_refl (Pock_certif 21227 2 ((10613, 1)::(2,1)::nil) 1) ((Proof_certif 10613 prime10613) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21247 : prime 21247. Proof. apply (Pocklington_refl (Pock_certif 21247 3 ((3541, 1)::(2,1)::nil) 1) ((Proof_certif 3541 prime3541) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21269 : prime 21269. Proof. apply (Pocklington_refl (Pock_certif 21269 2 ((13, 1)::(2,2)::nil) 96) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21277 : prime 21277. Proof. apply (Pocklington_refl (Pock_certif 21277 6 ((3, 2)::(2,2)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21283 : prime 21283. Proof. apply (Pocklington_refl (Pock_certif 21283 2 ((3547, 1)::(2,1)::nil) 1) ((Proof_certif 3547 prime3547) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21313 : prime 21313. Proof. apply (Pocklington_refl (Pock_certif 21313 5 ((2,6)::nil) 76) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21317 : prime 21317. Proof. apply (Pocklington_refl (Pock_certif 21317 2 ((73, 1)::(2,2)::nil) 1) ((Proof_certif 73 prime73) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21319 : prime 21319. Proof. apply (Pocklington_refl (Pock_certif 21319 3 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21323 : prime 21323. Proof. apply (Pocklington_refl (Pock_certif 21323 2 ((1523, 1)::(2,1)::nil) 1) ((Proof_certif 1523 prime1523) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21341 : prime 21341. Proof. apply (Pocklington_refl (Pock_certif 21341 2 ((5, 1)::(2,2)::nil) 22) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21347 : prime 21347. Proof. apply (Pocklington_refl (Pock_certif 21347 2 ((13, 1)::(2,1)::nil) 39) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21377 : prime 21377. Proof. apply (Pocklington_refl (Pock_certif 21377 3 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21379 : prime 21379. Proof. apply (Pocklington_refl (Pock_certif 21379 2 ((7, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21383 : prime 21383. Proof. apply (Pocklington_refl (Pock_certif 21383 5 ((10691, 1)::(2,1)::nil) 1) ((Proof_certif 10691 prime10691) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21391 : prime 21391. Proof. apply (Pocklington_refl (Pock_certif 21391 6 ((5, 1)::(3, 1)::(2,1)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21397 : prime 21397. Proof. apply (Pocklington_refl (Pock_certif 21397 2 ((1783, 1)::(2,2)::nil) 1) ((Proof_certif 1783 prime1783) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21401 : prime 21401. Proof. apply (Pocklington_refl (Pock_certif 21401 3 ((5, 1)::(2,3)::nil) 54) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21407 : prime 21407. Proof. apply (Pocklington_refl (Pock_certif 21407 5 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21419 : prime 21419. Proof. apply (Pocklington_refl (Pock_certif 21419 2 ((10709, 1)::(2,1)::nil) 1) ((Proof_certif 10709 prime10709) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21433 : prime 21433. Proof. apply (Pocklington_refl (Pock_certif 21433 5 ((3, 1)::(2,3)::nil) 26) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21467 : prime 21467. Proof. apply (Pocklington_refl (Pock_certif 21467 2 ((10733, 1)::(2,1)::nil) 1) ((Proof_certif 10733 prime10733) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21481 : prime 21481. Proof. apply (Pocklington_refl (Pock_certif 21481 13 ((3, 1)::(2,3)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21487 : prime 21487. Proof. apply (Pocklington_refl (Pock_certif 21487 3 ((3581, 1)::(2,1)::nil) 1) ((Proof_certif 3581 prime3581) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21491 : prime 21491. Proof. apply (Pocklington_refl (Pock_certif 21491 2 ((7, 1)::(5, 1)::(2,1)::nil) 26) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21493 : prime 21493. Proof. apply (Pocklington_refl (Pock_certif 21493 2 ((3, 2)::(2,2)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21499 : prime 21499. Proof. apply (Pocklington_refl (Pock_certif 21499 2 ((3583, 1)::(2,1)::nil) 1) ((Proof_certif 3583 prime3583) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21503 : prime 21503. Proof. apply (Pocklington_refl (Pock_certif 21503 5 ((13, 1)::(2,1)::nil) 45) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21517 : prime 21517. Proof. apply (Pocklington_refl (Pock_certif 21517 2 ((11, 1)::(2,2)::nil) 48) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21521 : prime 21521. Proof. apply (Pocklington_refl (Pock_certif 21521 3 ((5, 1)::(2,4)::nil) 108) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21523 : prime 21523. Proof. apply (Pocklington_refl (Pock_certif 21523 2 ((17, 1)::(2,1)::nil) 19) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21529 : prime 21529. Proof. apply (Pocklington_refl (Pock_certif 21529 11 ((3, 1)::(2,3)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21557 : prime 21557. Proof. apply (Pocklington_refl (Pock_certif 21557 2 ((17, 1)::(2,2)::nil) 44) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21559 : prime 21559. Proof. apply (Pocklington_refl (Pock_certif 21559 3 ((3593, 1)::(2,1)::nil) 1) ((Proof_certif 3593 prime3593) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21563 : prime 21563. Proof. apply (Pocklington_refl (Pock_certif 21563 2 ((10781, 1)::(2,1)::nil) 1) ((Proof_certif 10781 prime10781) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21569 : prime 21569. Proof. apply (Pocklington_refl (Pock_certif 21569 3 ((2,6)::nil) 80) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21577 : prime 21577. Proof. apply (Pocklington_refl (Pock_certif 21577 5 ((3, 1)::(2,3)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21587 : prime 21587. Proof. apply (Pocklington_refl (Pock_certif 21587 2 ((43, 1)::(2,1)::nil) 78) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21589 : prime 21589. Proof. apply (Pocklington_refl (Pock_certif 21589 2 ((7, 1)::(2,2)::nil) 41) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21599 : prime 21599. Proof. apply (Pocklington_refl (Pock_certif 21599 7 ((10799, 1)::(2,1)::nil) 1) ((Proof_certif 10799 prime10799) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21601 : prime 21601. Proof. apply (Pocklington_refl (Pock_certif 21601 7 ((2,5)::nil) 33) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21611 : prime 21611. Proof. apply (Pocklington_refl (Pock_certif 21611 2 ((2161, 1)::(2,1)::nil) 1) ((Proof_certif 2161 prime2161) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21613 : prime 21613. Proof. apply (Pocklington_refl (Pock_certif 21613 2 ((1801, 1)::(2,2)::nil) 1) ((Proof_certif 1801 prime1801) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21617 : prime 21617. Proof. apply (Pocklington_refl (Pock_certif 21617 3 ((7, 1)::(2,4)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21647 : prime 21647. Proof. apply (Pocklington_refl (Pock_certif 21647 5 ((79, 1)::(2,1)::nil) 1) ((Proof_certif 79 prime79) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21649 : prime 21649. Proof. apply (Pocklington_refl (Pock_certif 21649 14 ((3, 1)::(2,4)::nil) 66) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21661 : prime 21661. Proof. apply (Pocklington_refl (Pock_certif 21661 2 ((5, 1)::(3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21673 : prime 21673. Proof. apply (Pocklington_refl (Pock_certif 21673 5 ((3, 1)::(2,3)::nil) 37) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21683 : prime 21683. Proof. apply (Pocklington_refl (Pock_certif 21683 2 ((37, 1)::(2,1)::nil) 144) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21701 : prime 21701. Proof. apply (Pocklington_refl (Pock_certif 21701 2 ((5, 2)::(2,2)::nil) 16) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21713 : prime 21713. Proof. apply (Pocklington_refl (Pock_certif 21713 3 ((23, 1)::(2,4)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21727 : prime 21727. Proof. apply (Pocklington_refl (Pock_certif 21727 3 ((17, 1)::(2,1)::nil) 25) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21737 : prime 21737. Proof. apply (Pocklington_refl (Pock_certif 21737 5 ((11, 1)::(2,3)::nil) 70) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21739 : prime 21739. Proof. apply (Pocklington_refl (Pock_certif 21739 2 ((3623, 1)::(2,1)::nil) 1) ((Proof_certif 3623 prime3623) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21751 : prime 21751. Proof. apply (Pocklington_refl (Pock_certif 21751 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21757 : prime 21757. Proof. apply (Pocklington_refl (Pock_certif 21757 5 ((7, 1)::(2,2)::nil) 47) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21767 : prime 21767. Proof. apply (Pocklington_refl (Pock_certif 21767 5 ((10883, 1)::(2,1)::nil) 1) ((Proof_certif 10883 prime10883) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21773 : prime 21773. Proof. apply (Pocklington_refl (Pock_certif 21773 2 ((5443, 1)::(2,2)::nil) 1) ((Proof_certif 5443 prime5443) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21787 : prime 21787. Proof. apply (Pocklington_refl (Pock_certif 21787 2 ((3631, 1)::(2,1)::nil) 1) ((Proof_certif 3631 prime3631) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21799 : prime 21799. Proof. apply (Pocklington_refl (Pock_certif 21799 7 ((7, 1)::(3, 1)::(2,1)::nil) 13) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21803 : prime 21803. Proof. apply (Pocklington_refl (Pock_certif 21803 2 ((11, 1)::(2,1)::nil) 18) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21817 : prime 21817. Proof. apply (Pocklington_refl (Pock_certif 21817 7 ((3, 1)::(2,3)::nil) 43) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21821 : prime 21821. Proof. apply (Pocklington_refl (Pock_certif 21821 2 ((1091, 1)::(2,2)::nil) 1) ((Proof_certif 1091 prime1091) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21839 : prime 21839. Proof. apply (Pocklington_refl (Pock_certif 21839 11 ((61, 1)::(2,1)::nil) 1) ((Proof_certif 61 prime61) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21841 : prime 21841. Proof. apply (Pocklington_refl (Pock_certif 21841 11 ((3, 1)::(2,4)::nil) 70) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21851 : prime 21851. Proof. apply (Pocklington_refl (Pock_certif 21851 2 ((5, 2)::(2,1)::nil) 36) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21859 : prime 21859. Proof. apply (Pocklington_refl (Pock_certif 21859 2 ((3643, 1)::(2,1)::nil) 1) ((Proof_certif 3643 prime3643) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21863 : prime 21863. Proof. apply (Pocklington_refl (Pock_certif 21863 5 ((17, 1)::(2,1)::nil) 29) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21871 : prime 21871. Proof. apply (Pocklington_refl (Pock_certif 21871 6 ((3, 3)::(2,1)::nil) 80) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21881 : prime 21881. Proof. apply (Pocklington_refl (Pock_certif 21881 3 ((5, 1)::(2,3)::nil) 66) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21893 : prime 21893. Proof. apply (Pocklington_refl (Pock_certif 21893 2 ((13, 1)::(2,2)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21911 : prime 21911. Proof. apply (Pocklington_refl (Pock_certif 21911 13 ((7, 1)::(5, 1)::(2,1)::nil) 32) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21929 : prime 21929. Proof. apply (Pocklington_refl (Pock_certif 21929 3 ((2741, 1)::(2,3)::nil) 1) ((Proof_certif 2741 prime2741) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21937 : prime 21937. Proof. apply (Pocklington_refl (Pock_certif 21937 7 ((3, 1)::(2,4)::nil) 72) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21943 : prime 21943. Proof. apply (Pocklington_refl (Pock_certif 21943 5 ((3, 2)::(2,1)::nil) 26) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21961 : prime 21961. Proof. apply (Pocklington_refl (Pock_certif 21961 17 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21977 : prime 21977. Proof. apply (Pocklington_refl (Pock_certif 21977 3 ((41, 1)::(2,3)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21991 : prime 21991. Proof. apply (Pocklington_refl (Pock_certif 21991 3 ((5, 1)::(3, 1)::(2,1)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime21997 : prime 21997. Proof. apply (Pocklington_refl (Pock_certif 21997 7 ((3, 2)::(2,2)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22003 : prime 22003. Proof. apply (Pocklington_refl (Pock_certif 22003 2 ((19, 1)::(2,1)::nil) 46) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22013 : prime 22013. Proof. apply (Pocklington_refl (Pock_certif 22013 2 ((5503, 1)::(2,2)::nil) 1) ((Proof_certif 5503 prime5503) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22027 : prime 22027. Proof. apply (Pocklington_refl (Pock_certif 22027 2 ((3671, 1)::(2,1)::nil) 1) ((Proof_certif 3671 prime3671) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22031 : prime 22031. Proof. apply (Pocklington_refl (Pock_certif 22031 7 ((2203, 1)::(2,1)::nil) 1) ((Proof_certif 2203 prime2203) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22037 : prime 22037. Proof. apply (Pocklington_refl (Pock_certif 22037 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22039 : prime 22039. Proof. apply (Pocklington_refl (Pock_certif 22039 3 ((3673, 1)::(2,1)::nil) 1) ((Proof_certif 3673 prime3673) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22051 : prime 22051. Proof. apply (Pocklington_refl (Pock_certif 22051 3 ((5, 1)::(3, 1)::(2,1)::nil) 11) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22063 : prime 22063. Proof. apply (Pocklington_refl (Pock_certif 22063 3 ((3677, 1)::(2,1)::nil) 1) ((Proof_certif 3677 prime3677) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22067 : prime 22067. Proof. apply (Pocklington_refl (Pock_certif 22067 2 ((11, 1)::(2,1)::nil) 32) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22073 : prime 22073. Proof. apply (Pocklington_refl (Pock_certif 22073 3 ((31, 1)::(2,3)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22079 : prime 22079. Proof. apply (Pocklington_refl (Pock_certif 22079 7 ((19, 1)::(2,1)::nil) 48) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22091 : prime 22091. Proof. apply (Pocklington_refl (Pock_certif 22091 2 ((47, 1)::(2,1)::nil) 46) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22093 : prime 22093. Proof. apply (Pocklington_refl (Pock_certif 22093 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22109 : prime 22109. Proof. apply (Pocklington_refl (Pock_certif 22109 2 ((5527, 1)::(2,2)::nil) 1) ((Proof_certif 5527 prime5527) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22111 : prime 22111. Proof. apply (Pocklington_refl (Pock_certif 22111 6 ((5, 1)::(3, 1)::(2,1)::nil) 13) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22123 : prime 22123. Proof. apply (Pocklington_refl (Pock_certif 22123 2 ((1229, 1)::(2,1)::nil) 1) ((Proof_certif 1229 prime1229) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22129 : prime 22129. Proof. apply (Pocklington_refl (Pock_certif 22129 19 ((3, 1)::(2,4)::nil) 76) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22133 : prime 22133. Proof. apply (Pocklington_refl (Pock_certif 22133 2 ((11, 1)::(2,2)::nil) 62) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22147 : prime 22147. Proof. apply (Pocklington_refl (Pock_certif 22147 2 ((3691, 1)::(2,1)::nil) 1) ((Proof_certif 3691 prime3691) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22153 : prime 22153. Proof. apply (Pocklington_refl (Pock_certif 22153 5 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22157 : prime 22157. Proof. apply (Pocklington_refl (Pock_certif 22157 2 ((29, 1)::(2,2)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22159 : prime 22159. Proof. apply (Pocklington_refl (Pock_certif 22159 3 ((1231, 1)::(2,1)::nil) 1) ((Proof_certif 1231 prime1231) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22171 : prime 22171. Proof. apply (Pocklington_refl (Pock_certif 22171 2 ((5, 1)::(3, 1)::(2,1)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22189 : prime 22189. Proof. apply (Pocklington_refl (Pock_certif 22189 2 ((43, 1)::(2,2)::nil) 1) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22193 : prime 22193. Proof. apply (Pocklington_refl (Pock_certif 22193 3 ((19, 1)::(2,4)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22229 : prime 22229. Proof. apply (Pocklington_refl (Pock_certif 22229 2 ((5557, 1)::(2,2)::nil) 1) ((Proof_certif 5557 prime5557) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22247 : prime 22247. Proof. apply (Pocklington_refl (Pock_certif 22247 5 ((7, 2)::(2,1)::nil) 30) ((Proof_certif 7 prime7) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22259 : prime 22259. Proof. apply (Pocklington_refl (Pock_certif 22259 2 ((31, 1)::(2,1)::nil) 110) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22271 : prime 22271. Proof. apply (Pocklington_refl (Pock_certif 22271 7 ((17, 1)::(2,1)::nil) 42) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22273 : prime 22273. Proof. apply (Pocklington_refl (Pock_certif 22273 5 ((2,8)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22277 : prime 22277. Proof. apply (Pocklington_refl (Pock_certif 22277 2 ((5569, 1)::(2,2)::nil) 1) ((Proof_certif 5569 prime5569) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22279 : prime 22279. Proof. apply (Pocklington_refl (Pock_certif 22279 3 ((47, 1)::(2,1)::nil) 48) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22283 : prime 22283. Proof. apply (Pocklington_refl (Pock_certif 22283 2 ((13, 1)::(2,1)::nil) 22) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22291 : prime 22291. Proof. apply (Pocklington_refl (Pock_certif 22291 3 ((5, 1)::(3, 1)::(2,1)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22303 : prime 22303. Proof. apply (Pocklington_refl (Pock_certif 22303 6 ((3, 3)::(2,1)::nil) 88) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22307 : prime 22307. Proof. apply (Pocklington_refl (Pock_certif 22307 2 ((19, 1)::(2,1)::nil) 54) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22343 : prime 22343. Proof. apply (Pocklington_refl (Pock_certif 22343 5 ((11171, 1)::(2,1)::nil) 1) ((Proof_certif 11171 prime11171) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22349 : prime 22349. Proof. apply (Pocklington_refl (Pock_certif 22349 2 ((37, 1)::(2,2)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22367 : prime 22367. Proof. apply (Pocklington_refl (Pock_certif 22367 5 ((53, 1)::(2,1)::nil) 1) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22369 : prime 22369. Proof. apply (Pocklington_refl (Pock_certif 22369 11 ((2,5)::nil) 58) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22381 : prime 22381. Proof. apply (Pocklington_refl (Pock_certif 22381 6 ((5, 1)::(2,2)::nil) 36) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22391 : prime 22391. Proof. apply (Pocklington_refl (Pock_certif 22391 13 ((2239, 1)::(2,1)::nil) 1) ((Proof_certif 2239 prime2239) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22397 : prime 22397. Proof. apply (Pocklington_refl (Pock_certif 22397 2 ((11, 1)::(2,2)::nil) 68) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22409 : prime 22409. Proof. apply (Pocklington_refl (Pock_certif 22409 3 ((2801, 1)::(2,3)::nil) 1) ((Proof_certif 2801 prime2801) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22433 : prime 22433. Proof. apply (Pocklington_refl (Pock_certif 22433 3 ((2,5)::nil) 60) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22441 : prime 22441. Proof. apply (Pocklington_refl (Pock_certif 22441 7 ((3, 1)::(2,3)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22447 : prime 22447. Proof. apply (Pocklington_refl (Pock_certif 22447 3 ((29, 1)::(2,1)::nil) 38) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22453 : prime 22453. Proof. apply (Pocklington_refl (Pock_certif 22453 2 ((1871, 1)::(2,2)::nil) 1) ((Proof_certif 1871 prime1871) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22469 : prime 22469. Proof. apply (Pocklington_refl (Pock_certif 22469 2 ((41, 1)::(2,2)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22481 : prime 22481. Proof. apply (Pocklington_refl (Pock_certif 22481 3 ((5, 1)::(2,4)::nil) 120) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22483 : prime 22483. Proof. apply (Pocklington_refl (Pock_certif 22483 2 ((1249, 1)::(2,1)::nil) 1) ((Proof_certif 1249 prime1249) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22501 : prime 22501. Proof. apply (Pocklington_refl (Pock_certif 22501 2 ((3, 2)::(2,2)::nil) 48) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22511 : prime 22511. Proof. apply (Pocklington_refl (Pock_certif 22511 11 ((2251, 1)::(2,1)::nil) 1) ((Proof_certif 2251 prime2251) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22531 : prime 22531. Proof. apply (Pocklington_refl (Pock_certif 22531 2 ((5, 1)::(3, 1)::(2,1)::nil) 29) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22541 : prime 22541. Proof. apply (Pocklington_refl (Pock_certif 22541 2 ((7, 1)::(2,2)::nil) 18) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22543 : prime 22543. Proof. apply (Pocklington_refl (Pock_certif 22543 3 ((13, 1)::(2,1)::nil) 33) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22549 : prime 22549. Proof. apply (Pocklington_refl (Pock_certif 22549 2 ((1879, 1)::(2,2)::nil) 1) ((Proof_certif 1879 prime1879) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22567 : prime 22567. Proof. apply (Pocklington_refl (Pock_certif 22567 3 ((3761, 1)::(2,1)::nil) 1) ((Proof_certif 3761 prime3761) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22571 : prime 22571. Proof. apply (Pocklington_refl (Pock_certif 22571 2 ((37, 1)::(2,1)::nil) 8) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22573 : prime 22573. Proof. apply (Pocklington_refl (Pock_certif 22573 2 ((3, 2)::(2,2)::nil) 50) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22613 : prime 22613. Proof. apply (Pocklington_refl (Pock_certif 22613 2 ((5653, 1)::(2,2)::nil) 1) ((Proof_certif 5653 prime5653) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22619 : prime 22619. Proof. apply (Pocklington_refl (Pock_certif 22619 2 ((43, 1)::(2,1)::nil) 90) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22621 : prime 22621. Proof. apply (Pocklington_refl (Pock_certif 22621 2 ((5, 1)::(3, 1)::(2,2)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22637 : prime 22637. Proof. apply (Pocklington_refl (Pock_certif 22637 2 ((5659, 1)::(2,2)::nil) 1) ((Proof_certif 5659 prime5659) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22639 : prime 22639. Proof. apply (Pocklington_refl (Pock_certif 22639 6 ((7, 1)::(3, 1)::(2,1)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22643 : prime 22643. Proof. apply (Pocklington_refl (Pock_certif 22643 2 ((11321, 1)::(2,1)::nil) 1) ((Proof_certif 11321 prime11321) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22651 : prime 22651. Proof. apply (Pocklington_refl (Pock_certif 22651 3 ((5, 1)::(3, 1)::(2,1)::nil) 33) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22669 : prime 22669. Proof. apply (Pocklington_refl (Pock_certif 22669 2 ((1889, 1)::(2,2)::nil) 1) ((Proof_certif 1889 prime1889) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22679 : prime 22679. Proof. apply (Pocklington_refl (Pock_certif 22679 13 ((17, 1)::(2,1)::nil) 54) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22691 : prime 22691. Proof. apply (Pocklington_refl (Pock_certif 22691 2 ((2269, 1)::(2,1)::nil) 1) ((Proof_certif 2269 prime2269) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22697 : prime 22697. Proof. apply (Pocklington_refl (Pock_certif 22697 3 ((2837, 1)::(2,3)::nil) 1) ((Proof_certif 2837 prime2837) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22699 : prime 22699. Proof. apply (Pocklington_refl (Pock_certif 22699 3 ((13, 1)::(2,1)::nil) 39) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22709 : prime 22709. Proof. apply (Pocklington_refl (Pock_certif 22709 2 ((7, 1)::(2,2)::nil) 24) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22717 : prime 22717. Proof. apply (Pocklington_refl (Pock_certif 22717 2 ((3, 2)::(2,2)::nil) 54) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22721 : prime 22721. Proof. apply (Pocklington_refl (Pock_certif 22721 3 ((2,6)::nil) 98) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22727 : prime 22727. Proof. apply (Pocklington_refl (Pock_certif 22727 5 ((11, 1)::(2,1)::nil) 16) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22739 : prime 22739. Proof. apply (Pocklington_refl (Pock_certif 22739 2 ((11369, 1)::(2,1)::nil) 1) ((Proof_certif 11369 prime11369) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22741 : prime 22741. Proof. apply (Pocklington_refl (Pock_certif 22741 2 ((5, 1)::(2,2)::nil) 8) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22751 : prime 22751. Proof. apply (Pocklington_refl (Pock_certif 22751 11 ((5, 2)::(2,1)::nil) 54) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22769 : prime 22769. Proof. apply (Pocklington_refl (Pock_certif 22769 3 ((1423, 1)::(2,4)::nil) 1) ((Proof_certif 1423 prime1423) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22777 : prime 22777. Proof. apply (Pocklington_refl (Pock_certif 22777 7 ((3, 1)::(2,3)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22783 : prime 22783. Proof. apply (Pocklington_refl (Pock_certif 22783 3 ((3797, 1)::(2,1)::nil) 1) ((Proof_certif 3797 prime3797) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22787 : prime 22787. Proof. apply (Pocklington_refl (Pock_certif 22787 2 ((11393, 1)::(2,1)::nil) 1) ((Proof_certif 11393 prime11393) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22807 : prime 22807. Proof. apply (Pocklington_refl (Pock_certif 22807 3 ((7, 1)::(3, 1)::(2,1)::nil) 38) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22811 : prime 22811. Proof. apply (Pocklington_refl (Pock_certif 22811 2 ((2281, 1)::(2,1)::nil) 1) ((Proof_certif 2281 prime2281) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22817 : prime 22817. Proof. apply (Pocklington_refl (Pock_certif 22817 3 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22853 : prime 22853. Proof. apply (Pocklington_refl (Pock_certif 22853 2 ((29, 1)::(2,2)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22859 : prime 22859. Proof. apply (Pocklington_refl (Pock_certif 22859 2 ((11, 1)::(2,1)::nil) 23) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22861 : prime 22861. Proof. apply (Pocklington_refl (Pock_certif 22861 2 ((3, 2)::(2,2)::nil) 58) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22871 : prime 22871. Proof. apply (Pocklington_refl (Pock_certif 22871 7 ((2287, 1)::(2,1)::nil) 1) ((Proof_certif 2287 prime2287) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22877 : prime 22877. Proof. apply (Pocklington_refl (Pock_certif 22877 2 ((7, 1)::(2,2)::nil) 31) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22901 : prime 22901. Proof. apply (Pocklington_refl (Pock_certif 22901 2 ((5, 1)::(2,2)::nil) 20) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22907 : prime 22907. Proof. apply (Pocklington_refl (Pock_certif 22907 5 ((13, 1)::(2,1)::nil) 47) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22921 : prime 22921. Proof. apply (Pocklington_refl (Pock_certif 22921 7 ((3, 1)::(2,3)::nil) 41) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22937 : prime 22937. Proof. apply (Pocklington_refl (Pock_certif 22937 3 ((47, 1)::(2,3)::nil) 1) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22943 : prime 22943. Proof. apply (Pocklington_refl (Pock_certif 22943 5 ((11471, 1)::(2,1)::nil) 1) ((Proof_certif 11471 prime11471) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22961 : prime 22961. Proof. apply (Pocklington_refl (Pock_certif 22961 3 ((5, 1)::(2,4)::nil) 126) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22963 : prime 22963. Proof. apply (Pocklington_refl (Pock_certif 22963 2 ((43, 1)::(2,1)::nil) 94) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22973 : prime 22973. Proof. apply (Pocklington_refl (Pock_certif 22973 2 ((5743, 1)::(2,2)::nil) 1) ((Proof_certif 5743 prime5743) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime22993 : prime 22993. Proof. apply (Pocklington_refl (Pock_certif 22993 5 ((3, 1)::(2,4)::nil) 94) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23003 : prime 23003. Proof. apply (Pocklington_refl (Pock_certif 23003 2 ((31, 1)::(2,1)::nil) 122) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23011 : prime 23011. Proof. apply (Pocklington_refl (Pock_certif 23011 7 ((5, 1)::(3, 1)::(2,1)::nil) 45) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23017 : prime 23017. Proof. apply (Pocklington_refl (Pock_certif 23017 5 ((3, 1)::(2,3)::nil) 45) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23021 : prime 23021. Proof. apply (Pocklington_refl (Pock_certif 23021 2 ((5, 1)::(2,2)::nil) 27) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23027 : prime 23027. Proof. apply (Pocklington_refl (Pock_certif 23027 2 ((29, 1)::(2,1)::nil) 48) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23029 : prime 23029. Proof. apply (Pocklington_refl (Pock_certif 23029 2 ((19, 1)::(2,2)::nil) 150) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23039 : prime 23039. Proof. apply (Pocklington_refl (Pock_certif 23039 7 ((11519, 1)::(2,1)::nil) 1) ((Proof_certif 11519 prime11519) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23041 : prime 23041. Proof. apply (Pocklington_refl (Pock_certif 23041 11 ((2,9)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23053 : prime 23053. Proof. apply (Pocklington_refl (Pock_certif 23053 2 ((17, 1)::(2,2)::nil) 66) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23057 : prime 23057. Proof. apply (Pocklington_refl (Pock_certif 23057 5 ((11, 1)::(2,4)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23059 : prime 23059. Proof. apply (Pocklington_refl (Pock_certif 23059 3 ((3, 3)::(2,1)::nil) 102) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23063 : prime 23063. Proof. apply (Pocklington_refl (Pock_certif 23063 5 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23071 : prime 23071. Proof. apply (Pocklington_refl (Pock_certif 23071 3 ((5, 1)::(3, 1)::(2,1)::nil) 48) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23081 : prime 23081. Proof. apply (Pocklington_refl (Pock_certif 23081 3 ((5, 1)::(2,3)::nil) 15) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23087 : prime 23087. Proof. apply (Pocklington_refl (Pock_certif 23087 5 ((17, 1)::(2,1)::nil) 66) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23099 : prime 23099. Proof. apply (Pocklington_refl (Pock_certif 23099 2 ((11549, 1)::(2,1)::nil) 1) ((Proof_certif 11549 prime11549) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23117 : prime 23117. Proof. apply (Pocklington_refl (Pock_certif 23117 2 ((5779, 1)::(2,2)::nil) 1) ((Proof_certif 5779 prime5779) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23131 : prime 23131. Proof. apply (Pocklington_refl (Pock_certif 23131 3 ((5, 1)::(3, 1)::(2,1)::nil) 50) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23143 : prime 23143. Proof. apply (Pocklington_refl (Pock_certif 23143 5 ((7, 1)::(3, 1)::(2,1)::nil) 46) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23159 : prime 23159. Proof. apply (Pocklington_refl (Pock_certif 23159 11 ((11579, 1)::(2,1)::nil) 1) ((Proof_certif 11579 prime11579) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23167 : prime 23167. Proof. apply (Pocklington_refl (Pock_certif 23167 3 ((3, 3)::(2,1)::nil) 104) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23173 : prime 23173. Proof. apply (Pocklington_refl (Pock_certif 23173 2 ((1931, 1)::(2,2)::nil) 1) ((Proof_certif 1931 prime1931) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23189 : prime 23189. Proof. apply (Pocklington_refl (Pock_certif 23189 2 ((11, 1)::(2,2)::nil) 86) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23197 : prime 23197. Proof. apply (Pocklington_refl (Pock_certif 23197 2 ((1933, 1)::(2,2)::nil) 1) ((Proof_certif 1933 prime1933) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23201 : prime 23201. Proof. apply (Pocklington_refl (Pock_certif 23201 3 ((2,5)::nil) 18) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23203 : prime 23203. Proof. apply (Pocklington_refl (Pock_certif 23203 2 ((1289, 1)::(2,1)::nil) 1) ((Proof_certif 1289 prime1289) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23209 : prime 23209. Proof. apply (Pocklington_refl (Pock_certif 23209 31 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23227 : prime 23227. Proof. apply (Pocklington_refl (Pock_certif 23227 3 ((7, 1)::(3, 1)::(2,1)::nil) 48) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23251 : prime 23251. Proof. apply (Pocklington_refl (Pock_certif 23251 2 ((5, 1)::(3, 1)::(2,1)::nil) 54) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23269 : prime 23269. Proof. apply (Pocklington_refl (Pock_certif 23269 2 ((7, 1)::(2,2)::nil) 45) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23279 : prime 23279. Proof. apply (Pocklington_refl (Pock_certif 23279 7 ((103, 1)::(2,1)::nil) 1) ((Proof_certif 103 prime103) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23291 : prime 23291. Proof. apply (Pocklington_refl (Pock_certif 23291 2 ((17, 1)::(2,1)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23293 : prime 23293. Proof. apply (Pocklington_refl (Pock_certif 23293 5 ((3, 2)::(2,2)::nil) 70) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23297 : prime 23297. Proof. apply (Pocklington_refl (Pock_certif 23297 3 ((2,8)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23311 : prime 23311. Proof. apply (Pocklington_refl (Pock_certif 23311 3 ((3, 2)::(2,1)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23321 : prime 23321. Proof. apply (Pocklington_refl (Pock_certif 23321 3 ((5, 1)::(2,3)::nil) 21) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23327 : prime 23327. Proof. apply (Pocklington_refl (Pock_certif 23327 5 ((107, 1)::(2,1)::nil) 1) ((Proof_certif 107 prime107) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23333 : prime 23333. Proof. apply (Pocklington_refl (Pock_certif 23333 2 ((19, 1)::(2,2)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23339 : prime 23339. Proof. apply (Pocklington_refl (Pock_certif 23339 2 ((1667, 1)::(2,1)::nil) 1) ((Proof_certif 1667 prime1667) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23357 : prime 23357. Proof. apply (Pocklington_refl (Pock_certif 23357 2 ((5839, 1)::(2,2)::nil) 1) ((Proof_certif 5839 prime5839) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23369 : prime 23369. Proof. apply (Pocklington_refl (Pock_certif 23369 3 ((23, 1)::(2,3)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23371 : prime 23371. Proof. apply (Pocklington_refl (Pock_certif 23371 2 ((5, 1)::(3, 1)::(2,1)::nil) 58) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23399 : prime 23399. Proof. apply (Pocklington_refl (Pock_certif 23399 17 ((11699, 1)::(2,1)::nil) 1) ((Proof_certif 11699 prime11699) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23417 : prime 23417. Proof. apply (Pocklington_refl (Pock_certif 23417 3 ((2927, 1)::(2,3)::nil) 1) ((Proof_certif 2927 prime2927) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23431 : prime 23431. Proof. apply (Pocklington_refl (Pock_certif 23431 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23447 : prime 23447. Proof. apply (Pocklington_refl (Pock_certif 23447 5 ((19, 1)::(2,1)::nil) 4) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23459 : prime 23459. Proof. apply (Pocklington_refl (Pock_certif 23459 2 ((37, 1)::(2,1)::nil) 20) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23473 : prime 23473. Proof. apply (Pocklington_refl (Pock_certif 23473 5 ((3, 1)::(2,4)::nil) 6) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23497 : prime 23497. Proof. apply (Pocklington_refl (Pock_certif 23497 5 ((3, 1)::(2,3)::nil) 14) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23509 : prime 23509. Proof. apply (Pocklington_refl (Pock_certif 23509 2 ((3, 2)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23531 : prime 23531. Proof. apply (Pocklington_refl (Pock_certif 23531 2 ((13, 1)::(2,1)::nil) 17) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23537 : prime 23537. Proof. apply (Pocklington_refl (Pock_certif 23537 3 ((1471, 1)::(2,4)::nil) 1) ((Proof_certif 1471 prime1471) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23539 : prime 23539. Proof. apply (Pocklington_refl (Pock_certif 23539 2 ((3923, 1)::(2,1)::nil) 1) ((Proof_certif 3923 prime3923) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23549 : prime 23549. Proof. apply (Pocklington_refl (Pock_certif 23549 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23557 : prime 23557. Proof. apply (Pocklington_refl (Pock_certif 23557 5 ((13, 1)::(2,2)::nil) 36) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23561 : prime 23561. Proof. apply (Pocklington_refl (Pock_certif 23561 3 ((5, 1)::(2,3)::nil) 28) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23563 : prime 23563. Proof. apply (Pocklington_refl (Pock_certif 23563 2 ((7, 1)::(3, 1)::(2,1)::nil) 56) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23567 : prime 23567. Proof. apply (Pocklington_refl (Pock_certif 23567 5 ((11783, 1)::(2,1)::nil) 1) ((Proof_certif 11783 prime11783) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23581 : prime 23581. Proof. apply (Pocklington_refl (Pock_certif 23581 6 ((3, 2)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23593 : prime 23593. Proof. apply (Pocklington_refl (Pock_certif 23593 5 ((3, 1)::(2,3)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23599 : prime 23599. Proof. apply (Pocklington_refl (Pock_certif 23599 3 ((3, 3)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23603 : prime 23603. Proof. apply (Pocklington_refl (Pock_certif 23603 2 ((11801, 1)::(2,1)::nil) 1) ((Proof_certif 11801 prime11801) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23609 : prime 23609. Proof. apply (Pocklington_refl (Pock_certif 23609 6 ((13, 1)::(2,3)::nil) 18) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23623 : prime 23623. Proof. apply (Pocklington_refl (Pock_certif 23623 3 ((31, 1)::(2,1)::nil) 7) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23627 : prime 23627. Proof. apply (Pocklington_refl (Pock_certif 23627 2 ((11813, 1)::(2,1)::nil) 1) ((Proof_certif 11813 prime11813) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23629 : prime 23629. Proof. apply (Pocklington_refl (Pock_certif 23629 2 ((11, 1)::(2,2)::nil) 5) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23633 : prime 23633. Proof. apply (Pocklington_refl (Pock_certif 23633 5 ((7, 1)::(2,4)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23663 : prime 23663. Proof. apply (Pocklington_refl (Pock_certif 23663 5 ((11831, 1)::(2,1)::nil) 1) ((Proof_certif 11831 prime11831) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23669 : prime 23669. Proof. apply (Pocklington_refl (Pock_certif 23669 2 ((61, 1)::(2,2)::nil) 1) ((Proof_certif 61 prime61) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23671 : prime 23671. Proof. apply (Pocklington_refl (Pock_certif 23671 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23677 : prime 23677. Proof. apply (Pocklington_refl (Pock_certif 23677 2 ((1973, 1)::(2,2)::nil) 1) ((Proof_certif 1973 prime1973) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23687 : prime 23687. Proof. apply (Pocklington_refl (Pock_certif 23687 5 ((13, 1)::(2,1)::nil) 24) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23689 : prime 23689. Proof. apply (Pocklington_refl (Pock_certif 23689 11 ((3, 1)::(2,3)::nil) 23) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23719 : prime 23719. Proof. apply (Pocklington_refl (Pock_certif 23719 3 ((59, 1)::(2,1)::nil) 1) ((Proof_certif 59 prime59) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23741 : prime 23741. Proof. apply (Pocklington_refl (Pock_certif 23741 2 ((5, 1)::(2,2)::nil) 22) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23743 : prime 23743. Proof. apply (Pocklington_refl (Pock_certif 23743 3 ((1319, 1)::(2,1)::nil) 1) ((Proof_certif 1319 prime1319) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23747 : prime 23747. Proof. apply (Pocklington_refl (Pock_certif 23747 2 ((31, 1)::(2,1)::nil) 9) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23753 : prime 23753. Proof. apply (Pocklington_refl (Pock_certif 23753 3 ((2969, 1)::(2,3)::nil) 1) ((Proof_certif 2969 prime2969) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23761 : prime 23761. Proof. apply (Pocklington_refl (Pock_certif 23761 7 ((3, 1)::(2,4)::nil) 13) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23767 : prime 23767. Proof. apply (Pocklington_refl (Pock_certif 23767 3 ((17, 1)::(2,1)::nil) 16) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23773 : prime 23773. Proof. apply (Pocklington_refl (Pock_certif 23773 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23789 : prime 23789. Proof. apply (Pocklington_refl (Pock_certif 23789 2 ((19, 1)::(2,2)::nil) 8) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23801 : prime 23801. Proof. apply (Pocklington_refl (Pock_certif 23801 3 ((5, 1)::(2,3)::nil) 34) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23813 : prime 23813. Proof. apply (Pocklington_refl (Pock_certif 23813 2 ((5953, 1)::(2,2)::nil) 1) ((Proof_certif 5953 prime5953) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23819 : prime 23819. Proof. apply (Pocklington_refl (Pock_certif 23819 2 ((11909, 1)::(2,1)::nil) 1) ((Proof_certif 11909 prime11909) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23827 : prime 23827. Proof. apply (Pocklington_refl (Pock_certif 23827 2 ((11, 1)::(2,1)::nil) 23) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23831 : prime 23831. Proof. apply (Pocklington_refl (Pock_certif 23831 11 ((2383, 1)::(2,1)::nil) 1) ((Proof_certif 2383 prime2383) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23833 : prime 23833. Proof. apply (Pocklington_refl (Pock_certif 23833 5 ((3, 1)::(2,3)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23857 : prime 23857. Proof. apply (Pocklington_refl (Pock_certif 23857 5 ((3, 1)::(2,4)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23869 : prime 23869. Proof. apply (Pocklington_refl (Pock_certif 23869 2 ((3, 2)::(2,2)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23873 : prime 23873. Proof. apply (Pocklington_refl (Pock_certif 23873 3 ((2,6)::nil) 116) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23879 : prime 23879. Proof. apply (Pocklington_refl (Pock_certif 23879 7 ((11939, 1)::(2,1)::nil) 1) ((Proof_certif 11939 prime11939) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23887 : prime 23887. Proof. apply (Pocklington_refl (Pock_certif 23887 3 ((1327, 1)::(2,1)::nil) 1) ((Proof_certif 1327 prime1327) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23893 : prime 23893. Proof. apply (Pocklington_refl (Pock_certif 23893 5 ((11, 1)::(2,2)::nil) 13) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23899 : prime 23899. Proof. apply (Pocklington_refl (Pock_certif 23899 2 ((7, 1)::(3, 1)::(2,1)::nil) 64) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23909 : prime 23909. Proof. apply (Pocklington_refl (Pock_certif 23909 2 ((43, 1)::(2,2)::nil) 1) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23911 : prime 23911. Proof. apply (Pocklington_refl (Pock_certif 23911 6 ((5, 1)::(3, 1)::(2,1)::nil) 13) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23917 : prime 23917. Proof. apply (Pocklington_refl (Pock_certif 23917 2 ((1993, 1)::(2,2)::nil) 1) ((Proof_certif 1993 prime1993) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23929 : prime 23929. Proof. apply (Pocklington_refl (Pock_certif 23929 7 ((3, 1)::(2,3)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23957 : prime 23957. Proof. apply (Pocklington_refl (Pock_certif 23957 2 ((53, 1)::(2,2)::nil) 1) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23971 : prime 23971. Proof. apply (Pocklington_refl (Pock_certif 23971 10 ((5, 1)::(3, 1)::(2,1)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23977 : prime 23977. Proof. apply (Pocklington_refl (Pock_certif 23977 5 ((3, 1)::(2,3)::nil) 36) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23981 : prime 23981. Proof. apply (Pocklington_refl (Pock_certif 23981 3 ((5, 1)::(2,2)::nil) 35) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime23993 : prime 23993. Proof. apply (Pocklington_refl (Pock_certif 23993 3 ((2999, 1)::(2,3)::nil) 1) ((Proof_certif 2999 prime2999) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24001 : prime 24001. Proof. apply (Pocklington_refl (Pock_certif 24001 7 ((2,6)::nil) 118) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24007 : prime 24007. Proof. apply (Pocklington_refl (Pock_certif 24007 3 ((4001, 1)::(2,1)::nil) 1) ((Proof_certif 4001 prime4001) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24019 : prime 24019. Proof. apply (Pocklington_refl (Pock_certif 24019 2 ((4003, 1)::(2,1)::nil) 1) ((Proof_certif 4003 prime4003) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24023 : prime 24023. Proof. apply (Pocklington_refl (Pock_certif 24023 5 ((12011, 1)::(2,1)::nil) 1) ((Proof_certif 12011 prime12011) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24029 : prime 24029. Proof. apply (Pocklington_refl (Pock_certif 24029 2 ((6007, 1)::(2,2)::nil) 1) ((Proof_certif 6007 prime6007) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24043 : prime 24043. Proof. apply (Pocklington_refl (Pock_certif 24043 2 ((4007, 1)::(2,1)::nil) 1) ((Proof_certif 4007 prime4007) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24049 : prime 24049. Proof. apply (Pocklington_refl (Pock_certif 24049 19 ((3, 1)::(2,4)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24061 : prime 24061. Proof. apply (Pocklington_refl (Pock_certif 24061 10 ((5, 1)::(3, 1)::(2,2)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24071 : prime 24071. Proof. apply (Pocklington_refl (Pock_certif 24071 11 ((29, 1)::(2,1)::nil) 66) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24077 : prime 24077. Proof. apply (Pocklington_refl (Pock_certif 24077 2 ((13, 1)::(2,2)::nil) 46) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24083 : prime 24083. Proof. apply (Pocklington_refl (Pock_certif 24083 2 ((12041, 1)::(2,1)::nil) 1) ((Proof_certif 12041 prime12041) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24091 : prime 24091. Proof. apply (Pocklington_refl (Pock_certif 24091 7 ((5, 1)::(3, 1)::(2,1)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24097 : prime 24097. Proof. apply (Pocklington_refl (Pock_certif 24097 5 ((2,5)::nil) 48) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24103 : prime 24103. Proof. apply (Pocklington_refl (Pock_certif 24103 3 ((13, 1)::(2,1)::nil) 41) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24107 : prime 24107. Proof. apply (Pocklington_refl (Pock_certif 24107 2 ((17, 1)::(2,1)::nil) 27) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24109 : prime 24109. Proof. apply (Pocklington_refl (Pock_certif 24109 2 ((7, 1)::(2,2)::nil) 17) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24113 : prime 24113. Proof. apply (Pocklington_refl (Pock_certif 24113 3 ((11, 1)::(2,4)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24121 : prime 24121. Proof. apply (Pocklington_refl (Pock_certif 24121 13 ((3, 1)::(2,3)::nil) 43) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24133 : prime 24133. Proof. apply (Pocklington_refl (Pock_certif 24133 2 ((2011, 1)::(2,2)::nil) 1) ((Proof_certif 2011 prime2011) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24137 : prime 24137. Proof. apply (Pocklington_refl (Pock_certif 24137 3 ((7, 1)::(2,3)::nil) 94) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24151 : prime 24151. Proof. apply (Pocklington_refl (Pock_certif 24151 6 ((5, 1)::(3, 1)::(2,1)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24169 : prime 24169. Proof. apply (Pocklington_refl (Pock_certif 24169 11 ((3, 1)::(2,3)::nil) 45) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24179 : prime 24179. Proof. apply (Pocklington_refl (Pock_certif 24179 2 ((11, 1)::(2,1)::nil) 40) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24181 : prime 24181. Proof. apply (Pocklington_refl (Pock_certif 24181 17 ((5, 1)::(3, 1)::(2,2)::nil) 42) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24197 : prime 24197. Proof. apply (Pocklington_refl (Pock_certif 24197 2 ((23, 1)::(2,2)::nil) 78) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24203 : prime 24203. Proof. apply (Pocklington_refl (Pock_certif 24203 2 ((12101, 1)::(2,1)::nil) 1) ((Proof_certif 12101 prime12101) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24223 : prime 24223. Proof. apply (Pocklington_refl (Pock_certif 24223 3 ((11, 1)::(3, 1)::(2,1)::nil) 102) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24229 : prime 24229. Proof. apply (Pocklington_refl (Pock_certif 24229 2 ((3, 2)::(2,2)::nil) 23) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24239 : prime 24239. Proof. apply (Pocklington_refl (Pock_certif 24239 13 ((12119, 1)::(2,1)::nil) 1) ((Proof_certif 12119 prime12119) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24247 : prime 24247. Proof. apply (Pocklington_refl (Pock_certif 24247 3 ((3, 3)::(2,1)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24251 : prime 24251. Proof. apply (Pocklington_refl (Pock_certif 24251 6 ((5, 2)::(2,1)::nil) 84) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24281 : prime 24281. Proof. apply (Pocklington_refl (Pock_certif 24281 3 ((5, 1)::(2,3)::nil) 46) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24317 : prime 24317. Proof. apply (Pocklington_refl (Pock_certif 24317 2 ((6079, 1)::(2,2)::nil) 1) ((Proof_certif 6079 prime6079) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24329 : prime 24329. Proof. apply (Pocklington_refl (Pock_certif 24329 3 ((3041, 1)::(2,3)::nil) 1) ((Proof_certif 3041 prime3041) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24337 : prime 24337. Proof. apply (Pocklington_refl (Pock_certif 24337 5 ((3, 1)::(2,4)::nil) 26) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24359 : prime 24359. Proof. apply (Pocklington_refl (Pock_certif 24359 11 ((19, 1)::(2,1)::nil) 32) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24371 : prime 24371. Proof. apply (Pocklington_refl (Pock_certif 24371 2 ((2437, 1)::(2,1)::nil) 1) ((Proof_certif 2437 prime2437) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24373 : prime 24373. Proof. apply (Pocklington_refl (Pock_certif 24373 7 ((3, 2)::(2,2)::nil) 27) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24379 : prime 24379. Proof. apply (Pocklington_refl (Pock_certif 24379 2 ((17, 1)::(2,1)::nil) 35) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24391 : prime 24391. Proof. apply (Pocklington_refl (Pock_certif 24391 3 ((5, 1)::(3, 1)::(2,1)::nil) 31) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24407 : prime 24407. Proof. apply (Pocklington_refl (Pock_certif 24407 5 ((12203, 1)::(2,1)::nil) 1) ((Proof_certif 12203 prime12203) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24413 : prime 24413. Proof. apply (Pocklington_refl (Pock_certif 24413 2 ((17, 1)::(2,2)::nil) 86) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24419 : prime 24419. Proof. apply (Pocklington_refl (Pock_certif 24419 2 ((29, 1)::(2,1)::nil) 72) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24421 : prime 24421. Proof. apply (Pocklington_refl (Pock_certif 24421 6 ((5, 1)::(2,2)::nil) 14) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24439 : prime 24439. Proof. apply (Pocklington_refl (Pock_certif 24439 3 ((4073, 1)::(2,1)::nil) 1) ((Proof_certif 4073 prime4073) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24443 : prime 24443. Proof. apply (Pocklington_refl (Pock_certif 24443 2 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24469 : prime 24469. Proof. apply (Pocklington_refl (Pock_certif 24469 2 ((2039, 1)::(2,2)::nil) 1) ((Proof_certif 2039 prime2039) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24473 : prime 24473. Proof. apply (Pocklington_refl (Pock_certif 24473 3 ((7, 1)::(2,3)::nil) 100) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24481 : prime 24481. Proof. apply (Pocklington_refl (Pock_certif 24481 11 ((2,5)::nil) 60) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24499 : prime 24499. Proof. apply (Pocklington_refl (Pock_certif 24499 2 ((1361, 1)::(2,1)::nil) 1) ((Proof_certif 1361 prime1361) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24509 : prime 24509. Proof. apply (Pocklington_refl (Pock_certif 24509 2 ((11, 1)::(2,2)::nil) 28) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24517 : prime 24517. Proof. apply (Pocklington_refl (Pock_certif 24517 5 ((3, 2)::(2,2)::nil) 31) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24527 : prime 24527. Proof. apply (Pocklington_refl (Pock_certif 24527 5 ((12263, 1)::(2,1)::nil) 1) ((Proof_certif 12263 prime12263) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24533 : prime 24533. Proof. apply (Pocklington_refl (Pock_certif 24533 2 ((6133, 1)::(2,2)::nil) 1) ((Proof_certif 6133 prime6133) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24547 : prime 24547. Proof. apply (Pocklington_refl (Pock_certif 24547 2 ((4091, 1)::(2,1)::nil) 1) ((Proof_certif 4091 prime4091) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24551 : prime 24551. Proof. apply (Pocklington_refl (Pock_certif 24551 7 ((5, 2)::(2,1)::nil) 90) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24571 : prime 24571. Proof. apply (Pocklington_refl (Pock_certif 24571 7 ((3, 3)::(2,1)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24593 : prime 24593. Proof. apply (Pocklington_refl (Pock_certif 24593 3 ((29, 1)::(2,4)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24611 : prime 24611. Proof. apply (Pocklington_refl (Pock_certif 24611 2 ((23, 1)::(2,1)::nil) 74) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24623 : prime 24623. Proof. apply (Pocklington_refl (Pock_certif 24623 5 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24631 : prime 24631. Proof. apply (Pocklington_refl (Pock_certif 24631 3 ((5, 1)::(3, 1)::(2,1)::nil) 39) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24659 : prime 24659. Proof. apply (Pocklington_refl (Pock_certif 24659 2 ((12329, 1)::(2,1)::nil) 1) ((Proof_certif 12329 prime12329) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24671 : prime 24671. Proof. apply (Pocklington_refl (Pock_certif 24671 11 ((2467, 1)::(2,1)::nil) 1) ((Proof_certif 2467 prime2467) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24677 : prime 24677. Proof. apply (Pocklington_refl (Pock_certif 24677 2 ((31, 1)::(2,2)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24683 : prime 24683. Proof. apply (Pocklington_refl (Pock_certif 24683 2 ((41, 1)::(2,1)::nil) 136) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24691 : prime 24691. Proof. apply (Pocklington_refl (Pock_certif 24691 2 ((5, 1)::(3, 1)::(2,1)::nil) 41) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24697 : prime 24697. Proof. apply (Pocklington_refl (Pock_certif 24697 5 ((3, 1)::(2,3)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24709 : prime 24709. Proof. apply (Pocklington_refl (Pock_certif 24709 2 ((29, 1)::(2,2)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24733 : prime 24733. Proof. apply (Pocklington_refl (Pock_certif 24733 2 ((3, 2)::(2,2)::nil) 38) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24749 : prime 24749. Proof. apply (Pocklington_refl (Pock_certif 24749 2 ((23, 1)::(2,2)::nil) 84) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24763 : prime 24763. Proof. apply (Pocklington_refl (Pock_certif 24763 2 ((4127, 1)::(2,1)::nil) 1) ((Proof_certif 4127 prime4127) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24767 : prime 24767. Proof. apply (Pocklington_refl (Pock_certif 24767 5 ((29, 1)::(2,1)::nil) 78) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24781 : prime 24781. Proof. apply (Pocklington_refl (Pock_certif 24781 2 ((5, 1)::(2,2)::nil) 35) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24793 : prime 24793. Proof. apply (Pocklington_refl (Pock_certif 24793 5 ((3, 1)::(2,3)::nil) 21) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24799 : prime 24799. Proof. apply (Pocklington_refl (Pock_certif 24799 3 ((4133, 1)::(2,1)::nil) 1) ((Proof_certif 4133 prime4133) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24809 : prime 24809. Proof. apply (Pocklington_refl (Pock_certif 24809 6 ((7, 1)::(2,3)::nil) 106) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24821 : prime 24821. Proof. apply (Pocklington_refl (Pock_certif 24821 2 ((17, 1)::(2,2)::nil) 92) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24841 : prime 24841. Proof. apply (Pocklington_refl (Pock_certif 24841 14 ((3, 1)::(2,3)::nil) 23) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24847 : prime 24847. Proof. apply (Pocklington_refl (Pock_certif 24847 3 ((41, 1)::(2,1)::nil) 138) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24851 : prime 24851. Proof. apply (Pocklington_refl (Pock_certif 24851 2 ((5, 2)::(2,1)::nil) 96) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24859 : prime 24859. Proof. apply (Pocklington_refl (Pock_certif 24859 2 ((1381, 1)::(2,1)::nil) 1) ((Proof_certif 1381 prime1381) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24877 : prime 24877. Proof. apply (Pocklington_refl (Pock_certif 24877 5 ((3, 2)::(2,2)::nil) 42) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24889 : prime 24889. Proof. apply (Pocklington_refl (Pock_certif 24889 11 ((3, 1)::(2,3)::nil) 25) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24907 : prime 24907. Proof. apply (Pocklington_refl (Pock_certif 24907 2 ((7, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24917 : prime 24917. Proof. apply (Pocklington_refl (Pock_certif 24917 2 ((6229, 1)::(2,2)::nil) 1) ((Proof_certif 6229 prime6229) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24919 : prime 24919. Proof. apply (Pocklington_refl (Pock_certif 24919 3 ((4153, 1)::(2,1)::nil) 1) ((Proof_certif 4153 prime4153) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24923 : prime 24923. Proof. apply (Pocklington_refl (Pock_certif 24923 2 ((17, 1)::(2,1)::nil) 52) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24943 : prime 24943. Proof. apply (Pocklington_refl (Pock_certif 24943 3 ((4157, 1)::(2,1)::nil) 1) ((Proof_certif 4157 prime4157) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24953 : prime 24953. Proof. apply (Pocklington_refl (Pock_certif 24953 3 ((3119, 1)::(2,3)::nil) 1) ((Proof_certif 3119 prime3119) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24967 : prime 24967. Proof. apply (Pocklington_refl (Pock_certif 24967 3 ((19, 1)::(2,1)::nil) 48) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24971 : prime 24971. Proof. apply (Pocklington_refl (Pock_certif 24971 2 ((11, 1)::(2,1)::nil) 32) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24977 : prime 24977. Proof. apply (Pocklington_refl (Pock_certif 24977 3 ((7, 1)::(2,4)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24979 : prime 24979. Proof. apply (Pocklington_refl (Pock_certif 24979 2 ((23, 1)::(2,1)::nil) 82) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime24989 : prime 24989. Proof. apply (Pocklington_refl (Pock_certif 24989 2 ((6247, 1)::(2,2)::nil) 1) ((Proof_certif 6247 prime6247) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25013 : prime 25013. Proof. apply (Pocklington_refl (Pock_certif 25013 2 ((13, 1)::(2,2)::nil) 64) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25031 : prime 25031. Proof. apply (Pocklington_refl (Pock_certif 25031 13 ((2503, 1)::(2,1)::nil) 1) ((Proof_certif 2503 prime2503) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25033 : prime 25033. Proof. apply (Pocklington_refl (Pock_certif 25033 5 ((3, 1)::(2,3)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25037 : prime 25037. Proof. apply (Pocklington_refl (Pock_certif 25037 2 ((11, 1)::(2,2)::nil) 40) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25057 : prime 25057. Proof. apply (Pocklington_refl (Pock_certif 25057 5 ((2,5)::nil) 11) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25073 : prime 25073. Proof. apply (Pocklington_refl (Pock_certif 25073 3 ((1567, 1)::(2,4)::nil) 1) ((Proof_certif 1567 prime1567) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25087 : prime 25087. Proof. apply (Pocklington_refl (Pock_certif 25087 3 ((37, 1)::(2,1)::nil) 42) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25097 : prime 25097. Proof. apply (Pocklington_refl (Pock_certif 25097 3 ((3137, 1)::(2,3)::nil) 1) ((Proof_certif 3137 prime3137) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25111 : prime 25111. Proof. apply (Pocklington_refl (Pock_certif 25111 3 ((3, 3)::(2,1)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25117 : prime 25117. Proof. apply (Pocklington_refl (Pock_certif 25117 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25121 : prime 25121. Proof. apply (Pocklington_refl (Pock_certif 25121 3 ((2,5)::nil) 13) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25127 : prime 25127. Proof. apply (Pocklington_refl (Pock_certif 25127 5 ((17, 1)::(2,1)::nil) 58) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25147 : prime 25147. Proof. apply (Pocklington_refl (Pock_certif 25147 2 ((11, 1)::(2,1)::nil) 40) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25153 : prime 25153. Proof. apply (Pocklington_refl (Pock_certif 25153 5 ((2,6)::nil) 7) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25163 : prime 25163. Proof. apply (Pocklington_refl (Pock_certif 25163 2 ((23, 1)::(2,1)::nil) 86) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25169 : prime 25169. Proof. apply (Pocklington_refl (Pock_certif 25169 3 ((11, 1)::(2,4)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25171 : prime 25171. Proof. apply (Pocklington_refl (Pock_certif 25171 3 ((5, 1)::(3, 1)::(2,1)::nil) 58) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25183 : prime 25183. Proof. apply (Pocklington_refl (Pock_certif 25183 3 ((1399, 1)::(2,1)::nil) 1) ((Proof_certif 1399 prime1399) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25189 : prime 25189. Proof. apply (Pocklington_refl (Pock_certif 25189 2 ((2099, 1)::(2,2)::nil) 1) ((Proof_certif 2099 prime2099) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25219 : prime 25219. Proof. apply (Pocklington_refl (Pock_certif 25219 2 ((3, 3)::(2,1)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25229 : prime 25229. Proof. apply (Pocklington_refl (Pock_certif 25229 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25237 : prime 25237. Proof. apply (Pocklington_refl (Pock_certif 25237 2 ((3, 2)::(2,2)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25243 : prime 25243. Proof. apply (Pocklington_refl (Pock_certif 25243 2 ((7, 1)::(3, 1)::(2,1)::nil) 10) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25247 : prime 25247. Proof. apply (Pocklington_refl (Pock_certif 25247 5 ((13, 1)::(2,1)::nil) 32) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25253 : prime 25253. Proof. apply (Pocklington_refl (Pock_certif 25253 2 ((59, 1)::(2,2)::nil) 1) ((Proof_certif 59 prime59) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25261 : prime 25261. Proof. apply (Pocklington_refl (Pock_certif 25261 2 ((5, 1)::(2,2)::nil) 16) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25301 : prime 25301. Proof. apply (Pocklington_refl (Pock_certif 25301 3 ((5, 1)::(2,2)::nil) 19) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25303 : prime 25303. Proof. apply (Pocklington_refl (Pock_certif 25303 3 ((4217, 1)::(2,1)::nil) 1) ((Proof_certif 4217 prime4217) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25307 : prime 25307. Proof. apply (Pocklington_refl (Pock_certif 25307 2 ((12653, 1)::(2,1)::nil) 1) ((Proof_certif 12653 prime12653) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25309 : prime 25309. Proof. apply (Pocklington_refl (Pock_certif 25309 2 ((3, 2)::(2,2)::nil) 54) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25321 : prime 25321. Proof. apply (Pocklington_refl (Pock_certif 25321 19 ((3, 1)::(2,3)::nil) 45) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25339 : prime 25339. Proof. apply (Pocklington_refl (Pock_certif 25339 2 ((41, 1)::(2,1)::nil) 144) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25343 : prime 25343. Proof. apply (Pocklington_refl (Pock_certif 25343 5 ((12671, 1)::(2,1)::nil) 1) ((Proof_certif 12671 prime12671) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25349 : prime 25349. Proof. apply (Pocklington_refl (Pock_certif 25349 2 ((6337, 1)::(2,2)::nil) 1) ((Proof_certif 6337 prime6337) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25357 : prime 25357. Proof. apply (Pocklington_refl (Pock_certif 25357 2 ((2113, 1)::(2,2)::nil) 1) ((Proof_certif 2113 prime2113) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25367 : prime 25367. Proof. apply (Pocklington_refl (Pock_certif 25367 5 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25373 : prime 25373. Proof. apply (Pocklington_refl (Pock_certif 25373 2 ((6343, 1)::(2,2)::nil) 1) ((Proof_certif 6343 prime6343) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25391 : prime 25391. Proof. apply (Pocklington_refl (Pock_certif 25391 7 ((2539, 1)::(2,1)::nil) 1) ((Proof_certif 2539 prime2539) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25409 : prime 25409. Proof. apply (Pocklington_refl (Pock_certif 25409 3 ((2,6)::nil) 12) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25411 : prime 25411. Proof. apply (Pocklington_refl (Pock_certif 25411 7 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25423 : prime 25423. Proof. apply (Pocklington_refl (Pock_certif 25423 3 ((19, 1)::(2,1)::nil) 60) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25439 : prime 25439. Proof. apply (Pocklington_refl (Pock_certif 25439 7 ((23, 1)::(2,1)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25447 : prime 25447. Proof. apply (Pocklington_refl (Pock_certif 25447 3 ((4241, 1)::(2,1)::nil) 1) ((Proof_certif 4241 prime4241) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25453 : prime 25453. Proof. apply (Pocklington_refl (Pock_certif 25453 2 ((3, 2)::(2,2)::nil) 58) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25457 : prime 25457. Proof. apply (Pocklington_refl (Pock_certif 25457 3 ((37, 1)::(2,4)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25463 : prime 25463. Proof. apply (Pocklington_refl (Pock_certif 25463 5 ((29, 1)::(2,1)::nil) 90) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25469 : prime 25469. Proof. apply (Pocklington_refl (Pock_certif 25469 2 ((6367, 1)::(2,2)::nil) 1) ((Proof_certif 6367 prime6367) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25471 : prime 25471. Proof. apply (Pocklington_refl (Pock_certif 25471 6 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25523 : prime 25523. Proof. apply (Pocklington_refl (Pock_certif 25523 2 ((1823, 1)::(2,1)::nil) 1) ((Proof_certif 1823 prime1823) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25537 : prime 25537. Proof. apply (Pocklington_refl (Pock_certif 25537 5 ((2,6)::nil) 14) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25541 : prime 25541. Proof. apply (Pocklington_refl (Pock_certif 25541 2 ((5, 1)::(2,2)::nil) 33) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25561 : prime 25561. Proof. apply (Pocklington_refl (Pock_certif 25561 11 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25577 : prime 25577. Proof. apply (Pocklington_refl (Pock_certif 25577 3 ((23, 1)::(2,3)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25579 : prime 25579. Proof. apply (Pocklington_refl (Pock_certif 25579 2 ((7, 1)::(3, 1)::(2,1)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25583 : prime 25583. Proof. apply (Pocklington_refl (Pock_certif 25583 5 ((12791, 1)::(2,1)::nil) 1) ((Proof_certif 12791 prime12791) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25589 : prime 25589. Proof. apply (Pocklington_refl (Pock_certif 25589 2 ((6397, 1)::(2,2)::nil) 1) ((Proof_certif 6397 prime6397) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25601 : prime 25601. Proof. apply (Pocklington_refl (Pock_certif 25601 3 ((2,10)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25603 : prime 25603. Proof. apply (Pocklington_refl (Pock_certif 25603 2 ((17, 1)::(2,1)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25609 : prime 25609. Proof. apply (Pocklington_refl (Pock_certif 25609 7 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25621 : prime 25621. Proof. apply (Pocklington_refl (Pock_certif 25621 10 ((5, 1)::(3, 1)::(2,2)::nil) 66) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25633 : prime 25633. Proof. apply (Pocklington_refl (Pock_certif 25633 5 ((2,5)::nil) 31) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25639 : prime 25639. Proof. apply (Pocklington_refl (Pock_certif 25639 3 ((4273, 1)::(2,1)::nil) 1) ((Proof_certif 4273 prime4273) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25643 : prime 25643. Proof. apply (Pocklington_refl (Pock_certif 25643 2 ((12821, 1)::(2,1)::nil) 1) ((Proof_certif 12821 prime12821) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25657 : prime 25657. Proof. apply (Pocklington_refl (Pock_certif 25657 5 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25667 : prime 25667. Proof. apply (Pocklington_refl (Pock_certif 25667 2 ((41, 1)::(2,1)::nil) 148) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25673 : prime 25673. Proof. apply (Pocklington_refl (Pock_certif 25673 3 ((3209, 1)::(2,3)::nil) 1) ((Proof_certif 3209 prime3209) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25679 : prime 25679. Proof. apply (Pocklington_refl (Pock_certif 25679 11 ((37, 1)::(2,1)::nil) 50) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25693 : prime 25693. Proof. apply (Pocklington_refl (Pock_certif 25693 2 ((2141, 1)::(2,2)::nil) 1) ((Proof_certif 2141 prime2141) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25703 : prime 25703. Proof. apply (Pocklington_refl (Pock_certif 25703 5 ((71, 1)::(2,1)::nil) 1) ((Proof_certif 71 prime71) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25717 : prime 25717. Proof. apply (Pocklington_refl (Pock_certif 25717 2 ((2143, 1)::(2,2)::nil) 1) ((Proof_certif 2143 prime2143) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25733 : prime 25733. Proof. apply (Pocklington_refl (Pock_certif 25733 2 ((7, 1)::(2,2)::nil) 20) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25741 : prime 25741. Proof. apply (Pocklington_refl (Pock_certif 25741 6 ((3, 2)::(2,2)::nil) 66) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25747 : prime 25747. Proof. apply (Pocklington_refl (Pock_certif 25747 2 ((7, 1)::(3, 1)::(2,1)::nil) 23) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25759 : prime 25759. Proof. apply (Pocklington_refl (Pock_certif 25759 3 ((3, 3)::(2,1)::nil) 44) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25763 : prime 25763. Proof. apply (Pocklington_refl (Pock_certif 25763 5 ((11, 1)::(2,1)::nil) 22) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25771 : prime 25771. Proof. apply (Pocklington_refl (Pock_certif 25771 2 ((5, 1)::(3, 1)::(2,1)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25793 : prime 25793. Proof. apply (Pocklington_refl (Pock_certif 25793 3 ((2,6)::nil) 18) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25799 : prime 25799. Proof. apply (Pocklington_refl (Pock_certif 25799 7 ((12899, 1)::(2,1)::nil) 1) ((Proof_certif 12899 prime12899) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25801 : prime 25801. Proof. apply (Pocklington_refl (Pock_certif 25801 7 ((3, 1)::(2,3)::nil) 13) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25819 : prime 25819. Proof. apply (Pocklington_refl (Pock_certif 25819 3 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25841 : prime 25841. Proof. apply (Pocklington_refl (Pock_certif 25841 3 ((5, 1)::(2,4)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25847 : prime 25847. Proof. apply (Pocklington_refl (Pock_certif 25847 5 ((12923, 1)::(2,1)::nil) 1) ((Proof_certif 12923 prime12923) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25849 : prime 25849. Proof. apply (Pocklington_refl (Pock_certif 25849 7 ((3, 1)::(2,3)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25867 : prime 25867. Proof. apply (Pocklington_refl (Pock_certif 25867 2 ((3, 3)::(2,1)::nil) 46) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25873 : prime 25873. Proof. apply (Pocklington_refl (Pock_certif 25873 10 ((3, 1)::(2,4)::nil) 58) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25889 : prime 25889. Proof. apply (Pocklington_refl (Pock_certif 25889 3 ((2,5)::nil) 39) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25903 : prime 25903. Proof. apply (Pocklington_refl (Pock_certif 25903 3 ((1439, 1)::(2,1)::nil) 1) ((Proof_certif 1439 prime1439) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25913 : prime 25913. Proof. apply (Pocklington_refl (Pock_certif 25913 3 ((41, 1)::(2,3)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25919 : prime 25919. Proof. apply (Pocklington_refl (Pock_certif 25919 11 ((12959, 1)::(2,1)::nil) 1) ((Proof_certif 12959 prime12959) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25931 : prime 25931. Proof. apply (Pocklington_refl (Pock_certif 25931 2 ((2593, 1)::(2,1)::nil) 1) ((Proof_certif 2593 prime2593) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25933 : prime 25933. Proof. apply (Pocklington_refl (Pock_certif 25933 2 ((2161, 1)::(2,2)::nil) 1) ((Proof_certif 2161 prime2161) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25939 : prime 25939. Proof. apply (Pocklington_refl (Pock_certif 25939 3 ((11, 1)::(2,1)::nil) 31) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25943 : prime 25943. Proof. apply (Pocklington_refl (Pock_certif 25943 5 ((17, 1)::(2,1)::nil) 11) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25951 : prime 25951. Proof. apply (Pocklington_refl (Pock_certif 25951 3 ((5, 1)::(3, 1)::(2,1)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25969 : prime 25969. Proof. apply (Pocklington_refl (Pock_certif 25969 7 ((3, 1)::(2,4)::nil) 60) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25981 : prime 25981. Proof. apply (Pocklington_refl (Pock_certif 25981 11 ((5, 1)::(3, 1)::(2,2)::nil) 72) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25997 : prime 25997. Proof. apply (Pocklington_refl (Pock_certif 25997 2 ((67, 1)::(2,2)::nil) 1) ((Proof_certif 67 prime67) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime25999 : prime 25999. Proof. apply (Pocklington_refl (Pock_certif 25999 7 ((7, 1)::(3, 1)::(2,1)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26003 : prime 26003. Proof. apply (Pocklington_refl (Pock_certif 26003 2 ((13001, 1)::(2,1)::nil) 1) ((Proof_certif 13001 prime13001) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26017 : prime 26017. Proof. apply (Pocklington_refl (Pock_certif 26017 5 ((2,5)::nil) 43) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26021 : prime 26021. Proof. apply (Pocklington_refl (Pock_certif 26021 2 ((1301, 1)::(2,2)::nil) 1) ((Proof_certif 1301 prime1301) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26029 : prime 26029. Proof. apply (Pocklington_refl (Pock_certif 26029 6 ((3, 2)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26041 : prime 26041. Proof. apply (Pocklington_refl (Pock_certif 26041 13 ((3, 1)::(2,3)::nil) 25) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26053 : prime 26053. Proof. apply (Pocklington_refl (Pock_certif 26053 2 ((13, 1)::(2,2)::nil) 84) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26083 : prime 26083. Proof. apply (Pocklington_refl (Pock_certif 26083 7 ((3, 3)::(2,1)::nil) 50) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26099 : prime 26099. Proof. apply (Pocklington_refl (Pock_certif 26099 2 ((13049, 1)::(2,1)::nil) 1) ((Proof_certif 13049 prime13049) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26107 : prime 26107. Proof. apply (Pocklington_refl (Pock_certif 26107 2 ((19, 1)::(2,1)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26111 : prime 26111. Proof. apply (Pocklington_refl (Pock_certif 26111 7 ((7, 1)::(5, 1)::(2,1)::nil) 92) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26113 : prime 26113. Proof. apply (Pocklington_refl (Pock_certif 26113 5 ((2,9)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26119 : prime 26119. Proof. apply (Pocklington_refl (Pock_certif 26119 3 ((1451, 1)::(2,1)::nil) 1) ((Proof_certif 1451 prime1451) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26141 : prime 26141. Proof. apply (Pocklington_refl (Pock_certif 26141 2 ((5, 1)::(2,2)::nil) 21) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26153 : prime 26153. Proof. apply (Pocklington_refl (Pock_certif 26153 3 ((7, 1)::(2,3)::nil) 18) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26161 : prime 26161. Proof. apply (Pocklington_refl (Pock_certif 26161 13 ((3, 1)::(2,4)::nil) 64) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26171 : prime 26171. Proof. apply (Pocklington_refl (Pock_certif 26171 2 ((2617, 1)::(2,1)::nil) 1) ((Proof_certif 2617 prime2617) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26177 : prime 26177. Proof. apply (Pocklington_refl (Pock_certif 26177 3 ((2,6)::nil) 24) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26183 : prime 26183. Proof. apply (Pocklington_refl (Pock_certif 26183 5 ((13, 1)::(2,1)::nil) 14) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26189 : prime 26189. Proof. apply (Pocklington_refl (Pock_certif 26189 2 ((6547, 1)::(2,2)::nil) 1) ((Proof_certif 6547 prime6547) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26203 : prime 26203. Proof. apply (Pocklington_refl (Pock_certif 26203 3 ((11, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26209 : prime 26209. Proof. apply (Pocklington_refl (Pock_certif 26209 11 ((2,5)::nil) 50) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26227 : prime 26227. Proof. apply (Pocklington_refl (Pock_certif 26227 2 ((31, 1)::(2,1)::nil) 50) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26237 : prime 26237. Proof. apply (Pocklington_refl (Pock_certif 26237 2 ((7, 1)::(2,2)::nil) 39) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26249 : prime 26249. Proof. apply (Pocklington_refl (Pock_certif 26249 3 ((17, 1)::(2,3)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26251 : prime 26251. Proof. apply (Pocklington_refl (Pock_certif 26251 2 ((5, 1)::(3, 1)::(2,1)::nil) 33) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26261 : prime 26261. Proof. apply (Pocklington_refl (Pock_certif 26261 2 ((5, 1)::(2,2)::nil) 28) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26263 : prime 26263. Proof. apply (Pocklington_refl (Pock_certif 26263 3 ((1459, 1)::(2,1)::nil) 1) ((Proof_certif 1459 prime1459) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26267 : prime 26267. Proof. apply (Pocklington_refl (Pock_certif 26267 2 ((23, 1)::(2,1)::nil) 17) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26293 : prime 26293. Proof. apply (Pocklington_refl (Pock_certif 26293 2 ((7, 1)::(2,2)::nil) 41) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26297 : prime 26297. Proof. apply (Pocklington_refl (Pock_certif 26297 3 ((19, 1)::(2,3)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26309 : prime 26309. Proof. apply (Pocklington_refl (Pock_certif 26309 2 ((6577, 1)::(2,2)::nil) 1) ((Proof_certif 6577 prime6577) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26317 : prime 26317. Proof. apply (Pocklington_refl (Pock_certif 26317 6 ((3, 2)::(2,2)::nil) 6) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26321 : prime 26321. Proof. apply (Pocklington_refl (Pock_certif 26321 3 ((5, 1)::(2,4)::nil) 8) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26339 : prime 26339. Proof. apply (Pocklington_refl (Pock_certif 26339 2 ((13, 1)::(2,1)::nil) 21) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26347 : prime 26347. Proof. apply (Pocklington_refl (Pock_certif 26347 2 ((4391, 1)::(2,1)::nil) 1) ((Proof_certif 4391 prime4391) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26357 : prime 26357. Proof. apply (Pocklington_refl (Pock_certif 26357 2 ((11, 1)::(2,2)::nil) 70) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26371 : prime 26371. Proof. apply (Pocklington_refl (Pock_certif 26371 3 ((5, 1)::(3, 1)::(2,1)::nil) 37) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26387 : prime 26387. Proof. apply (Pocklington_refl (Pock_certif 26387 2 ((79, 1)::(2,1)::nil) 1) ((Proof_certif 79 prime79) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26393 : prime 26393. Proof. apply (Pocklington_refl (Pock_certif 26393 3 ((3299, 1)::(2,3)::nil) 1) ((Proof_certif 3299 prime3299) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26399 : prime 26399. Proof. apply (Pocklington_refl (Pock_certif 26399 7 ((67, 1)::(2,1)::nil) 1) ((Proof_certif 67 prime67) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26407 : prime 26407. Proof. apply (Pocklington_refl (Pock_certif 26407 5 ((3, 3)::(2,1)::nil) 56) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26417 : prime 26417. Proof. apply (Pocklington_refl (Pock_certif 26417 3 ((13, 1)::(2,4)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26423 : prime 26423. Proof. apply (Pocklington_refl (Pock_certif 26423 5 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26431 : prime 26431. Proof. apply (Pocklington_refl (Pock_certif 26431 3 ((5, 1)::(3, 1)::(2,1)::nil) 39) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26437 : prime 26437. Proof. apply (Pocklington_refl (Pock_certif 26437 2 ((2203, 1)::(2,2)::nil) 1) ((Proof_certif 2203 prime2203) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26449 : prime 26449. Proof. apply (Pocklington_refl (Pock_certif 26449 7 ((3, 1)::(2,4)::nil) 70) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26459 : prime 26459. Proof. apply (Pocklington_refl (Pock_certif 26459 2 ((13229, 1)::(2,1)::nil) 1) ((Proof_certif 13229 prime13229) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26479 : prime 26479. Proof. apply (Pocklington_refl (Pock_certif 26479 3 ((1471, 1)::(2,1)::nil) 1) ((Proof_certif 1471 prime1471) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26489 : prime 26489. Proof. apply (Pocklington_refl (Pock_certif 26489 3 ((7, 1)::(2,3)::nil) 24) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26497 : prime 26497. Proof. apply (Pocklington_refl (Pock_certif 26497 5 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26501 : prime 26501. Proof. apply (Pocklington_refl (Pock_certif 26501 2 ((5, 2)::(2,2)::nil) 64) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26513 : prime 26513. Proof. apply (Pocklington_refl (Pock_certif 26513 3 ((1657, 1)::(2,4)::nil) 1) ((Proof_certif 1657 prime1657) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26539 : prime 26539. Proof. apply (Pocklington_refl (Pock_certif 26539 2 ((4423, 1)::(2,1)::nil) 1) ((Proof_certif 4423 prime4423) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26557 : prime 26557. Proof. apply (Pocklington_refl (Pock_certif 26557 2 ((2213, 1)::(2,2)::nil) 1) ((Proof_certif 2213 prime2213) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26561 : prime 26561. Proof. apply (Pocklington_refl (Pock_certif 26561 3 ((2,6)::nil) 30) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26573 : prime 26573. Proof. apply (Pocklington_refl (Pock_certif 26573 2 ((7, 1)::(2,2)::nil) 51) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26591 : prime 26591. Proof. apply (Pocklington_refl (Pock_certif 26591 11 ((2659, 1)::(2,1)::nil) 1) ((Proof_certif 2659 prime2659) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26597 : prime 26597. Proof. apply (Pocklington_refl (Pock_certif 26597 2 ((61, 1)::(2,2)::nil) 1) ((Proof_certif 61 prime61) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26627 : prime 26627. Proof. apply (Pocklington_refl (Pock_certif 26627 2 ((13313, 1)::(2,1)::nil) 1) ((Proof_certif 13313 prime13313) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26633 : prime 26633. Proof. apply (Pocklington_refl (Pock_certif 26633 3 ((3329, 1)::(2,3)::nil) 1) ((Proof_certif 3329 prime3329) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26641 : prime 26641. Proof. apply (Pocklington_refl (Pock_certif 26641 7 ((3, 1)::(2,4)::nil) 74) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26647 : prime 26647. Proof. apply (Pocklington_refl (Pock_certif 26647 3 ((4441, 1)::(2,1)::nil) 1) ((Proof_certif 4441 prime4441) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26669 : prime 26669. Proof. apply (Pocklington_refl (Pock_certif 26669 2 ((59, 1)::(2,2)::nil) 1) ((Proof_certif 59 prime59) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26681 : prime 26681. Proof. apply (Pocklington_refl (Pock_certif 26681 6 ((5, 1)::(2,3)::nil) 25) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26683 : prime 26683. Proof. apply (Pocklington_refl (Pock_certif 26683 2 ((4447, 1)::(2,1)::nil) 1) ((Proof_certif 4447 prime4447) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26687 : prime 26687. Proof. apply (Pocklington_refl (Pock_certif 26687 5 ((11, 1)::(2,1)::nil) 20) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26693 : prime 26693. Proof. apply (Pocklington_refl (Pock_certif 26693 2 ((6673, 1)::(2,2)::nil) 1) ((Proof_certif 6673 prime6673) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26699 : prime 26699. Proof. apply (Pocklington_refl (Pock_certif 26699 2 ((1907, 1)::(2,1)::nil) 1) ((Proof_certif 1907 prime1907) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26701 : prime 26701. Proof. apply (Pocklington_refl (Pock_certif 26701 22 ((5, 1)::(3, 1)::(2,2)::nil) 84) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26711 : prime 26711. Proof. apply (Pocklington_refl (Pock_certif 26711 11 ((2671, 1)::(2,1)::nil) 1) ((Proof_certif 2671 prime2671) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26713 : prime 26713. Proof. apply (Pocklington_refl (Pock_certif 26713 10 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26717 : prime 26717. Proof. apply (Pocklington_refl (Pock_certif 26717 2 ((6679, 1)::(2,2)::nil) 1) ((Proof_certif 6679 prime6679) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26723 : prime 26723. Proof. apply (Pocklington_refl (Pock_certif 26723 2 ((31, 1)::(2,1)::nil) 58) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26729 : prime 26729. Proof. apply (Pocklington_refl (Pock_certif 26729 3 ((13, 1)::(2,3)::nil) 48) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26731 : prime 26731. Proof. apply (Pocklington_refl (Pock_certif 26731 3 ((3, 3)::(2,1)::nil) 62) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26737 : prime 26737. Proof. apply (Pocklington_refl (Pock_certif 26737 10 ((3, 1)::(2,4)::nil) 76) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26759 : prime 26759. Proof. apply (Pocklington_refl (Pock_certif 26759 13 ((17, 1)::(2,1)::nil) 37) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26777 : prime 26777. Proof. apply (Pocklington_refl (Pock_certif 26777 3 ((3347, 1)::(2,3)::nil) 1) ((Proof_certif 3347 prime3347) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26783 : prime 26783. Proof. apply (Pocklington_refl (Pock_certif 26783 5 ((1913, 1)::(2,1)::nil) 1) ((Proof_certif 1913 prime1913) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26801 : prime 26801. Proof. apply (Pocklington_refl (Pock_certif 26801 3 ((5, 1)::(2,4)::nil) 14) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26813 : prime 26813. Proof. apply (Pocklington_refl (Pock_certif 26813 2 ((6703, 1)::(2,2)::nil) 1) ((Proof_certif 6703 prime6703) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26821 : prime 26821. Proof. apply (Pocklington_refl (Pock_certif 26821 2 ((3, 2)::(2,2)::nil) 23) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26833 : prime 26833. Proof. apply (Pocklington_refl (Pock_certif 26833 5 ((3, 1)::(2,4)::nil) 78) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26839 : prime 26839. Proof. apply (Pocklington_refl (Pock_certif 26839 3 ((3, 3)::(2,1)::nil) 64) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26849 : prime 26849. Proof. apply (Pocklington_refl (Pock_certif 26849 3 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26861 : prime 26861. Proof. apply (Pocklington_refl (Pock_certif 26861 2 ((17, 1)::(2,2)::nil) 122) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26863 : prime 26863. Proof. apply (Pocklington_refl (Pock_certif 26863 3 ((11, 1)::(2,1)::nil) 29) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26879 : prime 26879. Proof. apply (Pocklington_refl (Pock_certif 26879 13 ((89, 1)::(2,1)::nil) 1) ((Proof_certif 89 prime89) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26881 : prime 26881. Proof. apply (Pocklington_refl (Pock_certif 26881 11 ((2,8)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26891 : prime 26891. Proof. apply (Pocklington_refl (Pock_certif 26891 2 ((2689, 1)::(2,1)::nil) 1) ((Proof_certif 2689 prime2689) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26893 : prime 26893. Proof. apply (Pocklington_refl (Pock_certif 26893 5 ((3, 2)::(2,2)::nil) 25) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26903 : prime 26903. Proof. apply (Pocklington_refl (Pock_certif 26903 5 ((13451, 1)::(2,1)::nil) 1) ((Proof_certif 13451 prime13451) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26921 : prime 26921. Proof. apply (Pocklington_refl (Pock_certif 26921 13 ((5, 1)::(2,3)::nil) 32) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26927 : prime 26927. Proof. apply (Pocklington_refl (Pock_certif 26927 5 ((13463, 1)::(2,1)::nil) 1) ((Proof_certif 13463 prime13463) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26947 : prime 26947. Proof. apply (Pocklington_refl (Pock_certif 26947 2 ((3, 3)::(2,1)::nil) 66) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26951 : prime 26951. Proof. apply (Pocklington_refl (Pock_certif 26951 7 ((5, 2)::(2,1)::nil) 38) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26953 : prime 26953. Proof. apply (Pocklington_refl (Pock_certif 26953 7 ((3, 1)::(2,3)::nil) 13) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26959 : prime 26959. Proof. apply (Pocklington_refl (Pock_certif 26959 3 ((4493, 1)::(2,1)::nil) 1) ((Proof_certif 4493 prime4493) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26981 : prime 26981. Proof. apply (Pocklington_refl (Pock_certif 26981 3 ((5, 1)::(2,2)::nil) 24) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26987 : prime 26987. Proof. apply (Pocklington_refl (Pock_certif 26987 2 ((103, 1)::(2,1)::nil) 1) ((Proof_certif 103 prime103) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime26993 : prime 26993. Proof. apply (Pocklington_refl (Pock_certif 26993 3 ((7, 1)::(2,4)::nil) 16) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27011 : prime 27011. Proof. apply (Pocklington_refl (Pock_certif 27011 2 ((37, 1)::(2,1)::nil) 68) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27017 : prime 27017. Proof. apply (Pocklington_refl (Pock_certif 27017 5 ((11, 1)::(2,3)::nil) 130) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27031 : prime 27031. Proof. apply (Pocklington_refl (Pock_certif 27031 6 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27043 : prime 27043. Proof. apply (Pocklington_refl (Pock_certif 27043 2 ((4507, 1)::(2,1)::nil) 1) ((Proof_certif 4507 prime4507) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27059 : prime 27059. Proof. apply (Pocklington_refl (Pock_certif 27059 2 ((83, 1)::(2,1)::nil) 1) ((Proof_certif 83 prime83) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27061 : prime 27061. Proof. apply (Pocklington_refl (Pock_certif 27061 2 ((5, 1)::(2,2)::nil) 28) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27067 : prime 27067. Proof. apply (Pocklington_refl (Pock_certif 27067 2 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27073 : prime 27073. Proof. apply (Pocklington_refl (Pock_certif 27073 5 ((2,6)::nil) 38) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27077 : prime 27077. Proof. apply (Pocklington_refl (Pock_certif 27077 2 ((7, 1)::(2,2)::nil) 9) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27091 : prime 27091. Proof. apply (Pocklington_refl (Pock_certif 27091 2 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27103 : prime 27103. Proof. apply (Pocklington_refl (Pock_certif 27103 3 ((4517, 1)::(2,1)::nil) 1) ((Proof_certif 4517 prime4517) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27107 : prime 27107. Proof. apply (Pocklington_refl (Pock_certif 27107 2 ((13553, 1)::(2,1)::nil) 1) ((Proof_certif 13553 prime13553) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27109 : prime 27109. Proof. apply (Pocklington_refl (Pock_certif 27109 7 ((3, 2)::(2,2)::nil) 31) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27127 : prime 27127. Proof. apply (Pocklington_refl (Pock_certif 27127 3 ((11, 1)::(3, 1)::(2,1)::nil) 14) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27143 : prime 27143. Proof. apply (Pocklington_refl (Pock_certif 27143 5 ((41, 1)::(2,1)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27179 : prime 27179. Proof. apply (Pocklington_refl (Pock_certif 27179 2 ((107, 1)::(2,1)::nil) 1) ((Proof_certif 107 prime107) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27191 : prime 27191. Proof. apply (Pocklington_refl (Pock_certif 27191 13 ((2719, 1)::(2,1)::nil) 1) ((Proof_certif 2719 prime2719) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27197 : prime 27197. Proof. apply (Pocklington_refl (Pock_certif 27197 2 ((13, 1)::(2,2)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27211 : prime 27211. Proof. apply (Pocklington_refl (Pock_certif 27211 10 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27239 : prime 27239. Proof. apply (Pocklington_refl (Pock_certif 27239 7 ((13619, 1)::(2,1)::nil) 1) ((Proof_certif 13619 prime13619) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27241 : prime 27241. Proof. apply (Pocklington_refl (Pock_certif 27241 13 ((3, 1)::(2,3)::nil) 27) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27253 : prime 27253. Proof. apply (Pocklington_refl (Pock_certif 27253 2 ((3, 2)::(2,2)::nil) 35) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27259 : prime 27259. Proof. apply (Pocklington_refl (Pock_certif 27259 2 ((7, 1)::(3, 1)::(2,1)::nil) 60) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27271 : prime 27271. Proof. apply (Pocklington_refl (Pock_certif 27271 6 ((3, 3)::(2,1)::nil) 72) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27277 : prime 27277. Proof. apply (Pocklington_refl (Pock_certif 27277 2 ((2273, 1)::(2,2)::nil) 1) ((Proof_certif 2273 prime2273) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27281 : prime 27281. Proof. apply (Pocklington_refl (Pock_certif 27281 3 ((5, 1)::(2,4)::nil) 20) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27283 : prime 27283. Proof. apply (Pocklington_refl (Pock_certif 27283 2 ((4547, 1)::(2,1)::nil) 1) ((Proof_certif 4547 prime4547) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27299 : prime 27299. Proof. apply (Pocklington_refl (Pock_certif 27299 2 ((13649, 1)::(2,1)::nil) 1) ((Proof_certif 13649 prime13649) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27329 : prime 27329. Proof. apply (Pocklington_refl (Pock_certif 27329 3 ((2,6)::nil) 42) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27337 : prime 27337. Proof. apply (Pocklington_refl (Pock_certif 27337 5 ((3, 1)::(2,3)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27361 : prime 27361. Proof. apply (Pocklington_refl (Pock_certif 27361 7 ((2,5)::nil) 20) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27367 : prime 27367. Proof. apply (Pocklington_refl (Pock_certif 27367 3 ((4561, 1)::(2,1)::nil) 1) ((Proof_certif 4561 prime4561) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27397 : prime 27397. Proof. apply (Pocklington_refl (Pock_certif 27397 2 ((3, 2)::(2,2)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27407 : prime 27407. Proof. apply (Pocklington_refl (Pock_certif 27407 5 ((71, 1)::(2,1)::nil) 1) ((Proof_certif 71 prime71) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27409 : prime 27409. Proof. apply (Pocklington_refl (Pock_certif 27409 13 ((3, 1)::(2,4)::nil) 90) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27427 : prime 27427. Proof. apply (Pocklington_refl (Pock_certif 27427 5 ((7, 1)::(3, 1)::(2,1)::nil) 64) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27431 : prime 27431. Proof. apply (Pocklington_refl (Pock_certif 27431 17 ((13, 1)::(2,1)::nil) 8) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27437 : prime 27437. Proof. apply (Pocklington_refl (Pock_certif 27437 2 ((19, 1)::(2,2)::nil) 56) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27449 : prime 27449. Proof. apply (Pocklington_refl (Pock_certif 27449 3 ((47, 1)::(2,3)::nil) 1) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27457 : prime 27457. Proof. apply (Pocklington_refl (Pock_certif 27457 5 ((2,6)::nil) 44) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27479 : prime 27479. Proof. apply (Pocklington_refl (Pock_certif 27479 7 ((11, 1)::(2,1)::nil) 8) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27481 : prime 27481. Proof. apply (Pocklington_refl (Pock_certif 27481 7 ((3, 1)::(2,3)::nil) 38) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27487 : prime 27487. Proof. apply (Pocklington_refl (Pock_certif 27487 3 ((3, 3)::(2,1)::nil) 76) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27509 : prime 27509. Proof. apply (Pocklington_refl (Pock_certif 27509 2 ((13, 1)::(2,2)::nil) 6) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27527 : prime 27527. Proof. apply (Pocklington_refl (Pock_certif 27527 5 ((13763, 1)::(2,1)::nil) 1) ((Proof_certif 13763 prime13763) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27529 : prime 27529. Proof. apply (Pocklington_refl (Pock_certif 27529 7 ((3, 1)::(2,3)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27539 : prime 27539. Proof. apply (Pocklington_refl (Pock_certif 27539 2 ((7, 2)::(2,1)::nil) 84) ((Proof_certif 7 prime7) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27541 : prime 27541. Proof. apply (Pocklington_refl (Pock_certif 27541 7 ((3, 2)::(2,2)::nil) 44) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27551 : prime 27551. Proof. apply (Pocklington_refl (Pock_certif 27551 17 ((5, 2)::(2,1)::nil) 50) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27581 : prime 27581. Proof. apply (Pocklington_refl (Pock_certif 27581 2 ((7, 1)::(2,2)::nil) 30) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27583 : prime 27583. Proof. apply (Pocklington_refl (Pock_certif 27583 3 ((4597, 1)::(2,1)::nil) 1) ((Proof_certif 4597 prime4597) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27611 : prime 27611. Proof. apply (Pocklington_refl (Pock_certif 27611 2 ((11, 1)::(2,1)::nil) 17) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27617 : prime 27617. Proof. apply (Pocklington_refl (Pock_certif 27617 3 ((2,5)::nil) 29) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27631 : prime 27631. Proof. apply (Pocklington_refl (Pock_certif 27631 6 ((5, 1)::(3, 1)::(2,1)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27647 : prime 27647. Proof. apply (Pocklington_refl (Pock_certif 27647 5 ((23, 1)::(2,1)::nil) 48) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27653 : prime 27653. Proof. apply (Pocklington_refl (Pock_certif 27653 2 ((31, 1)::(2,2)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27673 : prime 27673. Proof. apply (Pocklington_refl (Pock_certif 27673 11 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27689 : prime 27689. Proof. apply (Pocklington_refl (Pock_certif 27689 3 ((3461, 1)::(2,3)::nil) 1) ((Proof_certif 3461 prime3461) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27691 : prime 27691. Proof. apply (Pocklington_refl (Pock_certif 27691 3 ((5, 1)::(3, 1)::(2,1)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27697 : prime 27697. Proof. apply (Pocklington_refl (Pock_certif 27697 5 ((3, 1)::(2,4)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27701 : prime 27701. Proof. apply (Pocklington_refl (Pock_certif 27701 2 ((5, 2)::(2,2)::nil) 76) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27733 : prime 27733. Proof. apply (Pocklington_refl (Pock_certif 27733 2 ((2311, 1)::(2,2)::nil) 1) ((Proof_certif 2311 prime2311) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27737 : prime 27737. Proof. apply (Pocklington_refl (Pock_certif 27737 3 ((3467, 1)::(2,3)::nil) 1) ((Proof_certif 3467 prime3467) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27739 : prime 27739. Proof. apply (Pocklington_refl (Pock_certif 27739 2 ((23, 1)::(2,1)::nil) 50) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27743 : prime 27743. Proof. apply (Pocklington_refl (Pock_certif 27743 5 ((11, 1)::(2,1)::nil) 24) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27749 : prime 27749. Proof. apply (Pocklington_refl (Pock_certif 27749 3 ((7, 1)::(2,2)::nil) 37) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27751 : prime 27751. Proof. apply (Pocklington_refl (Pock_certif 27751 3 ((5, 1)::(3, 1)::(2,1)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27763 : prime 27763. Proof. apply (Pocklington_refl (Pock_certif 27763 3 ((7, 1)::(3, 1)::(2,1)::nil) 72) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27767 : prime 27767. Proof. apply (Pocklington_refl (Pock_certif 27767 5 ((13883, 1)::(2,1)::nil) 1) ((Proof_certif 13883 prime13883) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27773 : prime 27773. Proof. apply (Pocklington_refl (Pock_certif 27773 2 ((53, 1)::(2,2)::nil) 1) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27779 : prime 27779. Proof. apply (Pocklington_refl (Pock_certif 27779 2 ((17, 1)::(2,1)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27791 : prime 27791. Proof. apply (Pocklington_refl (Pock_certif 27791 7 ((7, 1)::(5, 1)::(2,1)::nil) 116) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27793 : prime 27793. Proof. apply (Pocklington_refl (Pock_certif 27793 5 ((3, 1)::(2,4)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27799 : prime 27799. Proof. apply (Pocklington_refl (Pock_certif 27799 3 ((41, 1)::(2,1)::nil) 10) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27803 : prime 27803. Proof. apply (Pocklington_refl (Pock_certif 27803 2 ((13901, 1)::(2,1)::nil) 1) ((Proof_certif 13901 prime13901) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27809 : prime 27809. Proof. apply (Pocklington_refl (Pock_certif 27809 3 ((2,5)::nil) 35) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27817 : prime 27817. Proof. apply (Pocklington_refl (Pock_certif 27817 5 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27823 : prime 27823. Proof. apply (Pocklington_refl (Pock_certif 27823 3 ((4637, 1)::(2,1)::nil) 1) ((Proof_certif 4637 prime4637) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27827 : prime 27827. Proof. apply (Pocklington_refl (Pock_certif 27827 2 ((13913, 1)::(2,1)::nil) 1) ((Proof_certif 13913 prime13913) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27847 : prime 27847. Proof. apply (Pocklington_refl (Pock_certif 27847 6 ((7, 1)::(3, 1)::(2,1)::nil) 74) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27851 : prime 27851. Proof. apply (Pocklington_refl (Pock_certif 27851 2 ((5, 2)::(2,1)::nil) 56) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27883 : prime 27883. Proof. apply (Pocklington_refl (Pock_certif 27883 2 ((1549, 1)::(2,1)::nil) 1) ((Proof_certif 1549 prime1549) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27893 : prime 27893. Proof. apply (Pocklington_refl (Pock_certif 27893 2 ((19, 1)::(2,2)::nil) 62) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27901 : prime 27901. Proof. apply (Pocklington_refl (Pock_certif 27901 2 ((3, 2)::(2,2)::nil) 54) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27917 : prime 27917. Proof. apply (Pocklington_refl (Pock_certif 27917 2 ((7, 1)::(2,2)::nil) 43) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27919 : prime 27919. Proof. apply (Pocklington_refl (Pock_certif 27919 3 ((3, 3)::(2,1)::nil) 84) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27941 : prime 27941. Proof. apply (Pocklington_refl (Pock_certif 27941 2 ((5, 1)::(2,2)::nil) 33) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27943 : prime 27943. Proof. apply (Pocklington_refl (Pock_certif 27943 3 ((4657, 1)::(2,1)::nil) 1) ((Proof_certif 4657 prime4657) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27947 : prime 27947. Proof. apply (Pocklington_refl (Pock_certif 27947 2 ((89, 1)::(2,1)::nil) 1) ((Proof_certif 89 prime89) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27953 : prime 27953. Proof. apply (Pocklington_refl (Pock_certif 27953 3 ((1747, 1)::(2,4)::nil) 1) ((Proof_certif 1747 prime1747) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27961 : prime 27961. Proof. apply (Pocklington_refl (Pock_certif 27961 7 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27967 : prime 27967. Proof. apply (Pocklington_refl (Pock_certif 27967 3 ((59, 1)::(2,1)::nil) 1) ((Proof_certif 59 prime59) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27983 : prime 27983. Proof. apply (Pocklington_refl (Pock_certif 27983 5 ((17, 1)::(2,1)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime27997 : prime 27997. Proof. apply (Pocklington_refl (Pock_certif 27997 2 ((2333, 1)::(2,2)::nil) 1) ((Proof_certif 2333 prime2333) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28001 : prime 28001. Proof. apply (Pocklington_refl (Pock_certif 28001 3 ((2,5)::nil) 41) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28019 : prime 28019. Proof. apply (Pocklington_refl (Pock_certif 28019 2 ((14009, 1)::(2,1)::nil) 1) ((Proof_certif 14009 prime14009) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28027 : prime 28027. Proof. apply (Pocklington_refl (Pock_certif 28027 2 ((3, 3)::(2,1)::nil) 86) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28031 : prime 28031. Proof. apply (Pocklington_refl (Pock_certif 28031 11 ((2803, 1)::(2,1)::nil) 1) ((Proof_certif 2803 prime2803) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28051 : prime 28051. Proof. apply (Pocklington_refl (Pock_certif 28051 2 ((5, 1)::(3, 1)::(2,1)::nil) 33) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28057 : prime 28057. Proof. apply (Pocklington_refl (Pock_certif 28057 5 ((3, 1)::(2,3)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28069 : prime 28069. Proof. apply (Pocklington_refl (Pock_certif 28069 2 ((2339, 1)::(2,2)::nil) 1) ((Proof_certif 2339 prime2339) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28081 : prime 28081. Proof. apply (Pocklington_refl (Pock_certif 28081 17 ((3, 1)::(2,4)::nil) 5) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28087 : prime 28087. Proof. apply (Pocklington_refl (Pock_certif 28087 3 ((31, 1)::(2,1)::nil) 80) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28097 : prime 28097. Proof. apply (Pocklington_refl (Pock_certif 28097 3 ((2,6)::nil) 54) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28099 : prime 28099. Proof. apply (Pocklington_refl (Pock_certif 28099 2 ((7, 1)::(3, 1)::(2,1)::nil) 80) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28109 : prime 28109. Proof. apply (Pocklington_refl (Pock_certif 28109 2 ((7027, 1)::(2,2)::nil) 1) ((Proof_certif 7027 prime7027) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28111 : prime 28111. Proof. apply (Pocklington_refl (Pock_certif 28111 3 ((5, 1)::(3, 1)::(2,1)::nil) 35) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28123 : prime 28123. Proof. apply (Pocklington_refl (Pock_certif 28123 2 ((43, 1)::(2,1)::nil) 154) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28151 : prime 28151. Proof. apply (Pocklington_refl (Pock_certif 28151 7 ((5, 2)::(2,1)::nil) 62) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28163 : prime 28163. Proof. apply (Pocklington_refl (Pock_certif 28163 2 ((14081, 1)::(2,1)::nil) 1) ((Proof_certif 14081 prime14081) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28181 : prime 28181. Proof. apply (Pocklington_refl (Pock_certif 28181 2 ((1409, 1)::(2,2)::nil) 1) ((Proof_certif 1409 prime1409) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28183 : prime 28183. Proof. apply (Pocklington_refl (Pock_certif 28183 3 ((7, 1)::(3, 1)::(2,1)::nil) 82) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28201 : prime 28201. Proof. apply (Pocklington_refl (Pock_certif 28201 11 ((3, 1)::(2,3)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28211 : prime 28211. Proof. apply (Pocklington_refl (Pock_certif 28211 2 ((7, 1)::(5, 1)::(2,1)::nil) 122) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28219 : prime 28219. Proof. apply (Pocklington_refl (Pock_certif 28219 2 ((4703, 1)::(2,1)::nil) 1) ((Proof_certif 4703 prime4703) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28229 : prime 28229. Proof. apply (Pocklington_refl (Pock_certif 28229 2 ((7057, 1)::(2,2)::nil) 1) ((Proof_certif 7057 prime7057) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28277 : prime 28277. Proof. apply (Pocklington_refl (Pock_certif 28277 2 ((7069, 1)::(2,2)::nil) 1) ((Proof_certif 7069 prime7069) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28279 : prime 28279. Proof. apply (Pocklington_refl (Pock_certif 28279 3 ((1571, 1)::(2,1)::nil) 1) ((Proof_certif 1571 prime1571) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28283 : prime 28283. Proof. apply (Pocklington_refl (Pock_certif 28283 2 ((79, 1)::(2,1)::nil) 1) ((Proof_certif 79 prime79) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28289 : prime 28289. Proof. apply (Pocklington_refl (Pock_certif 28289 3 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28297 : prime 28297. Proof. apply (Pocklington_refl (Pock_certif 28297 5 ((3, 1)::(2,3)::nil) 23) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28307 : prime 28307. Proof. apply (Pocklington_refl (Pock_certif 28307 2 ((14153, 1)::(2,1)::nil) 1) ((Proof_certif 14153 prime14153) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28309 : prime 28309. Proof. apply (Pocklington_refl (Pock_certif 28309 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28319 : prime 28319. Proof. apply (Pocklington_refl (Pock_certif 28319 7 ((14159, 1)::(2,1)::nil) 1) ((Proof_certif 14159 prime14159) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28349 : prime 28349. Proof. apply (Pocklington_refl (Pock_certif 28349 2 ((19, 1)::(2,2)::nil) 68) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28351 : prime 28351. Proof. apply (Pocklington_refl (Pock_certif 28351 6 ((3, 3)::(2,1)::nil) 92) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28387 : prime 28387. Proof. apply (Pocklington_refl (Pock_certif 28387 2 ((19, 1)::(2,1)::nil) 62) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28393 : prime 28393. Proof. apply (Pocklington_refl (Pock_certif 28393 11 ((3, 1)::(2,3)::nil) 27) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28403 : prime 28403. Proof. apply (Pocklington_refl (Pock_certif 28403 5 ((11, 1)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28409 : prime 28409. Proof. apply (Pocklington_refl (Pock_certif 28409 3 ((53, 1)::(2,3)::nil) 1) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28411 : prime 28411. Proof. apply (Pocklington_refl (Pock_certif 28411 2 ((5, 1)::(3, 1)::(2,1)::nil) 45) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28429 : prime 28429. Proof. apply (Pocklington_refl (Pock_certif 28429 2 ((23, 1)::(2,2)::nil) 124) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28433 : prime 28433. Proof. apply (Pocklington_refl (Pock_certif 28433 3 ((1777, 1)::(2,4)::nil) 1) ((Proof_certif 1777 prime1777) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28439 : prime 28439. Proof. apply (Pocklington_refl (Pock_certif 28439 11 ((59, 1)::(2,1)::nil) 4) ((Proof_certif 59 prime59) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28447 : prime 28447. Proof. apply (Pocklington_refl (Pock_certif 28447 3 ((11, 1)::(2,1)::nil) 7) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28463 : prime 28463. Proof. apply (Pocklington_refl (Pock_certif 28463 5 ((19, 1)::(2,1)::nil) 64) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28477 : prime 28477. Proof. apply (Pocklington_refl (Pock_certif 28477 2 ((3, 2)::(2,2)::nil) 70) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28493 : prime 28493. Proof. apply (Pocklington_refl (Pock_certif 28493 2 ((17, 1)::(2,2)::nil) 9) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28499 : prime 28499. Proof. apply (Pocklington_refl (Pock_certif 28499 2 ((14249, 1)::(2,1)::nil) 1) ((Proof_certif 14249 prime14249) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28513 : prime 28513. Proof. apply (Pocklington_refl (Pock_certif 28513 5 ((2,5)::nil) 58) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28517 : prime 28517. Proof. apply (Pocklington_refl (Pock_certif 28517 2 ((7129, 1)::(2,2)::nil) 1) ((Proof_certif 7129 prime7129) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28537 : prime 28537. Proof. apply (Pocklington_refl (Pock_certif 28537 5 ((3, 1)::(2,3)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28541 : prime 28541. Proof. apply (Pocklington_refl (Pock_certif 28541 2 ((1427, 1)::(2,2)::nil) 1) ((Proof_certif 1427 prime1427) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28547 : prime 28547. Proof. apply (Pocklington_refl (Pock_certif 28547 2 ((2039, 1)::(2,1)::nil) 1) ((Proof_certif 2039 prime2039) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28549 : prime 28549. Proof. apply (Pocklington_refl (Pock_certif 28549 2 ((3, 2)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28559 : prime 28559. Proof. apply (Pocklington_refl (Pock_certif 28559 11 ((109, 1)::(2,1)::nil) 1) ((Proof_certif 109 prime109) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28571 : prime 28571. Proof. apply (Pocklington_refl (Pock_certif 28571 2 ((2857, 1)::(2,1)::nil) 1) ((Proof_certif 2857 prime2857) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28573 : prime 28573. Proof. apply (Pocklington_refl (Pock_certif 28573 2 ((2381, 1)::(2,2)::nil) 1) ((Proof_certif 2381 prime2381) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28579 : prime 28579. Proof. apply (Pocklington_refl (Pock_certif 28579 2 ((11, 1)::(2,1)::nil) 17) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28591 : prime 28591. Proof. apply (Pocklington_refl (Pock_certif 28591 3 ((5, 1)::(3, 1)::(2,1)::nil) 51) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28597 : prime 28597. Proof. apply (Pocklington_refl (Pock_certif 28597 2 ((2383, 1)::(2,2)::nil) 1) ((Proof_certif 2383 prime2383) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28603 : prime 28603. Proof. apply (Pocklington_refl (Pock_certif 28603 2 ((7, 1)::(3, 1)::(2,1)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28607 : prime 28607. Proof. apply (Pocklington_refl (Pock_certif 28607 5 ((14303, 1)::(2,1)::nil) 1) ((Proof_certif 14303 prime14303) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28619 : prime 28619. Proof. apply (Pocklington_refl (Pock_certif 28619 2 ((41, 1)::(2,1)::nil) 20) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28621 : prime 28621. Proof. apply (Pocklington_refl (Pock_certif 28621 6 ((3, 2)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28627 : prime 28627. Proof. apply (Pocklington_refl (Pock_certif 28627 3 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28631 : prime 28631. Proof. apply (Pocklington_refl (Pock_certif 28631 11 ((7, 1)::(5, 1)::(2,1)::nil) 128) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28643 : prime 28643. Proof. apply (Pocklington_refl (Pock_certif 28643 2 ((14321, 1)::(2,1)::nil) 1) ((Proof_certif 14321 prime14321) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28649 : prime 28649. Proof. apply (Pocklington_refl (Pock_certif 28649 3 ((3581, 1)::(2,3)::nil) 1) ((Proof_certif 3581 prime3581) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28657 : prime 28657. Proof. apply (Pocklington_refl (Pock_certif 28657 5 ((3, 1)::(2,4)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28661 : prime 28661. Proof. apply (Pocklington_refl (Pock_certif 28661 2 ((5, 1)::(2,2)::nil) 28) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28663 : prime 28663. Proof. apply (Pocklington_refl (Pock_certif 28663 3 ((17, 1)::(2,1)::nil) 25) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28669 : prime 28669. Proof. apply (Pocklington_refl (Pock_certif 28669 2 ((2389, 1)::(2,2)::nil) 1) ((Proof_certif 2389 prime2389) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28687 : prime 28687. Proof. apply (Pocklington_refl (Pock_certif 28687 6 ((7, 1)::(3, 1)::(2,1)::nil) 7) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28697 : prime 28697. Proof. apply (Pocklington_refl (Pock_certif 28697 3 ((17, 1)::(2,3)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28703 : prime 28703. Proof. apply (Pocklington_refl (Pock_certif 28703 5 ((113, 1)::(2,1)::nil) 1) ((Proof_certif 113 prime113) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28711 : prime 28711. Proof. apply (Pocklington_refl (Pock_certif 28711 3 ((5, 1)::(3, 1)::(2,1)::nil) 55) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28723 : prime 28723. Proof. apply (Pocklington_refl (Pock_certif 28723 2 ((4787, 1)::(2,1)::nil) 1) ((Proof_certif 4787 prime4787) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28729 : prime 28729. Proof. apply (Pocklington_refl (Pock_certif 28729 22 ((3, 1)::(2,3)::nil) 42) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28751 : prime 28751. Proof. apply (Pocklington_refl (Pock_certif 28751 14 ((5, 2)::(2,1)::nil) 74) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28753 : prime 28753. Proof. apply (Pocklington_refl (Pock_certif 28753 10 ((3, 1)::(2,4)::nil) 21) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28759 : prime 28759. Proof. apply (Pocklington_refl (Pock_certif 28759 3 ((4793, 1)::(2,1)::nil) 1) ((Proof_certif 4793 prime4793) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28771 : prime 28771. Proof. apply (Pocklington_refl (Pock_certif 28771 2 ((5, 1)::(3, 1)::(2,1)::nil) 57) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28789 : prime 28789. Proof. apply (Pocklington_refl (Pock_certif 28789 2 ((2399, 1)::(2,2)::nil) 1) ((Proof_certif 2399 prime2399) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28793 : prime 28793. Proof. apply (Pocklington_refl (Pock_certif 28793 3 ((59, 1)::(2,3)::nil) 1) ((Proof_certif 59 prime59) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28807 : prime 28807. Proof. apply (Pocklington_refl (Pock_certif 28807 3 ((4801, 1)::(2,1)::nil) 1) ((Proof_certif 4801 prime4801) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28813 : prime 28813. Proof. apply (Pocklington_refl (Pock_certif 28813 2 ((7, 1)::(2,2)::nil) 17) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28817 : prime 28817. Proof. apply (Pocklington_refl (Pock_certif 28817 3 ((1801, 1)::(2,4)::nil) 1) ((Proof_certif 1801 prime1801) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28837 : prime 28837. Proof. apply (Pocklington_refl (Pock_certif 28837 2 ((3, 2)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28843 : prime 28843. Proof. apply (Pocklington_refl (Pock_certif 28843 2 ((11, 1)::(2,1)::nil) 31) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28859 : prime 28859. Proof. apply (Pocklington_refl (Pock_certif 28859 2 ((47, 1)::(2,1)::nil) 118) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28867 : prime 28867. Proof. apply (Pocklington_refl (Pock_certif 28867 2 ((17, 1)::(2,1)::nil) 31) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28871 : prime 28871. Proof. apply (Pocklington_refl (Pock_certif 28871 13 ((2887, 1)::(2,1)::nil) 1) ((Proof_certif 2887 prime2887) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28879 : prime 28879. Proof. apply (Pocklington_refl (Pock_certif 28879 3 ((4813, 1)::(2,1)::nil) 1) ((Proof_certif 4813 prime4813) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28901 : prime 28901. Proof. apply (Pocklington_refl (Pock_certif 28901 3 ((5, 2)::(2,2)::nil) 88) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28909 : prime 28909. Proof. apply (Pocklington_refl (Pock_certif 28909 2 ((3, 2)::(2,2)::nil) 5) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28921 : prime 28921. Proof. apply (Pocklington_refl (Pock_certif 28921 11 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28927 : prime 28927. Proof. apply (Pocklington_refl (Pock_certif 28927 3 ((1607, 1)::(2,1)::nil) 1) ((Proof_certif 1607 prime1607) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28933 : prime 28933. Proof. apply (Pocklington_refl (Pock_certif 28933 2 ((2411, 1)::(2,2)::nil) 1) ((Proof_certif 2411 prime2411) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28949 : prime 28949. Proof. apply (Pocklington_refl (Pock_certif 28949 2 ((7237, 1)::(2,2)::nil) 1) ((Proof_certif 7237 prime7237) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28961 : prime 28961. Proof. apply (Pocklington_refl (Pock_certif 28961 3 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime28979 : prime 28979. Proof. apply (Pocklington_refl (Pock_certif 28979 2 ((14489, 1)::(2,1)::nil) 1) ((Proof_certif 14489 prime14489) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29009 : prime 29009. Proof. apply (Pocklington_refl (Pock_certif 29009 3 ((7, 1)::(2,4)::nil) 34) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29017 : prime 29017. Proof. apply (Pocklington_refl (Pock_certif 29017 5 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29021 : prime 29021. Proof. apply (Pocklington_refl (Pock_certif 29021 2 ((1451, 1)::(2,2)::nil) 1) ((Proof_certif 1451 prime1451) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29023 : prime 29023. Proof. apply (Pocklington_refl (Pock_certif 29023 3 ((7, 1)::(3, 1)::(2,1)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29027 : prime 29027. Proof. apply (Pocklington_refl (Pock_certif 29027 2 ((23, 1)::(2,1)::nil) 78) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29033 : prime 29033. Proof. apply (Pocklington_refl (Pock_certif 29033 3 ((19, 1)::(2,3)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29059 : prime 29059. Proof. apply (Pocklington_refl (Pock_certif 29059 2 ((29, 1)::(2,1)::nil) 36) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29063 : prime 29063. Proof. apply (Pocklington_refl (Pock_certif 29063 5 ((1321, 1)::(2,1)::nil) 1) ((Proof_certif 1321 prime1321) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29077 : prime 29077. Proof. apply (Pocklington_refl (Pock_certif 29077 2 ((2423, 1)::(2,2)::nil) 1) ((Proof_certif 2423 prime2423) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29101 : prime 29101. Proof. apply (Pocklington_refl (Pock_certif 29101 2 ((5, 1)::(3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29123 : prime 29123. Proof. apply (Pocklington_refl (Pock_certif 29123 2 ((14561, 1)::(2,1)::nil) 1) ((Proof_certif 14561 prime14561) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29129 : prime 29129. Proof. apply (Pocklington_refl (Pock_certif 29129 3 ((11, 1)::(2,3)::nil) 154) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29131 : prime 29131. Proof. apply (Pocklington_refl (Pock_certif 29131 2 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29137 : prime 29137. Proof. apply (Pocklington_refl (Pock_certif 29137 5 ((3, 1)::(2,4)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29147 : prime 29147. Proof. apply (Pocklington_refl (Pock_certif 29147 2 ((13, 1)::(2,1)::nil) 25) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29153 : prime 29153. Proof. apply (Pocklington_refl (Pock_certif 29153 3 ((2,5)::nil) 10) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29167 : prime 29167. Proof. apply (Pocklington_refl (Pock_certif 29167 3 ((4861, 1)::(2,1)::nil) 1) ((Proof_certif 4861 prime4861) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29173 : prime 29173. Proof. apply (Pocklington_refl (Pock_certif 29173 2 ((11, 1)::(2,2)::nil) 46) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29179 : prime 29179. Proof. apply (Pocklington_refl (Pock_certif 29179 2 ((1621, 1)::(2,1)::nil) 1) ((Proof_certif 1621 prime1621) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29191 : prime 29191. Proof. apply (Pocklington_refl (Pock_certif 29191 7 ((5, 1)::(3, 1)::(2,1)::nil) 6) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29201 : prime 29201. Proof. apply (Pocklington_refl (Pock_certif 29201 3 ((5, 1)::(2,4)::nil) 44) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29207 : prime 29207. Proof. apply (Pocklington_refl (Pock_certif 29207 5 ((17, 1)::(2,1)::nil) 41) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29209 : prime 29209. Proof. apply (Pocklington_refl (Pock_certif 29209 7 ((3, 1)::(2,3)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29221 : prime 29221. Proof. apply (Pocklington_refl (Pock_certif 29221 2 ((5, 1)::(3, 1)::(2,2)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29231 : prime 29231. Proof. apply (Pocklington_refl (Pock_certif 29231 11 ((37, 1)::(2,1)::nil) 98) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29243 : prime 29243. Proof. apply (Pocklington_refl (Pock_certif 29243 2 ((14621, 1)::(2,1)::nil) 1) ((Proof_certif 14621 prime14621) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29251 : prime 29251. Proof. apply (Pocklington_refl (Pock_certif 29251 2 ((5, 1)::(3, 1)::(2,1)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29269 : prime 29269. Proof. apply (Pocklington_refl (Pock_certif 29269 6 ((3, 2)::(2,2)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29287 : prime 29287. Proof. apply (Pocklington_refl (Pock_certif 29287 3 ((1627, 1)::(2,1)::nil) 1) ((Proof_certif 1627 prime1627) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29297 : prime 29297. Proof. apply (Pocklington_refl (Pock_certif 29297 3 ((1831, 1)::(2,4)::nil) 1) ((Proof_certif 1831 prime1831) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29303 : prime 29303. Proof. apply (Pocklington_refl (Pock_certif 29303 7 ((7, 2)::(2,1)::nil) 102) ((Proof_certif 7 prime7) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29311 : prime 29311. Proof. apply (Pocklington_refl (Pock_certif 29311 3 ((5, 1)::(3, 1)::(2,1)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29327 : prime 29327. Proof. apply (Pocklington_refl (Pock_certif 29327 5 ((31, 1)::(2,1)::nil) 100) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29333 : prime 29333. Proof. apply (Pocklington_refl (Pock_certif 29333 2 ((7333, 1)::(2,2)::nil) 1) ((Proof_certif 7333 prime7333) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29339 : prime 29339. Proof. apply (Pocklington_refl (Pock_certif 29339 2 ((14669, 1)::(2,1)::nil) 1) ((Proof_certif 14669 prime14669) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29347 : prime 29347. Proof. apply (Pocklington_refl (Pock_certif 29347 2 ((67, 1)::(2,1)::nil) 1) ((Proof_certif 67 prime67) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29363 : prime 29363. Proof. apply (Pocklington_refl (Pock_certif 29363 2 ((53, 1)::(2,1)::nil) 64) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29383 : prime 29383. Proof. apply (Pocklington_refl (Pock_certif 29383 3 ((59, 1)::(2,1)::nil) 12) ((Proof_certif 59 prime59) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29387 : prime 29387. Proof. apply (Pocklington_refl (Pock_certif 29387 2 ((2099, 1)::(2,1)::nil) 1) ((Proof_certif 2099 prime2099) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29389 : prime 29389. Proof. apply (Pocklington_refl (Pock_certif 29389 2 ((31, 1)::(2,2)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29399 : prime 29399. Proof. apply (Pocklington_refl (Pock_certif 29399 13 ((14699, 1)::(2,1)::nil) 1) ((Proof_certif 14699 prime14699) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29401 : prime 29401. Proof. apply (Pocklington_refl (Pock_certif 29401 13 ((3, 1)::(2,3)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29411 : prime 29411. Proof. apply (Pocklington_refl (Pock_certif 29411 2 ((17, 1)::(2,1)::nil) 48) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29423 : prime 29423. Proof. apply (Pocklington_refl (Pock_certif 29423 5 ((47, 1)::(2,1)::nil) 124) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29429 : prime 29429. Proof. apply (Pocklington_refl (Pock_certif 29429 2 ((7, 1)::(2,2)::nil) 41) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29437 : prime 29437. Proof. apply (Pocklington_refl (Pock_certif 29437 2 ((11, 1)::(2,2)::nil) 52) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29443 : prime 29443. Proof. apply (Pocklington_refl (Pock_certif 29443 2 ((7, 1)::(3, 1)::(2,1)::nil) 27) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29453 : prime 29453. Proof. apply (Pocklington_refl (Pock_certif 29453 2 ((37, 1)::(2,2)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29473 : prime 29473. Proof. apply (Pocklington_refl (Pock_certif 29473 5 ((2,5)::nil) 22) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29483 : prime 29483. Proof. apply (Pocklington_refl (Pock_certif 29483 2 ((14741, 1)::(2,1)::nil) 1) ((Proof_certif 14741 prime14741) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29501 : prime 29501. Proof. apply (Pocklington_refl (Pock_certif 29501 2 ((5, 1)::(2,2)::nil) 30) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29527 : prime 29527. Proof. apply (Pocklington_refl (Pock_certif 29527 3 ((7, 1)::(3, 1)::(2,1)::nil) 29) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29531 : prime 29531. Proof. apply (Pocklington_refl (Pock_certif 29531 2 ((2953, 1)::(2,1)::nil) 1) ((Proof_certif 2953 prime2953) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29537 : prime 29537. Proof. apply (Pocklington_refl (Pock_certif 29537 3 ((2,5)::nil) 24) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29567 : prime 29567. Proof. apply (Pocklington_refl (Pock_certif 29567 5 ((14783, 1)::(2,1)::nil) 1) ((Proof_certif 14783 prime14783) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29569 : prime 29569. Proof. apply (Pocklington_refl (Pock_certif 29569 13 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29573 : prime 29573. Proof. apply (Pocklington_refl (Pock_certif 29573 2 ((7393, 1)::(2,2)::nil) 1) ((Proof_certif 7393 prime7393) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29581 : prime 29581. Proof. apply (Pocklington_refl (Pock_certif 29581 6 ((5, 1)::(2,2)::nil) 35) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29587 : prime 29587. Proof. apply (Pocklington_refl (Pock_certif 29587 2 ((4931, 1)::(2,1)::nil) 1) ((Proof_certif 4931 prime4931) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29599 : prime 29599. Proof. apply (Pocklington_refl (Pock_certif 29599 3 ((4933, 1)::(2,1)::nil) 1) ((Proof_certif 4933 prime4933) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29611 : prime 29611. Proof. apply (Pocklington_refl (Pock_certif 29611 3 ((5, 1)::(3, 1)::(2,1)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29629 : prime 29629. Proof. apply (Pocklington_refl (Pock_certif 29629 7 ((3, 2)::(2,2)::nil) 29) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29633 : prime 29633. Proof. apply (Pocklington_refl (Pock_certif 29633 3 ((2,6)::nil) 78) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29641 : prime 29641. Proof. apply (Pocklington_refl (Pock_certif 29641 7 ((3, 1)::(2,3)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29663 : prime 29663. Proof. apply (Pocklington_refl (Pock_certif 29663 5 ((14831, 1)::(2,1)::nil) 1) ((Proof_certif 14831 prime14831) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29669 : prime 29669. Proof. apply (Pocklington_refl (Pock_certif 29669 2 ((7417, 1)::(2,2)::nil) 1) ((Proof_certif 7417 prime7417) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29671 : prime 29671. Proof. apply (Pocklington_refl (Pock_certif 29671 6 ((5, 1)::(3, 1)::(2,1)::nil) 26) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29683 : prime 29683. Proof. apply (Pocklington_refl (Pock_certif 29683 2 ((17, 1)::(2,1)::nil) 56) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29717 : prime 29717. Proof. apply (Pocklington_refl (Pock_certif 29717 2 ((17, 1)::(2,2)::nil) 28) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29723 : prime 29723. Proof. apply (Pocklington_refl (Pock_certif 29723 2 ((11, 1)::(2,1)::nil) 26) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29741 : prime 29741. Proof. apply (Pocklington_refl (Pock_certif 29741 2 ((1487, 1)::(2,2)::nil) 1) ((Proof_certif 1487 prime1487) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29753 : prime 29753. Proof. apply (Pocklington_refl (Pock_certif 29753 3 ((3719, 1)::(2,3)::nil) 1) ((Proof_certif 3719 prime3719) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29759 : prime 29759. Proof. apply (Pocklington_refl (Pock_certif 29759 7 ((14879, 1)::(2,1)::nil) 1) ((Proof_certif 14879 prime14879) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29761 : prime 29761. Proof. apply (Pocklington_refl (Pock_certif 29761 11 ((2,6)::nil) 80) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29789 : prime 29789. Proof. apply (Pocklington_refl (Pock_certif 29789 2 ((11, 1)::(2,2)::nil) 60) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29803 : prime 29803. Proof. apply (Pocklington_refl (Pock_certif 29803 2 ((4967, 1)::(2,1)::nil) 1) ((Proof_certif 4967 prime4967) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29819 : prime 29819. Proof. apply (Pocklington_refl (Pock_certif 29819 6 ((17, 1)::(2,1)::nil) 60) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29833 : prime 29833. Proof. apply (Pocklington_refl (Pock_certif 29833 5 ((3, 1)::(2,3)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29837 : prime 29837. Proof. apply (Pocklington_refl (Pock_certif 29837 2 ((7459, 1)::(2,2)::nil) 1) ((Proof_certif 7459 prime7459) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29851 : prime 29851. Proof. apply (Pocklington_refl (Pock_certif 29851 2 ((5, 1)::(3, 1)::(2,1)::nil) 33) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29863 : prime 29863. Proof. apply (Pocklington_refl (Pock_certif 29863 5 ((3, 3)::(2,1)::nil) 11) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29867 : prime 29867. Proof. apply (Pocklington_refl (Pock_certif 29867 2 ((109, 1)::(2,1)::nil) 1) ((Proof_certif 109 prime109) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29873 : prime 29873. Proof. apply (Pocklington_refl (Pock_certif 29873 3 ((1867, 1)::(2,4)::nil) 1) ((Proof_certif 1867 prime1867) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29879 : prime 29879. Proof. apply (Pocklington_refl (Pock_certif 29879 11 ((14939, 1)::(2,1)::nil) 1) ((Proof_certif 14939 prime14939) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29881 : prime 29881. Proof. apply (Pocklington_refl (Pock_certif 29881 7 ((3, 1)::(2,3)::nil) 42) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29917 : prime 29917. Proof. apply (Pocklington_refl (Pock_certif 29917 2 ((3, 2)::(2,2)::nil) 37) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29921 : prime 29921. Proof. apply (Pocklington_refl (Pock_certif 29921 3 ((2,5)::nil) 37) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29927 : prime 29927. Proof. apply (Pocklington_refl (Pock_certif 29927 5 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29947 : prime 29947. Proof. apply (Pocklington_refl (Pock_certif 29947 3 ((7, 1)::(3, 1)::(2,1)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29959 : prime 29959. Proof. apply (Pocklington_refl (Pock_certif 29959 3 ((4993, 1)::(2,1)::nil) 1) ((Proof_certif 4993 prime4993) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29983 : prime 29983. Proof. apply (Pocklington_refl (Pock_certif 29983 3 ((19, 1)::(2,1)::nil) 27) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime29989 : prime 29989. Proof. apply (Pocklington_refl (Pock_certif 29989 2 ((3, 2)::(2,2)::nil) 39) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30011 : prime 30011. Proof. apply (Pocklington_refl (Pock_certif 30011 2 ((3001, 1)::(2,1)::nil) 1) ((Proof_certif 3001 prime3001) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30013 : prime 30013. Proof. apply (Pocklington_refl (Pock_certif 30013 2 ((41, 1)::(2,2)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30029 : prime 30029. Proof. apply (Pocklington_refl (Pock_certif 30029 2 ((7507, 1)::(2,2)::nil) 1) ((Proof_certif 7507 prime7507) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30047 : prime 30047. Proof. apply (Pocklington_refl (Pock_certif 30047 5 ((83, 1)::(2,1)::nil) 1) ((Proof_certif 83 prime83) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30059 : prime 30059. Proof. apply (Pocklington_refl (Pock_certif 30059 2 ((19, 1)::(2,1)::nil) 29) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30071 : prime 30071. Proof. apply (Pocklington_refl (Pock_certif 30071 13 ((31, 1)::(2,1)::nil) 112) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30089 : prime 30089. Proof. apply (Pocklington_refl (Pock_certif 30089 3 ((3761, 1)::(2,3)::nil) 1) ((Proof_certif 3761 prime3761) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30091 : prime 30091. Proof. apply (Pocklington_refl (Pock_certif 30091 21 ((5, 1)::(3, 1)::(2,1)::nil) 41) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30097 : prime 30097. Proof. apply (Pocklington_refl (Pock_certif 30097 10 ((3, 1)::(2,4)::nil) 50) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30103 : prime 30103. Proof. apply (Pocklington_refl (Pock_certif 30103 3 ((29, 1)::(2,1)::nil) 54) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30109 : prime 30109. Proof. apply (Pocklington_refl (Pock_certif 30109 2 ((13, 1)::(2,2)::nil) 58) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30113 : prime 30113. Proof. apply (Pocklington_refl (Pock_certif 30113 3 ((2,5)::nil) 43) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30119 : prime 30119. Proof. apply (Pocklington_refl (Pock_certif 30119 11 ((37, 1)::(2,1)::nil) 110) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30133 : prime 30133. Proof. apply (Pocklington_refl (Pock_certif 30133 5 ((3, 2)::(2,2)::nil) 44) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30137 : prime 30137. Proof. apply (Pocklington_refl (Pock_certif 30137 3 ((3767, 1)::(2,3)::nil) 1) ((Proof_certif 3767 prime3767) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30139 : prime 30139. Proof. apply (Pocklington_refl (Pock_certif 30139 2 ((5023, 1)::(2,1)::nil) 1) ((Proof_certif 5023 prime5023) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30161 : prime 30161. Proof. apply (Pocklington_refl (Pock_certif 30161 3 ((5, 1)::(2,4)::nil) 56) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30169 : prime 30169. Proof. apply (Pocklington_refl (Pock_certif 30169 7 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30181 : prime 30181. Proof. apply (Pocklington_refl (Pock_certif 30181 2 ((5, 1)::(3, 1)::(2,2)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30187 : prime 30187. Proof. apply (Pocklington_refl (Pock_certif 30187 5 ((3, 3)::(2,1)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30197 : prime 30197. Proof. apply (Pocklington_refl (Pock_certif 30197 2 ((7549, 1)::(2,2)::nil) 1) ((Proof_certif 7549 prime7549) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30203 : prime 30203. Proof. apply (Pocklington_refl (Pock_certif 30203 2 ((15101, 1)::(2,1)::nil) 1) ((Proof_certif 15101 prime15101) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30211 : prime 30211. Proof. apply (Pocklington_refl (Pock_certif 30211 2 ((5, 1)::(3, 1)::(2,1)::nil) 45) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30223 : prime 30223. Proof. apply (Pocklington_refl (Pock_certif 30223 3 ((23, 1)::(2,1)::nil) 10) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30241 : prime 30241. Proof. apply (Pocklington_refl (Pock_certif 30241 11 ((2,5)::nil) 47) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30253 : prime 30253. Proof. apply (Pocklington_refl (Pock_certif 30253 2 ((2521, 1)::(2,2)::nil) 1) ((Proof_certif 2521 prime2521) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30259 : prime 30259. Proof. apply (Pocklington_refl (Pock_certif 30259 2 ((41, 1)::(2,1)::nil) 40) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30269 : prime 30269. Proof. apply (Pocklington_refl (Pock_certif 30269 3 ((7, 1)::(2,2)::nil) 11) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30271 : prime 30271. Proof. apply (Pocklington_refl (Pock_certif 30271 3 ((5, 1)::(3, 1)::(2,1)::nil) 47) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30293 : prime 30293. Proof. apply (Pocklington_refl (Pock_certif 30293 2 ((7573, 1)::(2,2)::nil) 1) ((Proof_certif 7573 prime7573) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30307 : prime 30307. Proof. apply (Pocklington_refl (Pock_certif 30307 2 ((5051, 1)::(2,1)::nil) 1) ((Proof_certif 5051 prime5051) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30313 : prime 30313. Proof. apply (Pocklington_refl (Pock_certif 30313 5 ((3, 1)::(2,3)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30319 : prime 30319. Proof. apply (Pocklington_refl (Pock_certif 30319 3 ((31, 1)::(2,1)::nil) 116) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30323 : prime 30323. Proof. apply (Pocklington_refl (Pock_certif 30323 2 ((15161, 1)::(2,1)::nil) 1) ((Proof_certif 15161 prime15161) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30341 : prime 30341. Proof. apply (Pocklington_refl (Pock_certif 30341 2 ((5, 1)::(2,2)::nil) 32) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30347 : prime 30347. Proof. apply (Pocklington_refl (Pock_certif 30347 2 ((15173, 1)::(2,1)::nil) 1) ((Proof_certif 15173 prime15173) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30367 : prime 30367. Proof. apply (Pocklington_refl (Pock_certif 30367 5 ((7, 1)::(3, 1)::(2,1)::nil) 50) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30389 : prime 30389. Proof. apply (Pocklington_refl (Pock_certif 30389 2 ((71, 1)::(2,2)::nil) 1) ((Proof_certif 71 prime71) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30391 : prime 30391. Proof. apply (Pocklington_refl (Pock_certif 30391 3 ((5, 1)::(3, 1)::(2,1)::nil) 51) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30403 : prime 30403. Proof. apply (Pocklington_refl (Pock_certif 30403 5 ((3, 3)::(2,1)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30427 : prime 30427. Proof. apply (Pocklington_refl (Pock_certif 30427 2 ((11, 1)::(2,1)::nil) 10) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30431 : prime 30431. Proof. apply (Pocklington_refl (Pock_certif 30431 7 ((17, 1)::(2,1)::nil) 4) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30449 : prime 30449. Proof. apply (Pocklington_refl (Pock_certif 30449 3 ((11, 1)::(2,4)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30467 : prime 30467. Proof. apply (Pocklington_refl (Pock_certif 30467 2 ((15233, 1)::(2,1)::nil) 1) ((Proof_certif 15233 prime15233) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30469 : prime 30469. Proof. apply (Pocklington_refl (Pock_certif 30469 2 ((2539, 1)::(2,2)::nil) 1) ((Proof_certif 2539 prime2539) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30491 : prime 30491. Proof. apply (Pocklington_refl (Pock_certif 30491 2 ((3049, 1)::(2,1)::nil) 1) ((Proof_certif 3049 prime3049) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30493 : prime 30493. Proof. apply (Pocklington_refl (Pock_certif 30493 2 ((3, 2)::(2,2)::nil) 54) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30497 : prime 30497. Proof. apply (Pocklington_refl (Pock_certif 30497 3 ((2,5)::nil) 56) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30509 : prime 30509. Proof. apply (Pocklington_refl (Pock_certif 30509 2 ((29, 1)::(2,2)::nil) 30) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30517 : prime 30517. Proof. apply (Pocklington_refl (Pock_certif 30517 2 ((2543, 1)::(2,2)::nil) 1) ((Proof_certif 2543 prime2543) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30529 : prime 30529. Proof. apply (Pocklington_refl (Pock_certif 30529 13 ((2,6)::nil) 92) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30539 : prime 30539. Proof. apply (Pocklington_refl (Pock_certif 30539 2 ((15269, 1)::(2,1)::nil) 1) ((Proof_certif 15269 prime15269) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30553 : prime 30553. Proof. apply (Pocklington_refl (Pock_certif 30553 5 ((3, 1)::(2,3)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30557 : prime 30557. Proof. apply (Pocklington_refl (Pock_certif 30557 2 ((7639, 1)::(2,2)::nil) 1) ((Proof_certif 7639 prime7639) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30559 : prime 30559. Proof. apply (Pocklington_refl (Pock_certif 30559 3 ((11, 1)::(2,1)::nil) 19) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30577 : prime 30577. Proof. apply (Pocklington_refl (Pock_certif 30577 5 ((3, 1)::(2,4)::nil) 60) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30593 : prime 30593. Proof. apply (Pocklington_refl (Pock_certif 30593 3 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30631 : prime 30631. Proof. apply (Pocklington_refl (Pock_certif 30631 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30637 : prime 30637. Proof. apply (Pocklington_refl (Pock_certif 30637 2 ((3, 2)::(2,2)::nil) 58) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30643 : prime 30643. Proof. apply (Pocklington_refl (Pock_certif 30643 2 ((5107, 1)::(2,1)::nil) 1) ((Proof_certif 5107 prime5107) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30649 : prime 30649. Proof. apply (Pocklington_refl (Pock_certif 30649 7 ((3, 1)::(2,3)::nil) 25) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30661 : prime 30661. Proof. apply (Pocklington_refl (Pock_certif 30661 2 ((5, 1)::(3, 1)::(2,2)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30671 : prime 30671. Proof. apply (Pocklington_refl (Pock_certif 30671 7 ((3067, 1)::(2,1)::nil) 1) ((Proof_certif 3067 prime3067) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30677 : prime 30677. Proof. apply (Pocklington_refl (Pock_certif 30677 2 ((7669, 1)::(2,2)::nil) 1) ((Proof_certif 7669 prime7669) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30689 : prime 30689. Proof. apply (Pocklington_refl (Pock_certif 30689 3 ((2,5)::nil) 62) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30697 : prime 30697. Proof. apply (Pocklington_refl (Pock_certif 30697 10 ((3, 1)::(2,3)::nil) 27) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30703 : prime 30703. Proof. apply (Pocklington_refl (Pock_certif 30703 3 ((7, 1)::(3, 1)::(2,1)::nil) 58) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30707 : prime 30707. Proof. apply (Pocklington_refl (Pock_certif 30707 2 ((13, 1)::(2,1)::nil) 34) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30713 : prime 30713. Proof. apply (Pocklington_refl (Pock_certif 30713 3 ((11, 1)::(2,3)::nil) 172) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30727 : prime 30727. Proof. apply (Pocklington_refl (Pock_certif 30727 3 ((3, 3)::(2,1)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30757 : prime 30757. Proof. apply (Pocklington_refl (Pock_certif 30757 5 ((11, 1)::(2,2)::nil) 82) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30763 : prime 30763. Proof. apply (Pocklington_refl (Pock_certif 30763 2 ((1709, 1)::(2,1)::nil) 1) ((Proof_certif 1709 prime1709) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30773 : prime 30773. Proof. apply (Pocklington_refl (Pock_certif 30773 3 ((7, 1)::(2,2)::nil) 32) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30781 : prime 30781. Proof. apply (Pocklington_refl (Pock_certif 30781 2 ((3, 2)::(2,2)::nil) 62) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30803 : prime 30803. Proof. apply (Pocklington_refl (Pock_certif 30803 2 ((15401, 1)::(2,1)::nil) 1) ((Proof_certif 15401 prime15401) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30809 : prime 30809. Proof. apply (Pocklington_refl (Pock_certif 30809 3 ((3851, 1)::(2,3)::nil) 1) ((Proof_certif 3851 prime3851) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30817 : prime 30817. Proof. apply (Pocklington_refl (Pock_certif 30817 5 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30829 : prime 30829. Proof. apply (Pocklington_refl (Pock_certif 30829 2 ((7, 1)::(2,2)::nil) 34) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30839 : prime 30839. Proof. apply (Pocklington_refl (Pock_certif 30839 7 ((17, 1)::(2,1)::nil) 20) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30841 : prime 30841. Proof. apply (Pocklington_refl (Pock_certif 30841 7 ((3, 1)::(2,3)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30851 : prime 30851. Proof. apply (Pocklington_refl (Pock_certif 30851 2 ((5, 2)::(2,1)::nil) 15) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30853 : prime 30853. Proof. apply (Pocklington_refl (Pock_certif 30853 2 ((3, 2)::(2,2)::nil) 64) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30859 : prime 30859. Proof. apply (Pocklington_refl (Pock_certif 30859 2 ((37, 1)::(2,1)::nil) 120) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30869 : prime 30869. Proof. apply (Pocklington_refl (Pock_certif 30869 2 ((7717, 1)::(2,2)::nil) 1) ((Proof_certif 7717 prime7717) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30871 : prime 30871. Proof. apply (Pocklington_refl (Pock_certif 30871 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30881 : prime 30881. Proof. apply (Pocklington_refl (Pock_certif 30881 3 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30893 : prime 30893. Proof. apply (Pocklington_refl (Pock_certif 30893 2 ((7723, 1)::(2,2)::nil) 1) ((Proof_certif 7723 prime7723) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30911 : prime 30911. Proof. apply (Pocklington_refl (Pock_certif 30911 11 ((11, 1)::(2,1)::nil) 37) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30931 : prime 30931. Proof. apply (Pocklington_refl (Pock_certif 30931 2 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30937 : prime 30937. Proof. apply (Pocklington_refl (Pock_certif 30937 15 ((3, 1)::(2,3)::nil) 38) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30941 : prime 30941. Proof. apply (Pocklington_refl (Pock_certif 30941 2 ((7, 1)::(2,2)::nil) 39) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30949 : prime 30949. Proof. apply (Pocklington_refl (Pock_certif 30949 2 ((2579, 1)::(2,2)::nil) 1) ((Proof_certif 2579 prime2579) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30971 : prime 30971. Proof. apply (Pocklington_refl (Pock_certif 30971 2 ((19, 1)::(2,1)::nil) 54) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30977 : prime 30977. Proof. apply (Pocklington_refl (Pock_certif 30977 3 ((2,8)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime30983 : prime 30983. Proof. apply (Pocklington_refl (Pock_certif 30983 5 ((2213, 1)::(2,1)::nil) 1) ((Proof_certif 2213 prime2213) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31013 : prime 31013. Proof. apply (Pocklington_refl (Pock_certif 31013 2 ((7753, 1)::(2,2)::nil) 1) ((Proof_certif 7753 prime7753) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31019 : prime 31019. Proof. apply (Pocklington_refl (Pock_certif 31019 2 ((13, 1)::(2,1)::nil) 47) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31033 : prime 31033. Proof. apply (Pocklington_refl (Pock_certif 31033 10 ((3, 1)::(2,3)::nil) 42) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31039 : prime 31039. Proof. apply (Pocklington_refl (Pock_certif 31039 7 ((7, 1)::(3, 1)::(2,1)::nil) 66) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31051 : prime 31051. Proof. apply (Pocklington_refl (Pock_certif 31051 2 ((3, 3)::(2,1)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31063 : prime 31063. Proof. apply (Pocklington_refl (Pock_certif 31063 3 ((31, 1)::(2,1)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31069 : prime 31069. Proof. apply (Pocklington_refl (Pock_certif 31069 2 ((3, 2)::(2,2)::nil) 70) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31079 : prime 31079. Proof. apply (Pocklington_refl (Pock_certif 31079 11 ((41, 1)::(2,1)::nil) 50) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31081 : prime 31081. Proof. apply (Pocklington_refl (Pock_certif 31081 13 ((3, 1)::(2,3)::nil) 44) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31091 : prime 31091. Proof. apply (Pocklington_refl (Pock_certif 31091 2 ((3109, 1)::(2,1)::nil) 1) ((Proof_certif 3109 prime3109) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31121 : prime 31121. Proof. apply (Pocklington_refl (Pock_certif 31121 3 ((5, 1)::(2,4)::nil) 68) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31123 : prime 31123. Proof. apply (Pocklington_refl (Pock_certif 31123 3 ((7, 1)::(3, 1)::(2,1)::nil) 68) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31139 : prime 31139. Proof. apply (Pocklington_refl (Pock_certif 31139 2 ((15569, 1)::(2,1)::nil) 1) ((Proof_certif 15569 prime15569) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31147 : prime 31147. Proof. apply (Pocklington_refl (Pock_certif 31147 2 ((29, 1)::(2,1)::nil) 72) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31151 : prime 31151. Proof. apply (Pocklington_refl (Pock_certif 31151 7 ((5, 2)::(2,1)::nil) 21) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31153 : prime 31153. Proof. apply (Pocklington_refl (Pock_certif 31153 10 ((3, 1)::(2,4)::nil) 72) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31159 : prime 31159. Proof. apply (Pocklington_refl (Pock_certif 31159 3 ((3, 3)::(2,1)::nil) 36) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31177 : prime 31177. Proof. apply (Pocklington_refl (Pock_certif 31177 7 ((3, 2)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31181 : prime 31181. Proof. apply (Pocklington_refl (Pock_certif 31181 2 ((5, 1)::(2,2)::nil) 34) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31183 : prime 31183. Proof. apply (Pocklington_refl (Pock_certif 31183 3 ((5197, 1)::(2,1)::nil) 1) ((Proof_certif 5197 prime5197) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31189 : prime 31189. Proof. apply (Pocklington_refl (Pock_certif 31189 2 ((23, 1)::(2,2)::nil) 154) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31193 : prime 31193. Proof. apply (Pocklington_refl (Pock_certif 31193 5 ((7, 1)::(2,3)::nil) 108) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31219 : prime 31219. Proof. apply (Pocklington_refl (Pock_certif 31219 10 ((11, 1)::(3, 1)::(2,1)::nil) 76) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31223 : prime 31223. Proof. apply (Pocklington_refl (Pock_certif 31223 5 ((67, 1)::(2,1)::nil) 1) ((Proof_certif 67 prime67) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31231 : prime 31231. Proof. apply (Pocklington_refl (Pock_certif 31231 6 ((5, 1)::(3, 1)::(2,1)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31237 : prime 31237. Proof. apply (Pocklington_refl (Pock_certif 31237 2 ((19, 1)::(2,2)::nil) 106) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31247 : prime 31247. Proof. apply (Pocklington_refl (Pock_certif 31247 5 ((17, 1)::(2,1)::nil) 33) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31249 : prime 31249. Proof. apply (Pocklington_refl (Pock_certif 31249 23 ((3, 1)::(2,4)::nil) 74) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31253 : prime 31253. Proof. apply (Pocklington_refl (Pock_certif 31253 2 ((13, 1)::(2,2)::nil) 80) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31259 : prime 31259. Proof. apply (Pocklington_refl (Pock_certif 31259 2 ((15629, 1)::(2,1)::nil) 1) ((Proof_certif 15629 prime15629) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31267 : prime 31267. Proof. apply (Pocklington_refl (Pock_certif 31267 2 ((3, 3)::(2,1)::nil) 38) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31271 : prime 31271. Proof. apply (Pocklington_refl (Pock_certif 31271 7 ((53, 1)::(2,1)::nil) 82) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31277 : prime 31277. Proof. apply (Pocklington_refl (Pock_certif 31277 2 ((7, 1)::(2,2)::nil) 51) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31307 : prime 31307. Proof. apply (Pocklington_refl (Pock_certif 31307 2 ((1423, 1)::(2,1)::nil) 1) ((Proof_certif 1423 prime1423) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31319 : prime 31319. Proof. apply (Pocklington_refl (Pock_certif 31319 7 ((2237, 1)::(2,1)::nil) 1) ((Proof_certif 2237 prime2237) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31321 : prime 31321. Proof. apply (Pocklington_refl (Pock_certif 31321 7 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31327 : prime 31327. Proof. apply (Pocklington_refl (Pock_certif 31327 5 ((23, 1)::(2,1)::nil) 36) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31333 : prime 31333. Proof. apply (Pocklington_refl (Pock_certif 31333 2 ((7, 1)::(2,2)::nil) 53) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31337 : prime 31337. Proof. apply (Pocklington_refl (Pock_certif 31337 3 ((3917, 1)::(2,3)::nil) 1) ((Proof_certif 3917 prime3917) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31357 : prime 31357. Proof. apply (Pocklington_refl (Pock_certif 31357 2 ((3, 2)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31379 : prime 31379. Proof. apply (Pocklington_refl (Pock_certif 31379 2 ((29, 1)::(2,1)::nil) 76) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31387 : prime 31387. Proof. apply (Pocklington_refl (Pock_certif 31387 2 ((5231, 1)::(2,1)::nil) 1) ((Proof_certif 5231 prime5231) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31391 : prime 31391. Proof. apply (Pocklington_refl (Pock_certif 31391 31 ((43, 1)::(2,1)::nil) 20) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31393 : prime 31393. Proof. apply (Pocklington_refl (Pock_certif 31393 5 ((2,5)::nil) 17) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31397 : prime 31397. Proof. apply (Pocklington_refl (Pock_certif 31397 2 ((47, 1)::(2,2)::nil) 1) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31469 : prime 31469. Proof. apply (Pocklington_refl (Pock_certif 31469 2 ((7867, 1)::(2,2)::nil) 1) ((Proof_certif 7867 prime7867) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31477 : prime 31477. Proof. apply (Pocklington_refl (Pock_certif 31477 2 ((43, 1)::(2,2)::nil) 1) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31481 : prime 31481. Proof. apply (Pocklington_refl (Pock_certif 31481 6 ((5, 1)::(2,3)::nil) 66) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31489 : prime 31489. Proof. apply (Pocklington_refl (Pock_certif 31489 7 ((2,8)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31511 : prime 31511. Proof. apply (Pocklington_refl (Pock_certif 31511 7 ((23, 1)::(2,1)::nil) 40) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31513 : prime 31513. Proof. apply (Pocklington_refl (Pock_certif 31513 7 ((3, 1)::(2,3)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31517 : prime 31517. Proof. apply (Pocklington_refl (Pock_certif 31517 2 ((7879, 1)::(2,2)::nil) 1) ((Proof_certif 7879 prime7879) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31531 : prime 31531. Proof. apply (Pocklington_refl (Pock_certif 31531 2 ((5, 1)::(3, 1)::(2,1)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31541 : prime 31541. Proof. apply (Pocklington_refl (Pock_certif 31541 2 ((19, 1)::(2,2)::nil) 110) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31543 : prime 31543. Proof. apply (Pocklington_refl (Pock_certif 31543 3 ((7, 1)::(3, 1)::(2,1)::nil) 78) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31547 : prime 31547. Proof. apply (Pocklington_refl (Pock_certif 31547 2 ((15773, 1)::(2,1)::nil) 1) ((Proof_certif 15773 prime15773) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31567 : prime 31567. Proof. apply (Pocklington_refl (Pock_certif 31567 3 ((5261, 1)::(2,1)::nil) 1) ((Proof_certif 5261 prime5261) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31573 : prime 31573. Proof. apply (Pocklington_refl (Pock_certif 31573 5 ((3, 2)::(2,2)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31583 : prime 31583. Proof. apply (Pocklington_refl (Pock_certif 31583 5 ((15791, 1)::(2,1)::nil) 1) ((Proof_certif 15791 prime15791) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31601 : prime 31601. Proof. apply (Pocklington_refl (Pock_certif 31601 3 ((5, 1)::(2,4)::nil) 74) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31607 : prime 31607. Proof. apply (Pocklington_refl (Pock_certif 31607 5 ((15803, 1)::(2,1)::nil) 1) ((Proof_certif 15803 prime15803) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31627 : prime 31627. Proof. apply (Pocklington_refl (Pock_certif 31627 3 ((7, 1)::(3, 1)::(2,1)::nil) 80) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31643 : prime 31643. Proof. apply (Pocklington_refl (Pock_certif 31643 2 ((13, 1)::(2,1)::nil) 16) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31649 : prime 31649. Proof. apply (Pocklington_refl (Pock_certif 31649 3 ((2,5)::nil) 26) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31657 : prime 31657. Proof. apply (Pocklington_refl (Pock_certif 31657 5 ((3, 1)::(2,3)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31663 : prime 31663. Proof. apply (Pocklington_refl (Pock_certif 31663 3 ((1759, 1)::(2,1)::nil) 1) ((Proof_certif 1759 prime1759) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31667 : prime 31667. Proof. apply (Pocklington_refl (Pock_certif 31667 2 ((71, 1)::(2,1)::nil) 1) ((Proof_certif 71 prime71) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31687 : prime 31687. Proof. apply (Pocklington_refl (Pock_certif 31687 3 ((5281, 1)::(2,1)::nil) 1) ((Proof_certif 5281 prime5281) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31699 : prime 31699. Proof. apply (Pocklington_refl (Pock_certif 31699 2 ((3, 3)::(2,1)::nil) 46) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31721 : prime 31721. Proof. apply (Pocklington_refl (Pock_certif 31721 11 ((5, 1)::(2,3)::nil) 72) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31723 : prime 31723. Proof. apply (Pocklington_refl (Pock_certif 31723 2 ((17, 1)::(2,1)::nil) 47) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31727 : prime 31727. Proof. apply (Pocklington_refl (Pock_certif 31727 5 ((29, 1)::(2,1)::nil) 82) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31729 : prime 31729. Proof. apply (Pocklington_refl (Pock_certif 31729 7 ((3, 1)::(2,4)::nil) 84) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31741 : prime 31741. Proof. apply (Pocklington_refl (Pock_certif 31741 6 ((5, 1)::(3, 1)::(2,2)::nil) 48) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31751 : prime 31751. Proof. apply (Pocklington_refl (Pock_certif 31751 11 ((5, 2)::(2,1)::nil) 34) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31769 : prime 31769. Proof. apply (Pocklington_refl (Pock_certif 31769 6 ((11, 1)::(2,3)::nil) 8) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31771 : prime 31771. Proof. apply (Pocklington_refl (Pock_certif 31771 10 ((5, 1)::(3, 1)::(2,1)::nil) 37) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31793 : prime 31793. Proof. apply (Pocklington_refl (Pock_certif 31793 3 ((1987, 1)::(2,4)::nil) 1) ((Proof_certif 1987 prime1987) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31799 : prime 31799. Proof. apply (Pocklington_refl (Pock_certif 31799 11 ((13, 1)::(2,1)::nil) 23) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31817 : prime 31817. Proof. apply (Pocklington_refl (Pock_certif 31817 3 ((41, 1)::(2,3)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31847 : prime 31847. Proof. apply (Pocklington_refl (Pock_certif 31847 5 ((15923, 1)::(2,1)::nil) 1) ((Proof_certif 15923 prime15923) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31849 : prime 31849. Proof. apply (Pocklington_refl (Pock_certif 31849 14 ((3, 1)::(2,3)::nil) 27) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31859 : prime 31859. Proof. apply (Pocklington_refl (Pock_certif 31859 2 ((17, 1)::(2,1)::nil) 52) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31873 : prime 31873. Proof. apply (Pocklington_refl (Pock_certif 31873 5 ((2,7)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31883 : prime 31883. Proof. apply (Pocklington_refl (Pock_certif 31883 2 ((19, 1)::(2,1)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31891 : prime 31891. Proof. apply (Pocklington_refl (Pock_certif 31891 2 ((5, 1)::(3, 1)::(2,1)::nil) 41) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31907 : prime 31907. Proof. apply (Pocklington_refl (Pock_certif 31907 2 ((43, 1)::(2,1)::nil) 26) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31957 : prime 31957. Proof. apply (Pocklington_refl (Pock_certif 31957 2 ((2663, 1)::(2,2)::nil) 1) ((Proof_certif 2663 prime2663) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31963 : prime 31963. Proof. apply (Pocklington_refl (Pock_certif 31963 2 ((7, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31973 : prime 31973. Proof. apply (Pocklington_refl (Pock_certif 31973 2 ((7993, 1)::(2,2)::nil) 1) ((Proof_certif 7993 prime7993) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31981 : prime 31981. Proof. apply (Pocklington_refl (Pock_certif 31981 6 ((5, 1)::(2,2)::nil) 34) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime31991 : prime 31991. Proof. apply (Pocklington_refl (Pock_certif 31991 7 ((7, 1)::(5, 1)::(2,1)::nil) 36) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32003 : prime 32003. Proof. apply (Pocklington_refl (Pock_certif 32003 2 ((16001, 1)::(2,1)::nil) 1) ((Proof_certif 16001 prime16001) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32009 : prime 32009. Proof. apply (Pocklington_refl (Pock_certif 32009 3 ((4001, 1)::(2,3)::nil) 1) ((Proof_certif 4001 prime4001) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32027 : prime 32027. Proof. apply (Pocklington_refl (Pock_certif 32027 2 ((67, 1)::(2,1)::nil) 1) ((Proof_certif 67 prime67) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32029 : prime 32029. Proof. apply (Pocklington_refl (Pock_certif 32029 2 ((17, 1)::(2,2)::nil) 62) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32051 : prime 32051. Proof. apply (Pocklington_refl (Pock_certif 32051 10 ((5, 2)::(2,1)::nil) 40) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32057 : prime 32057. Proof. apply (Pocklington_refl (Pock_certif 32057 3 ((4007, 1)::(2,3)::nil) 1) ((Proof_certif 4007 prime4007) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32059 : prime 32059. Proof. apply (Pocklington_refl (Pock_certif 32059 2 ((13, 1)::(2,1)::nil) 34) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32063 : prime 32063. Proof. apply (Pocklington_refl (Pock_certif 32063 5 ((17, 1)::(2,1)::nil) 58) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32069 : prime 32069. Proof. apply (Pocklington_refl (Pock_certif 32069 2 ((8017, 1)::(2,2)::nil) 1) ((Proof_certif 8017 prime8017) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32077 : prime 32077. Proof. apply (Pocklington_refl (Pock_certif 32077 2 ((3, 2)::(2,2)::nil) 25) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32083 : prime 32083. Proof. apply (Pocklington_refl (Pock_certif 32083 2 ((5347, 1)::(2,1)::nil) 1) ((Proof_certif 5347 prime5347) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32089 : prime 32089. Proof. apply (Pocklington_refl (Pock_certif 32089 13 ((3, 1)::(2,3)::nil) 38) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32099 : prime 32099. Proof. apply (Pocklington_refl (Pock_certif 32099 2 ((1459, 1)::(2,1)::nil) 1) ((Proof_certif 1459 prime1459) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32117 : prime 32117. Proof. apply (Pocklington_refl (Pock_certif 32117 2 ((7, 1)::(2,2)::nil) 23) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32119 : prime 32119. Proof. apply (Pocklington_refl (Pock_certif 32119 3 ((53, 1)::(2,1)::nil) 90) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32141 : prime 32141. Proof. apply (Pocklington_refl (Pock_certif 32141 2 ((1607, 1)::(2,2)::nil) 1) ((Proof_certif 1607 prime1607) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32143 : prime 32143. Proof. apply (Pocklington_refl (Pock_certif 32143 6 ((11, 1)::(3, 1)::(2,1)::nil) 90) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32159 : prime 32159. Proof. apply (Pocklington_refl (Pock_certif 32159 7 ((2297, 1)::(2,1)::nil) 1) ((Proof_certif 2297 prime2297) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32173 : prime 32173. Proof. apply (Pocklington_refl (Pock_certif 32173 2 ((7, 1)::(2,2)::nil) 26) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32183 : prime 32183. Proof. apply (Pocklington_refl (Pock_certif 32183 5 ((16091, 1)::(2,1)::nil) 1) ((Proof_certif 16091 prime16091) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32189 : prime 32189. Proof. apply (Pocklington_refl (Pock_certif 32189 2 ((13, 1)::(2,2)::nil) 98) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32191 : prime 32191. Proof. apply (Pocklington_refl (Pock_certif 32191 6 ((5, 1)::(3, 1)::(2,1)::nil) 51) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32203 : prime 32203. Proof. apply (Pocklington_refl (Pock_certif 32203 2 ((1789, 1)::(2,1)::nil) 1) ((Proof_certif 1789 prime1789) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32213 : prime 32213. Proof. apply (Pocklington_refl (Pock_certif 32213 2 ((8053, 1)::(2,2)::nil) 1) ((Proof_certif 8053 prime8053) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32233 : prime 32233. Proof. apply (Pocklington_refl (Pock_certif 32233 5 ((3, 1)::(2,3)::nil) 44) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32237 : prime 32237. Proof. apply (Pocklington_refl (Pock_certif 32237 2 ((8059, 1)::(2,2)::nil) 1) ((Proof_certif 8059 prime8059) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32251 : prime 32251. Proof. apply (Pocklington_refl (Pock_certif 32251 3 ((5, 1)::(3, 1)::(2,1)::nil) 53) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32257 : prime 32257. Proof. apply (Pocklington_refl (Pock_certif 32257 5 ((2,9)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32261 : prime 32261. Proof. apply (Pocklington_refl (Pock_certif 32261 2 ((1613, 1)::(2,2)::nil) 1) ((Proof_certif 1613 prime1613) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32297 : prime 32297. Proof. apply (Pocklington_refl (Pock_certif 32297 3 ((11, 1)::(2,3)::nil) 14) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32299 : prime 32299. Proof. apply (Pocklington_refl (Pock_certif 32299 12 ((7, 1)::(3, 1)::(2,1)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32303 : prime 32303. Proof. apply (Pocklington_refl (Pock_certif 32303 5 ((31, 1)::(2,1)::nil) 24) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32309 : prime 32309. Proof. apply (Pocklington_refl (Pock_certif 32309 2 ((41, 1)::(2,2)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32321 : prime 32321. Proof. apply (Pocklington_refl (Pock_certif 32321 3 ((2,6)::nil) 120) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32323 : prime 32323. Proof. apply (Pocklington_refl (Pock_certif 32323 2 ((5387, 1)::(2,1)::nil) 1) ((Proof_certif 5387 prime5387) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32327 : prime 32327. Proof. apply (Pocklington_refl (Pock_certif 32327 5 ((2309, 1)::(2,1)::nil) 1) ((Proof_certif 2309 prime2309) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32341 : prime 32341. Proof. apply (Pocklington_refl (Pock_certif 32341 2 ((5, 1)::(3, 1)::(2,2)::nil) 58) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32353 : prime 32353. Proof. apply (Pocklington_refl (Pock_certif 32353 5 ((2,5)::nil) 49) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32359 : prime 32359. Proof. apply (Pocklington_refl (Pock_certif 32359 3 ((5393, 1)::(2,1)::nil) 1) ((Proof_certif 5393 prime5393) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32363 : prime 32363. Proof. apply (Pocklington_refl (Pock_certif 32363 2 ((1471, 1)::(2,1)::nil) 1) ((Proof_certif 1471 prime1471) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32369 : prime 32369. Proof. apply (Pocklington_refl (Pock_certif 32369 6 ((7, 1)::(2,4)::nil) 64) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32371 : prime 32371. Proof. apply (Pocklington_refl (Pock_certif 32371 2 ((5, 1)::(3, 1)::(2,1)::nil) 57) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32377 : prime 32377. Proof. apply (Pocklington_refl (Pock_certif 32377 5 ((19, 1)::(2,3)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32381 : prime 32381. Proof. apply (Pocklington_refl (Pock_certif 32381 2 ((1619, 1)::(2,2)::nil) 1) ((Proof_certif 1619 prime1619) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32401 : prime 32401. Proof. apply (Pocklington_refl (Pock_certif 32401 7 ((3, 1)::(2,4)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32411 : prime 32411. Proof. apply (Pocklington_refl (Pock_certif 32411 2 ((7, 1)::(5, 1)::(2,1)::nil) 42) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32413 : prime 32413. Proof. apply (Pocklington_refl (Pock_certif 32413 2 ((37, 1)::(2,2)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32423 : prime 32423. Proof. apply (Pocklington_refl (Pock_certif 32423 5 ((13, 1)::(2,1)::nil) 49) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32429 : prime 32429. Proof. apply (Pocklington_refl (Pock_certif 32429 3 ((11, 1)::(2,2)::nil) 32) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32441 : prime 32441. Proof. apply (Pocklington_refl (Pock_certif 32441 3 ((5, 1)::(2,3)::nil) 6) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32443 : prime 32443. Proof. apply (Pocklington_refl (Pock_certif 32443 2 ((5407, 1)::(2,1)::nil) 1) ((Proof_certif 5407 prime5407) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32467 : prime 32467. Proof. apply (Pocklington_refl (Pock_certif 32467 2 ((7, 1)::(3, 1)::(2,1)::nil) 14) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32479 : prime 32479. Proof. apply (Pocklington_refl (Pock_certif 32479 3 ((5413, 1)::(2,1)::nil) 1) ((Proof_certif 5413 prime5413) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32491 : prime 32491. Proof. apply (Pocklington_refl (Pock_certif 32491 2 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32497 : prime 32497. Proof. apply (Pocklington_refl (Pock_certif 32497 7 ((3, 1)::(2,4)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32503 : prime 32503. Proof. apply (Pocklington_refl (Pock_certif 32503 3 ((5417, 1)::(2,1)::nil) 1) ((Proof_certif 5417 prime5417) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32507 : prime 32507. Proof. apply (Pocklington_refl (Pock_certif 32507 2 ((16253, 1)::(2,1)::nil) 1) ((Proof_certif 16253 prime16253) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32531 : prime 32531. Proof. apply (Pocklington_refl (Pock_certif 32531 2 ((3253, 1)::(2,1)::nil) 1) ((Proof_certif 3253 prime3253) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32533 : prime 32533. Proof. apply (Pocklington_refl (Pock_certif 32533 2 ((2711, 1)::(2,2)::nil) 1) ((Proof_certif 2711 prime2711) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32537 : prime 32537. Proof. apply (Pocklington_refl (Pock_certif 32537 3 ((7, 1)::(2,3)::nil) 20) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32561 : prime 32561. Proof. apply (Pocklington_refl (Pock_certif 32561 3 ((5, 1)::(2,4)::nil) 86) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32563 : prime 32563. Proof. apply (Pocklington_refl (Pock_certif 32563 2 ((3, 3)::(2,1)::nil) 62) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32569 : prime 32569. Proof. apply (Pocklington_refl (Pock_certif 32569 7 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32573 : prime 32573. Proof. apply (Pocklington_refl (Pock_certif 32573 2 ((17, 1)::(2,2)::nil) 70) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32579 : prime 32579. Proof. apply (Pocklington_refl (Pock_certif 32579 6 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32587 : prime 32587. Proof. apply (Pocklington_refl (Pock_certif 32587 2 ((5431, 1)::(2,1)::nil) 1) ((Proof_certif 5431 prime5431) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32603 : prime 32603. Proof. apply (Pocklington_refl (Pock_certif 32603 2 ((16301, 1)::(2,1)::nil) 1) ((Proof_certif 16301 prime16301) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32609 : prime 32609. Proof. apply (Pocklington_refl (Pock_certif 32609 3 ((2,5)::nil) 57) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32611 : prime 32611. Proof. apply (Pocklington_refl (Pock_certif 32611 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32621 : prime 32621. Proof. apply (Pocklington_refl (Pock_certif 32621 2 ((7, 1)::(2,2)::nil) 43) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32633 : prime 32633. Proof. apply (Pocklington_refl (Pock_certif 32633 3 ((4079, 1)::(2,3)::nil) 1) ((Proof_certif 4079 prime4079) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32647 : prime 32647. Proof. apply (Pocklington_refl (Pock_certif 32647 3 ((5441, 1)::(2,1)::nil) 1) ((Proof_certif 5441 prime5441) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32653 : prime 32653. Proof. apply (Pocklington_refl (Pock_certif 32653 2 ((3, 2)::(2,2)::nil) 41) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32687 : prime 32687. Proof. apply (Pocklington_refl (Pock_certif 32687 5 ((59, 1)::(2,1)::nil) 40) ((Proof_certif 59 prime59) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32693 : prime 32693. Proof. apply (Pocklington_refl (Pock_certif 32693 2 ((11, 1)::(2,2)::nil) 38) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32707 : prime 32707. Proof. apply (Pocklington_refl (Pock_certif 32707 2 ((23, 1)::(2,1)::nil) 66) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32713 : prime 32713. Proof. apply (Pocklington_refl (Pock_certif 32713 5 ((3, 1)::(2,3)::nil) 11) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32717 : prime 32717. Proof. apply (Pocklington_refl (Pock_certif 32717 2 ((8179, 1)::(2,2)::nil) 1) ((Proof_certif 8179 prime8179) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32719 : prime 32719. Proof. apply (Pocklington_refl (Pock_certif 32719 3 ((7, 1)::(3, 1)::(2,1)::nil) 21) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32749 : prime 32749. Proof. apply (Pocklington_refl (Pock_certif 32749 2 ((2729, 1)::(2,2)::nil) 1) ((Proof_certif 2729 prime2729) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32771 : prime 32771. Proof. apply (Pocklington_refl (Pock_certif 32771 2 ((29, 1)::(2,1)::nil) 100) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32779 : prime 32779. Proof. apply (Pocklington_refl (Pock_certif 32779 3 ((3, 3)::(2,1)::nil) 66) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32783 : prime 32783. Proof. apply (Pocklington_refl (Pock_certif 32783 7 ((37, 1)::(2,1)::nil) 146) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32789 : prime 32789. Proof. apply (Pocklington_refl (Pock_certif 32789 2 ((7, 1)::(2,2)::nil) 49) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32797 : prime 32797. Proof. apply (Pocklington_refl (Pock_certif 32797 2 ((3, 2)::(2,2)::nil) 45) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32801 : prime 32801. Proof. apply (Pocklington_refl (Pock_certif 32801 3 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32803 : prime 32803. Proof. apply (Pocklington_refl (Pock_certif 32803 3 ((7, 1)::(3, 1)::(2,1)::nil) 23) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32831 : prime 32831. Proof. apply (Pocklington_refl (Pock_certif 32831 13 ((7, 1)::(5, 1)::(2,1)::nil) 48) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32833 : prime 32833. Proof. apply (Pocklington_refl (Pock_certif 32833 5 ((2,6)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32839 : prime 32839. Proof. apply (Pocklington_refl (Pock_certif 32839 3 ((13, 1)::(2,1)::nil) 5) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32843 : prime 32843. Proof. apply (Pocklington_refl (Pock_certif 32843 2 ((16421, 1)::(2,1)::nil) 1) ((Proof_certif 16421 prime16421) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32869 : prime 32869. Proof. apply (Pocklington_refl (Pock_certif 32869 6 ((3, 2)::(2,2)::nil) 48) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32887 : prime 32887. Proof. apply (Pocklington_refl (Pock_certif 32887 3 ((3, 3)::(2,1)::nil) 68) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32909 : prime 32909. Proof. apply (Pocklington_refl (Pock_certif 32909 2 ((19, 1)::(2,2)::nil) 128) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32911 : prime 32911. Proof. apply (Pocklington_refl (Pock_certif 32911 3 ((5, 1)::(3, 1)::(2,1)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32917 : prime 32917. Proof. apply (Pocklington_refl (Pock_certif 32917 2 ((13, 1)::(2,2)::nil) 5) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32933 : prime 32933. Proof. apply (Pocklington_refl (Pock_certif 32933 2 ((8233, 1)::(2,2)::nil) 1) ((Proof_certif 8233 prime8233) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32939 : prime 32939. Proof. apply (Pocklington_refl (Pock_certif 32939 2 ((43, 1)::(2,1)::nil) 38) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32941 : prime 32941. Proof. apply (Pocklington_refl (Pock_certif 32941 2 ((3, 2)::(2,2)::nil) 50) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32957 : prime 32957. Proof. apply (Pocklington_refl (Pock_certif 32957 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32969 : prime 32969. Proof. apply (Pocklington_refl (Pock_certif 32969 3 ((13, 1)::(2,3)::nil) 108) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32971 : prime 32971. Proof. apply (Pocklington_refl (Pock_certif 32971 11 ((5, 1)::(3, 1)::(2,1)::nil) 14) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32983 : prime 32983. Proof. apply (Pocklington_refl (Pock_certif 32983 3 ((23, 1)::(2,1)::nil) 72) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32987 : prime 32987. Proof. apply (Pocklington_refl (Pock_certif 32987 2 ((16493, 1)::(2,1)::nil) 1) ((Proof_certif 16493 prime16493) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32993 : prime 32993. Proof. apply (Pocklington_refl (Pock_certif 32993 3 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime32999 : prime 32999. Proof. apply (Pocklington_refl (Pock_certif 32999 7 ((2357, 1)::(2,1)::nil) 1) ((Proof_certif 2357 prime2357) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33013 : prime 33013. Proof. apply (Pocklington_refl (Pock_certif 33013 5 ((3, 2)::(2,2)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33023 : prime 33023. Proof. apply (Pocklington_refl (Pock_certif 33023 5 ((19, 1)::(2,1)::nil) 31) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33029 : prime 33029. Proof. apply (Pocklington_refl (Pock_certif 33029 2 ((23, 1)::(2,2)::nil) 174) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33037 : prime 33037. Proof. apply (Pocklington_refl (Pock_certif 33037 2 ((2753, 1)::(2,2)::nil) 1) ((Proof_certif 2753 prime2753) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33049 : prime 33049. Proof. apply (Pocklington_refl (Pock_certif 33049 29 ((3, 1)::(2,3)::nil) 29) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33053 : prime 33053. Proof. apply (Pocklington_refl (Pock_certif 33053 2 ((8263, 1)::(2,2)::nil) 1) ((Proof_certif 8263 prime8263) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33071 : prime 33071. Proof. apply (Pocklington_refl (Pock_certif 33071 11 ((3307, 1)::(2,1)::nil) 1) ((Proof_certif 3307 prime3307) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33073 : prime 33073. Proof. apply (Pocklington_refl (Pock_certif 33073 5 ((3, 1)::(2,4)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33083 : prime 33083. Proof. apply (Pocklington_refl (Pock_certif 33083 2 ((17, 1)::(2,1)::nil) 18) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33091 : prime 33091. Proof. apply (Pocklington_refl (Pock_certif 33091 3 ((5, 1)::(3, 1)::(2,1)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33107 : prime 33107. Proof. apply (Pocklington_refl (Pock_certif 33107 2 ((16553, 1)::(2,1)::nil) 1) ((Proof_certif 16553 prime16553) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33113 : prime 33113. Proof. apply (Pocklington_refl (Pock_certif 33113 3 ((4139, 1)::(2,3)::nil) 1) ((Proof_certif 4139 prime4139) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33119 : prime 33119. Proof. apply (Pocklington_refl (Pock_certif 33119 7 ((29, 1)::(2,1)::nil) 106) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33149 : prime 33149. Proof. apply (Pocklington_refl (Pock_certif 33149 2 ((8287, 1)::(2,2)::nil) 1) ((Proof_certif 8287 prime8287) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33151 : prime 33151. Proof. apply (Pocklington_refl (Pock_certif 33151 3 ((5, 1)::(3, 1)::(2,1)::nil) 21) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33161 : prime 33161. Proof. apply (Pocklington_refl (Pock_certif 33161 3 ((5, 1)::(2,3)::nil) 27) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33179 : prime 33179. Proof. apply (Pocklington_refl (Pock_certif 33179 2 ((53, 1)::(2,1)::nil) 100) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33181 : prime 33181. Proof. apply (Pocklington_refl (Pock_certif 33181 6 ((5, 1)::(3, 1)::(2,2)::nil) 72) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33191 : prime 33191. Proof. apply (Pocklington_refl (Pock_certif 33191 7 ((3319, 1)::(2,1)::nil) 1) ((Proof_certif 3319 prime3319) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33199 : prime 33199. Proof. apply (Pocklington_refl (Pock_certif 33199 3 ((11, 1)::(3, 1)::(2,1)::nil) 106) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33203 : prime 33203. Proof. apply (Pocklington_refl (Pock_certif 33203 2 ((13, 1)::(2,1)::nil) 25) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33211 : prime 33211. Proof. apply (Pocklington_refl (Pock_certif 33211 2 ((3, 3)::(2,1)::nil) 74) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33223 : prime 33223. Proof. apply (Pocklington_refl (Pock_certif 33223 10 ((7, 1)::(3, 1)::(2,1)::nil) 33) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33247 : prime 33247. Proof. apply (Pocklington_refl (Pock_certif 33247 3 ((1847, 1)::(2,1)::nil) 1) ((Proof_certif 1847 prime1847) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33287 : prime 33287. Proof. apply (Pocklington_refl (Pock_certif 33287 5 ((17, 1)::(2,1)::nil) 24) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33289 : prime 33289. Proof. apply (Pocklington_refl (Pock_certif 33289 17 ((3, 1)::(2,3)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33301 : prime 33301. Proof. apply (Pocklington_refl (Pock_certif 33301 2 ((3, 2)::(2,2)::nil) 60) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33311 : prime 33311. Proof. apply (Pocklington_refl (Pock_certif 33311 11 ((3331, 1)::(2,1)::nil) 1) ((Proof_certif 3331 prime3331) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33317 : prime 33317. Proof. apply (Pocklington_refl (Pock_certif 33317 2 ((8329, 1)::(2,2)::nil) 1) ((Proof_certif 8329 prime8329) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33329 : prime 33329. Proof. apply (Pocklington_refl (Pock_certif 33329 3 ((2083, 1)::(2,4)::nil) 1) ((Proof_certif 2083 prime2083) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33331 : prime 33331. Proof. apply (Pocklington_refl (Pock_certif 33331 3 ((5, 1)::(3, 1)::(2,1)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33343 : prime 33343. Proof. apply (Pocklington_refl (Pock_certif 33343 3 ((5557, 1)::(2,1)::nil) 1) ((Proof_certif 5557 prime5557) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33347 : prime 33347. Proof. apply (Pocklington_refl (Pock_certif 33347 2 ((16673, 1)::(2,1)::nil) 1) ((Proof_certif 16673 prime16673) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33349 : prime 33349. Proof. apply (Pocklington_refl (Pock_certif 33349 2 ((7, 1)::(2,2)::nil) 7) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33353 : prime 33353. Proof. apply (Pocklington_refl (Pock_certif 33353 3 ((11, 1)::(2,3)::nil) 26) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33359 : prime 33359. Proof. apply (Pocklington_refl (Pock_certif 33359 7 ((13, 1)::(2,1)::nil) 32) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33377 : prime 33377. Proof. apply (Pocklington_refl (Pock_certif 33377 3 ((2,5)::nil) 15) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33391 : prime 33391. Proof. apply (Pocklington_refl (Pock_certif 33391 6 ((5, 1)::(3, 1)::(2,1)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33403 : prime 33403. Proof. apply (Pocklington_refl (Pock_certif 33403 3 ((19, 1)::(2,1)::nil) 41) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33409 : prime 33409. Proof. apply (Pocklington_refl (Pock_certif 33409 7 ((2,7)::nil) 4) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33413 : prime 33413. Proof. apply (Pocklington_refl (Pock_certif 33413 2 ((8353, 1)::(2,2)::nil) 1) ((Proof_certif 8353 prime8353) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33427 : prime 33427. Proof. apply (Pocklington_refl (Pock_certif 33427 2 ((3, 3)::(2,1)::nil) 78) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33457 : prime 33457. Proof. apply (Pocklington_refl (Pock_certif 33457 10 ((3, 1)::(2,4)::nil) 23) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33461 : prime 33461. Proof. apply (Pocklington_refl (Pock_certif 33461 3 ((7, 1)::(2,2)::nil) 13) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33469 : prime 33469. Proof. apply (Pocklington_refl (Pock_certif 33469 2 ((2789, 1)::(2,2)::nil) 1) ((Proof_certif 2789 prime2789) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33479 : prime 33479. Proof. apply (Pocklington_refl (Pock_certif 33479 17 ((19, 1)::(2,1)::nil) 44) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33487 : prime 33487. Proof. apply (Pocklington_refl (Pock_certif 33487 3 ((5581, 1)::(2,1)::nil) 1) ((Proof_certif 5581 prime5581) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33493 : prime 33493. Proof. apply (Pocklington_refl (Pock_certif 33493 2 ((2791, 1)::(2,2)::nil) 1) ((Proof_certif 2791 prime2791) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33503 : prime 33503. Proof. apply (Pocklington_refl (Pock_certif 33503 5 ((2393, 1)::(2,1)::nil) 1) ((Proof_certif 2393 prime2393) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33521 : prime 33521. Proof. apply (Pocklington_refl (Pock_certif 33521 6 ((5, 1)::(2,4)::nil) 98) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33529 : prime 33529. Proof. apply (Pocklington_refl (Pock_certif 33529 7 ((11, 1)::(2,3)::nil) 28) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33533 : prime 33533. Proof. apply (Pocklington_refl (Pock_certif 33533 2 ((83, 1)::(2,2)::nil) 1) ((Proof_certif 83 prime83) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33547 : prime 33547. Proof. apply (Pocklington_refl (Pock_certif 33547 2 ((5591, 1)::(2,1)::nil) 1) ((Proof_certif 5591 prime5591) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33563 : prime 33563. Proof. apply (Pocklington_refl (Pock_certif 33563 2 ((97, 1)::(2,1)::nil) 1) ((Proof_certif 97 prime97) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33569 : prime 33569. Proof. apply (Pocklington_refl (Pock_certif 33569 3 ((2,5)::nil) 22) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33577 : prime 33577. Proof. apply (Pocklington_refl (Pock_certif 33577 5 ((1399, 1)::(2,3)::nil) 1) ((Proof_certif 1399 prime1399) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33581 : prime 33581. Proof. apply (Pocklington_refl (Pock_certif 33581 2 ((23, 1)::(2,2)::nil) 180) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33587 : prime 33587. Proof. apply (Pocklington_refl (Pock_certif 33587 2 ((2399, 1)::(2,1)::nil) 1) ((Proof_certif 2399 prime2399) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33589 : prime 33589. Proof. apply (Pocklington_refl (Pock_certif 33589 2 ((3, 2)::(2,2)::nil) 68) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33599 : prime 33599. Proof. apply (Pocklington_refl (Pock_certif 33599 11 ((107, 1)::(2,1)::nil) 1) ((Proof_certif 107 prime107) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33601 : prime 33601. Proof. apply (Pocklington_refl (Pock_certif 33601 11 ((2,6)::nil) 11) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33613 : prime 33613. Proof. apply (Pocklington_refl (Pock_certif 33613 2 ((2801, 1)::(2,2)::nil) 1) ((Proof_certif 2801 prime2801) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33617 : prime 33617. Proof. apply (Pocklington_refl (Pock_certif 33617 3 ((11, 1)::(2,4)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33619 : prime 33619. Proof. apply (Pocklington_refl (Pock_certif 33619 2 ((13, 1)::(2,1)::nil) 42) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33623 : prime 33623. Proof. apply (Pocklington_refl (Pock_certif 33623 5 ((16811, 1)::(2,1)::nil) 1) ((Proof_certif 16811 prime16811) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33629 : prime 33629. Proof. apply (Pocklington_refl (Pock_certif 33629 2 ((7, 1)::(2,2)::nil) 21) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33637 : prime 33637. Proof. apply (Pocklington_refl (Pock_certif 33637 2 ((2803, 1)::(2,2)::nil) 1) ((Proof_certif 2803 prime2803) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33641 : prime 33641. Proof. apply (Pocklington_refl (Pock_certif 33641 3 ((5, 1)::(2,3)::nil) 40) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33647 : prime 33647. Proof. apply (Pocklington_refl (Pock_certif 33647 5 ((16823, 1)::(2,1)::nil) 1) ((Proof_certif 16823 prime16823) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33679 : prime 33679. Proof. apply (Pocklington_refl (Pock_certif 33679 3 ((1871, 1)::(2,1)::nil) 1) ((Proof_certif 1871 prime1871) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33703 : prime 33703. Proof. apply (Pocklington_refl (Pock_certif 33703 3 ((41, 1)::(2,1)::nil) 82) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33713 : prime 33713. Proof. apply (Pocklington_refl (Pock_certif 33713 3 ((7, 1)::(2,4)::nil) 76) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33721 : prime 33721. Proof. apply (Pocklington_refl (Pock_certif 33721 11 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33739 : prime 33739. Proof. apply (Pocklington_refl (Pock_certif 33739 2 ((5623, 1)::(2,1)::nil) 1) ((Proof_certif 5623 prime5623) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33749 : prime 33749. Proof. apply (Pocklington_refl (Pock_certif 33749 2 ((11, 1)::(2,2)::nil) 62) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33751 : prime 33751. Proof. apply (Pocklington_refl (Pock_certif 33751 3 ((3, 3)::(2,1)::nil) 84) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33757 : prime 33757. Proof. apply (Pocklington_refl (Pock_certif 33757 2 ((29, 1)::(2,2)::nil) 58) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33767 : prime 33767. Proof. apply (Pocklington_refl (Pock_certif 33767 5 ((16883, 1)::(2,1)::nil) 1) ((Proof_certif 16883 prime16883) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33769 : prime 33769. Proof. apply (Pocklington_refl (Pock_certif 33769 11 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33773 : prime 33773. Proof. apply (Pocklington_refl (Pock_certif 33773 2 ((8443, 1)::(2,2)::nil) 1) ((Proof_certif 8443 prime8443) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33791 : prime 33791. Proof. apply (Pocklington_refl (Pock_certif 33791 7 ((31, 1)::(2,1)::nil) 48) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33797 : prime 33797. Proof. apply (Pocklington_refl (Pock_certif 33797 2 ((7, 1)::(2,2)::nil) 28) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33809 : prime 33809. Proof. apply (Pocklington_refl (Pock_certif 33809 3 ((2113, 1)::(2,4)::nil) 1) ((Proof_certif 2113 prime2113) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33811 : prime 33811. Proof. apply (Pocklington_refl (Pock_certif 33811 15 ((5, 1)::(3, 1)::(2,1)::nil) 45) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33827 : prime 33827. Proof. apply (Pocklington_refl (Pock_certif 33827 2 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33829 : prime 33829. Proof. apply (Pocklington_refl (Pock_certif 33829 2 ((2819, 1)::(2,2)::nil) 1) ((Proof_certif 2819 prime2819) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33851 : prime 33851. Proof. apply (Pocklington_refl (Pock_certif 33851 2 ((5, 2)::(2,1)::nil) 76) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33857 : prime 33857. Proof. apply (Pocklington_refl (Pock_certif 33857 3 ((2,6)::nil) 16) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33863 : prime 33863. Proof. apply (Pocklington_refl (Pock_certif 33863 5 ((16931, 1)::(2,1)::nil) 1) ((Proof_certif 16931 prime16931) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33871 : prime 33871. Proof. apply (Pocklington_refl (Pock_certif 33871 15 ((5, 1)::(3, 1)::(2,1)::nil) 47) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33889 : prime 33889. Proof. apply (Pocklington_refl (Pock_certif 33889 13 ((2,5)::nil) 33) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33893 : prime 33893. Proof. apply (Pocklington_refl (Pock_certif 33893 2 ((37, 1)::(2,2)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33911 : prime 33911. Proof. apply (Pocklington_refl (Pock_certif 33911 11 ((3391, 1)::(2,1)::nil) 1) ((Proof_certif 3391 prime3391) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33923 : prime 33923. Proof. apply (Pocklington_refl (Pock_certif 33923 2 ((2423, 1)::(2,1)::nil) 1) ((Proof_certif 2423 prime2423) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33931 : prime 33931. Proof. apply (Pocklington_refl (Pock_certif 33931 2 ((5, 1)::(3, 1)::(2,1)::nil) 49) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33937 : prime 33937. Proof. apply (Pocklington_refl (Pock_certif 33937 5 ((3, 1)::(2,4)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33941 : prime 33941. Proof. apply (Pocklington_refl (Pock_certif 33941 2 ((1697, 1)::(2,2)::nil) 1) ((Proof_certif 1697 prime1697) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33961 : prime 33961. Proof. apply (Pocklington_refl (Pock_certif 33961 13 ((3, 1)::(2,3)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33967 : prime 33967. Proof. apply (Pocklington_refl (Pock_certif 33967 3 ((3, 3)::(2,1)::nil) 88) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime33997 : prime 33997. Proof. apply (Pocklington_refl (Pock_certif 33997 2 ((2833, 1)::(2,2)::nil) 1) ((Proof_certif 2833 prime2833) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34019 : prime 34019. Proof. apply (Pocklington_refl (Pock_certif 34019 2 ((73, 1)::(2,1)::nil) 1) ((Proof_certif 73 prime73) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34031 : prime 34031. Proof. apply (Pocklington_refl (Pock_certif 34031 7 ((41, 1)::(2,1)::nil) 86) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34033 : prime 34033. Proof. apply (Pocklington_refl (Pock_certif 34033 7 ((3, 1)::(2,4)::nil) 36) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34039 : prime 34039. Proof. apply (Pocklington_refl (Pock_certif 34039 3 ((31, 1)::(2,1)::nil) 52) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34057 : prime 34057. Proof. apply (Pocklington_refl (Pock_certif 34057 5 ((3, 1)::(2,3)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34061 : prime 34061. Proof. apply (Pocklington_refl (Pock_certif 34061 2 ((13, 1)::(2,2)::nil) 30) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34123 : prime 34123. Proof. apply (Pocklington_refl (Pock_certif 34123 2 ((11, 1)::(3, 1)::(2,1)::nil) 120) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34127 : prime 34127. Proof. apply (Pocklington_refl (Pock_certif 34127 5 ((113, 1)::(2,1)::nil) 1) ((Proof_certif 113 prime113) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34129 : prime 34129. Proof. apply (Pocklington_refl (Pock_certif 34129 11 ((3, 1)::(2,4)::nil) 38) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34141 : prime 34141. Proof. apply (Pocklington_refl (Pock_certif 34141 2 ((5, 1)::(3, 1)::(2,2)::nil) 88) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34147 : prime 34147. Proof. apply (Pocklington_refl (Pock_certif 34147 3 ((7, 1)::(3, 1)::(2,1)::nil) 56) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34157 : prime 34157. Proof. apply (Pocklington_refl (Pock_certif 34157 2 ((8539, 1)::(2,2)::nil) 1) ((Proof_certif 8539 prime8539) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34159 : prime 34159. Proof. apply (Pocklington_refl (Pock_certif 34159 3 ((5693, 1)::(2,1)::nil) 1) ((Proof_certif 5693 prime5693) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34171 : prime 34171. Proof. apply (Pocklington_refl (Pock_certif 34171 2 ((5, 1)::(3, 1)::(2,1)::nil) 57) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34183 : prime 34183. Proof. apply (Pocklington_refl (Pock_certif 34183 3 ((3, 3)::(2,1)::nil) 92) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34211 : prime 34211. Proof. apply (Pocklington_refl (Pock_certif 34211 2 ((11, 1)::(5, 1)::(2,1)::nil) 90) ((Proof_certif 5 prime5) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34213 : prime 34213. Proof. apply (Pocklington_refl (Pock_certif 34213 2 ((2851, 1)::(2,2)::nil) 1) ((Proof_certif 2851 prime2851) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34217 : prime 34217. Proof. apply (Pocklington_refl (Pock_certif 34217 3 ((7, 1)::(2,3)::nil) 50) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34231 : prime 34231. Proof. apply (Pocklington_refl (Pock_certif 34231 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34253 : prime 34253. Proof. apply (Pocklington_refl (Pock_certif 34253 2 ((8563, 1)::(2,2)::nil) 1) ((Proof_certif 8563 prime8563) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34259 : prime 34259. Proof. apply (Pocklington_refl (Pock_certif 34259 2 ((2447, 1)::(2,1)::nil) 1) ((Proof_certif 2447 prime2447) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34261 : prime 34261. Proof. apply (Pocklington_refl (Pock_certif 34261 2 ((5, 1)::(3, 1)::(2,2)::nil) 90) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34267 : prime 34267. Proof. apply (Pocklington_refl (Pock_certif 34267 2 ((5711, 1)::(2,1)::nil) 1) ((Proof_certif 5711 prime5711) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34273 : prime 34273. Proof. apply (Pocklington_refl (Pock_certif 34273 5 ((2,5)::nil) 45) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34283 : prime 34283. Proof. apply (Pocklington_refl (Pock_certif 34283 2 ((61, 1)::(2,1)::nil) 36) ((Proof_certif 61 prime61) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34297 : prime 34297. Proof. apply (Pocklington_refl (Pock_certif 34297 5 ((3, 1)::(2,3)::nil) 33) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34301 : prime 34301. Proof. apply (Pocklington_refl (Pock_certif 34301 3 ((5, 2)::(2,2)::nil) 142) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34303 : prime 34303. Proof. apply (Pocklington_refl (Pock_certif 34303 3 ((5717, 1)::(2,1)::nil) 1) ((Proof_certif 5717 prime5717) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34313 : prime 34313. Proof. apply (Pocklington_refl (Pock_certif 34313 3 ((4289, 1)::(2,3)::nil) 1) ((Proof_certif 4289 prime4289) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34319 : prime 34319. Proof. apply (Pocklington_refl (Pock_certif 34319 19 ((17159, 1)::(2,1)::nil) 1) ((Proof_certif 17159 prime17159) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34327 : prime 34327. Proof. apply (Pocklington_refl (Pock_certif 34327 3 ((1907, 1)::(2,1)::nil) 1) ((Proof_certif 1907 prime1907) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34337 : prime 34337. Proof. apply (Pocklington_refl (Pock_certif 34337 3 ((2,5)::nil) 47) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34351 : prime 34351. Proof. apply (Pocklington_refl (Pock_certif 34351 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34361 : prime 34361. Proof. apply (Pocklington_refl (Pock_certif 34361 3 ((5, 1)::(2,3)::nil) 58) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34367 : prime 34367. Proof. apply (Pocklington_refl (Pock_certif 34367 5 ((17183, 1)::(2,1)::nil) 1) ((Proof_certif 17183 prime17183) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34369 : prime 34369. Proof. apply (Pocklington_refl (Pock_certif 34369 7 ((2,6)::nil) 24) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34381 : prime 34381. Proof. apply (Pocklington_refl (Pock_certif 34381 6 ((3, 2)::(2,2)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34403 : prime 34403. Proof. apply (Pocklington_refl (Pock_certif 34403 2 ((103, 1)::(2,1)::nil) 1) ((Proof_certif 103 prime103) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34421 : prime 34421. Proof. apply (Pocklington_refl (Pock_certif 34421 2 ((1721, 1)::(2,2)::nil) 1) ((Proof_certif 1721 prime1721) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34429 : prime 34429. Proof. apply (Pocklington_refl (Pock_certif 34429 2 ((19, 1)::(2,2)::nil) 148) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34439 : prime 34439. Proof. apply (Pocklington_refl (Pock_certif 34439 11 ((67, 1)::(2,1)::nil) 1) ((Proof_certif 67 prime67) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34457 : prime 34457. Proof. apply (Pocklington_refl (Pock_certif 34457 3 ((59, 1)::(2,3)::nil) 1) ((Proof_certif 59 prime59) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34469 : prime 34469. Proof. apply (Pocklington_refl (Pock_certif 34469 10 ((7, 1)::(2,2)::nil) 53) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34471 : prime 34471. Proof. apply (Pocklington_refl (Pock_certif 34471 6 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34483 : prime 34483. Proof. apply (Pocklington_refl (Pock_certif 34483 2 ((7, 1)::(3, 1)::(2,1)::nil) 64) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34487 : prime 34487. Proof. apply (Pocklington_refl (Pock_certif 34487 5 ((43, 1)::(2,1)::nil) 56) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34499 : prime 34499. Proof. apply (Pocklington_refl (Pock_certif 34499 2 ((47, 1)::(2,1)::nil) 178) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34501 : prime 34501. Proof. apply (Pocklington_refl (Pock_certif 34501 7 ((5, 1)::(3, 1)::(2,2)::nil) 94) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34511 : prime 34511. Proof. apply (Pocklington_refl (Pock_certif 34511 7 ((7, 1)::(5, 1)::(2,1)::nil) 72) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34513 : prime 34513. Proof. apply (Pocklington_refl (Pock_certif 34513 11 ((3, 1)::(2,4)::nil) 46) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34519 : prime 34519. Proof. apply (Pocklington_refl (Pock_certif 34519 3 ((11, 1)::(2,1)::nil) 23) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34537 : prime 34537. Proof. apply (Pocklington_refl (Pock_certif 34537 5 ((3, 1)::(2,3)::nil) 44) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34543 : prime 34543. Proof. apply (Pocklington_refl (Pock_certif 34543 5 ((19, 1)::(2,1)::nil) 72) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34549 : prime 34549. Proof. apply (Pocklington_refl (Pock_certif 34549 2 ((2879, 1)::(2,2)::nil) 1) ((Proof_certif 2879 prime2879) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34583 : prime 34583. Proof. apply (Pocklington_refl (Pock_certif 34583 5 ((17291, 1)::(2,1)::nil) 1) ((Proof_certif 17291 prime17291) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34589 : prime 34589. Proof. apply (Pocklington_refl (Pock_certif 34589 2 ((8647, 1)::(2,2)::nil) 1) ((Proof_certif 8647 prime8647) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34591 : prime 34591. Proof. apply (Pocklington_refl (Pock_certif 34591 3 ((5, 1)::(3, 1)::(2,1)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34603 : prime 34603. Proof. apply (Pocklington_refl (Pock_certif 34603 2 ((73, 1)::(2,1)::nil) 1) ((Proof_certif 73 prime73) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34607 : prime 34607. Proof. apply (Pocklington_refl (Pock_certif 34607 5 ((11, 1)::(2,1)::nil) 28) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34613 : prime 34613. Proof. apply (Pocklington_refl (Pock_certif 34613 2 ((17, 1)::(2,2)::nil) 100) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34631 : prime 34631. Proof. apply (Pocklington_refl (Pock_certif 34631 7 ((3463, 1)::(2,1)::nil) 1) ((Proof_certif 3463 prime3463) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34649 : prime 34649. Proof. apply (Pocklington_refl (Pock_certif 34649 3 ((61, 1)::(2,3)::nil) 1) ((Proof_certif 61 prime61) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34651 : prime 34651. Proof. apply (Pocklington_refl (Pock_certif 34651 2 ((5, 1)::(3, 1)::(2,1)::nil) 8) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34667 : prime 34667. Proof. apply (Pocklington_refl (Pock_certif 34667 2 ((17333, 1)::(2,1)::nil) 1) ((Proof_certif 17333 prime17333) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34673 : prime 34673. Proof. apply (Pocklington_refl (Pock_certif 34673 3 ((11, 1)::(2,4)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34679 : prime 34679. Proof. apply (Pocklington_refl (Pock_certif 34679 7 ((2477, 1)::(2,1)::nil) 1) ((Proof_certif 2477 prime2477) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34687 : prime 34687. Proof. apply (Pocklington_refl (Pock_certif 34687 3 ((41, 1)::(2,1)::nil) 94) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34693 : prime 34693. Proof. apply (Pocklington_refl (Pock_certif 34693 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34703 : prime 34703. Proof. apply (Pocklington_refl (Pock_certif 34703 5 ((17351, 1)::(2,1)::nil) 1) ((Proof_certif 17351 prime17351) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34721 : prime 34721. Proof. apply (Pocklington_refl (Pock_certif 34721 3 ((2,5)::nil) 59) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34729 : prime 34729. Proof. apply (Pocklington_refl (Pock_certif 34729 11 ((1447, 1)::(2,3)::nil) 1) ((Proof_certif 1447 prime1447) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34739 : prime 34739. Proof. apply (Pocklington_refl (Pock_certif 34739 6 ((11, 1)::(2,1)::nil) 35) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34747 : prime 34747. Proof. apply (Pocklington_refl (Pock_certif 34747 2 ((5791, 1)::(2,1)::nil) 1) ((Proof_certif 5791 prime5791) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34757 : prime 34757. Proof. apply (Pocklington_refl (Pock_certif 34757 2 ((8689, 1)::(2,2)::nil) 1) ((Proof_certif 8689 prime8689) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34759 : prime 34759. Proof. apply (Pocklington_refl (Pock_certif 34759 3 ((1931, 1)::(2,1)::nil) 1) ((Proof_certif 1931 prime1931) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34763 : prime 34763. Proof. apply (Pocklington_refl (Pock_certif 34763 2 ((13, 1)::(2,1)::nil) 34) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34781 : prime 34781. Proof. apply (Pocklington_refl (Pock_certif 34781 2 ((37, 1)::(2,2)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34807 : prime 34807. Proof. apply (Pocklington_refl (Pock_certif 34807 3 ((5801, 1)::(2,1)::nil) 1) ((Proof_certif 5801 prime5801) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34819 : prime 34819. Proof. apply (Pocklington_refl (Pock_certif 34819 2 ((7, 1)::(3, 1)::(2,1)::nil) 72) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34841 : prime 34841. Proof. apply (Pocklington_refl (Pock_certif 34841 3 ((5, 1)::(2,3)::nil) 70) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34843 : prime 34843. Proof. apply (Pocklington_refl (Pock_certif 34843 2 ((5807, 1)::(2,1)::nil) 1) ((Proof_certif 5807 prime5807) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34847 : prime 34847. Proof. apply (Pocklington_refl (Pock_certif 34847 5 ((19, 1)::(2,1)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34849 : prime 34849. Proof. apply (Pocklington_refl (Pock_certif 34849 7 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34871 : prime 34871. Proof. apply (Pocklington_refl (Pock_certif 34871 7 ((11, 1)::(5, 1)::(2,1)::nil) 96) ((Proof_certif 5 prime5) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34877 : prime 34877. Proof. apply (Pocklington_refl (Pock_certif 34877 2 ((8719, 1)::(2,2)::nil) 1) ((Proof_certif 8719 prime8719) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34883 : prime 34883. Proof. apply (Pocklington_refl (Pock_certif 34883 2 ((107, 1)::(2,1)::nil) 1) ((Proof_certif 107 prime107) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34897 : prime 34897. Proof. apply (Pocklington_refl (Pock_certif 34897 5 ((3, 1)::(2,4)::nil) 54) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34913 : prime 34913. Proof. apply (Pocklington_refl (Pock_certif 34913 3 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34919 : prime 34919. Proof. apply (Pocklington_refl (Pock_certif 34919 19 ((13, 1)::(2,1)::nil) 40) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34939 : prime 34939. Proof. apply (Pocklington_refl (Pock_certif 34939 2 ((3, 3)::(2,1)::nil) 106) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34949 : prime 34949. Proof. apply (Pocklington_refl (Pock_certif 34949 2 ((8737, 1)::(2,2)::nil) 1) ((Proof_certif 8737 prime8737) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34961 : prime 34961. Proof. apply (Pocklington_refl (Pock_certif 34961 3 ((5, 1)::(2,4)::nil) 116) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34963 : prime 34963. Proof. apply (Pocklington_refl (Pock_certif 34963 2 ((5827, 1)::(2,1)::nil) 1) ((Proof_certif 5827 prime5827) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime34981 : prime 34981. Proof. apply (Pocklington_refl (Pock_certif 34981 2 ((5, 1)::(3, 1)::(2,2)::nil) 102) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35023 : prime 35023. Proof. apply (Pocklington_refl (Pock_certif 35023 3 ((13, 1)::(2,1)::nil) 44) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35027 : prime 35027. Proof. apply (Pocklington_refl (Pock_certif 35027 2 ((83, 1)::(2,1)::nil) 1) ((Proof_certif 83 prime83) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35051 : prime 35051. Proof. apply (Pocklington_refl (Pock_certif 35051 2 ((5, 2)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35053 : prime 35053. Proof. apply (Pocklington_refl (Pock_certif 35053 2 ((23, 1)::(2,2)::nil) 12) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35059 : prime 35059. Proof. apply (Pocklington_refl (Pock_certif 35059 2 ((5843, 1)::(2,1)::nil) 1) ((Proof_certif 5843 prime5843) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35069 : prime 35069. Proof. apply (Pocklington_refl (Pock_certif 35069 2 ((11, 1)::(2,2)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35081 : prime 35081. Proof. apply (Pocklington_refl (Pock_certif 35081 3 ((5, 1)::(2,3)::nil) 76) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35083 : prime 35083. Proof. apply (Pocklington_refl (Pock_certif 35083 2 ((1949, 1)::(2,1)::nil) 1) ((Proof_certif 1949 prime1949) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35089 : prime 35089. Proof. apply (Pocklington_refl (Pock_certif 35089 11 ((3, 1)::(2,4)::nil) 58) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35099 : prime 35099. Proof. apply (Pocklington_refl (Pock_certif 35099 2 ((23, 1)::(2,1)::nil) 25) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35107 : prime 35107. Proof. apply (Pocklington_refl (Pock_certif 35107 2 ((5851, 1)::(2,1)::nil) 1) ((Proof_certif 5851 prime5851) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35111 : prime 35111. Proof. apply (Pocklington_refl (Pock_certif 35111 13 ((3511, 1)::(2,1)::nil) 1) ((Proof_certif 3511 prime3511) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35117 : prime 35117. Proof. apply (Pocklington_refl (Pock_certif 35117 2 ((8779, 1)::(2,2)::nil) 1) ((Proof_certif 8779 prime8779) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35129 : prime 35129. Proof. apply (Pocklington_refl (Pock_certif 35129 3 ((4391, 1)::(2,3)::nil) 1) ((Proof_certif 4391 prime4391) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35141 : prime 35141. Proof. apply (Pocklington_refl (Pock_certif 35141 2 ((7, 1)::(2,2)::nil) 18) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35149 : prime 35149. Proof. apply (Pocklington_refl (Pock_certif 35149 2 ((29, 1)::(2,2)::nil) 70) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35153 : prime 35153. Proof. apply (Pocklington_refl (Pock_certif 35153 3 ((13, 1)::(2,4)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35159 : prime 35159. Proof. apply (Pocklington_refl (Pock_certif 35159 11 ((17579, 1)::(2,1)::nil) 1) ((Proof_certif 17579 prime17579) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35171 : prime 35171. Proof. apply (Pocklington_refl (Pock_certif 35171 2 ((3517, 1)::(2,1)::nil) 1) ((Proof_certif 3517 prime3517) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35201 : prime 35201. Proof. apply (Pocklington_refl (Pock_certif 35201 3 ((2,7)::nil) 18) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35221 : prime 35221. Proof. apply (Pocklington_refl (Pock_certif 35221 6 ((5, 1)::(3, 1)::(2,2)::nil) 106) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35227 : prime 35227. Proof. apply (Pocklington_refl (Pock_certif 35227 2 ((19, 1)::(2,1)::nil) 11) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35251 : prime 35251. Proof. apply (Pocklington_refl (Pock_certif 35251 3 ((5, 1)::(3, 1)::(2,1)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35257 : prime 35257. Proof. apply (Pocklington_refl (Pock_certif 35257 7 ((3, 1)::(2,3)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35267 : prime 35267. Proof. apply (Pocklington_refl (Pock_certif 35267 2 ((11, 1)::(7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35279 : prime 35279. Proof. apply (Pocklington_refl (Pock_certif 35279 29 ((31, 1)::(2,1)::nil) 72) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35281 : prime 35281. Proof. apply (Pocklington_refl (Pock_certif 35281 23 ((3, 1)::(2,4)::nil) 62) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35291 : prime 35291. Proof. apply (Pocklington_refl (Pock_certif 35291 2 ((3529, 1)::(2,1)::nil) 1) ((Proof_certif 3529 prime3529) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35311 : prime 35311. Proof. apply (Pocklington_refl (Pock_certif 35311 11 ((5, 1)::(3, 1)::(2,1)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35317 : prime 35317. Proof. apply (Pocklington_refl (Pock_certif 35317 5 ((3, 2)::(2,2)::nil) 43) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35323 : prime 35323. Proof. apply (Pocklington_refl (Pock_certif 35323 3 ((7, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35327 : prime 35327. Proof. apply (Pocklington_refl (Pock_certif 35327 5 ((17, 1)::(2,1)::nil) 15) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35339 : prime 35339. Proof. apply (Pocklington_refl (Pock_certif 35339 2 ((17669, 1)::(2,1)::nil) 1) ((Proof_certif 17669 prime17669) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35353 : prime 35353. Proof. apply (Pocklington_refl (Pock_certif 35353 5 ((3, 1)::(2,3)::nil) 29) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35363 : prime 35363. Proof. apply (Pocklington_refl (Pock_certif 35363 2 ((17681, 1)::(2,1)::nil) 1) ((Proof_certif 17681 prime17681) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35381 : prime 35381. Proof. apply (Pocklington_refl (Pock_certif 35381 2 ((29, 1)::(2,2)::nil) 72) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35393 : prime 35393. Proof. apply (Pocklington_refl (Pock_certif 35393 3 ((2,6)::nil) 40) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35401 : prime 35401. Proof. apply (Pocklington_refl (Pock_certif 35401 13 ((3, 1)::(2,3)::nil) 31) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35407 : prime 35407. Proof. apply (Pocklington_refl (Pock_certif 35407 6 ((7, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35419 : prime 35419. Proof. apply (Pocklington_refl (Pock_certif 35419 2 ((5903, 1)::(2,1)::nil) 1) ((Proof_certif 5903 prime5903) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35423 : prime 35423. Proof. apply (Pocklington_refl (Pock_certif 35423 5 ((89, 1)::(2,1)::nil) 1) ((Proof_certif 89 prime89) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35437 : prime 35437. Proof. apply (Pocklington_refl (Pock_certif 35437 2 ((2953, 1)::(2,2)::nil) 1) ((Proof_certif 2953 prime2953) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35447 : prime 35447. Proof. apply (Pocklington_refl (Pock_certif 35447 5 ((37, 1)::(2,1)::nil) 34) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35449 : prime 35449. Proof. apply (Pocklington_refl (Pock_certif 35449 13 ((3, 1)::(2,3)::nil) 33) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35461 : prime 35461. Proof. apply (Pocklington_refl (Pock_certif 35461 6 ((3, 2)::(2,2)::nil) 47) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35491 : prime 35491. Proof. apply (Pocklington_refl (Pock_certif 35491 2 ((5, 1)::(3, 1)::(2,1)::nil) 41) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35507 : prime 35507. Proof. apply (Pocklington_refl (Pock_certif 35507 2 ((41, 1)::(2,1)::nil) 104) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35509 : prime 35509. Proof. apply (Pocklington_refl (Pock_certif 35509 2 ((11, 1)::(2,2)::nil) 12) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35521 : prime 35521. Proof. apply (Pocklington_refl (Pock_certif 35521 7 ((2,6)::nil) 42) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35527 : prime 35527. Proof. apply (Pocklington_refl (Pock_certif 35527 3 ((31, 1)::(2,1)::nil) 76) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35531 : prime 35531. Proof. apply (Pocklington_refl (Pock_certif 35531 2 ((11, 1)::(2,1)::nil) 25) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35533 : prime 35533. Proof. apply (Pocklington_refl (Pock_certif 35533 2 ((3, 2)::(2,2)::nil) 49) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35537 : prime 35537. Proof. apply (Pocklington_refl (Pock_certif 35537 3 ((2221, 1)::(2,4)::nil) 1) ((Proof_certif 2221 prime2221) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35543 : prime 35543. Proof. apply (Pocklington_refl (Pock_certif 35543 5 ((13, 1)::(2,1)::nil) 4) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35569 : prime 35569. Proof. apply (Pocklington_refl (Pock_certif 35569 11 ((3, 1)::(2,4)::nil) 68) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35573 : prime 35573. Proof. apply (Pocklington_refl (Pock_certif 35573 2 ((8893, 1)::(2,2)::nil) 1) ((Proof_certif 8893 prime8893) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35591 : prime 35591. Proof. apply (Pocklington_refl (Pock_certif 35591 17 ((3559, 1)::(2,1)::nil) 1) ((Proof_certif 3559 prime3559) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35593 : prime 35593. Proof. apply (Pocklington_refl (Pock_certif 35593 5 ((3, 1)::(2,3)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35597 : prime 35597. Proof. apply (Pocklington_refl (Pock_certif 35597 2 ((11, 1)::(2,2)::nil) 14) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35603 : prime 35603. Proof. apply (Pocklington_refl (Pock_certif 35603 2 ((2543, 1)::(2,1)::nil) 1) ((Proof_certif 2543 prime2543) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35617 : prime 35617. Proof. apply (Pocklington_refl (Pock_certif 35617 5 ((2,5)::nil) 22) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35671 : prime 35671. Proof. apply (Pocklington_refl (Pock_certif 35671 3 ((5, 1)::(3, 1)::(2,1)::nil) 47) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35677 : prime 35677. Proof. apply (Pocklington_refl (Pock_certif 35677 2 ((3, 2)::(2,2)::nil) 54) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35729 : prime 35729. Proof. apply (Pocklington_refl (Pock_certif 35729 3 ((7, 1)::(2,4)::nil) 94) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35731 : prime 35731. Proof. apply (Pocklington_refl (Pock_certif 35731 2 ((5, 1)::(3, 1)::(2,1)::nil) 49) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35747 : prime 35747. Proof. apply (Pocklington_refl (Pock_certif 35747 2 ((61, 1)::(2,1)::nil) 48) ((Proof_certif 61 prime61) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35753 : prime 35753. Proof. apply (Pocklington_refl (Pock_certif 35753 3 ((41, 1)::(2,3)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35759 : prime 35759. Proof. apply (Pocklington_refl (Pock_certif 35759 11 ((19, 1)::(2,1)::nil) 27) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35771 : prime 35771. Proof. apply (Pocklington_refl (Pock_certif 35771 6 ((7, 1)::(5, 1)::(2,1)::nil) 90) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35797 : prime 35797. Proof. apply (Pocklington_refl (Pock_certif 35797 2 ((19, 1)::(2,2)::nil) 14) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35801 : prime 35801. Proof. apply (Pocklington_refl (Pock_certif 35801 3 ((5, 1)::(2,3)::nil) 11) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35803 : prime 35803. Proof. apply (Pocklington_refl (Pock_certif 35803 14 ((3, 3)::(2,1)::nil) 13) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35809 : prime 35809. Proof. apply (Pocklington_refl (Pock_certif 35809 13 ((2,5)::nil) 28) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35831 : prime 35831. Proof. apply (Pocklington_refl (Pock_certif 35831 11 ((3583, 1)::(2,1)::nil) 1) ((Proof_certif 3583 prime3583) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35837 : prime 35837. Proof. apply (Pocklington_refl (Pock_certif 35837 2 ((17, 1)::(2,2)::nil) 118) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35839 : prime 35839. Proof. apply (Pocklington_refl (Pock_certif 35839 6 ((11, 1)::(3, 1)::(2,1)::nil) 13) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35851 : prime 35851. Proof. apply (Pocklington_refl (Pock_certif 35851 2 ((5, 1)::(3, 1)::(2,1)::nil) 53) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35863 : prime 35863. Proof. apply (Pocklington_refl (Pock_certif 35863 3 ((43, 1)::(2,1)::nil) 72) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35869 : prime 35869. Proof. apply (Pocklington_refl (Pock_certif 35869 2 ((7, 1)::(2,2)::nil) 47) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35879 : prime 35879. Proof. apply (Pocklington_refl (Pock_certif 35879 7 ((17939, 1)::(2,1)::nil) 1) ((Proof_certif 17939 prime17939) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35897 : prime 35897. Proof. apply (Pocklington_refl (Pock_certif 35897 3 ((7, 1)::(2,3)::nil) 80) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35899 : prime 35899. Proof. apply (Pocklington_refl (Pock_certif 35899 2 ((31, 1)::(2,1)::nil) 82) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35911 : prime 35911. Proof. apply (Pocklington_refl (Pock_certif 35911 6 ((3, 3)::(2,1)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35923 : prime 35923. Proof. apply (Pocklington_refl (Pock_certif 35923 2 ((5987, 1)::(2,1)::nil) 1) ((Proof_certif 5987 prime5987) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35933 : prime 35933. Proof. apply (Pocklington_refl (Pock_certif 35933 2 ((13, 1)::(2,2)::nil) 66) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35951 : prime 35951. Proof. apply (Pocklington_refl (Pock_certif 35951 11 ((5, 2)::(2,1)::nil) 17) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35963 : prime 35963. Proof. apply (Pocklington_refl (Pock_certif 35963 2 ((17981, 1)::(2,1)::nil) 1) ((Proof_certif 17981 prime17981) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35969 : prime 35969. Proof. apply (Pocklington_refl (Pock_certif 35969 3 ((2,7)::nil) 24) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35977 : prime 35977. Proof. apply (Pocklington_refl (Pock_certif 35977 5 ((1499, 1)::(2,3)::nil) 1) ((Proof_certif 1499 prime1499) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35983 : prime 35983. Proof. apply (Pocklington_refl (Pock_certif 35983 3 ((1999, 1)::(2,1)::nil) 1) ((Proof_certif 1999 prime1999) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35993 : prime 35993. Proof. apply (Pocklington_refl (Pock_certif 35993 3 ((11, 1)::(2,3)::nil) 56) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime35999 : prime 35999. Proof. apply (Pocklington_refl (Pock_certif 35999 13 ((41, 1)::(2,1)::nil) 110) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36007 : prime 36007. Proof. apply (Pocklington_refl (Pock_certif 36007 3 ((17, 1)::(2,1)::nil) 37) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36011 : prime 36011. Proof. apply (Pocklington_refl (Pock_certif 36011 2 ((13, 1)::(2,1)::nil) 29) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36013 : prime 36013. Proof. apply (Pocklington_refl (Pock_certif 36013 2 ((3001, 1)::(2,2)::nil) 1) ((Proof_certif 3001 prime3001) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36017 : prime 36017. Proof. apply (Pocklington_refl (Pock_certif 36017 3 ((2251, 1)::(2,4)::nil) 1) ((Proof_certif 2251 prime2251) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36037 : prime 36037. Proof. apply (Pocklington_refl (Pock_certif 36037 2 ((3, 2)::(2,2)::nil) 64) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36061 : prime 36061. Proof. apply (Pocklington_refl (Pock_certif 36061 2 ((5, 1)::(3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36067 : prime 36067. Proof. apply (Pocklington_refl (Pock_certif 36067 2 ((6011, 1)::(2,1)::nil) 1) ((Proof_certif 6011 prime6011) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36073 : prime 36073. Proof. apply (Pocklington_refl (Pock_certif 36073 5 ((3, 1)::(2,3)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36083 : prime 36083. Proof. apply (Pocklington_refl (Pock_certif 36083 2 ((18041, 1)::(2,1)::nil) 1) ((Proof_certif 18041 prime18041) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36097 : prime 36097. Proof. apply (Pocklington_refl (Pock_certif 36097 5 ((2,8)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36107 : prime 36107. Proof. apply (Pocklington_refl (Pock_certif 36107 2 ((2579, 1)::(2,1)::nil) 1) ((Proof_certif 2579 prime2579) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36109 : prime 36109. Proof. apply (Pocklington_refl (Pock_certif 36109 2 ((3, 2)::(2,2)::nil) 66) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36131 : prime 36131. Proof. apply (Pocklington_refl (Pock_certif 36131 2 ((3613, 1)::(2,1)::nil) 1) ((Proof_certif 3613 prime3613) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36137 : prime 36137. Proof. apply (Pocklington_refl (Pock_certif 36137 3 ((4517, 1)::(2,3)::nil) 1) ((Proof_certif 4517 prime4517) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36151 : prime 36151. Proof. apply (Pocklington_refl (Pock_certif 36151 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36161 : prime 36161. Proof. apply (Pocklington_refl (Pock_certif 36161 3 ((2,6)::nil) 52) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36187 : prime 36187. Proof. apply (Pocklington_refl (Pock_certif 36187 2 ((37, 1)::(2,1)::nil) 44) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36191 : prime 36191. Proof. apply (Pocklington_refl (Pock_certif 36191 7 ((7, 1)::(5, 1)::(2,1)::nil) 96) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36209 : prime 36209. Proof. apply (Pocklington_refl (Pock_certif 36209 3 ((31, 1)::(2,4)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36217 : prime 36217. Proof. apply (Pocklington_refl (Pock_certif 36217 19 ((3, 1)::(2,3)::nil) 13) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36229 : prime 36229. Proof. apply (Pocklington_refl (Pock_certif 36229 2 ((3019, 1)::(2,2)::nil) 1) ((Proof_certif 3019 prime3019) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36241 : prime 36241. Proof. apply (Pocklington_refl (Pock_certif 36241 19 ((3, 1)::(2,4)::nil) 82) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36251 : prime 36251. Proof. apply (Pocklington_refl (Pock_certif 36251 2 ((5, 2)::(2,1)::nil) 23) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36263 : prime 36263. Proof. apply (Pocklington_refl (Pock_certif 36263 5 ((18131, 1)::(2,1)::nil) 1) ((Proof_certif 18131 prime18131) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36269 : prime 36269. Proof. apply (Pocklington_refl (Pock_certif 36269 2 ((9067, 1)::(2,2)::nil) 1) ((Proof_certif 9067 prime9067) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36277 : prime 36277. Proof. apply (Pocklington_refl (Pock_certif 36277 2 ((3023, 1)::(2,2)::nil) 1) ((Proof_certif 3023 prime3023) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36293 : prime 36293. Proof. apply (Pocklington_refl (Pock_certif 36293 2 ((43, 1)::(2,2)::nil) 1) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36299 : prime 36299. Proof. apply (Pocklington_refl (Pock_certif 36299 2 ((18149, 1)::(2,1)::nil) 1) ((Proof_certif 18149 prime18149) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36307 : prime 36307. Proof. apply (Pocklington_refl (Pock_certif 36307 2 ((2017, 1)::(2,1)::nil) 1) ((Proof_certif 2017 prime2017) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36313 : prime 36313. Proof. apply (Pocklington_refl (Pock_certif 36313 5 ((3, 1)::(2,3)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36319 : prime 36319. Proof. apply (Pocklington_refl (Pock_certif 36319 3 ((6053, 1)::(2,1)::nil) 1) ((Proof_certif 6053 prime6053) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36341 : prime 36341. Proof. apply (Pocklington_refl (Pock_certif 36341 2 ((23, 1)::(2,2)::nil) 26) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36343 : prime 36343. Proof. apply (Pocklington_refl (Pock_certif 36343 13 ((3, 3)::(2,1)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36353 : prime 36353. Proof. apply (Pocklington_refl (Pock_certif 36353 3 ((2,9)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36373 : prime 36373. Proof. apply (Pocklington_refl (Pock_certif 36373 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36383 : prime 36383. Proof. apply (Pocklington_refl (Pock_certif 36383 5 ((18191, 1)::(2,1)::nil) 1) ((Proof_certif 18191 prime18191) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36389 : prime 36389. Proof. apply (Pocklington_refl (Pock_certif 36389 3 ((11, 1)::(2,2)::nil) 33) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36433 : prime 36433. Proof. apply (Pocklington_refl (Pock_certif 36433 5 ((3, 1)::(2,4)::nil) 86) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36451 : prime 36451. Proof. apply (Pocklington_refl (Pock_certif 36451 2 ((3, 3)::(2,1)::nil) 26) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36457 : prime 36457. Proof. apply (Pocklington_refl (Pock_certif 36457 5 ((3, 1)::(2,3)::nil) 26) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36467 : prime 36467. Proof. apply (Pocklington_refl (Pock_certif 36467 2 ((18233, 1)::(2,1)::nil) 1) ((Proof_certif 18233 prime18233) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36469 : prime 36469. Proof. apply (Pocklington_refl (Pock_certif 36469 2 ((3, 2)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36473 : prime 36473. Proof. apply (Pocklington_refl (Pock_certif 36473 3 ((47, 1)::(2,3)::nil) 1) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36479 : prime 36479. Proof. apply (Pocklington_refl (Pock_certif 36479 7 ((13, 1)::(2,1)::nil) 48) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36493 : prime 36493. Proof. apply (Pocklington_refl (Pock_certif 36493 2 ((3041, 1)::(2,2)::nil) 1) ((Proof_certif 3041 prime3041) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36497 : prime 36497. Proof. apply (Pocklington_refl (Pock_certif 36497 3 ((2281, 1)::(2,4)::nil) 1) ((Proof_certif 2281 prime2281) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36523 : prime 36523. Proof. apply (Pocklington_refl (Pock_certif 36523 2 ((2029, 1)::(2,1)::nil) 1) ((Proof_certif 2029 prime2029) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36527 : prime 36527. Proof. apply (Pocklington_refl (Pock_certif 36527 5 ((2609, 1)::(2,1)::nil) 1) ((Proof_certif 2609 prime2609) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36529 : prime 36529. Proof. apply (Pocklington_refl (Pock_certif 36529 7 ((3, 1)::(2,4)::nil) 88) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36541 : prime 36541. Proof. apply (Pocklington_refl (Pock_certif 36541 6 ((3, 2)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36551 : prime 36551. Proof. apply (Pocklington_refl (Pock_certif 36551 7 ((5, 2)::(2,1)::nil) 30) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36559 : prime 36559. Proof. apply (Pocklington_refl (Pock_certif 36559 6 ((3, 3)::(2,1)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36563 : prime 36563. Proof. apply (Pocklington_refl (Pock_certif 36563 2 ((101, 1)::(2,1)::nil) 1) ((Proof_certif 101 prime101) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36571 : prime 36571. Proof. apply (Pocklington_refl (Pock_certif 36571 2 ((5, 1)::(3, 1)::(2,1)::nil) 14) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36583 : prime 36583. Proof. apply (Pocklington_refl (Pock_certif 36583 7 ((7, 1)::(3, 1)::(2,1)::nil) 29) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36587 : prime 36587. Proof. apply (Pocklington_refl (Pock_certif 36587 2 ((11, 1)::(2,1)::nil) 30) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36599 : prime 36599. Proof. apply (Pocklington_refl (Pock_certif 36599 19 ((29, 1)::(2,1)::nil) 50) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36607 : prime 36607. Proof. apply (Pocklington_refl (Pock_certif 36607 3 ((6101, 1)::(2,1)::nil) 1) ((Proof_certif 6101 prime6101) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36629 : prime 36629. Proof. apply (Pocklington_refl (Pock_certif 36629 2 ((9157, 1)::(2,2)::nil) 1) ((Proof_certif 9157 prime9157) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36637 : prime 36637. Proof. apply (Pocklington_refl (Pock_certif 36637 2 ((43, 1)::(2,2)::nil) 1) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36643 : prime 36643. Proof. apply (Pocklington_refl (Pock_certif 36643 2 ((31, 1)::(2,1)::nil) 94) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36653 : prime 36653. Proof. apply (Pocklington_refl (Pock_certif 36653 2 ((7, 1)::(2,2)::nil) 16) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36671 : prime 36671. Proof. apply (Pocklington_refl (Pock_certif 36671 13 ((19, 1)::(2,1)::nil) 52) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36677 : prime 36677. Proof. apply (Pocklington_refl (Pock_certif 36677 2 ((53, 1)::(2,2)::nil) 1) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36683 : prime 36683. Proof. apply (Pocklington_refl (Pock_certif 36683 2 ((18341, 1)::(2,1)::nil) 1) ((Proof_certif 18341 prime18341) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36691 : prime 36691. Proof. apply (Pocklington_refl (Pock_certif 36691 2 ((5, 1)::(3, 1)::(2,1)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36697 : prime 36697. Proof. apply (Pocklington_refl (Pock_certif 36697 5 ((3, 1)::(2,3)::nil) 37) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36709 : prime 36709. Proof. apply (Pocklington_refl (Pock_certif 36709 2 ((7, 1)::(2,2)::nil) 18) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36713 : prime 36713. Proof. apply (Pocklington_refl (Pock_certif 36713 3 ((13, 1)::(2,3)::nil) 144) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36721 : prime 36721. Proof. apply (Pocklington_refl (Pock_certif 36721 21 ((3, 1)::(2,4)::nil) 92) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36739 : prime 36739. Proof. apply (Pocklington_refl (Pock_certif 36739 2 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36749 : prime 36749. Proof. apply (Pocklington_refl (Pock_certif 36749 2 ((9187, 1)::(2,2)::nil) 1) ((Proof_certif 9187 prime9187) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36761 : prime 36761. Proof. apply (Pocklington_refl (Pock_certif 36761 6 ((5, 1)::(2,3)::nil) 37) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36767 : prime 36767. Proof. apply (Pocklington_refl (Pock_certif 36767 5 ((31, 1)::(2,1)::nil) 96) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36779 : prime 36779. Proof. apply (Pocklington_refl (Pock_certif 36779 2 ((37, 1)::(2,1)::nil) 52) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36781 : prime 36781. Proof. apply (Pocklington_refl (Pock_certif 36781 2 ((5, 1)::(3, 1)::(2,2)::nil) 11) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36787 : prime 36787. Proof. apply (Pocklington_refl (Pock_certif 36787 2 ((6131, 1)::(2,1)::nil) 1) ((Proof_certif 6131 prime6131) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36791 : prime 36791. Proof. apply (Pocklington_refl (Pock_certif 36791 17 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36793 : prime 36793. Proof. apply (Pocklington_refl (Pock_certif 36793 15 ((3, 1)::(2,3)::nil) 42) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36809 : prime 36809. Proof. apply (Pocklington_refl (Pock_certif 36809 3 ((43, 1)::(2,3)::nil) 1) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36821 : prime 36821. Proof. apply (Pocklington_refl (Pock_certif 36821 2 ((7, 1)::(2,2)::nil) 23) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36833 : prime 36833. Proof. apply (Pocklington_refl (Pock_certif 36833 3 ((2,5)::nil) 61) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36847 : prime 36847. Proof. apply (Pocklington_refl (Pock_certif 36847 3 ((23, 1)::(2,1)::nil) 64) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36857 : prime 36857. Proof. apply (Pocklington_refl (Pock_certif 36857 3 ((17, 1)::(2,3)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36871 : prime 36871. Proof. apply (Pocklington_refl (Pock_certif 36871 15 ((5, 1)::(3, 1)::(2,1)::nil) 26) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36877 : prime 36877. Proof. apply (Pocklington_refl (Pock_certif 36877 2 ((7, 1)::(2,2)::nil) 25) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36887 : prime 36887. Proof. apply (Pocklington_refl (Pock_certif 36887 5 ((18443, 1)::(2,1)::nil) 1) ((Proof_certif 18443 prime18443) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36899 : prime 36899. Proof. apply (Pocklington_refl (Pock_certif 36899 2 ((19, 1)::(2,1)::nil) 58) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36901 : prime 36901. Proof. apply (Pocklington_refl (Pock_certif 36901 2 ((3, 2)::(2,2)::nil) 13) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36913 : prime 36913. Proof. apply (Pocklington_refl (Pock_certif 36913 5 ((3, 1)::(2,4)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36919 : prime 36919. Proof. apply (Pocklington_refl (Pock_certif 36919 3 ((7, 1)::(3, 1)::(2,1)::nil) 37) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36923 : prime 36923. Proof. apply (Pocklington_refl (Pock_certif 36923 2 ((18461, 1)::(2,1)::nil) 1) ((Proof_certif 18461 prime18461) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36929 : prime 36929. Proof. apply (Pocklington_refl (Pock_certif 36929 3 ((2,6)::nil) 64) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36931 : prime 36931. Proof. apply (Pocklington_refl (Pock_certif 36931 2 ((5, 1)::(3, 1)::(2,1)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36943 : prime 36943. Proof. apply (Pocklington_refl (Pock_certif 36943 3 ((47, 1)::(2,1)::nil) 16) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36947 : prime 36947. Proof. apply (Pocklington_refl (Pock_certif 36947 2 ((7, 2)::(2,1)::nil) 180) ((Proof_certif 7 prime7) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36973 : prime 36973. Proof. apply (Pocklington_refl (Pock_certif 36973 2 ((3, 2)::(2,2)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36979 : prime 36979. Proof. apply (Pocklington_refl (Pock_certif 36979 2 ((6163, 1)::(2,1)::nil) 1) ((Proof_certif 6163 prime6163) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime36997 : prime 36997. Proof. apply (Pocklington_refl (Pock_certif 36997 2 ((3083, 1)::(2,2)::nil) 1) ((Proof_certif 3083 prime3083) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37003 : prime 37003. Proof. apply (Pocklington_refl (Pock_certif 37003 2 ((7, 1)::(3, 1)::(2,1)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37013 : prime 37013. Proof. apply (Pocklington_refl (Pock_certif 37013 2 ((19, 1)::(2,2)::nil) 30) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37019 : prime 37019. Proof. apply (Pocklington_refl (Pock_certif 37019 2 ((83, 1)::(2,1)::nil) 1) ((Proof_certif 83 prime83) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37021 : prime 37021. Proof. apply (Pocklington_refl (Pock_certif 37021 6 ((5, 1)::(3, 1)::(2,2)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37039 : prime 37039. Proof. apply (Pocklington_refl (Pock_certif 37039 3 ((6173, 1)::(2,1)::nil) 1) ((Proof_certif 6173 prime6173) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37049 : prime 37049. Proof. apply (Pocklington_refl (Pock_certif 37049 6 ((11, 1)::(2,3)::nil) 68) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37057 : prime 37057. Proof. apply (Pocklington_refl (Pock_certif 37057 5 ((2,6)::nil) 66) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37061 : prime 37061. Proof. apply (Pocklington_refl (Pock_certif 37061 2 ((17, 1)::(2,2)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37087 : prime 37087. Proof. apply (Pocklington_refl (Pock_certif 37087 3 ((7, 1)::(3, 1)::(2,1)::nil) 42) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37097 : prime 37097. Proof. apply (Pocklington_refl (Pock_certif 37097 3 ((4637, 1)::(2,3)::nil) 1) ((Proof_certif 4637 prime4637) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37117 : prime 37117. Proof. apply (Pocklington_refl (Pock_certif 37117 2 ((3, 2)::(2,2)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37123 : prime 37123. Proof. apply (Pocklington_refl (Pock_certif 37123 2 ((23, 1)::(2,1)::nil) 70) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37139 : prime 37139. Proof. apply (Pocklington_refl (Pock_certif 37139 2 ((31, 1)::(2,1)::nil) 102) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37159 : prime 37159. Proof. apply (Pocklington_refl (Pock_certif 37159 3 ((11, 1)::(3, 1)::(2,1)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37171 : prime 37171. Proof. apply (Pocklington_refl (Pock_certif 37171 3 ((5, 1)::(3, 1)::(2,1)::nil) 36) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37181 : prime 37181. Proof. apply (Pocklington_refl (Pock_certif 37181 2 ((11, 1)::(2,2)::nil) 52) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37189 : prime 37189. Proof. apply (Pocklington_refl (Pock_certif 37189 2 ((3, 2)::(2,2)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37199 : prime 37199. Proof. apply (Pocklington_refl (Pock_certif 37199 7 ((2657, 1)::(2,1)::nil) 1) ((Proof_certif 2657 prime2657) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37201 : prime 37201. Proof. apply (Pocklington_refl (Pock_certif 37201 7 ((3, 1)::(2,4)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37217 : prime 37217. Proof. apply (Pocklington_refl (Pock_certif 37217 3 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37223 : prime 37223. Proof. apply (Pocklington_refl (Pock_certif 37223 5 ((37, 1)::(2,1)::nil) 58) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37243 : prime 37243. Proof. apply (Pocklington_refl (Pock_certif 37243 2 ((2069, 1)::(2,1)::nil) 1) ((Proof_certif 2069 prime2069) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37253 : prime 37253. Proof. apply (Pocklington_refl (Pock_certif 37253 2 ((67, 1)::(2,2)::nil) 1) ((Proof_certif 67 prime67) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37273 : prime 37273. Proof. apply (Pocklington_refl (Pock_certif 37273 5 ((3, 1)::(2,3)::nil) 5) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37277 : prime 37277. Proof. apply (Pocklington_refl (Pock_certif 37277 2 ((9319, 1)::(2,2)::nil) 1) ((Proof_certif 9319 prime9319) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37307 : prime 37307. Proof. apply (Pocklington_refl (Pock_certif 37307 2 ((23, 1)::(2,1)::nil) 74) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37309 : prime 37309. Proof. apply (Pocklington_refl (Pock_certif 37309 2 ((3109, 1)::(2,2)::nil) 1) ((Proof_certif 3109 prime3109) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37313 : prime 37313. Proof. apply (Pocklington_refl (Pock_certif 37313 3 ((2,6)::nil) 70) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37321 : prime 37321. Proof. apply (Pocklington_refl (Pock_certif 37321 13 ((3, 1)::(2,3)::nil) 10) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37337 : prime 37337. Proof. apply (Pocklington_refl (Pock_certif 37337 3 ((13, 1)::(2,3)::nil) 150) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37339 : prime 37339. Proof. apply (Pocklington_refl (Pock_certif 37339 3 ((7, 1)::(3, 1)::(2,1)::nil) 48) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37357 : prime 37357. Proof. apply (Pocklington_refl (Pock_certif 37357 2 ((11, 1)::(2,2)::nil) 56) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37361 : prime 37361. Proof. apply (Pocklington_refl (Pock_certif 37361 3 ((5, 1)::(2,4)::nil) 146) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37363 : prime 37363. Proof. apply (Pocklington_refl (Pock_certif 37363 2 ((13, 1)::(2,1)::nil) 29) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37369 : prime 37369. Proof. apply (Pocklington_refl (Pock_certif 37369 7 ((3, 1)::(2,3)::nil) 13) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37379 : prime 37379. Proof. apply (Pocklington_refl (Pock_certif 37379 2 ((1699, 1)::(2,1)::nil) 1) ((Proof_certif 1699 prime1699) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37397 : prime 37397. Proof. apply (Pocklington_refl (Pock_certif 37397 2 ((9349, 1)::(2,2)::nil) 1) ((Proof_certif 9349 prime9349) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37409 : prime 37409. Proof. apply (Pocklington_refl (Pock_certif 37409 3 ((2,5)::nil) 12) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37423 : prime 37423. Proof. apply (Pocklington_refl (Pock_certif 37423 3 ((3, 3)::(2,1)::nil) 44) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37441 : prime 37441. Proof. apply (Pocklington_refl (Pock_certif 37441 7 ((2,6)::nil) 72) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37447 : prime 37447. Proof. apply (Pocklington_refl (Pock_certif 37447 3 ((79, 1)::(2,1)::nil) 1) ((Proof_certif 79 prime79) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37463 : prime 37463. Proof. apply (Pocklington_refl (Pock_certif 37463 5 ((18731, 1)::(2,1)::nil) 1) ((Proof_certif 18731 prime18731) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37483 : prime 37483. Proof. apply (Pocklington_refl (Pock_certif 37483 2 ((6247, 1)::(2,1)::nil) 1) ((Proof_certif 6247 prime6247) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37489 : prime 37489. Proof. apply (Pocklington_refl (Pock_certif 37489 19 ((3, 1)::(2,4)::nil) 10) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37493 : prime 37493. Proof. apply (Pocklington_refl (Pock_certif 37493 2 ((7, 1)::(2,2)::nil) 49) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37501 : prime 37501. Proof. apply (Pocklington_refl (Pock_certif 37501 2 ((5, 1)::(3, 1)::(2,2)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37507 : prime 37507. Proof. apply (Pocklington_refl (Pock_certif 37507 17 ((7, 1)::(3, 1)::(2,1)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37511 : prime 37511. Proof. apply (Pocklington_refl (Pock_certif 37511 11 ((11, 1)::(2,1)::nil) 28) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37517 : prime 37517. Proof. apply (Pocklington_refl (Pock_certif 37517 2 ((83, 1)::(2,2)::nil) 1) ((Proof_certif 83 prime83) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37529 : prime 37529. Proof. apply (Pocklington_refl (Pock_certif 37529 3 ((4691, 1)::(2,3)::nil) 1) ((Proof_certif 4691 prime4691) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37537 : prime 37537. Proof. apply (Pocklington_refl (Pock_certif 37537 5 ((2,5)::nil) 17) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37547 : prime 37547. Proof. apply (Pocklington_refl (Pock_certif 37547 2 ((18773, 1)::(2,1)::nil) 1) ((Proof_certif 18773 prime18773) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37549 : prime 37549. Proof. apply (Pocklington_refl (Pock_certif 37549 2 ((3, 2)::(2,2)::nil) 33) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37561 : prime 37561. Proof. apply (Pocklington_refl (Pock_certif 37561 11 ((3, 1)::(2,3)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37567 : prime 37567. Proof. apply (Pocklington_refl (Pock_certif 37567 3 ((2087, 1)::(2,1)::nil) 1) ((Proof_certif 2087 prime2087) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37571 : prime 37571. Proof. apply (Pocklington_refl (Pock_certif 37571 2 ((13, 1)::(2,1)::nil) 38) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37573 : prime 37573. Proof. apply (Pocklington_refl (Pock_certif 37573 2 ((31, 1)::(2,2)::nil) 54) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37579 : prime 37579. Proof. apply (Pocklington_refl (Pock_certif 37579 2 ((6263, 1)::(2,1)::nil) 1) ((Proof_certif 6263 prime6263) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37589 : prime 37589. Proof. apply (Pocklington_refl (Pock_certif 37589 2 ((9397, 1)::(2,2)::nil) 1) ((Proof_certif 9397 prime9397) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37591 : prime 37591. Proof. apply (Pocklington_refl (Pock_certif 37591 6 ((5, 1)::(3, 1)::(2,1)::nil) 51) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37607 : prime 37607. Proof. apply (Pocklington_refl (Pock_certif 37607 5 ((18803, 1)::(2,1)::nil) 1) ((Proof_certif 18803 prime18803) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37619 : prime 37619. Proof. apply (Pocklington_refl (Pock_certif 37619 2 ((2687, 1)::(2,1)::nil) 1) ((Proof_certif 2687 prime2687) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37633 : prime 37633. Proof. apply (Pocklington_refl (Pock_certif 37633 5 ((2,8)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37643 : prime 37643. Proof. apply (Pocklington_refl (Pock_certif 37643 2 ((11, 1)::(2,1)::nil) 34) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37649 : prime 37649. Proof. apply (Pocklington_refl (Pock_certif 37649 3 ((13, 1)::(2,4)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37657 : prime 37657. Proof. apply (Pocklington_refl (Pock_certif 37657 5 ((3, 1)::(2,3)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37663 : prime 37663. Proof. apply (Pocklington_refl (Pock_certif 37663 3 ((6277, 1)::(2,1)::nil) 1) ((Proof_certif 6277 prime6277) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37691 : prime 37691. Proof. apply (Pocklington_refl (Pock_certif 37691 2 ((3769, 1)::(2,1)::nil) 1) ((Proof_certif 3769 prime3769) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37693 : prime 37693. Proof. apply (Pocklington_refl (Pock_certif 37693 2 ((3, 2)::(2,2)::nil) 37) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37699 : prime 37699. Proof. apply (Pocklington_refl (Pock_certif 37699 2 ((61, 1)::(2,1)::nil) 64) ((Proof_certif 61 prime61) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37717 : prime 37717. Proof. apply (Pocklington_refl (Pock_certif 37717 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37747 : prime 37747. Proof. apply (Pocklington_refl (Pock_certif 37747 3 ((3, 3)::(2,1)::nil) 50) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37781 : prime 37781. Proof. apply (Pocklington_refl (Pock_certif 37781 2 ((1889, 1)::(2,2)::nil) 1) ((Proof_certif 1889 prime1889) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37783 : prime 37783. Proof. apply (Pocklington_refl (Pock_certif 37783 3 ((2099, 1)::(2,1)::nil) 1) ((Proof_certif 2099 prime2099) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37799 : prime 37799. Proof. apply (Pocklington_refl (Pock_certif 37799 11 ((18899, 1)::(2,1)::nil) 1) ((Proof_certif 18899 prime18899) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37811 : prime 37811. Proof. apply (Pocklington_refl (Pock_certif 37811 2 ((19, 1)::(2,1)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37813 : prime 37813. Proof. apply (Pocklington_refl (Pock_certif 37813 2 ((23, 1)::(2,2)::nil) 42) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37831 : prime 37831. Proof. apply (Pocklington_refl (Pock_certif 37831 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37847 : prime 37847. Proof. apply (Pocklington_refl (Pock_certif 37847 5 ((127, 1)::(2,1)::nil) 1) ((Proof_certif 127 prime127) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37853 : prime 37853. Proof. apply (Pocklington_refl (Pock_certif 37853 2 ((9463, 1)::(2,2)::nil) 1) ((Proof_certif 9463 prime9463) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37861 : prime 37861. Proof. apply (Pocklington_refl (Pock_certif 37861 2 ((5, 1)::(3, 1)::(2,2)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37871 : prime 37871. Proof. apply (Pocklington_refl (Pock_certif 37871 7 ((7, 1)::(5, 1)::(2,1)::nil) 120) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37879 : prime 37879. Proof. apply (Pocklington_refl (Pock_certif 37879 3 ((59, 1)::(2,1)::nil) 84) ((Proof_certif 59 prime59) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37889 : prime 37889. Proof. apply (Pocklington_refl (Pock_certif 37889 3 ((2,10)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37897 : prime 37897. Proof. apply (Pocklington_refl (Pock_certif 37897 5 ((3, 1)::(2,3)::nil) 39) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37907 : prime 37907. Proof. apply (Pocklington_refl (Pock_certif 37907 2 ((1723, 1)::(2,1)::nil) 1) ((Proof_certif 1723 prime1723) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37951 : prime 37951. Proof. apply (Pocklington_refl (Pock_certif 37951 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37957 : prime 37957. Proof. apply (Pocklington_refl (Pock_certif 37957 2 ((3163, 1)::(2,2)::nil) 1) ((Proof_certif 3163 prime3163) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37963 : prime 37963. Proof. apply (Pocklington_refl (Pock_certif 37963 2 ((3, 3)::(2,1)::nil) 54) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37967 : prime 37967. Proof. apply (Pocklington_refl (Pock_certif 37967 5 ((41, 1)::(2,1)::nil) 134) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37987 : prime 37987. Proof. apply (Pocklington_refl (Pock_certif 37987 2 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37991 : prime 37991. Proof. apply (Pocklington_refl (Pock_certif 37991 7 ((29, 1)::(2,1)::nil) 74) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37993 : prime 37993. Proof. apply (Pocklington_refl (Pock_certif 37993 10 ((3, 1)::(2,3)::nil) 44) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime37997 : prime 37997. Proof. apply (Pocklington_refl (Pock_certif 37997 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38011 : prime 38011. Proof. apply (Pocklington_refl (Pock_certif 38011 2 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38039 : prime 38039. Proof. apply (Pocklington_refl (Pock_certif 38039 7 ((11, 1)::(7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38047 : prime 38047. Proof. apply (Pocklington_refl (Pock_certif 38047 3 ((17, 1)::(2,1)::nil) 28) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38053 : prime 38053. Proof. apply (Pocklington_refl (Pock_certif 38053 5 ((3, 2)::(2,2)::nil) 47) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38069 : prime 38069. Proof. apply (Pocklington_refl (Pock_certif 38069 2 ((31, 1)::(2,2)::nil) 58) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38083 : prime 38083. Proof. apply (Pocklington_refl (Pock_certif 38083 3 ((11, 1)::(3, 1)::(2,1)::nil) 48) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38113 : prime 38113. Proof. apply (Pocklington_refl (Pock_certif 38113 5 ((2,5)::nil) 37) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38119 : prime 38119. Proof. apply (Pocklington_refl (Pock_certif 38119 3 ((6353, 1)::(2,1)::nil) 1) ((Proof_certif 6353 prime6353) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38149 : prime 38149. Proof. apply (Pocklington_refl (Pock_certif 38149 6 ((11, 1)::(2,2)::nil) 74) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38153 : prime 38153. Proof. apply (Pocklington_refl (Pock_certif 38153 3 ((19, 1)::(2,3)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38167 : prime 38167. Proof. apply (Pocklington_refl (Pock_certif 38167 3 ((6361, 1)::(2,1)::nil) 1) ((Proof_certif 6361 prime6361) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38177 : prime 38177. Proof. apply (Pocklington_refl (Pock_certif 38177 3 ((2,5)::nil) 39) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38183 : prime 38183. Proof. apply (Pocklington_refl (Pock_certif 38183 5 ((17, 1)::(2,1)::nil) 33) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38189 : prime 38189. Proof. apply (Pocklington_refl (Pock_certif 38189 2 ((9547, 1)::(2,2)::nil) 1) ((Proof_certif 9547 prime9547) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38197 : prime 38197. Proof. apply (Pocklington_refl (Pock_certif 38197 2 ((3, 2)::(2,2)::nil) 51) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38201 : prime 38201. Proof. apply (Pocklington_refl (Pock_certif 38201 3 ((5, 1)::(2,3)::nil) 74) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38219 : prime 38219. Proof. apply (Pocklington_refl (Pock_certif 38219 2 ((97, 1)::(2,1)::nil) 1) ((Proof_certif 97 prime97) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38231 : prime 38231. Proof. apply (Pocklington_refl (Pock_certif 38231 7 ((3823, 1)::(2,1)::nil) 1) ((Proof_certif 3823 prime3823) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38237 : prime 38237. Proof. apply (Pocklington_refl (Pock_certif 38237 2 ((11, 1)::(2,2)::nil) 76) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38239 : prime 38239. Proof. apply (Pocklington_refl (Pock_certif 38239 3 ((6373, 1)::(2,1)::nil) 1) ((Proof_certif 6373 prime6373) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38261 : prime 38261. Proof. apply (Pocklington_refl (Pock_certif 38261 2 ((1913, 1)::(2,2)::nil) 1) ((Proof_certif 1913 prime1913) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38273 : prime 38273. Proof. apply (Pocklington_refl (Pock_certif 38273 3 ((2,7)::nil) 42) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38281 : prime 38281. Proof. apply (Pocklington_refl (Pock_certif 38281 14 ((5, 1)::(2,3)::nil) 76) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38287 : prime 38287. Proof. apply (Pocklington_refl (Pock_certif 38287 7 ((3, 3)::(2,1)::nil) 60) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38299 : prime 38299. Proof. apply (Pocklington_refl (Pock_certif 38299 2 ((13, 1)::(2,1)::nil) 8) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38303 : prime 38303. Proof. apply (Pocklington_refl (Pock_certif 38303 5 ((1741, 1)::(2,1)::nil) 1) ((Proof_certif 1741 prime1741) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38317 : prime 38317. Proof. apply (Pocklington_refl (Pock_certif 38317 2 ((31, 1)::(2,2)::nil) 60) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38321 : prime 38321. Proof. apply (Pocklington_refl (Pock_certif 38321 3 ((5, 1)::(2,4)::nil) 158) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38327 : prime 38327. Proof. apply (Pocklington_refl (Pock_certif 38327 5 ((19163, 1)::(2,1)::nil) 1) ((Proof_certif 19163 prime19163) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38329 : prime 38329. Proof. apply (Pocklington_refl (Pock_certif 38329 13 ((1597, 1)::(2,3)::nil) 1) ((Proof_certif 1597 prime1597) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38333 : prime 38333. Proof. apply (Pocklington_refl (Pock_certif 38333 2 ((7, 1)::(2,2)::nil) 20) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38351 : prime 38351. Proof. apply (Pocklington_refl (Pock_certif 38351 11 ((5, 2)::(2,1)::nil) 66) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38371 : prime 38371. Proof. apply (Pocklington_refl (Pock_certif 38371 10 ((5, 1)::(3, 1)::(2,1)::nil) 13) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38377 : prime 38377. Proof. apply (Pocklington_refl (Pock_certif 38377 5 ((3, 2)::(2,3)::nil) 100) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38393 : prime 38393. Proof. apply (Pocklington_refl (Pock_certif 38393 3 ((4799, 1)::(2,3)::nil) 1) ((Proof_certif 4799 prime4799) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38431 : prime 38431. Proof. apply (Pocklington_refl (Pock_certif 38431 6 ((5, 1)::(3, 1)::(2,1)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38447 : prime 38447. Proof. apply (Pocklington_refl (Pock_certif 38447 5 ((47, 1)::(2,1)::nil) 32) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38449 : prime 38449. Proof. apply (Pocklington_refl (Pock_certif 38449 13 ((3, 1)::(2,4)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38453 : prime 38453. Proof. apply (Pocklington_refl (Pock_certif 38453 2 ((9613, 1)::(2,2)::nil) 1) ((Proof_certif 9613 prime9613) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38459 : prime 38459. Proof. apply (Pocklington_refl (Pock_certif 38459 2 ((41, 1)::(2,1)::nil) 140) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38461 : prime 38461. Proof. apply (Pocklington_refl (Pock_certif 38461 13 ((5, 1)::(3, 1)::(2,2)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38501 : prime 38501. Proof. apply (Pocklington_refl (Pock_certif 38501 2 ((5, 2)::(2,2)::nil) 184) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38543 : prime 38543. Proof. apply (Pocklington_refl (Pock_certif 38543 5 ((2753, 1)::(2,1)::nil) 1) ((Proof_certif 2753 prime2753) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38557 : prime 38557. Proof. apply (Pocklington_refl (Pock_certif 38557 2 ((3, 2)::(2,2)::nil) 62) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38561 : prime 38561. Proof. apply (Pocklington_refl (Pock_certif 38561 3 ((2,5)::nil) 51) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38567 : prime 38567. Proof. apply (Pocklington_refl (Pock_certif 38567 5 ((11, 1)::(2,1)::nil) 32) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38569 : prime 38569. Proof. apply (Pocklington_refl (Pock_certif 38569 14 ((3, 1)::(2,3)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38593 : prime 38593. Proof. apply (Pocklington_refl (Pock_certif 38593 5 ((2,6)::nil) 90) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38603 : prime 38603. Proof. apply (Pocklington_refl (Pock_certif 38603 2 ((19301, 1)::(2,1)::nil) 1) ((Proof_certif 19301 prime19301) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38609 : prime 38609. Proof. apply (Pocklington_refl (Pock_certif 38609 3 ((19, 1)::(2,4)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38611 : prime 38611. Proof. apply (Pocklington_refl (Pock_certif 38611 3 ((3, 3)::(2,1)::nil) 66) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38629 : prime 38629. Proof. apply (Pocklington_refl (Pock_certif 38629 2 ((3, 2)::(2,2)::nil) 64) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38639 : prime 38639. Proof. apply (Pocklington_refl (Pock_certif 38639 29 ((19319, 1)::(2,1)::nil) 1) ((Proof_certif 19319 prime19319) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38651 : prime 38651. Proof. apply (Pocklington_refl (Pock_certif 38651 2 ((5, 2)::(2,1)::nil) 72) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38653 : prime 38653. Proof. apply (Pocklington_refl (Pock_certif 38653 2 ((3221, 1)::(2,2)::nil) 1) ((Proof_certif 3221 prime3221) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38669 : prime 38669. Proof. apply (Pocklington_refl (Pock_certif 38669 2 ((7, 1)::(2,2)::nil) 34) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38671 : prime 38671. Proof. apply (Pocklington_refl (Pock_certif 38671 6 ((5, 1)::(3, 1)::(2,1)::nil) 25) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38677 : prime 38677. Proof. apply (Pocklington_refl (Pock_certif 38677 2 ((11, 1)::(2,2)::nil) 86) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38693 : prime 38693. Proof. apply (Pocklington_refl (Pock_certif 38693 2 ((17, 1)::(2,2)::nil) 24) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38699 : prime 38699. Proof. apply (Pocklington_refl (Pock_certif 38699 2 ((11, 1)::(2,1)::nil) 39) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38707 : prime 38707. Proof. apply (Pocklington_refl (Pock_certif 38707 2 ((6451, 1)::(2,1)::nil) 1) ((Proof_certif 6451 prime6451) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38711 : prime 38711. Proof. apply (Pocklington_refl (Pock_certif 38711 7 ((7, 1)::(5, 1)::(2,1)::nil) 132) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38713 : prime 38713. Proof. apply (Pocklington_refl (Pock_certif 38713 5 ((3, 1)::(2,3)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38723 : prime 38723. Proof. apply (Pocklington_refl (Pock_certif 38723 2 ((19, 1)::(2,1)::nil) 29) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38729 : prime 38729. Proof. apply (Pocklington_refl (Pock_certif 38729 3 ((47, 1)::(2,3)::nil) 1) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38737 : prime 38737. Proof. apply (Pocklington_refl (Pock_certif 38737 5 ((3, 1)::(2,4)::nil) 38) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38747 : prime 38747. Proof. apply (Pocklington_refl (Pock_certif 38747 2 ((19373, 1)::(2,1)::nil) 1) ((Proof_certif 19373 prime19373) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38749 : prime 38749. Proof. apply (Pocklington_refl (Pock_certif 38749 2 ((3229, 1)::(2,2)::nil) 1) ((Proof_certif 3229 prime3229) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38767 : prime 38767. Proof. apply (Pocklington_refl (Pock_certif 38767 5 ((7, 1)::(3, 1)::(2,1)::nil) 82) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38783 : prime 38783. Proof. apply (Pocklington_refl (Pock_certif 38783 5 ((19391, 1)::(2,1)::nil) 1) ((Proof_certif 19391 prime19391) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38791 : prime 38791. Proof. apply (Pocklington_refl (Pock_certif 38791 6 ((5, 1)::(3, 1)::(2,1)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38803 : prime 38803. Proof. apply (Pocklington_refl (Pock_certif 38803 2 ((29, 1)::(2,1)::nil) 88) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38821 : prime 38821. Proof. apply (Pocklington_refl (Pock_certif 38821 2 ((5, 1)::(3, 1)::(2,2)::nil) 46) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38833 : prime 38833. Proof. apply (Pocklington_refl (Pock_certif 38833 5 ((3, 1)::(2,4)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38839 : prime 38839. Proof. apply (Pocklington_refl (Pock_certif 38839 3 ((6473, 1)::(2,1)::nil) 1) ((Proof_certif 6473 prime6473) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38851 : prime 38851. Proof. apply (Pocklington_refl (Pock_certif 38851 3 ((5, 1)::(3, 1)::(2,1)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38861 : prime 38861. Proof. apply (Pocklington_refl (Pock_certif 38861 2 ((29, 1)::(2,2)::nil) 102) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38867 : prime 38867. Proof. apply (Pocklington_refl (Pock_certif 38867 2 ((19433, 1)::(2,1)::nil) 1) ((Proof_certif 19433 prime19433) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38873 : prime 38873. Proof. apply (Pocklington_refl (Pock_certif 38873 3 ((43, 1)::(2,3)::nil) 1) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38891 : prime 38891. Proof. apply (Pocklington_refl (Pock_certif 38891 2 ((3889, 1)::(2,1)::nil) 1) ((Proof_certif 3889 prime3889) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38903 : prime 38903. Proof. apply (Pocklington_refl (Pock_certif 38903 5 ((53, 1)::(2,1)::nil) 154) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38917 : prime 38917. Proof. apply (Pocklington_refl (Pock_certif 38917 5 ((3, 2)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38921 : prime 38921. Proof. apply (Pocklington_refl (Pock_certif 38921 3 ((5, 1)::(2,3)::nil) 8) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38923 : prime 38923. Proof. apply (Pocklington_refl (Pock_certif 38923 2 ((13, 1)::(2,1)::nil) 38) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38933 : prime 38933. Proof. apply (Pocklington_refl (Pock_certif 38933 2 ((9733, 1)::(2,2)::nil) 1) ((Proof_certif 9733 prime9733) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38953 : prime 38953. Proof. apply (Pocklington_refl (Pock_certif 38953 5 ((3, 1)::(2,3)::nil) 35) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38959 : prime 38959. Proof. apply (Pocklington_refl (Pock_certif 38959 3 ((43, 1)::(2,1)::nil) 108) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38971 : prime 38971. Proof. apply (Pocklington_refl (Pock_certif 38971 2 ((5, 1)::(3, 1)::(2,1)::nil) 36) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38977 : prime 38977. Proof. apply (Pocklington_refl (Pock_certif 38977 5 ((2,6)::nil) 96) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime38993 : prime 38993. Proof. apply (Pocklington_refl (Pock_certif 38993 3 ((2437, 1)::(2,4)::nil) 1) ((Proof_certif 2437 prime2437) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39019 : prime 39019. Proof. apply (Pocklington_refl (Pock_certif 39019 2 ((7, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39023 : prime 39023. Proof. apply (Pocklington_refl (Pock_certif 39023 5 ((109, 1)::(2,1)::nil) 1) ((Proof_certif 109 prime109) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39041 : prime 39041. Proof. apply (Pocklington_refl (Pock_certif 39041 3 ((2,7)::nil) 48) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39043 : prime 39043. Proof. apply (Pocklington_refl (Pock_certif 39043 2 ((3, 3)::(2,1)::nil) 74) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39047 : prime 39047. Proof. apply (Pocklington_refl (Pock_certif 39047 5 ((2789, 1)::(2,1)::nil) 1) ((Proof_certif 2789 prime2789) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39079 : prime 39079. Proof. apply (Pocklington_refl (Pock_certif 39079 3 ((13, 1)::(2,1)::nil) 44) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39089 : prime 39089. Proof. apply (Pocklington_refl (Pock_certif 39089 3 ((7, 1)::(2,4)::nil) 124) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39097 : prime 39097. Proof. apply (Pocklington_refl (Pock_certif 39097 5 ((3, 1)::(2,3)::nil) 41) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39103 : prime 39103. Proof. apply (Pocklington_refl (Pock_certif 39103 5 ((7, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39107 : prime 39107. Proof. apply (Pocklington_refl (Pock_certif 39107 2 ((19553, 1)::(2,1)::nil) 1) ((Proof_certif 19553 prime19553) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39113 : prime 39113. Proof. apply (Pocklington_refl (Pock_certif 39113 3 ((4889, 1)::(2,3)::nil) 1) ((Proof_certif 4889 prime4889) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39119 : prime 39119. Proof. apply (Pocklington_refl (Pock_certif 39119 11 ((19559, 1)::(2,1)::nil) 1) ((Proof_certif 19559 prime19559) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39133 : prime 39133. Proof. apply (Pocklington_refl (Pock_certif 39133 5 ((3, 2)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39139 : prime 39139. Proof. apply (Pocklington_refl (Pock_certif 39139 7 ((11, 1)::(3, 1)::(2,1)::nil) 64) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39157 : prime 39157. Proof. apply (Pocklington_refl (Pock_certif 39157 2 ((13, 1)::(2,2)::nil) 23) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39161 : prime 39161. Proof. apply (Pocklington_refl (Pock_certif 39161 3 ((5, 1)::(2,3)::nil) 16) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39163 : prime 39163. Proof. apply (Pocklington_refl (Pock_certif 39163 2 ((61, 1)::(2,1)::nil) 76) ((Proof_certif 61 prime61) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39181 : prime 39181. Proof. apply (Pocklington_refl (Pock_certif 39181 6 ((5, 1)::(3, 1)::(2,2)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39191 : prime 39191. Proof. apply (Pocklington_refl (Pock_certif 39191 11 ((3919, 1)::(2,1)::nil) 1) ((Proof_certif 3919 prime3919) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39199 : prime 39199. Proof. apply (Pocklington_refl (Pock_certif 39199 3 ((47, 1)::(2,1)::nil) 40) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39209 : prime 39209. Proof. apply (Pocklington_refl (Pock_certif 39209 3 ((13, 1)::(2,3)::nil) 168) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39217 : prime 39217. Proof. apply (Pocklington_refl (Pock_certif 39217 7 ((3, 1)::(2,4)::nil) 48) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39227 : prime 39227. Proof. apply (Pocklington_refl (Pock_certif 39227 2 ((1783, 1)::(2,1)::nil) 1) ((Proof_certif 1783 prime1783) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39229 : prime 39229. Proof. apply (Pocklington_refl (Pock_certif 39229 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39233 : prime 39233. Proof. apply (Pocklington_refl (Pock_certif 39233 3 ((2,6)::nil) 100) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39239 : prime 39239. Proof. apply (Pocklington_refl (Pock_certif 39239 7 ((23, 1)::(2,1)::nil) 23) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39241 : prime 39241. Proof. apply (Pocklington_refl (Pock_certif 39241 7 ((3, 2)::(2,3)::nil) 112) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39251 : prime 39251. Proof. apply (Pocklington_refl (Pock_certif 39251 2 ((5, 2)::(2,1)::nil) 84) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39293 : prime 39293. Proof. apply (Pocklington_refl (Pock_certif 39293 2 ((11, 1)::(2,2)::nil) 9) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39301 : prime 39301. Proof. apply (Pocklington_refl (Pock_certif 39301 7 ((5, 1)::(3, 1)::(2,2)::nil) 54) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39313 : prime 39313. Proof. apply (Pocklington_refl (Pock_certif 39313 10 ((3, 1)::(2,4)::nil) 50) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39317 : prime 39317. Proof. apply (Pocklington_refl (Pock_certif 39317 2 ((9829, 1)::(2,2)::nil) 1) ((Proof_certif 9829 prime9829) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39323 : prime 39323. Proof. apply (Pocklington_refl (Pock_certif 39323 2 ((19661, 1)::(2,1)::nil) 1) ((Proof_certif 19661 prime19661) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39341 : prime 39341. Proof. apply (Pocklington_refl (Pock_certif 39341 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39343 : prime 39343. Proof. apply (Pocklington_refl (Pock_certif 39343 3 ((79, 1)::(2,1)::nil) 1) ((Proof_certif 79 prime79) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39359 : prime 39359. Proof. apply (Pocklington_refl (Pock_certif 39359 11 ((1789, 1)::(2,1)::nil) 1) ((Proof_certif 1789 prime1789) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39367 : prime 39367. Proof. apply (Pocklington_refl (Pock_certif 39367 3 ((3, 3)::(2,1)::nil) 80) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39371 : prime 39371. Proof. apply (Pocklington_refl (Pock_certif 39371 2 ((31, 1)::(2,1)::nil) 13) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39373 : prime 39373. Proof. apply (Pocklington_refl (Pock_certif 39373 2 ((17, 1)::(2,2)::nil) 34) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39383 : prime 39383. Proof. apply (Pocklington_refl (Pock_certif 39383 5 ((29, 1)::(2,1)::nil) 98) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39397 : prime 39397. Proof. apply (Pocklington_refl (Pock_certif 39397 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39409 : prime 39409. Proof. apply (Pocklington_refl (Pock_certif 39409 7 ((3, 1)::(2,4)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39419 : prime 39419. Proof. apply (Pocklington_refl (Pock_certif 39419 2 ((19709, 1)::(2,1)::nil) 1) ((Proof_certif 19709 prime19709) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39439 : prime 39439. Proof. apply (Pocklington_refl (Pock_certif 39439 3 ((7, 1)::(3, 1)::(2,1)::nil) 11) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39443 : prime 39443. Proof. apply (Pocklington_refl (Pock_certif 39443 2 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39451 : prime 39451. Proof. apply (Pocklington_refl (Pock_certif 39451 2 ((5, 1)::(3, 1)::(2,1)::nil) 53) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39461 : prime 39461. Proof. apply (Pocklington_refl (Pock_certif 39461 2 ((1973, 1)::(2,2)::nil) 1) ((Proof_certif 1973 prime1973) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39499 : prime 39499. Proof. apply (Pocklington_refl (Pock_certif 39499 2 ((29, 1)::(2,1)::nil) 100) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39503 : prime 39503. Proof. apply (Pocklington_refl (Pock_certif 39503 5 ((19751, 1)::(2,1)::nil) 1) ((Proof_certif 19751 prime19751) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39509 : prime 39509. Proof. apply (Pocklington_refl (Pock_certif 39509 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39511 : prime 39511. Proof. apply (Pocklington_refl (Pock_certif 39511 3 ((5, 1)::(3, 1)::(2,1)::nil) 55) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39521 : prime 39521. Proof. apply (Pocklington_refl (Pock_certif 39521 3 ((2,5)::nil) 14) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39541 : prime 39541. Proof. apply (Pocklington_refl (Pock_certif 39541 2 ((5, 1)::(3, 1)::(2,2)::nil) 58) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39551 : prime 39551. Proof. apply (Pocklington_refl (Pock_certif 39551 7 ((5, 2)::(2,1)::nil) 90) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39563 : prime 39563. Proof. apply (Pocklington_refl (Pock_certif 39563 2 ((131, 1)::(2,1)::nil) 1) ((Proof_certif 131 prime131) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39569 : prime 39569. Proof. apply (Pocklington_refl (Pock_certif 39569 3 ((2473, 1)::(2,4)::nil) 1) ((Proof_certif 2473 prime2473) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39581 : prime 39581. Proof. apply (Pocklington_refl (Pock_certif 39581 2 ((1979, 1)::(2,2)::nil) 1) ((Proof_certif 1979 prime1979) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39607 : prime 39607. Proof. apply (Pocklington_refl (Pock_certif 39607 3 ((7, 1)::(3, 1)::(2,1)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39619 : prime 39619. Proof. apply (Pocklington_refl (Pock_certif 39619 2 ((31, 1)::(2,1)::nil) 17) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39623 : prime 39623. Proof. apply (Pocklington_refl (Pock_certif 39623 5 ((11, 1)::(2,1)::nil) 36) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39631 : prime 39631. Proof. apply (Pocklington_refl (Pock_certif 39631 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39659 : prime 39659. Proof. apply (Pocklington_refl (Pock_certif 39659 2 ((79, 1)::(2,1)::nil) 1) ((Proof_certif 79 prime79) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39667 : prime 39667. Proof. apply (Pocklington_refl (Pock_certif 39667 2 ((11, 1)::(2,1)::nil) 39) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39671 : prime 39671. Proof. apply (Pocklington_refl (Pock_certif 39671 7 ((3967, 1)::(2,1)::nil) 1) ((Proof_certif 3967 prime3967) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39679 : prime 39679. Proof. apply (Pocklington_refl (Pock_certif 39679 3 ((17, 1)::(2,1)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39703 : prime 39703. Proof. apply (Pocklington_refl (Pock_certif 39703 3 ((13, 1)::(2,1)::nil) 11) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39709 : prime 39709. Proof. apply (Pocklington_refl (Pock_certif 39709 6 ((3, 2)::(2,2)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39719 : prime 39719. Proof. apply (Pocklington_refl (Pock_certif 39719 7 ((2837, 1)::(2,1)::nil) 1) ((Proof_certif 2837 prime2837) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39727 : prime 39727. Proof. apply (Pocklington_refl (Pock_certif 39727 3 ((2207, 1)::(2,1)::nil) 1) ((Proof_certif 2207 prime2207) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39733 : prime 39733. Proof. apply (Pocklington_refl (Pock_certif 39733 2 ((7, 1)::(2,2)::nil) 12) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39749 : prime 39749. Proof. apply (Pocklington_refl (Pock_certif 39749 2 ((19, 1)::(2,2)::nil) 66) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39761 : prime 39761. Proof. apply (Pocklington_refl (Pock_certif 39761 3 ((5, 1)::(2,4)::nil) 16) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39769 : prime 39769. Proof. apply (Pocklington_refl (Pock_certif 39769 13 ((3, 1)::(2,3)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39779 : prime 39779. Proof. apply (Pocklington_refl (Pock_certif 39779 2 ((19889, 1)::(2,1)::nil) 1) ((Proof_certif 19889 prime19889) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39791 : prime 39791. Proof. apply (Pocklington_refl (Pock_certif 39791 11 ((23, 1)::(2,1)::nil) 36) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39799 : prime 39799. Proof. apply (Pocklington_refl (Pock_certif 39799 3 ((3, 3)::(2,1)::nil) 88) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39821 : prime 39821. Proof. apply (Pocklington_refl (Pock_certif 39821 2 ((11, 1)::(2,2)::nil) 23) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39827 : prime 39827. Proof. apply (Pocklington_refl (Pock_certif 39827 2 ((19913, 1)::(2,1)::nil) 1) ((Proof_certif 19913 prime19913) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39829 : prime 39829. Proof. apply (Pocklington_refl (Pock_certif 39829 2 ((3319, 1)::(2,2)::nil) 1) ((Proof_certif 3319 prime3319) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39839 : prime 39839. Proof. apply (Pocklington_refl (Pock_certif 39839 7 ((19919, 1)::(2,1)::nil) 1) ((Proof_certif 19919 prime19919) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39841 : prime 39841. Proof. apply (Pocklington_refl (Pock_certif 39841 11 ((2,5)::nil) 26) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39847 : prime 39847. Proof. apply (Pocklington_refl (Pock_certif 39847 3 ((29, 1)::(2,1)::nil) 106) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39857 : prime 39857. Proof. apply (Pocklington_refl (Pock_certif 39857 3 ((47, 1)::(2,4)::nil) 1) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39863 : prime 39863. Proof. apply (Pocklington_refl (Pock_certif 39863 5 ((19, 1)::(2,1)::nil) 60) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39869 : prime 39869. Proof. apply (Pocklington_refl (Pock_certif 39869 2 ((9967, 1)::(2,2)::nil) 1) ((Proof_certif 9967 prime9967) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39877 : prime 39877. Proof. apply (Pocklington_refl (Pock_certif 39877 2 ((3323, 1)::(2,2)::nil) 1) ((Proof_certif 3323 prime3323) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39883 : prime 39883. Proof. apply (Pocklington_refl (Pock_certif 39883 2 ((17, 1)::(2,1)::nil) 12) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39887 : prime 39887. Proof. apply (Pocklington_refl (Pock_certif 39887 5 ((7, 2)::(2,1)::nil) 14) ((Proof_certif 7 prime7) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39901 : prime 39901. Proof. apply (Pocklington_refl (Pock_certif 39901 2 ((5, 1)::(3, 1)::(2,2)::nil) 64) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39929 : prime 39929. Proof. apply (Pocklington_refl (Pock_certif 39929 3 ((7, 1)::(2,3)::nil) 40) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39937 : prime 39937. Proof. apply (Pocklington_refl (Pock_certif 39937 5 ((2,10)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39953 : prime 39953. Proof. apply (Pocklington_refl (Pock_certif 39953 3 ((11, 1)::(2,4)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39971 : prime 39971. Proof. apply (Pocklington_refl (Pock_certif 39971 2 ((7, 1)::(5, 1)::(2,1)::nil) 9) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39979 : prime 39979. Proof. apply (Pocklington_refl (Pock_certif 39979 2 ((2221, 1)::(2,1)::nil) 1) ((Proof_certif 2221 prime2221) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39983 : prime 39983. Proof. apply (Pocklington_refl (Pock_certif 39983 5 ((19991, 1)::(2,1)::nil) 1) ((Proof_certif 19991 prime19991) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime39989 : prime 39989. Proof. apply (Pocklington_refl (Pock_certif 39989 2 ((13, 1)::(2,2)::nil) 40) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40009 : prime 40009. Proof. apply (Pocklington_refl (Pock_certif 40009 11 ((3, 1)::(2,3)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40013 : prime 40013. Proof. apply (Pocklington_refl (Pock_certif 40013 2 ((7, 1)::(2,2)::nil) 25) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40031 : prime 40031. Proof. apply (Pocklington_refl (Pock_certif 40031 19 ((4003, 1)::(2,1)::nil) 1) ((Proof_certif 4003 prime4003) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40037 : prime 40037. Proof. apply (Pocklington_refl (Pock_certif 40037 2 ((10009, 1)::(2,2)::nil) 1) ((Proof_certif 10009 prime10009) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40039 : prime 40039. Proof. apply (Pocklington_refl (Pock_certif 40039 3 ((6673, 1)::(2,1)::nil) 1) ((Proof_certif 6673 prime6673) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40063 : prime 40063. Proof. apply (Pocklington_refl (Pock_certif 40063 3 ((11, 1)::(3, 1)::(2,1)::nil) 78) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40087 : prime 40087. Proof. apply (Pocklington_refl (Pock_certif 40087 3 ((17, 1)::(2,1)::nil) 19) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40093 : prime 40093. Proof. apply (Pocklington_refl (Pock_certif 40093 2 ((13, 1)::(2,2)::nil) 42) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40099 : prime 40099. Proof. apply (Pocklington_refl (Pock_certif 40099 2 ((41, 1)::(2,1)::nil) 160) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40111 : prime 40111. Proof. apply (Pocklington_refl (Pock_certif 40111 3 ((5, 1)::(3, 1)::(2,1)::nil) 10) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40123 : prime 40123. Proof. apply (Pocklington_refl (Pock_certif 40123 2 ((3, 3)::(2,1)::nil) 94) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40127 : prime 40127. Proof. apply (Pocklington_refl (Pock_certif 40127 5 ((20063, 1)::(2,1)::nil) 1) ((Proof_certif 20063 prime20063) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40129 : prime 40129. Proof. apply (Pocklington_refl (Pock_certif 40129 7 ((2,6)::nil) 114) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40151 : prime 40151. Proof. apply (Pocklington_refl (Pock_certif 40151 11 ((5, 2)::(2,1)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40153 : prime 40153. Proof. apply (Pocklington_refl (Pock_certif 40153 5 ((3, 1)::(2,3)::nil) 37) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40163 : prime 40163. Proof. apply (Pocklington_refl (Pock_certif 40163 2 ((43, 1)::(2,1)::nil) 122) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40169 : prime 40169. Proof. apply (Pocklington_refl (Pock_certif 40169 3 ((5021, 1)::(2,3)::nil) 1) ((Proof_certif 5021 prime5021) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40177 : prime 40177. Proof. apply (Pocklington_refl (Pock_certif 40177 10 ((3, 1)::(2,4)::nil) 68) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40189 : prime 40189. Proof. apply (Pocklington_refl (Pock_certif 40189 2 ((17, 1)::(2,2)::nil) 46) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40193 : prime 40193. Proof. apply (Pocklington_refl (Pock_certif 40193 3 ((2,8)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40213 : prime 40213. Proof. apply (Pocklington_refl (Pock_certif 40213 6 ((3, 2)::(2,2)::nil) 35) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40231 : prime 40231. Proof. apply (Pocklington_refl (Pock_certif 40231 3 ((3, 3)::(2,1)::nil) 96) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40237 : prime 40237. Proof. apply (Pocklington_refl (Pock_certif 40237 2 ((7, 1)::(2,2)::nil) 34) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40241 : prime 40241. Proof. apply (Pocklington_refl (Pock_certif 40241 3 ((5, 1)::(2,4)::nil) 22) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40253 : prime 40253. Proof. apply (Pocklington_refl (Pock_certif 40253 2 ((29, 1)::(2,2)::nil) 114) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40277 : prime 40277. Proof. apply (Pocklington_refl (Pock_certif 40277 2 ((10069, 1)::(2,2)::nil) 1) ((Proof_certif 10069 prime10069) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40283 : prime 40283. Proof. apply (Pocklington_refl (Pock_certif 40283 2 ((1831, 1)::(2,1)::nil) 1) ((Proof_certif 1831 prime1831) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40289 : prime 40289. Proof. apply (Pocklington_refl (Pock_certif 40289 3 ((2,5)::nil) 41) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40343 : prime 40343. Proof. apply (Pocklington_refl (Pock_certif 40343 5 ((23, 1)::(2,1)::nil) 48) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40351 : prime 40351. Proof. apply (Pocklington_refl (Pock_certif 40351 3 ((5, 1)::(3, 1)::(2,1)::nil) 21) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40357 : prime 40357. Proof. apply (Pocklington_refl (Pock_certif 40357 5 ((3, 2)::(2,2)::nil) 39) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40361 : prime 40361. Proof. apply (Pocklington_refl (Pock_certif 40361 3 ((5, 1)::(2,3)::nil) 48) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40387 : prime 40387. Proof. apply (Pocklington_refl (Pock_certif 40387 2 ((53, 1)::(2,1)::nil) 168) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40423 : prime 40423. Proof. apply (Pocklington_refl (Pock_certif 40423 3 ((6737, 1)::(2,1)::nil) 1) ((Proof_certif 6737 prime6737) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40427 : prime 40427. Proof. apply (Pocklington_refl (Pock_certif 40427 2 ((17, 1)::(2,1)::nil) 30) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40429 : prime 40429. Proof. apply (Pocklington_refl (Pock_certif 40429 14 ((3, 2)::(2,2)::nil) 41) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40433 : prime 40433. Proof. apply (Pocklington_refl (Pock_certif 40433 3 ((7, 1)::(2,4)::nil) 136) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40459 : prime 40459. Proof. apply (Pocklington_refl (Pock_certif 40459 2 ((11, 1)::(3, 1)::(2,1)::nil) 84) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40471 : prime 40471. Proof. apply (Pocklington_refl (Pock_certif 40471 3 ((5, 1)::(3, 1)::(2,1)::nil) 25) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40483 : prime 40483. Proof. apply (Pocklington_refl (Pock_certif 40483 2 ((13, 1)::(2,1)::nil) 46) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40487 : prime 40487. Proof. apply (Pocklington_refl (Pock_certif 40487 5 ((31, 1)::(2,1)::nil) 32) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40493 : prime 40493. Proof. apply (Pocklington_refl (Pock_certif 40493 2 ((53, 1)::(2,2)::nil) 1) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40499 : prime 40499. Proof. apply (Pocklington_refl (Pock_certif 40499 2 ((20249, 1)::(2,1)::nil) 1) ((Proof_certif 20249 prime20249) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40507 : prime 40507. Proof. apply (Pocklington_refl (Pock_certif 40507 2 ((43, 1)::(2,1)::nil) 126) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40519 : prime 40519. Proof. apply (Pocklington_refl (Pock_certif 40519 3 ((2251, 1)::(2,1)::nil) 1) ((Proof_certif 2251 prime2251) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40529 : prime 40529. Proof. apply (Pocklington_refl (Pock_certif 40529 3 ((17, 1)::(2,4)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40531 : prime 40531. Proof. apply (Pocklington_refl (Pock_certif 40531 2 ((5, 1)::(3, 1)::(2,1)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40543 : prime 40543. Proof. apply (Pocklington_refl (Pock_certif 40543 3 ((29, 1)::(2,1)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40559 : prime 40559. Proof. apply (Pocklington_refl (Pock_certif 40559 7 ((2897, 1)::(2,1)::nil) 1) ((Proof_certif 2897 prime2897) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40577 : prime 40577. Proof. apply (Pocklington_refl (Pock_certif 40577 3 ((2,7)::nil) 60) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40583 : prime 40583. Proof. apply (Pocklington_refl (Pock_certif 40583 5 ((103, 1)::(2,1)::nil) 1) ((Proof_certif 103 prime103) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40591 : prime 40591. Proof. apply (Pocklington_refl (Pock_certif 40591 13 ((5, 1)::(3, 1)::(2,1)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40597 : prime 40597. Proof. apply (Pocklington_refl (Pock_certif 40597 2 ((17, 1)::(2,2)::nil) 52) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40609 : prime 40609. Proof. apply (Pocklington_refl (Pock_certif 40609 11 ((2,5)::nil) 51) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40627 : prime 40627. Proof. apply (Pocklington_refl (Pock_certif 40627 2 ((37, 1)::(2,1)::nil) 104) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40637 : prime 40637. Proof. apply (Pocklington_refl (Pock_certif 40637 2 ((10159, 1)::(2,2)::nil) 1) ((Proof_certif 10159 prime10159) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40639 : prime 40639. Proof. apply (Pocklington_refl (Pock_certif 40639 7 ((13, 1)::(3, 1)::(2,1)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40693 : prime 40693. Proof. apply (Pocklington_refl (Pock_certif 40693 2 ((3391, 1)::(2,2)::nil) 1) ((Proof_certif 3391 prime3391) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40697 : prime 40697. Proof. apply (Pocklington_refl (Pock_certif 40697 3 ((5087, 1)::(2,3)::nil) 1) ((Proof_certif 5087 prime5087) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40699 : prime 40699. Proof. apply (Pocklington_refl (Pock_certif 40699 2 ((7, 1)::(3, 1)::(2,1)::nil) 44) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40709 : prime 40709. Proof. apply (Pocklington_refl (Pock_certif 40709 2 ((10177, 1)::(2,2)::nil) 1) ((Proof_certif 10177 prime10177) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40739 : prime 40739. Proof. apply (Pocklington_refl (Pock_certif 40739 2 ((20369, 1)::(2,1)::nil) 1) ((Proof_certif 20369 prime20369) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40751 : prime 40751. Proof. apply (Pocklington_refl (Pock_certif 40751 14 ((5, 2)::(2,1)::nil) 12) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40759 : prime 40759. Proof. apply (Pocklington_refl (Pock_certif 40759 3 ((6793, 1)::(2,1)::nil) 1) ((Proof_certif 6793 prime6793) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40763 : prime 40763. Proof. apply (Pocklington_refl (Pock_certif 40763 2 ((89, 1)::(2,1)::nil) 1) ((Proof_certif 89 prime89) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40771 : prime 40771. Proof. apply (Pocklington_refl (Pock_certif 40771 2 ((3, 3)::(2,1)::nil) 106) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40787 : prime 40787. Proof. apply (Pocklington_refl (Pock_certif 40787 2 ((20393, 1)::(2,1)::nil) 1) ((Proof_certif 20393 prime20393) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40801 : prime 40801. Proof. apply (Pocklington_refl (Pock_certif 40801 7 ((2,5)::nil) 57) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40813 : prime 40813. Proof. apply (Pocklington_refl (Pock_certif 40813 2 ((19, 1)::(2,2)::nil) 80) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40819 : prime 40819. Proof. apply (Pocklington_refl (Pock_certif 40819 2 ((6803, 1)::(2,1)::nil) 1) ((Proof_certif 6803 prime6803) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40823 : prime 40823. Proof. apply (Pocklington_refl (Pock_certif 40823 5 ((20411, 1)::(2,1)::nil) 1) ((Proof_certif 20411 prime20411) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40829 : prime 40829. Proof. apply (Pocklington_refl (Pock_certif 40829 2 ((59, 1)::(2,2)::nil) 1) ((Proof_certif 59 prime59) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40841 : prime 40841. Proof. apply (Pocklington_refl (Pock_certif 40841 3 ((5, 1)::(2,3)::nil) 60) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40847 : prime 40847. Proof. apply (Pocklington_refl (Pock_certif 40847 5 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40849 : prime 40849. Proof. apply (Pocklington_refl (Pock_certif 40849 11 ((3, 1)::(2,4)::nil) 82) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40853 : prime 40853. Proof. apply (Pocklington_refl (Pock_certif 40853 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40867 : prime 40867. Proof. apply (Pocklington_refl (Pock_certif 40867 2 ((7, 1)::(3, 1)::(2,1)::nil) 48) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40879 : prime 40879. Proof. apply (Pocklington_refl (Pock_certif 40879 6 ((3, 3)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40883 : prime 40883. Proof. apply (Pocklington_refl (Pock_certif 40883 2 ((20441, 1)::(2,1)::nil) 1) ((Proof_certif 20441 prime20441) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40897 : prime 40897. Proof. apply (Pocklington_refl (Pock_certif 40897 5 ((2,6)::nil) 126) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40903 : prime 40903. Proof. apply (Pocklington_refl (Pock_certif 40903 3 ((17, 1)::(2,1)::nil) 45) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40927 : prime 40927. Proof. apply (Pocklington_refl (Pock_certif 40927 3 ((19, 1)::(2,1)::nil) 7) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40933 : prime 40933. Proof. apply (Pocklington_refl (Pock_certif 40933 2 ((3, 2)::(2,2)::nil) 55) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40939 : prime 40939. Proof. apply (Pocklington_refl (Pock_certif 40939 2 ((6823, 1)::(2,1)::nil) 1) ((Proof_certif 6823 prime6823) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40949 : prime 40949. Proof. apply (Pocklington_refl (Pock_certif 40949 2 ((29, 1)::(2,2)::nil) 120) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40961 : prime 40961. Proof. apply (Pocklington_refl (Pock_certif 40961 3 ((2,13)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40973 : prime 40973. Proof. apply (Pocklington_refl (Pock_certif 40973 2 ((10243, 1)::(2,2)::nil) 1) ((Proof_certif 10243 prime10243) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime40993 : prime 40993. Proof. apply (Pocklington_refl (Pock_certif 40993 5 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41011 : prime 41011. Proof. apply (Pocklington_refl (Pock_certif 41011 2 ((5, 1)::(3, 1)::(2,1)::nil) 45) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41017 : prime 41017. Proof. apply (Pocklington_refl (Pock_certif 41017 5 ((3, 1)::(2,3)::nil) 23) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41023 : prime 41023. Proof. apply (Pocklington_refl (Pock_certif 41023 3 ((43, 1)::(2,1)::nil) 132) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41039 : prime 41039. Proof. apply (Pocklington_refl (Pock_certif 41039 11 ((17, 1)::(2,1)::nil) 49) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41047 : prime 41047. Proof. apply (Pocklington_refl (Pock_certif 41047 3 ((6841, 1)::(2,1)::nil) 1) ((Proof_certif 6841 prime6841) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41051 : prime 41051. Proof. apply (Pocklington_refl (Pock_certif 41051 2 ((5, 2)::(2,1)::nil) 19) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41057 : prime 41057. Proof. apply (Pocklington_refl (Pock_certif 41057 3 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41077 : prime 41077. Proof. apply (Pocklington_refl (Pock_certif 41077 2 ((3, 2)::(2,2)::nil) 60) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41081 : prime 41081. Proof. apply (Pocklington_refl (Pock_certif 41081 3 ((5, 1)::(2,3)::nil) 66) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41113 : prime 41113. Proof. apply (Pocklington_refl (Pock_certif 41113 5 ((3, 1)::(2,3)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41117 : prime 41117. Proof. apply (Pocklington_refl (Pock_certif 41117 2 ((19, 1)::(2,2)::nil) 84) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41131 : prime 41131. Proof. apply (Pocklington_refl (Pock_certif 41131 10 ((5, 1)::(3, 1)::(2,1)::nil) 49) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41141 : prime 41141. Proof. apply (Pocklington_refl (Pock_certif 41141 2 ((11, 1)::(2,2)::nil) 54) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41143 : prime 41143. Proof. apply (Pocklington_refl (Pock_certif 41143 3 ((6857, 1)::(2,1)::nil) 1) ((Proof_certif 6857 prime6857) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41149 : prime 41149. Proof. apply (Pocklington_refl (Pock_certif 41149 2 ((3, 2)::(2,2)::nil) 62) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41161 : prime 41161. Proof. apply (Pocklington_refl (Pock_certif 41161 22 ((3, 1)::(2,3)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41177 : prime 41177. Proof. apply (Pocklington_refl (Pock_certif 41177 3 ((5147, 1)::(2,3)::nil) 1) ((Proof_certif 5147 prime5147) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41179 : prime 41179. Proof. apply (Pocklington_refl (Pock_certif 41179 2 ((6863, 1)::(2,1)::nil) 1) ((Proof_certif 6863 prime6863) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41183 : prime 41183. Proof. apply (Pocklington_refl (Pock_certif 41183 5 ((59, 1)::(2,1)::nil) 112) ((Proof_certif 59 prime59) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41189 : prime 41189. Proof. apply (Pocklington_refl (Pock_certif 41189 2 ((7, 1)::(2,2)::nil) 4) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41201 : prime 41201. Proof. apply (Pocklington_refl (Pock_certif 41201 3 ((5, 1)::(2,4)::nil) 34) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41203 : prime 41203. Proof. apply (Pocklington_refl (Pock_certif 41203 3 ((3, 3)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41213 : prime 41213. Proof. apply (Pocklington_refl (Pock_certif 41213 2 ((10303, 1)::(2,2)::nil) 1) ((Proof_certif 10303 prime10303) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41221 : prime 41221. Proof. apply (Pocklington_refl (Pock_certif 41221 2 ((3, 2)::(2,2)::nil) 64) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41227 : prime 41227. Proof. apply (Pocklington_refl (Pock_certif 41227 2 ((6871, 1)::(2,1)::nil) 1) ((Proof_certif 6871 prime6871) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41231 : prime 41231. Proof. apply (Pocklington_refl (Pock_certif 41231 7 ((7, 1)::(5, 1)::(2,1)::nil) 28) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41233 : prime 41233. Proof. apply (Pocklington_refl (Pock_certif 41233 5 ((3, 1)::(2,4)::nil) 90) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41243 : prime 41243. Proof. apply (Pocklington_refl (Pock_certif 41243 2 ((17, 1)::(2,1)::nil) 55) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41257 : prime 41257. Proof. apply (Pocklington_refl (Pock_certif 41257 5 ((3, 1)::(2,3)::nil) 35) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41263 : prime 41263. Proof. apply (Pocklington_refl (Pock_certif 41263 3 ((13, 1)::(2,1)::nil) 22) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41269 : prime 41269. Proof. apply (Pocklington_refl (Pock_certif 41269 2 ((19, 1)::(2,2)::nil) 86) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41281 : prime 41281. Proof. apply (Pocklington_refl (Pock_certif 41281 13 ((2,6)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41299 : prime 41299. Proof. apply (Pocklington_refl (Pock_certif 41299 2 ((6883, 1)::(2,1)::nil) 1) ((Proof_certif 6883 prime6883) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41333 : prime 41333. Proof. apply (Pocklington_refl (Pock_certif 41333 2 ((10333, 1)::(2,2)::nil) 1) ((Proof_certif 10333 prime10333) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41341 : prime 41341. Proof. apply (Pocklington_refl (Pock_certif 41341 2 ((5, 1)::(3, 1)::(2,2)::nil) 88) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41351 : prime 41351. Proof. apply (Pocklington_refl (Pock_certif 41351 7 ((5, 2)::(2,1)::nil) 25) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41357 : prime 41357. Proof. apply (Pocklington_refl (Pock_certif 41357 2 ((7, 1)::(2,2)::nil) 15) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41381 : prime 41381. Proof. apply (Pocklington_refl (Pock_certif 41381 2 ((2069, 1)::(2,2)::nil) 1) ((Proof_certif 2069 prime2069) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41387 : prime 41387. Proof. apply (Pocklington_refl (Pock_certif 41387 2 ((20693, 1)::(2,1)::nil) 1) ((Proof_certif 20693 prime20693) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41389 : prime 41389. Proof. apply (Pocklington_refl (Pock_certif 41389 2 ((3449, 1)::(2,2)::nil) 1) ((Proof_certif 3449 prime3449) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41399 : prime 41399. Proof. apply (Pocklington_refl (Pock_certif 41399 7 ((2957, 1)::(2,1)::nil) 1) ((Proof_certif 2957 prime2957) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41411 : prime 41411. Proof. apply (Pocklington_refl (Pock_certif 41411 2 ((41, 1)::(2,1)::nil) 12) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41413 : prime 41413. Proof. apply (Pocklington_refl (Pock_certif 41413 2 ((7, 1)::(2,2)::nil) 17) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41443 : prime 41443. Proof. apply (Pocklington_refl (Pock_certif 41443 2 ((6907, 1)::(2,1)::nil) 1) ((Proof_certif 6907 prime6907) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41453 : prime 41453. Proof. apply (Pocklington_refl (Pock_certif 41453 2 ((43, 1)::(2,2)::nil) 1) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41467 : prime 41467. Proof. apply (Pocklington_refl (Pock_certif 41467 2 ((6911, 1)::(2,1)::nil) 1) ((Proof_certif 6911 prime6911) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41479 : prime 41479. Proof. apply (Pocklington_refl (Pock_certif 41479 3 ((31, 1)::(2,1)::nil) 48) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41491 : prime 41491. Proof. apply (Pocklington_refl (Pock_certif 41491 13 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41507 : prime 41507. Proof. apply (Pocklington_refl (Pock_certif 41507 2 ((20753, 1)::(2,1)::nil) 1) ((Proof_certif 20753 prime20753) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41513 : prime 41513. Proof. apply (Pocklington_refl (Pock_certif 41513 3 ((5189, 1)::(2,3)::nil) 1) ((Proof_certif 5189 prime5189) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41519 : prime 41519. Proof. apply (Pocklington_refl (Pock_certif 41519 7 ((20759, 1)::(2,1)::nil) 1) ((Proof_certif 20759 prime20759) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41521 : prime 41521. Proof. apply (Pocklington_refl (Pock_certif 41521 17 ((3, 1)::(2,4)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41539 : prime 41539. Proof. apply (Pocklington_refl (Pock_certif 41539 3 ((7, 1)::(3, 1)::(2,1)::nil) 64) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41543 : prime 41543. Proof. apply (Pocklington_refl (Pock_certif 41543 5 ((20771, 1)::(2,1)::nil) 1) ((Proof_certif 20771 prime20771) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41549 : prime 41549. Proof. apply (Pocklington_refl (Pock_certif 41549 3 ((13, 1)::(2,2)::nil) 70) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41579 : prime 41579. Proof. apply (Pocklington_refl (Pock_certif 41579 2 ((20789, 1)::(2,1)::nil) 1) ((Proof_certif 20789 prime20789) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41593 : prime 41593. Proof. apply (Pocklington_refl (Pock_certif 41593 5 ((1733, 1)::(2,3)::nil) 1) ((Proof_certif 1733 prime1733) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41597 : prime 41597. Proof. apply (Pocklington_refl (Pock_certif 41597 2 ((10399, 1)::(2,2)::nil) 1) ((Proof_certif 10399 prime10399) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41603 : prime 41603. Proof. apply (Pocklington_refl (Pock_certif 41603 2 ((11, 1)::(2,1)::nil) 38) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41609 : prime 41609. Proof. apply (Pocklington_refl (Pock_certif 41609 3 ((7, 1)::(2,3)::nil) 70) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41611 : prime 41611. Proof. apply (Pocklington_refl (Pock_certif 41611 2 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41617 : prime 41617. Proof. apply (Pocklington_refl (Pock_certif 41617 5 ((3, 1)::(2,4)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41621 : prime 41621. Proof. apply (Pocklington_refl (Pock_certif 41621 2 ((2081, 1)::(2,2)::nil) 1) ((Proof_certif 2081 prime2081) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41627 : prime 41627. Proof. apply (Pocklington_refl (Pock_certif 41627 2 ((13, 1)::(2,1)::nil) 37) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41641 : prime 41641. Proof. apply (Pocklington_refl (Pock_certif 41641 11 ((5, 1)::(2,3)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41647 : prime 41647. Proof. apply (Pocklington_refl (Pock_certif 41647 3 ((11, 1)::(3, 1)::(2,1)::nil) 102) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41651 : prime 41651. Proof. apply (Pocklington_refl (Pock_certif 41651 2 ((5, 2)::(2,1)::nil) 32) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41659 : prime 41659. Proof. apply (Pocklington_refl (Pock_certif 41659 2 ((53, 1)::(2,1)::nil) 180) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41669 : prime 41669. Proof. apply (Pocklington_refl (Pock_certif 41669 2 ((11, 1)::(2,2)::nil) 66) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41681 : prime 41681. Proof. apply (Pocklington_refl (Pock_certif 41681 3 ((5, 1)::(2,4)::nil) 40) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41687 : prime 41687. Proof. apply (Pocklington_refl (Pock_certif 41687 5 ((19, 1)::(2,1)::nil) 31) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41719 : prime 41719. Proof. apply (Pocklington_refl (Pock_certif 41719 3 ((17, 1)::(2,1)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41729 : prime 41729. Proof. apply (Pocklington_refl (Pock_certif 41729 3 ((2,8)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41737 : prime 41737. Proof. apply (Pocklington_refl (Pock_certif 41737 5 ((37, 1)::(2,3)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41759 : prime 41759. Proof. apply (Pocklington_refl (Pock_certif 41759 7 ((20879, 1)::(2,1)::nil) 1) ((Proof_certif 20879 prime20879) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41761 : prime 41761. Proof. apply (Pocklington_refl (Pock_certif 41761 7 ((2,5)::nil) 21) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41771 : prime 41771. Proof. apply (Pocklington_refl (Pock_certif 41771 2 ((4177, 1)::(2,1)::nil) 1) ((Proof_certif 4177 prime4177) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41777 : prime 41777. Proof. apply (Pocklington_refl (Pock_certif 41777 3 ((7, 1)::(2,4)::nil) 148) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41801 : prime 41801. Proof. apply (Pocklington_refl (Pock_certif 41801 3 ((5, 1)::(2,3)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41809 : prime 41809. Proof. apply (Pocklington_refl (Pock_certif 41809 21 ((3, 1)::(2,4)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41813 : prime 41813. Proof. apply (Pocklington_refl (Pock_certif 41813 2 ((10453, 1)::(2,2)::nil) 1) ((Proof_certif 10453 prime10453) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41843 : prime 41843. Proof. apply (Pocklington_refl (Pock_certif 41843 2 ((20921, 1)::(2,1)::nil) 1) ((Proof_certif 20921 prime20921) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41849 : prime 41849. Proof. apply (Pocklington_refl (Pock_certif 41849 3 ((5231, 1)::(2,3)::nil) 1) ((Proof_certif 5231 prime5231) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41851 : prime 41851. Proof. apply (Pocklington_refl (Pock_certif 41851 10 ((3, 3)::(2,1)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41863 : prime 41863. Proof. apply (Pocklington_refl (Pock_certif 41863 3 ((6977, 1)::(2,1)::nil) 1) ((Proof_certif 6977 prime6977) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41879 : prime 41879. Proof. apply (Pocklington_refl (Pock_certif 41879 13 ((20939, 1)::(2,1)::nil) 1) ((Proof_certif 20939 prime20939) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41887 : prime 41887. Proof. apply (Pocklington_refl (Pock_certif 41887 3 ((13, 1)::(2,1)::nil) 48) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41893 : prime 41893. Proof. apply (Pocklington_refl (Pock_certif 41893 2 ((3491, 1)::(2,2)::nil) 1) ((Proof_certif 3491 prime3491) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41897 : prime 41897. Proof. apply (Pocklington_refl (Pock_certif 41897 3 ((5237, 1)::(2,3)::nil) 1) ((Proof_certif 5237 prime5237) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41903 : prime 41903. Proof. apply (Pocklington_refl (Pock_certif 41903 5 ((41, 1)::(2,1)::nil) 18) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41911 : prime 41911. Proof. apply (Pocklington_refl (Pock_certif 41911 3 ((5, 1)::(3, 1)::(2,1)::nil) 10) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41927 : prime 41927. Proof. apply (Pocklington_refl (Pock_certif 41927 5 ((20963, 1)::(2,1)::nil) 1) ((Proof_certif 20963 prime20963) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41941 : prime 41941. Proof. apply (Pocklington_refl (Pock_certif 41941 2 ((3, 2)::(2,2)::nil) 6) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41947 : prime 41947. Proof. apply (Pocklington_refl (Pock_certif 41947 2 ((6991, 1)::(2,1)::nil) 1) ((Proof_certif 6991 prime6991) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41953 : prime 41953. Proof. apply (Pocklington_refl (Pock_certif 41953 5 ((2,5)::nil) 28) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41957 : prime 41957. Proof. apply (Pocklington_refl (Pock_certif 41957 2 ((17, 1)::(2,2)::nil) 72) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41959 : prime 41959. Proof. apply (Pocklington_refl (Pock_certif 41959 6 ((3, 3)::(2,1)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41969 : prime 41969. Proof. apply (Pocklington_refl (Pock_certif 41969 3 ((43, 1)::(2,4)::nil) 1) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41981 : prime 41981. Proof. apply (Pocklington_refl (Pock_certif 41981 2 ((2099, 1)::(2,2)::nil) 1) ((Proof_certif 2099 prime2099) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41983 : prime 41983. Proof. apply (Pocklington_refl (Pock_certif 41983 3 ((6997, 1)::(2,1)::nil) 1) ((Proof_certif 6997 prime6997) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime41999 : prime 41999. Proof. apply (Pocklington_refl (Pock_certif 41999 11 ((23, 1)::(2,1)::nil) 84) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42013 : prime 42013. Proof. apply (Pocklington_refl (Pock_certif 42013 6 ((3, 2)::(2,2)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42017 : prime 42017. Proof. apply (Pocklington_refl (Pock_certif 42017 3 ((2,5)::nil) 30) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42019 : prime 42019. Proof. apply (Pocklington_refl (Pock_certif 42019 2 ((47, 1)::(2,1)::nil) 70) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42023 : prime 42023. Proof. apply (Pocklington_refl (Pock_certif 42023 5 ((21011, 1)::(2,1)::nil) 1) ((Proof_certif 21011 prime21011) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42043 : prime 42043. Proof. apply (Pocklington_refl (Pock_certif 42043 2 ((7, 1)::(3, 1)::(2,1)::nil) 76) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42061 : prime 42061. Proof. apply (Pocklington_refl (Pock_certif 42061 6 ((5, 1)::(3, 1)::(2,2)::nil) 100) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42071 : prime 42071. Proof. apply (Pocklington_refl (Pock_certif 42071 7 ((7, 1)::(5, 1)::(2,1)::nil) 40) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42073 : prime 42073. Proof. apply (Pocklington_refl (Pock_certif 42073 5 ((3, 1)::(2,3)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42083 : prime 42083. Proof. apply (Pocklington_refl (Pock_certif 42083 2 ((53, 1)::(2,1)::nil) 184) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42089 : prime 42089. Proof. apply (Pocklington_refl (Pock_certif 42089 3 ((5261, 1)::(2,3)::nil) 1) ((Proof_certif 5261 prime5261) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42101 : prime 42101. Proof. apply (Pocklington_refl (Pock_certif 42101 2 ((5, 2)::(2,2)::nil) 20) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42131 : prime 42131. Proof. apply (Pocklington_refl (Pock_certif 42131 2 ((11, 1)::(5, 1)::(2,1)::nil) 162) ((Proof_certif 5 prime5) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42139 : prime 42139. Proof. apply (Pocklington_refl (Pock_certif 42139 2 ((2341, 1)::(2,1)::nil) 1) ((Proof_certif 2341 prime2341) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42157 : prime 42157. Proof. apply (Pocklington_refl (Pock_certif 42157 2 ((3, 2)::(2,2)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42169 : prime 42169. Proof. apply (Pocklington_refl (Pock_certif 42169 11 ((3, 1)::(2,3)::nil) 23) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42179 : prime 42179. Proof. apply (Pocklington_refl (Pock_certif 42179 2 ((21089, 1)::(2,1)::nil) 1) ((Proof_certif 21089 prime21089) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42181 : prime 42181. Proof. apply (Pocklington_refl (Pock_certif 42181 10 ((5, 1)::(3, 1)::(2,2)::nil) 102) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42187 : prime 42187. Proof. apply (Pocklington_refl (Pock_certif 42187 2 ((79, 1)::(2,1)::nil) 1) ((Proof_certif 79 prime79) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42193 : prime 42193. Proof. apply (Pocklington_refl (Pock_certif 42193 15 ((3, 1)::(2,4)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42197 : prime 42197. Proof. apply (Pocklington_refl (Pock_certif 42197 2 ((7, 1)::(2,2)::nil) 48) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42209 : prime 42209. Proof. apply (Pocklington_refl (Pock_certif 42209 3 ((2,5)::nil) 36) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42221 : prime 42221. Proof. apply (Pocklington_refl (Pock_certif 42221 2 ((2111, 1)::(2,2)::nil) 1) ((Proof_certif 2111 prime2111) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42223 : prime 42223. Proof. apply (Pocklington_refl (Pock_certif 42223 3 ((31, 1)::(2,1)::nil) 60) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42227 : prime 42227. Proof. apply (Pocklington_refl (Pock_certif 42227 2 ((43, 1)::(2,1)::nil) 146) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42239 : prime 42239. Proof. apply (Pocklington_refl (Pock_certif 42239 7 ((7, 2)::(2,1)::nil) 38) ((Proof_certif 7 prime7) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42257 : prime 42257. Proof. apply (Pocklington_refl (Pock_certif 42257 3 ((19, 1)::(2,4)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42281 : prime 42281. Proof. apply (Pocklington_refl (Pock_certif 42281 3 ((5, 1)::(2,3)::nil) 13) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42283 : prime 42283. Proof. apply (Pocklington_refl (Pock_certif 42283 2 ((3, 3)::(2,1)::nil) 25) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42293 : prime 42293. Proof. apply (Pocklington_refl (Pock_certif 42293 2 ((97, 1)::(2,2)::nil) 1) ((Proof_certif 97 prime97) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42299 : prime 42299. Proof. apply (Pocklington_refl (Pock_certif 42299 2 ((21149, 1)::(2,1)::nil) 1) ((Proof_certif 21149 prime21149) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42307 : prime 42307. Proof. apply (Pocklington_refl (Pock_certif 42307 3 ((11, 1)::(3, 1)::(2,1)::nil) 112) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42323 : prime 42323. Proof. apply (Pocklington_refl (Pock_certif 42323 2 ((3023, 1)::(2,1)::nil) 1) ((Proof_certif 3023 prime3023) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42331 : prime 42331. Proof. apply (Pocklington_refl (Pock_certif 42331 3 ((5, 1)::(3, 1)::(2,1)::nil) 27) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42337 : prime 42337. Proof. apply (Pocklington_refl (Pock_certif 42337 5 ((2,5)::nil) 41) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42349 : prime 42349. Proof. apply (Pocklington_refl (Pock_certif 42349 2 ((3529, 1)::(2,2)::nil) 1) ((Proof_certif 3529 prime3529) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42359 : prime 42359. Proof. apply (Pocklington_refl (Pock_certif 42359 7 ((21179, 1)::(2,1)::nil) 1) ((Proof_certif 21179 prime21179) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42373 : prime 42373. Proof. apply (Pocklington_refl (Pock_certif 42373 2 ((3, 2)::(2,2)::nil) 22) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42379 : prime 42379. Proof. apply (Pocklington_refl (Pock_certif 42379 2 ((7, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42391 : prime 42391. Proof. apply (Pocklington_refl (Pock_certif 42391 6 ((3, 3)::(2,1)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42397 : prime 42397. Proof. apply (Pocklington_refl (Pock_certif 42397 2 ((3533, 1)::(2,2)::nil) 1) ((Proof_certif 3533 prime3533) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42403 : prime 42403. Proof. apply (Pocklington_refl (Pock_certif 42403 2 ((37, 1)::(2,1)::nil) 128) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42407 : prime 42407. Proof. apply (Pocklington_refl (Pock_certif 42407 5 ((13, 1)::(2,1)::nil) 10) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42409 : prime 42409. Proof. apply (Pocklington_refl (Pock_certif 42409 7 ((3, 1)::(2,3)::nil) 35) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42433 : prime 42433. Proof. apply (Pocklington_refl (Pock_certif 42433 5 ((2,6)::nil) 22) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42437 : prime 42437. Proof. apply (Pocklington_refl (Pock_certif 42437 2 ((103, 1)::(2,2)::nil) 1) ((Proof_certif 103 prime103) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42443 : prime 42443. Proof. apply (Pocklington_refl (Pock_certif 42443 2 ((21221, 1)::(2,1)::nil) 1) ((Proof_certif 21221 prime21221) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42451 : prime 42451. Proof. apply (Pocklington_refl (Pock_certif 42451 3 ((5, 1)::(3, 1)::(2,1)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42457 : prime 42457. Proof. apply (Pocklington_refl (Pock_certif 42457 11 ((3, 1)::(2,3)::nil) 37) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42461 : prime 42461. Proof. apply (Pocklington_refl (Pock_certif 42461 2 ((11, 1)::(2,2)::nil) 84) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42463 : prime 42463. Proof. apply (Pocklington_refl (Pock_certif 42463 3 ((7, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42467 : prime 42467. Proof. apply (Pocklington_refl (Pock_certif 42467 5 ((17, 1)::(2,1)::nil) 21) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42473 : prime 42473. Proof. apply (Pocklington_refl (Pock_certif 42473 3 ((5309, 1)::(2,3)::nil) 1) ((Proof_certif 5309 prime5309) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42487 : prime 42487. Proof. apply (Pocklington_refl (Pock_certif 42487 3 ((73, 1)::(2,1)::nil) 1) ((Proof_certif 73 prime73) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42491 : prime 42491. Proof. apply (Pocklington_refl (Pock_certif 42491 2 ((7, 1)::(5, 1)::(2,1)::nil) 46) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42499 : prime 42499. Proof. apply (Pocklington_refl (Pock_certif 42499 2 ((3, 3)::(2,1)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42509 : prime 42509. Proof. apply (Pocklington_refl (Pock_certif 42509 2 ((10627, 1)::(2,2)::nil) 1) ((Proof_certif 10627 prime10627) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42533 : prime 42533. Proof. apply (Pocklington_refl (Pock_certif 42533 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42557 : prime 42557. Proof. apply (Pocklington_refl (Pock_certif 42557 2 ((10639, 1)::(2,2)::nil) 1) ((Proof_certif 10639 prime10639) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42569 : prime 42569. Proof. apply (Pocklington_refl (Pock_certif 42569 3 ((17, 1)::(2,3)::nil) 40) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42571 : prime 42571. Proof. apply (Pocklington_refl (Pock_certif 42571 2 ((5, 1)::(3, 1)::(2,1)::nil) 36) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42577 : prime 42577. Proof. apply (Pocklington_refl (Pock_certif 42577 7 ((3, 1)::(2,4)::nil) 21) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42589 : prime 42589. Proof. apply (Pocklington_refl (Pock_certif 42589 2 ((3, 2)::(2,2)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42611 : prime 42611. Proof. apply (Pocklington_refl (Pock_certif 42611 2 ((4261, 1)::(2,1)::nil) 1) ((Proof_certif 4261 prime4261) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42641 : prime 42641. Proof. apply (Pocklington_refl (Pock_certif 42641 3 ((5, 1)::(2,4)::nil) 52) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42643 : prime 42643. Proof. apply (Pocklington_refl (Pock_certif 42643 2 ((23, 1)::(2,1)::nil) 1) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42649 : prime 42649. Proof. apply (Pocklington_refl (Pock_certif 42649 7 ((1777, 1)::(2,3)::nil) 1) ((Proof_certif 1777 prime1777) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42667 : prime 42667. Proof. apply (Pocklington_refl (Pock_certif 42667 2 ((13, 1)::(2,1)::nil) 24) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42677 : prime 42677. Proof. apply (Pocklington_refl (Pock_certif 42677 2 ((47, 1)::(2,2)::nil) 1) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42683 : prime 42683. Proof. apply (Pocklington_refl (Pock_certif 42683 2 ((21341, 1)::(2,1)::nil) 1) ((Proof_certif 21341 prime21341) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42689 : prime 42689. Proof. apply (Pocklington_refl (Pock_certif 42689 3 ((2,6)::nil) 26) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42697 : prime 42697. Proof. apply (Pocklington_refl (Pock_certif 42697 5 ((3, 2)::(2,3)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42701 : prime 42701. Proof. apply (Pocklington_refl (Pock_certif 42701 3 ((5, 2)::(2,2)::nil) 26) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42703 : prime 42703. Proof. apply (Pocklington_refl (Pock_certif 42703 5 ((11, 1)::(3, 1)::(2,1)::nil) 118) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42709 : prime 42709. Proof. apply (Pocklington_refl (Pock_certif 42709 2 ((3559, 1)::(2,2)::nil) 1) ((Proof_certif 3559 prime3559) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42719 : prime 42719. Proof. apply (Pocklington_refl (Pock_certif 42719 19 ((13, 1)::(2,1)::nil) 26) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42727 : prime 42727. Proof. apply (Pocklington_refl (Pock_certif 42727 3 ((7121, 1)::(2,1)::nil) 1) ((Proof_certif 7121 prime7121) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42737 : prime 42737. Proof. apply (Pocklington_refl (Pock_certif 42737 3 ((2671, 1)::(2,4)::nil) 1) ((Proof_certif 2671 prime2671) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42743 : prime 42743. Proof. apply (Pocklington_refl (Pock_certif 42743 5 ((43, 1)::(2,1)::nil) 152) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42751 : prime 42751. Proof. apply (Pocklington_refl (Pock_certif 42751 6 ((5, 1)::(3, 1)::(2,1)::nil) 42) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42767 : prime 42767. Proof. apply (Pocklington_refl (Pock_certif 42767 5 ((21383, 1)::(2,1)::nil) 1) ((Proof_certif 21383 prime21383) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42773 : prime 42773. Proof. apply (Pocklington_refl (Pock_certif 42773 3 ((17, 1)::(2,2)::nil) 84) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42787 : prime 42787. Proof. apply (Pocklington_refl (Pock_certif 42787 2 ((2377, 1)::(2,1)::nil) 1) ((Proof_certif 2377 prime2377) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42793 : prime 42793. Proof. apply (Pocklington_refl (Pock_certif 42793 5 ((1783, 1)::(2,3)::nil) 1) ((Proof_certif 1783 prime1783) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42797 : prime 42797. Proof. apply (Pocklington_refl (Pock_certif 42797 2 ((13, 1)::(2,2)::nil) 94) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42821 : prime 42821. Proof. apply (Pocklington_refl (Pock_certif 42821 2 ((2141, 1)::(2,2)::nil) 1) ((Proof_certif 2141 prime2141) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42829 : prime 42829. Proof. apply (Pocklington_refl (Pock_certif 42829 2 ((43, 1)::(2,2)::nil) 1) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42839 : prime 42839. Proof. apply (Pocklington_refl (Pock_certif 42839 11 ((21419, 1)::(2,1)::nil) 1) ((Proof_certif 21419 prime21419) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42841 : prime 42841. Proof. apply (Pocklington_refl (Pock_certif 42841 13 ((3, 2)::(2,3)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42853 : prime 42853. Proof. apply (Pocklington_refl (Pock_certif 42853 2 ((3571, 1)::(2,2)::nil) 1) ((Proof_certif 3571 prime3571) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42859 : prime 42859. Proof. apply (Pocklington_refl (Pock_certif 42859 2 ((2381, 1)::(2,1)::nil) 1) ((Proof_certif 2381 prime2381) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42863 : prime 42863. Proof. apply (Pocklington_refl (Pock_certif 42863 5 ((29, 1)::(2,1)::nil) 42) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42899 : prime 42899. Proof. apply (Pocklington_refl (Pock_certif 42899 2 ((89, 1)::(2,1)::nil) 1) ((Proof_certif 89 prime89) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42901 : prime 42901. Proof. apply (Pocklington_refl (Pock_certif 42901 6 ((5, 1)::(3, 1)::(2,2)::nil) 114) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42923 : prime 42923. Proof. apply (Pocklington_refl (Pock_certif 42923 2 ((1951, 1)::(2,1)::nil) 1) ((Proof_certif 1951 prime1951) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42929 : prime 42929. Proof. apply (Pocklington_refl (Pock_certif 42929 3 ((2683, 1)::(2,4)::nil) 1) ((Proof_certif 2683 prime2683) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42937 : prime 42937. Proof. apply (Pocklington_refl (Pock_certif 42937 5 ((1789, 1)::(2,3)::nil) 1) ((Proof_certif 1789 prime1789) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42943 : prime 42943. Proof. apply (Pocklington_refl (Pock_certif 42943 3 ((17, 1)::(2,1)::nil) 37) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42953 : prime 42953. Proof. apply (Pocklington_refl (Pock_certif 42953 3 ((7, 1)::(2,3)::nil) 94) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42961 : prime 42961. Proof. apply (Pocklington_refl (Pock_certif 42961 11 ((3, 1)::(2,4)::nil) 29) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42967 : prime 42967. Proof. apply (Pocklington_refl (Pock_certif 42967 3 ((7, 1)::(3, 1)::(2,1)::nil) 11) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42979 : prime 42979. Proof. apply (Pocklington_refl (Pock_certif 42979 2 ((13, 1)::(2,1)::nil) 37) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime42989 : prime 42989. Proof. apply (Pocklington_refl (Pock_certif 42989 2 ((11, 1)::(2,2)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43003 : prime 43003. Proof. apply (Pocklington_refl (Pock_certif 43003 2 ((2389, 1)::(2,1)::nil) 1) ((Proof_certif 2389 prime2389) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43013 : prime 43013. Proof. apply (Pocklington_refl (Pock_certif 43013 2 ((10753, 1)::(2,2)::nil) 1) ((Proof_certif 10753 prime10753) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43019 : prime 43019. Proof. apply (Pocklington_refl (Pock_certif 43019 2 ((137, 1)::(2,1)::nil) 1) ((Proof_certif 137 prime137) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43037 : prime 43037. Proof. apply (Pocklington_refl (Pock_certif 43037 2 ((7, 1)::(2,2)::nil) 20) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43049 : prime 43049. Proof. apply (Pocklington_refl (Pock_certif 43049 3 ((5381, 1)::(2,3)::nil) 1) ((Proof_certif 5381 prime5381) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43051 : prime 43051. Proof. apply (Pocklington_refl (Pock_certif 43051 2 ((5, 1)::(3, 1)::(2,1)::nil) 53) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43063 : prime 43063. Proof. apply (Pocklington_refl (Pock_certif 43063 3 ((7177, 1)::(2,1)::nil) 1) ((Proof_certif 7177 prime7177) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43067 : prime 43067. Proof. apply (Pocklington_refl (Pock_certif 43067 2 ((61, 1)::(2,1)::nil) 108) ((Proof_certif 61 prime61) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43093 : prime 43093. Proof. apply (Pocklington_refl (Pock_certif 43093 5 ((3, 2)::(2,2)::nil) 43) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43103 : prime 43103. Proof. apply (Pocklington_refl (Pock_certif 43103 5 ((23, 1)::(2,1)::nil) 14) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43117 : prime 43117. Proof. apply (Pocklington_refl (Pock_certif 43117 2 ((3593, 1)::(2,2)::nil) 1) ((Proof_certif 3593 prime3593) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43133 : prime 43133. Proof. apply (Pocklington_refl (Pock_certif 43133 2 ((41, 1)::(2,2)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43151 : prime 43151. Proof. apply (Pocklington_refl (Pock_certif 43151 11 ((5, 2)::(2,1)::nil) 62) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43159 : prime 43159. Proof. apply (Pocklington_refl (Pock_certif 43159 3 ((7193, 1)::(2,1)::nil) 1) ((Proof_certif 7193 prime7193) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43177 : prime 43177. Proof. apply (Pocklington_refl (Pock_certif 43177 5 ((7, 1)::(2,3)::nil) 98) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43189 : prime 43189. Proof. apply (Pocklington_refl (Pock_certif 43189 2 ((59, 1)::(2,2)::nil) 1) ((Proof_certif 59 prime59) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43201 : prime 43201. Proof. apply (Pocklington_refl (Pock_certif 43201 13 ((2,6)::nil) 34) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43207 : prime 43207. Proof. apply (Pocklington_refl (Pock_certif 43207 3 ((19, 1)::(2,1)::nil) 72) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43223 : prime 43223. Proof. apply (Pocklington_refl (Pock_certif 43223 5 ((21611, 1)::(2,1)::nil) 1) ((Proof_certif 21611 prime21611) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43237 : prime 43237. Proof. apply (Pocklington_refl (Pock_certif 43237 2 ((3, 2)::(2,2)::nil) 47) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43261 : prime 43261. Proof. apply (Pocklington_refl (Pock_certif 43261 2 ((5, 1)::(3, 1)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43271 : prime 43271. Proof. apply (Pocklington_refl (Pock_certif 43271 7 ((4327, 1)::(2,1)::nil) 1) ((Proof_certif 4327 prime4327) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43283 : prime 43283. Proof. apply (Pocklington_refl (Pock_certif 43283 2 ((17, 1)::(2,1)::nil) 47) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43291 : prime 43291. Proof. apply (Pocklington_refl (Pock_certif 43291 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43313 : prime 43313. Proof. apply (Pocklington_refl (Pock_certif 43313 3 ((2707, 1)::(2,4)::nil) 1) ((Proof_certif 2707 prime2707) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43319 : prime 43319. Proof. apply (Pocklington_refl (Pock_certif 43319 11 ((11, 2)::(2,1)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43321 : prime 43321. Proof. apply (Pocklington_refl (Pock_certif 43321 7 ((3, 1)::(2,3)::nil) 23) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43331 : prime 43331. Proof. apply (Pocklington_refl (Pock_certif 43331 2 ((7, 1)::(5, 1)::(2,1)::nil) 58) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43391 : prime 43391. Proof. apply (Pocklington_refl (Pock_certif 43391 17 ((4339, 1)::(2,1)::nil) 1) ((Proof_certif 4339 prime4339) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43397 : prime 43397. Proof. apply (Pocklington_refl (Pock_certif 43397 2 ((19, 1)::(2,2)::nil) 114) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43399 : prime 43399. Proof. apply (Pocklington_refl (Pock_certif 43399 3 ((2411, 1)::(2,1)::nil) 1) ((Proof_certif 2411 prime2411) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43403 : prime 43403. Proof. apply (Pocklington_refl (Pock_certif 43403 2 ((21701, 1)::(2,1)::nil) 1) ((Proof_certif 21701 prime21701) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43411 : prime 43411. Proof. apply (Pocklington_refl (Pock_certif 43411 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43427 : prime 43427. Proof. apply (Pocklington_refl (Pock_certif 43427 2 ((21713, 1)::(2,1)::nil) 1) ((Proof_certif 21713 prime21713) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43441 : prime 43441. Proof. apply (Pocklington_refl (Pock_certif 43441 7 ((3, 1)::(2,4)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43451 : prime 43451. Proof. apply (Pocklington_refl (Pock_certif 43451 2 ((5, 2)::(2,1)::nil) 68) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43457 : prime 43457. Proof. apply (Pocklington_refl (Pock_certif 43457 3 ((2,6)::nil) 38) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43481 : prime 43481. Proof. apply (Pocklington_refl (Pock_certif 43481 6 ((5, 1)::(2,3)::nil) 45) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43487 : prime 43487. Proof. apply (Pocklington_refl (Pock_certif 43487 5 ((17, 1)::(2,1)::nil) 53) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43499 : prime 43499. Proof. apply (Pocklington_refl (Pock_certif 43499 2 ((13, 1)::(7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43517 : prime 43517. Proof. apply (Pocklington_refl (Pock_certif 43517 2 ((11, 1)::(2,2)::nil) 18) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43541 : prime 43541. Proof. apply (Pocklington_refl (Pock_certif 43541 2 ((7, 1)::(2,2)::nil) 40) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43543 : prime 43543. Proof. apply (Pocklington_refl (Pock_certif 43543 3 ((41, 1)::(2,1)::nil) 38) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43573 : prime 43573. Proof. apply (Pocklington_refl (Pock_certif 43573 2 ((3631, 1)::(2,2)::nil) 1) ((Proof_certif 3631 prime3631) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43577 : prime 43577. Proof. apply (Pocklington_refl (Pock_certif 43577 3 ((13, 1)::(2,3)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43579 : prime 43579. Proof. apply (Pocklington_refl (Pock_certif 43579 2 ((3, 3)::(2,1)::nil) 50) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43591 : prime 43591. Proof. apply (Pocklington_refl (Pock_certif 43591 11 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43597 : prime 43597. Proof. apply (Pocklington_refl (Pock_certif 43597 2 ((3, 2)::(2,2)::nil) 57) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43607 : prime 43607. Proof. apply (Pocklington_refl (Pock_certif 43607 5 ((21803, 1)::(2,1)::nil) 1) ((Proof_certif 21803 prime21803) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43609 : prime 43609. Proof. apply (Pocklington_refl (Pock_certif 43609 14 ((3, 1)::(2,3)::nil) 37) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43613 : prime 43613. Proof. apply (Pocklington_refl (Pock_certif 43613 2 ((10903, 1)::(2,2)::nil) 1) ((Proof_certif 10903 prime10903) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43627 : prime 43627. Proof. apply (Pocklington_refl (Pock_certif 43627 2 ((11, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43633 : prime 43633. Proof. apply (Pocklington_refl (Pock_certif 43633 5 ((3, 1)::(2,4)::nil) 44) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43649 : prime 43649. Proof. apply (Pocklington_refl (Pock_certif 43649 3 ((2,7)::nil) 84) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43651 : prime 43651. Proof. apply (Pocklington_refl (Pock_certif 43651 2 ((5, 1)::(3, 1)::(2,1)::nil) 5) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43661 : prime 43661. Proof. apply (Pocklington_refl (Pock_certif 43661 2 ((37, 1)::(2,2)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43669 : prime 43669. Proof. apply (Pocklington_refl (Pock_certif 43669 2 ((3, 2)::(2,2)::nil) 59) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43691 : prime 43691. Proof. apply (Pocklington_refl (Pock_certif 43691 2 ((17, 1)::(2,1)::nil) 59) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43711 : prime 43711. Proof. apply (Pocklington_refl (Pock_certif 43711 13 ((5, 1)::(3, 1)::(2,1)::nil) 9) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43717 : prime 43717. Proof. apply (Pocklington_refl (Pock_certif 43717 2 ((3643, 1)::(2,2)::nil) 1) ((Proof_certif 3643 prime3643) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43721 : prime 43721. Proof. apply (Pocklington_refl (Pock_certif 43721 3 ((5, 1)::(2,3)::nil) 52) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43753 : prime 43753. Proof. apply (Pocklington_refl (Pock_certif 43753 7 ((3, 1)::(2,3)::nil) 43) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43759 : prime 43759. Proof. apply (Pocklington_refl (Pock_certif 43759 3 ((11, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43777 : prime 43777. Proof. apply (Pocklington_refl (Pock_certif 43777 5 ((2,8)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43781 : prime 43781. Proof. apply (Pocklington_refl (Pock_certif 43781 2 ((11, 1)::(2,2)::nil) 25) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43783 : prime 43783. Proof. apply (Pocklington_refl (Pock_certif 43783 3 ((7297, 1)::(2,1)::nil) 1) ((Proof_certif 7297 prime7297) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43787 : prime 43787. Proof. apply (Pocklington_refl (Pock_certif 43787 2 ((21893, 1)::(2,1)::nil) 1) ((Proof_certif 21893 prime21893) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43789 : prime 43789. Proof. apply (Pocklington_refl (Pock_certif 43789 2 ((41, 1)::(2,2)::nil) 1) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43793 : prime 43793. Proof. apply (Pocklington_refl (Pock_certif 43793 3 ((7, 1)::(2,4)::nil) 166) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43801 : prime 43801. Proof. apply (Pocklington_refl (Pock_certif 43801 11 ((5, 1)::(2,3)::nil) 54) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43853 : prime 43853. Proof. apply (Pocklington_refl (Pock_certif 43853 2 ((19, 1)::(2,2)::nil) 120) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43867 : prime 43867. Proof. apply (Pocklington_refl (Pock_certif 43867 2 ((2437, 1)::(2,1)::nil) 1) ((Proof_certif 2437 prime2437) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43889 : prime 43889. Proof. apply (Pocklington_refl (Pock_certif 43889 3 ((13, 1)::(2,4)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43891 : prime 43891. Proof. apply (Pocklington_refl (Pock_certif 43891 3 ((5, 1)::(3, 1)::(2,1)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43913 : prime 43913. Proof. apply (Pocklington_refl (Pock_certif 43913 3 ((11, 1)::(2,3)::nil) 146) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43933 : prime 43933. Proof. apply (Pocklington_refl (Pock_certif 43933 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43943 : prime 43943. Proof. apply (Pocklington_refl (Pock_certif 43943 5 ((127, 1)::(2,1)::nil) 1) ((Proof_certif 127 prime127) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43951 : prime 43951. Proof. apply (Pocklington_refl (Pock_certif 43951 6 ((5, 1)::(3, 1)::(2,1)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43961 : prime 43961. Proof. apply (Pocklington_refl (Pock_certif 43961 3 ((5, 1)::(2,3)::nil) 58) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43963 : prime 43963. Proof. apply (Pocklington_refl (Pock_certif 43963 3 ((17, 1)::(2,1)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43969 : prime 43969. Proof. apply (Pocklington_refl (Pock_certif 43969 11 ((2,6)::nil) 46) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43973 : prime 43973. Proof. apply (Pocklington_refl (Pock_certif 43973 2 ((10993, 1)::(2,2)::nil) 1) ((Proof_certif 10993 prime10993) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43987 : prime 43987. Proof. apply (Pocklington_refl (Pock_certif 43987 2 ((7331, 1)::(2,1)::nil) 1) ((Proof_certif 7331 prime7331) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43991 : prime 43991. Proof. apply (Pocklington_refl (Pock_certif 43991 17 ((53, 1)::(2,1)::nil) 202) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime43997 : prime 43997. Proof. apply (Pocklington_refl (Pock_certif 43997 2 ((17, 1)::(2,2)::nil) 102) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44017 : prime 44017. Proof. apply (Pocklington_refl (Pock_certif 44017 11 ((3, 1)::(2,4)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44021 : prime 44021. Proof. apply (Pocklington_refl (Pock_certif 44021 2 ((31, 1)::(2,2)::nil) 106) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44027 : prime 44027. Proof. apply (Pocklington_refl (Pock_certif 44027 2 ((22013, 1)::(2,1)::nil) 1) ((Proof_certif 22013 prime22013) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44029 : prime 44029. Proof. apply (Pocklington_refl (Pock_certif 44029 6 ((3, 2)::(2,2)::nil) 70) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44041 : prime 44041. Proof. apply (Pocklington_refl (Pock_certif 44041 11 ((5, 1)::(2,3)::nil) 60) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44053 : prime 44053. Proof. apply (Pocklington_refl (Pock_certif 44053 2 ((3671, 1)::(2,2)::nil) 1) ((Proof_certif 3671 prime3671) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44059 : prime 44059. Proof. apply (Pocklington_refl (Pock_certif 44059 2 ((7, 1)::(3, 1)::(2,1)::nil) 39) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44071 : prime 44071. Proof. apply (Pocklington_refl (Pock_certif 44071 3 ((5, 1)::(3, 1)::(2,1)::nil) 25) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44087 : prime 44087. Proof. apply (Pocklington_refl (Pock_certif 44087 5 ((47, 1)::(2,1)::nil) 92) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44089 : prime 44089. Proof. apply (Pocklington_refl (Pock_certif 44089 7 ((11, 1)::(2,3)::nil) 148) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44101 : prime 44101. Proof. apply (Pocklington_refl (Pock_certif 44101 6 ((3, 2)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44111 : prime 44111. Proof. apply (Pocklington_refl (Pock_certif 44111 7 ((11, 1)::(5, 1)::(2,1)::nil) 180) ((Proof_certif 5 prime5) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44119 : prime 44119. Proof. apply (Pocklington_refl (Pock_certif 44119 6 ((3, 3)::(2,1)::nil) 60) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44123 : prime 44123. Proof. apply (Pocklington_refl (Pock_certif 44123 2 ((13, 1)::(2,1)::nil) 28) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44129 : prime 44129. Proof. apply (Pocklington_refl (Pock_certif 44129 3 ((2,5)::nil) 32) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44131 : prime 44131. Proof. apply (Pocklington_refl (Pock_certif 44131 2 ((5, 1)::(3, 1)::(2,1)::nil) 27) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44159 : prime 44159. Proof. apply (Pocklington_refl (Pock_certif 44159 11 ((22079, 1)::(2,1)::nil) 1) ((Proof_certif 22079 prime22079) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44171 : prime 44171. Proof. apply (Pocklington_refl (Pock_certif 44171 2 ((7, 1)::(5, 1)::(2,1)::nil) 70) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44179 : prime 44179. Proof. apply (Pocklington_refl (Pock_certif 44179 2 ((37, 1)::(2,1)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44189 : prime 44189. Proof. apply (Pocklington_refl (Pock_certif 44189 2 ((11047, 1)::(2,2)::nil) 1) ((Proof_certif 11047 prime11047) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44201 : prime 44201. Proof. apply (Pocklington_refl (Pock_certif 44201 3 ((5, 1)::(2,3)::nil) 64) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44203 : prime 44203. Proof. apply (Pocklington_refl (Pock_certif 44203 2 ((53, 1)::(2,1)::nil) 204) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44207 : prime 44207. Proof. apply (Pocklington_refl (Pock_certif 44207 5 ((23, 1)::(2,1)::nil) 40) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44221 : prime 44221. Proof. apply (Pocklington_refl (Pock_certif 44221 2 ((5, 1)::(3, 1)::(2,2)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44249 : prime 44249. Proof. apply (Pocklington_refl (Pock_certif 44249 3 ((5531, 1)::(2,3)::nil) 1) ((Proof_certif 5531 prime5531) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44257 : prime 44257. Proof. apply (Pocklington_refl (Pock_certif 44257 5 ((2,5)::nil) 36) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44263 : prime 44263. Proof. apply (Pocklington_refl (Pock_certif 44263 3 ((2459, 1)::(2,1)::nil) 1) ((Proof_certif 2459 prime2459) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44267 : prime 44267. Proof. apply (Pocklington_refl (Pock_certif 44267 2 ((22133, 1)::(2,1)::nil) 1) ((Proof_certif 22133 prime22133) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44269 : prime 44269. Proof. apply (Pocklington_refl (Pock_certif 44269 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44273 : prime 44273. Proof. apply (Pocklington_refl (Pock_certif 44273 3 ((2767, 1)::(2,4)::nil) 1) ((Proof_certif 2767 prime2767) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44279 : prime 44279. Proof. apply (Pocklington_refl (Pock_certif 44279 7 ((13, 1)::(2,1)::nil) 35) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44281 : prime 44281. Proof. apply (Pocklington_refl (Pock_certif 44281 7 ((3, 2)::(2,3)::nil) 38) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44293 : prime 44293. Proof. apply (Pocklington_refl (Pock_certif 44293 2 ((3691, 1)::(2,2)::nil) 1) ((Proof_certif 3691 prime3691) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44351 : prime 44351. Proof. apply (Pocklington_refl (Pock_certif 44351 19 ((5, 2)::(2,1)::nil) 86) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44357 : prime 44357. Proof. apply (Pocklington_refl (Pock_certif 44357 2 ((13, 1)::(2,2)::nil) 19) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44371 : prime 44371. Proof. apply (Pocklington_refl (Pock_certif 44371 2 ((5, 1)::(3, 1)::(2,1)::nil) 36) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44381 : prime 44381. Proof. apply (Pocklington_refl (Pock_certif 44381 2 ((7, 1)::(2,2)::nil) 8) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44383 : prime 44383. Proof. apply (Pocklington_refl (Pock_certif 44383 3 ((13, 1)::(2,1)::nil) 39) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44389 : prime 44389. Proof. apply (Pocklington_refl (Pock_certif 44389 2 ((3, 2)::(2,2)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44417 : prime 44417. Proof. apply (Pocklington_refl (Pock_certif 44417 3 ((2,7)::nil) 90) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44449 : prime 44449. Proof. apply (Pocklington_refl (Pock_certif 44449 7 ((2,5)::nil) 43) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44453 : prime 44453. Proof. apply (Pocklington_refl (Pock_certif 44453 2 ((11113, 1)::(2,2)::nil) 1) ((Proof_certif 11113 prime11113) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44483 : prime 44483. Proof. apply (Pocklington_refl (Pock_certif 44483 2 ((23, 1)::(2,1)::nil) 46) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44491 : prime 44491. Proof. apply (Pocklington_refl (Pock_certif 44491 13 ((5, 1)::(3, 1)::(2,1)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44497 : prime 44497. Proof. apply (Pocklington_refl (Pock_certif 44497 5 ((3, 1)::(2,4)::nil) 62) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44501 : prime 44501. Proof. apply (Pocklington_refl (Pock_certif 44501 2 ((5, 2)::(2,2)::nil) 44) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44507 : prime 44507. Proof. apply (Pocklington_refl (Pock_certif 44507 2 ((11, 1)::(7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44519 : prime 44519. Proof. apply (Pocklington_refl (Pock_certif 44519 13 ((22259, 1)::(2,1)::nil) 1) ((Proof_certif 22259 prime22259) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44531 : prime 44531. Proof. apply (Pocklington_refl (Pock_certif 44531 2 ((61, 1)::(2,1)::nil) 120) ((Proof_certif 61 prime61) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44533 : prime 44533. Proof. apply (Pocklington_refl (Pock_certif 44533 2 ((3, 2)::(2,2)::nil) 5) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44537 : prime 44537. Proof. apply (Pocklington_refl (Pock_certif 44537 3 ((19, 1)::(2,3)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44543 : prime 44543. Proof. apply (Pocklington_refl (Pock_certif 44543 5 ((22271, 1)::(2,1)::nil) 1) ((Proof_certif 22271 prime22271) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44549 : prime 44549. Proof. apply (Pocklington_refl (Pock_certif 44549 2 ((7, 1)::(2,2)::nil) 17) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44563 : prime 44563. Proof. apply (Pocklington_refl (Pock_certif 44563 3 ((7, 1)::(3, 1)::(2,1)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44579 : prime 44579. Proof. apply (Pocklington_refl (Pock_certif 44579 2 ((31, 1)::(2,1)::nil) 98) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44587 : prime 44587. Proof. apply (Pocklington_refl (Pock_certif 44587 2 ((2477, 1)::(2,1)::nil) 1) ((Proof_certif 2477 prime2477) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44617 : prime 44617. Proof. apply (Pocklington_refl (Pock_certif 44617 5 ((3, 1)::(2,3)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44621 : prime 44621. Proof. apply (Pocklington_refl (Pock_certif 44621 2 ((23, 1)::(2,2)::nil) 116) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44623 : prime 44623. Proof. apply (Pocklington_refl (Pock_certif 44623 3 ((37, 1)::(2,1)::nil) 9) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44633 : prime 44633. Proof. apply (Pocklington_refl (Pock_certif 44633 3 ((7, 1)::(2,3)::nil) 10) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44641 : prime 44641. Proof. apply (Pocklington_refl (Pock_certif 44641 19 ((2,5)::nil) 49) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44647 : prime 44647. Proof. apply (Pocklington_refl (Pock_certif 44647 5 ((7, 1)::(3, 1)::(2,1)::nil) 54) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44651 : prime 44651. Proof. apply (Pocklington_refl (Pock_certif 44651 2 ((5, 2)::(2,1)::nil) 92) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44657 : prime 44657. Proof. apply (Pocklington_refl (Pock_certif 44657 3 ((2791, 1)::(2,4)::nil) 1) ((Proof_certif 2791 prime2791) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44683 : prime 44683. Proof. apply (Pocklington_refl (Pock_certif 44683 2 ((11, 1)::(3, 1)::(2,1)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44687 : prime 44687. Proof. apply (Pocklington_refl (Pock_certif 44687 5 ((22343, 1)::(2,1)::nil) 1) ((Proof_certif 22343 prime22343) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44699 : prime 44699. Proof. apply (Pocklington_refl (Pock_certif 44699 2 ((22349, 1)::(2,1)::nil) 1) ((Proof_certif 22349 prime22349) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44701 : prime 44701. Proof. apply (Pocklington_refl (Pock_certif 44701 2 ((5, 1)::(3, 1)::(2,2)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44711 : prime 44711. Proof. apply (Pocklington_refl (Pock_certif 44711 7 ((17, 1)::(2,1)::nil) 19) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44729 : prime 44729. Proof. apply (Pocklington_refl (Pock_certif 44729 3 ((5591, 1)::(2,3)::nil) 1) ((Proof_certif 5591 prime5591) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44741 : prime 44741. Proof. apply (Pocklington_refl (Pock_certif 44741 2 ((2237, 1)::(2,2)::nil) 1) ((Proof_certif 2237 prime2237) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44753 : prime 44753. Proof. apply (Pocklington_refl (Pock_certif 44753 3 ((2797, 1)::(2,4)::nil) 1) ((Proof_certif 2797 prime2797) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44771 : prime 44771. Proof. apply (Pocklington_refl (Pock_certif 44771 6 ((11, 1)::(5, 1)::(2,1)::nil) 186) ((Proof_certif 5 prime5) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44773 : prime 44773. Proof. apply (Pocklington_refl (Pock_certif 44773 2 ((7, 1)::(2,2)::nil) 27) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44777 : prime 44777. Proof. apply (Pocklington_refl (Pock_certif 44777 3 ((29, 1)::(2,3)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44789 : prime 44789. Proof. apply (Pocklington_refl (Pock_certif 44789 2 ((11197, 1)::(2,2)::nil) 1) ((Proof_certif 11197 prime11197) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44797 : prime 44797. Proof. apply (Pocklington_refl (Pock_certif 44797 2 ((3733, 1)::(2,2)::nil) 1) ((Proof_certif 3733 prime3733) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44809 : prime 44809. Proof. apply (Pocklington_refl (Pock_certif 44809 11 ((3, 1)::(2,3)::nil) 39) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44819 : prime 44819. Proof. apply (Pocklington_refl (Pock_certif 44819 2 ((22409, 1)::(2,1)::nil) 1) ((Proof_certif 22409 prime22409) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44839 : prime 44839. Proof. apply (Pocklington_refl (Pock_certif 44839 3 ((47, 1)::(2,1)::nil) 100) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44843 : prime 44843. Proof. apply (Pocklington_refl (Pock_certif 44843 2 ((3203, 1)::(2,1)::nil) 1) ((Proof_certif 3203 prime3203) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44851 : prime 44851. Proof. apply (Pocklington_refl (Pock_certif 44851 2 ((5, 1)::(3, 1)::(2,1)::nil) 53) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44867 : prime 44867. Proof. apply (Pocklington_refl (Pock_certif 44867 2 ((22433, 1)::(2,1)::nil) 1) ((Proof_certif 22433 prime22433) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44879 : prime 44879. Proof. apply (Pocklington_refl (Pock_certif 44879 7 ((19, 1)::(2,1)::nil) 39) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44887 : prime 44887. Proof. apply (Pocklington_refl (Pock_certif 44887 3 ((7481, 1)::(2,1)::nil) 1) ((Proof_certif 7481 prime7481) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44893 : prime 44893. Proof. apply (Pocklington_refl (Pock_certif 44893 5 ((3, 2)::(2,2)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44909 : prime 44909. Proof. apply (Pocklington_refl (Pock_certif 44909 2 ((103, 1)::(2,2)::nil) 1) ((Proof_certif 103 prime103) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44917 : prime 44917. Proof. apply (Pocklington_refl (Pock_certif 44917 2 ((19, 1)::(2,2)::nil) 134) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44927 : prime 44927. Proof. apply (Pocklington_refl (Pock_certif 44927 5 ((3209, 1)::(2,1)::nil) 1) ((Proof_certif 3209 prime3209) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44939 : prime 44939. Proof. apply (Pocklington_refl (Pock_certif 44939 2 ((22469, 1)::(2,1)::nil) 1) ((Proof_certif 22469 prime22469) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44953 : prime 44953. Proof. apply (Pocklington_refl (Pock_certif 44953 5 ((1873, 1)::(2,3)::nil) 1) ((Proof_certif 1873 prime1873) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44959 : prime 44959. Proof. apply (Pocklington_refl (Pock_certif 44959 3 ((59, 1)::(2,1)::nil) 144) ((Proof_certif 59 prime59) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44963 : prime 44963. Proof. apply (Pocklington_refl (Pock_certif 44963 2 ((22481, 1)::(2,1)::nil) 1) ((Proof_certif 22481 prime22481) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44971 : prime 44971. Proof. apply (Pocklington_refl (Pock_certif 44971 3 ((5, 1)::(3, 1)::(2,1)::nil) 57) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44983 : prime 44983. Proof. apply (Pocklington_refl (Pock_certif 44983 3 ((3, 3)::(2,1)::nil) 76) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime44987 : prime 44987. Proof. apply (Pocklington_refl (Pock_certif 44987 2 ((83, 1)::(2,1)::nil) 1) ((Proof_certif 83 prime83) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45007 : prime 45007. Proof. apply (Pocklington_refl (Pock_certif 45007 3 ((13, 1)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45013 : prime 45013. Proof. apply (Pocklington_refl (Pock_certif 45013 2 ((11, 1)::(2,2)::nil) 54) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45053 : prime 45053. Proof. apply (Pocklington_refl (Pock_certif 45053 2 ((7, 1)::(2,2)::nil) 38) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45061 : prime 45061. Proof. apply (Pocklington_refl (Pock_certif 45061 2 ((5, 1)::(3, 1)::(2,2)::nil) 30) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45077 : prime 45077. Proof. apply (Pocklington_refl (Pock_certif 45077 2 ((59, 1)::(2,2)::nil) 1) ((Proof_certif 59 prime59) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45083 : prime 45083. Proof. apply (Pocklington_refl (Pock_certif 45083 2 ((22541, 1)::(2,1)::nil) 1) ((Proof_certif 22541 prime22541) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45119 : prime 45119. Proof. apply (Pocklington_refl (Pock_certif 45119 7 ((17, 1)::(2,1)::nil) 32) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45121 : prime 45121. Proof. apply (Pocklington_refl (Pock_certif 45121 7 ((2,6)::nil) 64) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45127 : prime 45127. Proof. apply (Pocklington_refl (Pock_certif 45127 6 ((23, 1)::(2,1)::nil) 60) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45131 : prime 45131. Proof. apply (Pocklington_refl (Pock_certif 45131 2 ((4513, 1)::(2,1)::nil) 1) ((Proof_certif 4513 prime4513) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45137 : prime 45137. Proof. apply (Pocklington_refl (Pock_certif 45137 3 ((7, 1)::(2,4)::nil) 178) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45139 : prime 45139. Proof. apply (Pocklington_refl (Pock_certif 45139 2 ((7523, 1)::(2,1)::nil) 1) ((Proof_certif 7523 prime7523) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45161 : prime 45161. Proof. apply (Pocklington_refl (Pock_certif 45161 3 ((5, 1)::(2,3)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45179 : prime 45179. Proof. apply (Pocklington_refl (Pock_certif 45179 6 ((7, 2)::(2,1)::nil) 68) ((Proof_certif 7 prime7) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45181 : prime 45181. Proof. apply (Pocklington_refl (Pock_certif 45181 2 ((3, 2)::(2,2)::nil) 28) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45191 : prime 45191. Proof. apply (Pocklington_refl (Pock_certif 45191 11 ((4519, 1)::(2,1)::nil) 1) ((Proof_certif 4519 prime4519) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45197 : prime 45197. Proof. apply (Pocklington_refl (Pock_certif 45197 2 ((11299, 1)::(2,2)::nil) 1) ((Proof_certif 11299 prime11299) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45233 : prime 45233. Proof. apply (Pocklington_refl (Pock_certif 45233 3 ((11, 1)::(2,4)::nil) 1) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45247 : prime 45247. Proof. apply (Pocklington_refl (Pock_certif 45247 3 ((7541, 1)::(2,1)::nil) 1) ((Proof_certif 7541 prime7541) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45259 : prime 45259. Proof. apply (Pocklington_refl (Pock_certif 45259 2 ((19, 1)::(2,1)::nil) 49) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45263 : prime 45263. Proof. apply (Pocklington_refl (Pock_certif 45263 5 ((53, 1)::(2,1)::nil) 1) ((Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45281 : prime 45281. Proof. apply (Pocklington_refl (Pock_certif 45281 3 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45289 : prime 45289. Proof. apply (Pocklington_refl (Pock_certif 45289 11 ((3, 2)::(2,3)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45293 : prime 45293. Proof. apply (Pocklington_refl (Pock_certif 45293 2 ((13, 1)::(2,2)::nil) 38) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45307 : prime 45307. Proof. apply (Pocklington_refl (Pock_certif 45307 2 ((3, 3)::(2,1)::nil) 82) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45317 : prime 45317. Proof. apply (Pocklington_refl (Pock_certif 45317 2 ((11329, 1)::(2,2)::nil) 1) ((Proof_certif 11329 prime11329) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45319 : prime 45319. Proof. apply (Pocklington_refl (Pock_certif 45319 3 ((7, 1)::(3, 1)::(2,1)::nil) 70) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45329 : prime 45329. Proof. apply (Pocklington_refl (Pock_certif 45329 3 ((2833, 1)::(2,4)::nil) 1) ((Proof_certif 2833 prime2833) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45337 : prime 45337. Proof. apply (Pocklington_refl (Pock_certif 45337 5 ((1889, 1)::(2,3)::nil) 1) ((Proof_certif 1889 prime1889) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45341 : prime 45341. Proof. apply (Pocklington_refl (Pock_certif 45341 2 ((2267, 1)::(2,2)::nil) 1) ((Proof_certif 2267 prime2267) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45343 : prime 45343. Proof. apply (Pocklington_refl (Pock_certif 45343 6 ((11, 1)::(3, 1)::(2,1)::nil) 26) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45361 : prime 45361. Proof. apply (Pocklington_refl (Pock_certif 45361 11 ((3, 1)::(2,4)::nil) 80) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45377 : prime 45377. Proof. apply (Pocklington_refl (Pock_certif 45377 3 ((2,6)::nil) 68) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45389 : prime 45389. Proof. apply (Pocklington_refl (Pock_certif 45389 2 ((7, 1)::(2,2)::nil) 50) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45403 : prime 45403. Proof. apply (Pocklington_refl (Pock_certif 45403 3 ((7, 1)::(3, 1)::(2,1)::nil) 72) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45413 : prime 45413. Proof. apply (Pocklington_refl (Pock_certif 45413 2 ((11353, 1)::(2,2)::nil) 1) ((Proof_certif 11353 prime11353) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45427 : prime 45427. Proof. apply (Pocklington_refl (Pock_certif 45427 2 ((67, 1)::(2,1)::nil) 70) ((Proof_certif 67 prime67) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45433 : prime 45433. Proof. apply (Pocklington_refl (Pock_certif 45433 7 ((3, 2)::(2,3)::nil) 54) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45439 : prime 45439. Proof. apply (Pocklington_refl (Pock_certif 45439 3 ((7573, 1)::(2,1)::nil) 1) ((Proof_certif 7573 prime7573) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45481 : prime 45481. Proof. apply (Pocklington_refl (Pock_certif 45481 11 ((5, 1)::(2,3)::nil) 13) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45491 : prime 45491. Proof. apply (Pocklington_refl (Pock_certif 45491 2 ((4549, 1)::(2,1)::nil) 1) ((Proof_certif 4549 prime4549) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45497 : prime 45497. Proof. apply (Pocklington_refl (Pock_certif 45497 3 ((11, 1)::(2,3)::nil) 164) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45503 : prime 45503. Proof. apply (Pocklington_refl (Pock_certif 45503 5 ((22751, 1)::(2,1)::nil) 1) ((Proof_certif 22751 prime22751) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45523 : prime 45523. Proof. apply (Pocklington_refl (Pock_certif 45523 2 ((3, 3)::(2,1)::nil) 86) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45533 : prime 45533. Proof. apply (Pocklington_refl (Pock_certif 45533 2 ((11383, 1)::(2,2)::nil) 1) ((Proof_certif 11383 prime11383) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45541 : prime 45541. Proof. apply (Pocklington_refl (Pock_certif 45541 2 ((3, 2)::(2,2)::nil) 39) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45553 : prime 45553. Proof. apply (Pocklington_refl (Pock_certif 45553 5 ((3, 1)::(2,4)::nil) 84) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45557 : prime 45557. Proof. apply (Pocklington_refl (Pock_certif 45557 3 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45569 : prime 45569. Proof. apply (Pocklington_refl (Pock_certif 45569 3 ((2,9)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45587 : prime 45587. Proof. apply (Pocklington_refl (Pock_certif 45587 2 ((23, 1)::(2,1)::nil) 70) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45589 : prime 45589. Proof. apply (Pocklington_refl (Pock_certif 45589 2 ((29, 1)::(2,2)::nil) 160) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45599 : prime 45599. Proof. apply (Pocklington_refl (Pock_certif 45599 7 ((3257, 1)::(2,1)::nil) 1) ((Proof_certif 3257 prime3257) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45613 : prime 45613. Proof. apply (Pocklington_refl (Pock_certif 45613 2 ((3, 2)::(2,2)::nil) 41) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45631 : prime 45631. Proof. apply (Pocklington_refl (Pock_certif 45631 3 ((3, 3)::(2,1)::nil) 88) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45641 : prime 45641. Proof. apply (Pocklington_refl (Pock_certif 45641 3 ((5, 1)::(2,3)::nil) 18) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45659 : prime 45659. Proof. apply (Pocklington_refl (Pock_certif 45659 2 ((37, 1)::(2,1)::nil) 24) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45667 : prime 45667. Proof. apply (Pocklington_refl (Pock_certif 45667 2 ((43, 1)::(2,1)::nil) 14) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45673 : prime 45673. Proof. apply (Pocklington_refl (Pock_certif 45673 5 ((3, 1)::(2,3)::nil) 25) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45677 : prime 45677. Proof. apply (Pocklington_refl (Pock_certif 45677 2 ((19, 1)::(2,2)::nil) 144) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45691 : prime 45691. Proof. apply (Pocklington_refl (Pock_certif 45691 7 ((5, 1)::(3, 1)::(2,1)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45697 : prime 45697. Proof. apply (Pocklington_refl (Pock_certif 45697 5 ((2,7)::nil) 100) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45707 : prime 45707. Proof. apply (Pocklington_refl (Pock_certif 45707 2 ((22853, 1)::(2,1)::nil) 1) ((Proof_certif 22853 prime22853) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45737 : prime 45737. Proof. apply (Pocklington_refl (Pock_certif 45737 3 ((5717, 1)::(2,3)::nil) 1) ((Proof_certif 5717 prime5717) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45751 : prime 45751. Proof. apply (Pocklington_refl (Pock_certif 45751 3 ((5, 1)::(3, 1)::(2,1)::nil) 20) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45757 : prime 45757. Proof. apply (Pocklington_refl (Pock_certif 45757 2 ((3, 2)::(2,2)::nil) 45) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45763 : prime 45763. Proof. apply (Pocklington_refl (Pock_certif 45763 2 ((29, 1)::(2,1)::nil) 92) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45767 : prime 45767. Proof. apply (Pocklington_refl (Pock_certif 45767 5 ((7, 2)::(2,1)::nil) 74) ((Proof_certif 7 prime7) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45779 : prime 45779. Proof. apply (Pocklington_refl (Pock_certif 45779 2 ((47, 1)::(2,1)::nil) 110) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45817 : prime 45817. Proof. apply (Pocklington_refl (Pock_certif 45817 5 ((3, 1)::(2,3)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45821 : prime 45821. Proof. apply (Pocklington_refl (Pock_certif 45821 2 ((29, 1)::(2,2)::nil) 162) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45823 : prime 45823. Proof. apply (Pocklington_refl (Pock_certif 45823 3 ((7, 1)::(3, 1)::(2,1)::nil) 82) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45827 : prime 45827. Proof. apply (Pocklington_refl (Pock_certif 45827 2 ((2083, 1)::(2,1)::nil) 1) ((Proof_certif 2083 prime2083) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45833 : prime 45833. Proof. apply (Pocklington_refl (Pock_certif 45833 5 ((17, 1)::(2,3)::nil) 64) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45841 : prime 45841. Proof. apply (Pocklington_refl (Pock_certif 45841 7 ((3, 1)::(2,4)::nil) 90) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45853 : prime 45853. Proof. apply (Pocklington_refl (Pock_certif 45853 2 ((3821, 1)::(2,2)::nil) 1) ((Proof_certif 3821 prime3821) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45863 : prime 45863. Proof. apply (Pocklington_refl (Pock_certif 45863 10 ((23, 1)::(2,1)::nil) 76) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45869 : prime 45869. Proof. apply (Pocklington_refl (Pock_certif 45869 2 ((11467, 1)::(2,2)::nil) 1) ((Proof_certif 11467 prime11467) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45887 : prime 45887. Proof. apply (Pocklington_refl (Pock_certif 45887 5 ((22943, 1)::(2,1)::nil) 1) ((Proof_certif 22943 prime22943) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45893 : prime 45893. Proof. apply (Pocklington_refl (Pock_certif 45893 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45943 : prime 45943. Proof. apply (Pocklington_refl (Pock_certif 45943 3 ((13, 1)::(2,1)::nil) 48) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45949 : prime 45949. Proof. apply (Pocklington_refl (Pock_certif 45949 2 ((7, 1)::(2,2)::nil) 7) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45953 : prime 45953. Proof. apply (Pocklington_refl (Pock_certif 45953 3 ((2,7)::nil) 102) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45959 : prime 45959. Proof. apply (Pocklington_refl (Pock_certif 45959 7 ((2089, 1)::(2,1)::nil) 1) ((Proof_certif 2089 prime2089) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45971 : prime 45971. Proof. apply (Pocklington_refl (Pock_certif 45971 2 ((4597, 1)::(2,1)::nil) 1) ((Proof_certif 4597 prime4597) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45979 : prime 45979. Proof. apply (Pocklington_refl (Pock_certif 45979 2 ((79, 1)::(2,1)::nil) 1) ((Proof_certif 79 prime79) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime45989 : prime 45989. Proof. apply (Pocklington_refl (Pock_certif 45989 2 ((11497, 1)::(2,2)::nil) 1) ((Proof_certif 11497 prime11497) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46021 : prime 46021. Proof. apply (Pocklington_refl (Pock_certif 46021 2 ((5, 1)::(3, 1)::(2,2)::nil) 46) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46027 : prime 46027. Proof. apply (Pocklington_refl (Pock_certif 46027 2 ((2557, 1)::(2,1)::nil) 1) ((Proof_certif 2557 prime2557) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46049 : prime 46049. Proof. apply (Pocklington_refl (Pock_certif 46049 3 ((2,5)::nil) 28) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46051 : prime 46051. Proof. apply (Pocklington_refl (Pock_certif 46051 3 ((5, 1)::(3, 1)::(2,1)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46061 : prime 46061. Proof. apply (Pocklington_refl (Pock_certif 46061 2 ((7, 1)::(2,2)::nil) 14) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46073 : prime 46073. Proof. apply (Pocklington_refl (Pock_certif 46073 5 ((13, 1)::(2,3)::nil) 26) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46091 : prime 46091. Proof. apply (Pocklington_refl (Pock_certif 46091 2 ((11, 1)::(5, 1)::(2,1)::nil) 198) ((Proof_certif 5 prime5) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46093 : prime 46093. Proof. apply (Pocklington_refl (Pock_certif 46093 2 ((23, 1)::(2,2)::nil) 132) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46099 : prime 46099. Proof. apply (Pocklington_refl (Pock_certif 46099 2 ((13, 1)::(3, 1)::(2,1)::nil) 122) ((Proof_certif 3 prime3) :: (Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46103 : prime 46103. Proof. apply (Pocklington_refl (Pock_certif 46103 5 ((37, 1)::(2,1)::nil) 30) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46133 : prime 46133. Proof. apply (Pocklington_refl (Pock_certif 46133 2 ((19, 1)::(2,2)::nil) 150) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46141 : prime 46141. Proof. apply (Pocklington_refl (Pock_certif 46141 10 ((5, 1)::(3, 1)::(2,2)::nil) 48) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46147 : prime 46147. Proof. apply (Pocklington_refl (Pock_certif 46147 2 ((7691, 1)::(2,1)::nil) 1) ((Proof_certif 7691 prime7691) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46153 : prime 46153. Proof. apply (Pocklington_refl (Pock_certif 46153 5 ((3, 2)::(2,3)::nil) 64) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46171 : prime 46171. Proof. apply (Pocklington_refl (Pock_certif 46171 3 ((3, 3)::(2,1)::nil) 98) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46181 : prime 46181. Proof. apply (Pocklington_refl (Pock_certif 46181 2 ((2309, 1)::(2,2)::nil) 1) ((Proof_certif 2309 prime2309) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46183 : prime 46183. Proof. apply (Pocklington_refl (Pock_certif 46183 3 ((43, 1)::(2,1)::nil) 20) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46187 : prime 46187. Proof. apply (Pocklington_refl (Pock_certif 46187 2 ((3299, 1)::(2,1)::nil) 1) ((Proof_certif 3299 prime3299) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46199 : prime 46199. Proof. apply (Pocklington_refl (Pock_certif 46199 17 ((23099, 1)::(2,1)::nil) 1) ((Proof_certif 23099 prime23099) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46219 : prime 46219. Proof. apply (Pocklington_refl (Pock_certif 46219 2 ((7703, 1)::(2,1)::nil) 1) ((Proof_certif 7703 prime7703) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46229 : prime 46229. Proof. apply (Pocklington_refl (Pock_certif 46229 2 ((7, 1)::(2,2)::nil) 22) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46237 : prime 46237. Proof. apply (Pocklington_refl (Pock_certif 46237 2 ((3853, 1)::(2,2)::nil) 1) ((Proof_certif 3853 prime3853) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46261 : prime 46261. Proof. apply (Pocklington_refl (Pock_certif 46261 2 ((3, 2)::(2,2)::nil) 59) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46271 : prime 46271. Proof. apply (Pocklington_refl (Pock_certif 46271 7 ((7, 1)::(5, 1)::(2,1)::nil) 100) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46273 : prime 46273. Proof. apply (Pocklington_refl (Pock_certif 46273 5 ((2,6)::nil) 82) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46279 : prime 46279. Proof. apply (Pocklington_refl (Pock_certif 46279 3 ((3, 3)::(2,1)::nil) 100) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46301 : prime 46301. Proof. apply (Pocklington_refl (Pock_certif 46301 2 ((5, 2)::(2,2)::nil) 62) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46307 : prime 46307. Proof. apply (Pocklington_refl (Pock_certif 46307 2 ((13, 2)::(2,1)::nil) 1) ((Proof_certif 13 prime13) :: (Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46309 : prime 46309. Proof. apply (Pocklington_refl (Pock_certif 46309 2 ((17, 1)::(2,2)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46327 : prime 46327. Proof. apply (Pocklington_refl (Pock_certif 46327 3 ((7, 1)::(3, 1)::(2,1)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46337 : prime 46337. Proof. apply (Pocklington_refl (Pock_certif 46337 3 ((2,8)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46349 : prime 46349. Proof. apply (Pocklington_refl (Pock_certif 46349 2 ((11587, 1)::(2,2)::nil) 1) ((Proof_certif 11587 prime11587) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46351 : prime 46351. Proof. apply (Pocklington_refl (Pock_certif 46351 3 ((5, 1)::(3, 1)::(2,1)::nil) 42) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46381 : prime 46381. Proof. apply (Pocklington_refl (Pock_certif 46381 7 ((5, 1)::(3, 1)::(2,2)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46399 : prime 46399. Proof. apply (Pocklington_refl (Pock_certif 46399 3 ((11, 1)::(3, 1)::(2,1)::nil) 42) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46411 : prime 46411. Proof. apply (Pocklington_refl (Pock_certif 46411 3 ((5, 1)::(3, 1)::(2,1)::nil) 44) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46439 : prime 46439. Proof. apply (Pocklington_refl (Pock_certif 46439 7 ((31, 1)::(2,1)::nil) 1) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46441 : prime 46441. Proof. apply (Pocklington_refl (Pock_certif 46441 7 ((3, 2)::(2,3)::nil) 68) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46447 : prime 46447. Proof. apply (Pocklington_refl (Pock_certif 46447 3 ((7741, 1)::(2,1)::nil) 1) ((Proof_certif 7741 prime7741) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46451 : prime 46451. Proof. apply (Pocklington_refl (Pock_certif 46451 6 ((5, 2)::(2,1)::nil) 27) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46457 : prime 46457. Proof. apply (Pocklington_refl (Pock_certif 46457 3 ((5807, 1)::(2,3)::nil) 1) ((Proof_certif 5807 prime5807) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46471 : prime 46471. Proof. apply (Pocklington_refl (Pock_certif 46471 3 ((5, 1)::(3, 1)::(2,1)::nil) 46) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46477 : prime 46477. Proof. apply (Pocklington_refl (Pock_certif 46477 2 ((3, 2)::(2,2)::nil) 65) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46489 : prime 46489. Proof. apply (Pocklington_refl (Pock_certif 46489 17 ((13, 1)::(2,3)::nil) 30) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46499 : prime 46499. Proof. apply (Pocklington_refl (Pock_certif 46499 2 ((67, 1)::(2,1)::nil) 78) ((Proof_certif 67 prime67) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46507 : prime 46507. Proof. apply (Pocklington_refl (Pock_certif 46507 2 ((23, 1)::(2,1)::nil) 90) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46511 : prime 46511. Proof. apply (Pocklington_refl (Pock_certif 46511 11 ((4651, 1)::(2,1)::nil) 1) ((Proof_certif 4651 prime4651) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46523 : prime 46523. Proof. apply (Pocklington_refl (Pock_certif 46523 2 ((3323, 1)::(2,1)::nil) 1) ((Proof_certif 3323 prime3323) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46549 : prime 46549. Proof. apply (Pocklington_refl (Pock_certif 46549 2 ((3, 2)::(2,2)::nil) 68) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46559 : prime 46559. Proof. apply (Pocklington_refl (Pock_certif 46559 7 ((23279, 1)::(2,1)::nil) 1) ((Proof_certif 23279 prime23279) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46567 : prime 46567. Proof. apply (Pocklington_refl (Pock_certif 46567 3 ((13, 1)::(2,1)::nil) 16) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46573 : prime 46573. Proof. apply (Pocklington_refl (Pock_certif 46573 2 ((3881, 1)::(2,2)::nil) 1) ((Proof_certif 3881 prime3881) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46589 : prime 46589. Proof. apply (Pocklington_refl (Pock_certif 46589 2 ((19, 1)::(2,2)::nil) 1) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46591 : prime 46591. Proof. apply (Pocklington_refl (Pock_certif 46591 6 ((5, 1)::(3, 1)::(2,1)::nil) 51) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46601 : prime 46601. Proof. apply (Pocklington_refl (Pock_certif 46601 3 ((5, 1)::(2,3)::nil) 43) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46619 : prime 46619. Proof. apply (Pocklington_refl (Pock_certif 46619 6 ((13, 1)::(2,1)::nil) 18) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46633 : prime 46633. Proof. apply (Pocklington_refl (Pock_certif 46633 5 ((29, 1)::(2,3)::nil) 1) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46639 : prime 46639. Proof. apply (Pocklington_refl (Pock_certif 46639 3 ((2591, 1)::(2,1)::nil) 1) ((Proof_certif 2591 prime2591) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46643 : prime 46643. Proof. apply (Pocklington_refl (Pock_certif 46643 2 ((23321, 1)::(2,1)::nil) 1) ((Proof_certif 23321 prime23321) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46649 : prime 46649. Proof. apply (Pocklington_refl (Pock_certif 46649 15 ((7, 1)::(2,3)::nil) 48) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46663 : prime 46663. Proof. apply (Pocklington_refl (Pock_certif 46663 5 ((7, 1)::(3, 1)::(2,1)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46679 : prime 46679. Proof. apply (Pocklington_refl (Pock_certif 46679 17 ((23339, 1)::(2,1)::nil) 1) ((Proof_certif 23339 prime23339) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46681 : prime 46681. Proof. apply (Pocklington_refl (Pock_certif 46681 11 ((5, 1)::(2,3)::nil) 45) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46687 : prime 46687. Proof. apply (Pocklington_refl (Pock_certif 46687 3 ((31, 1)::(2,1)::nil) 5) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46691 : prime 46691. Proof. apply (Pocklington_refl (Pock_certif 46691 2 ((7, 1)::(5, 1)::(2,1)::nil) 106) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46703 : prime 46703. Proof. apply (Pocklington_refl (Pock_certif 46703 5 ((19, 1)::(2,1)::nil) 6) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46723 : prime 46723. Proof. apply (Pocklington_refl (Pock_certif 46723 2 ((13, 1)::(2,1)::nil) 23) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46727 : prime 46727. Proof. apply (Pocklington_refl (Pock_certif 46727 5 ((61, 1)::(2,1)::nil) 138) ((Proof_certif 61 prime61) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46747 : prime 46747. Proof. apply (Pocklington_refl (Pock_certif 46747 2 ((7, 1)::(3, 1)::(2,1)::nil) 18) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46751 : prime 46751. Proof. apply (Pocklington_refl (Pock_certif 46751 11 ((5, 2)::(2,1)::nil) 33) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46757 : prime 46757. Proof. apply (Pocklington_refl (Pock_certif 46757 2 ((11689, 1)::(2,2)::nil) 1) ((Proof_certif 11689 prime11689) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46769 : prime 46769. Proof. apply (Pocklington_refl (Pock_certif 46769 3 ((37, 1)::(2,4)::nil) 1) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46771 : prime 46771. Proof. apply (Pocklington_refl (Pock_certif 46771 2 ((5, 1)::(3, 1)::(2,1)::nil) 57) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46807 : prime 46807. Proof. apply (Pocklington_refl (Pock_certif 46807 3 ((29, 1)::(2,1)::nil) 110) ((Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46811 : prime 46811. Proof. apply (Pocklington_refl (Pock_certif 46811 2 ((31, 1)::(2,1)::nil) 8) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46817 : prime 46817. Proof. apply (Pocklington_refl (Pock_certif 46817 3 ((2,5)::nil) 53) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46819 : prime 46819. Proof. apply (Pocklington_refl (Pock_certif 46819 2 ((3, 3)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46829 : prime 46829. Proof. apply (Pocklington_refl (Pock_certif 46829 2 ((23, 1)::(2,2)::nil) 140) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46831 : prime 46831. Proof. apply (Pocklington_refl (Pock_certif 46831 3 ((5, 1)::(3, 1)::(2,1)::nil) 1) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46853 : prime 46853. Proof. apply (Pocklington_refl (Pock_certif 46853 2 ((13, 1)::(2,2)::nil) 68) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46861 : prime 46861. Proof. apply (Pocklington_refl (Pock_certif 46861 2 ((5, 1)::(3, 1)::(2,2)::nil) 60) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46867 : prime 46867. Proof. apply (Pocklington_refl (Pock_certif 46867 2 ((73, 1)::(2,1)::nil) 28) ((Proof_certif 73 prime73) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46877 : prime 46877. Proof. apply (Pocklington_refl (Pock_certif 46877 2 ((11719, 1)::(2,2)::nil) 1) ((Proof_certif 11719 prime11719) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46889 : prime 46889. Proof. apply (Pocklington_refl (Pock_certif 46889 3 ((5861, 1)::(2,3)::nil) 1) ((Proof_certif 5861 prime5861) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46901 : prime 46901. Proof. apply (Pocklington_refl (Pock_certif 46901 3 ((5, 2)::(2,2)::nil) 68) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46919 : prime 46919. Proof. apply (Pocklington_refl (Pock_certif 46919 11 ((23459, 1)::(2,1)::nil) 1) ((Proof_certif 23459 prime23459) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46933 : prime 46933. Proof. apply (Pocklington_refl (Pock_certif 46933 2 ((3911, 1)::(2,2)::nil) 1) ((Proof_certif 3911 prime3911) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46957 : prime 46957. Proof. apply (Pocklington_refl (Pock_certif 46957 5 ((7, 1)::(2,2)::nil) 50) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46993 : prime 46993. Proof. apply (Pocklington_refl (Pock_certif 46993 5 ((3, 1)::(2,4)::nil) 16) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime46997 : prime 46997. Proof. apply (Pocklington_refl (Pock_certif 46997 2 ((31, 1)::(2,2)::nil) 130) ((Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47017 : prime 47017. Proof. apply (Pocklington_refl (Pock_certif 47017 7 ((3, 1)::(2,3)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47041 : prime 47041. Proof. apply (Pocklington_refl (Pock_certif 47041 13 ((2,6)::nil) 94) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47051 : prime 47051. Proof. apply (Pocklington_refl (Pock_certif 47051 2 ((5, 2)::(2,1)::nil) 40) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47057 : prime 47057. Proof. apply (Pocklington_refl (Pock_certif 47057 3 ((17, 1)::(2,4)::nil) 1) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47059 : prime 47059. Proof. apply (Pocklington_refl (Pock_certif 47059 2 ((11, 1)::(3, 1)::(2,1)::nil) 52) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47087 : prime 47087. Proof. apply (Pocklington_refl (Pock_certif 47087 5 ((13, 1)::(2,1)::nil) 39) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47093 : prime 47093. Proof. apply (Pocklington_refl (Pock_certif 47093 2 ((61, 1)::(2,2)::nil) 1) ((Proof_certif 61 prime61) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47111 : prime 47111. Proof. apply (Pocklington_refl (Pock_certif 47111 7 ((7, 1)::(5, 1)::(2,1)::nil) 112) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47119 : prime 47119. Proof. apply (Pocklington_refl (Pock_certif 47119 3 ((7853, 1)::(2,1)::nil) 1) ((Proof_certif 7853 prime7853) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47123 : prime 47123. Proof. apply (Pocklington_refl (Pock_certif 47123 2 ((23561, 1)::(2,1)::nil) 1) ((Proof_certif 23561 prime23561) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47129 : prime 47129. Proof. apply (Pocklington_refl (Pock_certif 47129 3 ((43, 1)::(2,3)::nil) 1) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47137 : prime 47137. Proof. apply (Pocklington_refl (Pock_certif 47137 5 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47143 : prime 47143. Proof. apply (Pocklington_refl (Pock_certif 47143 6 ((3, 3)::(2,1)::nil) 4) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47147 : prime 47147. Proof. apply (Pocklington_refl (Pock_certif 47147 2 ((2143, 1)::(2,1)::nil) 1) ((Proof_certif 2143 prime2143) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47149 : prime 47149. Proof. apply (Pocklington_refl (Pock_certif 47149 2 ((3929, 1)::(2,2)::nil) 1) ((Proof_certif 3929 prime3929) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47161 : prime 47161. Proof. apply (Pocklington_refl (Pock_certif 47161 17 ((3, 1)::(2,3)::nil) 41) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47189 : prime 47189. Proof. apply (Pocklington_refl (Pock_certif 47189 2 ((47, 1)::(2,2)::nil) 1) ((Proof_certif 47 prime47) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47207 : prime 47207. Proof. apply (Pocklington_refl (Pock_certif 47207 5 ((23603, 1)::(2,1)::nil) 1) ((Proof_certif 23603 prime23603) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47221 : prime 47221. Proof. apply (Pocklington_refl (Pock_certif 47221 6 ((5, 1)::(3, 1)::(2,2)::nil) 66) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47237 : prime 47237. Proof. apply (Pocklington_refl (Pock_certif 47237 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47251 : prime 47251. Proof. apply (Pocklington_refl (Pock_certif 47251 10 ((3, 3)::(2,1)::nil) 7) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47269 : prime 47269. Proof. apply (Pocklington_refl (Pock_certif 47269 6 ((3, 2)::(2,2)::nil) 12) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47279 : prime 47279. Proof. apply (Pocklington_refl (Pock_certif 47279 7 ((11, 1)::(7, 1)::(2,1)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47287 : prime 47287. Proof. apply (Pocklington_refl (Pock_certif 47287 3 ((37, 1)::(2,1)::nil) 46) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47293 : prime 47293. Proof. apply (Pocklington_refl (Pock_certif 47293 2 ((7, 1)::(2,2)::nil) 1) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47297 : prime 47297. Proof. apply (Pocklington_refl (Pock_certif 47297 3 ((2,6)::nil) 98) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47303 : prime 47303. Proof. apply (Pocklington_refl (Pock_certif 47303 5 ((67, 1)::(2,1)::nil) 84) ((Proof_certif 67 prime67) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47309 : prime 47309. Proof. apply (Pocklington_refl (Pock_certif 47309 2 ((11827, 1)::(2,2)::nil) 1) ((Proof_certif 11827 prime11827) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47317 : prime 47317. Proof. apply (Pocklington_refl (Pock_certif 47317 2 ((3943, 1)::(2,2)::nil) 1) ((Proof_certif 3943 prime3943) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47339 : prime 47339. Proof. apply (Pocklington_refl (Pock_certif 47339 2 ((23669, 1)::(2,1)::nil) 1) ((Proof_certif 23669 prime23669) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47351 : prime 47351. Proof. apply (Pocklington_refl (Pock_certif 47351 13 ((5, 2)::(2,1)::nil) 46) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47353 : prime 47353. Proof. apply (Pocklington_refl (Pock_certif 47353 5 ((1973, 1)::(2,3)::nil) 1) ((Proof_certif 1973 prime1973) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47363 : prime 47363. Proof. apply (Pocklington_refl (Pock_certif 47363 2 ((17, 1)::(2,1)::nil) 30) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47381 : prime 47381. Proof. apply (Pocklington_refl (Pock_certif 47381 2 ((23, 1)::(2,2)::nil) 146) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47387 : prime 47387. Proof. apply (Pocklington_refl (Pock_certif 47387 2 ((19, 1)::(2,1)::nil) 28) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47389 : prime 47389. Proof. apply (Pocklington_refl (Pock_certif 47389 2 ((11, 1)::(2,2)::nil) 18) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47407 : prime 47407. Proof. apply (Pocklington_refl (Pock_certif 47407 3 ((7901, 1)::(2,1)::nil) 1) ((Proof_certif 7901 prime7901) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47417 : prime 47417. Proof. apply (Pocklington_refl (Pock_certif 47417 3 ((5927, 1)::(2,3)::nil) 1) ((Proof_certif 5927 prime5927) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47419 : prime 47419. Proof. apply (Pocklington_refl (Pock_certif 47419 2 ((7, 1)::(3, 1)::(2,1)::nil) 35) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47431 : prime 47431. Proof. apply (Pocklington_refl (Pock_certif 47431 12 ((5, 1)::(3, 1)::(2,1)::nil) 15) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47441 : prime 47441. Proof. apply (Pocklington_refl (Pock_certif 47441 3 ((5, 1)::(2,4)::nil) 112) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47459 : prime 47459. Proof. apply (Pocklington_refl (Pock_certif 47459 2 ((61, 1)::(2,1)::nil) 144) ((Proof_certif 61 prime61) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47491 : prime 47491. Proof. apply (Pocklington_refl (Pock_certif 47491 2 ((5, 1)::(3, 1)::(2,1)::nil) 17) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47497 : prime 47497. Proof. apply (Pocklington_refl (Pock_certif 47497 5 ((1979, 1)::(2,3)::nil) 1) ((Proof_certif 1979 prime1979) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47501 : prime 47501. Proof. apply (Pocklington_refl (Pock_certif 47501 3 ((5, 2)::(2,2)::nil) 74) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47507 : prime 47507. Proof. apply (Pocklington_refl (Pock_certif 47507 2 ((23753, 1)::(2,1)::nil) 1) ((Proof_certif 23753 prime23753) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47513 : prime 47513. Proof. apply (Pocklington_refl (Pock_certif 47513 3 ((5939, 1)::(2,3)::nil) 1) ((Proof_certif 5939 prime5939) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47521 : prime 47521. Proof. apply (Pocklington_refl (Pock_certif 47521 7 ((2,5)::nil) 1) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47527 : prime 47527. Proof. apply (Pocklington_refl (Pock_certif 47527 3 ((89, 1)::(2,1)::nil) 1) ((Proof_certif 89 prime89) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47533 : prime 47533. Proof. apply (Pocklington_refl (Pock_certif 47533 2 ((17, 1)::(2,2)::nil) 17) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47543 : prime 47543. Proof. apply (Pocklington_refl (Pock_certif 47543 5 ((2161, 1)::(2,1)::nil) 1) ((Proof_certif 2161 prime2161) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47563 : prime 47563. Proof. apply (Pocklington_refl (Pock_certif 47563 2 ((7927, 1)::(2,1)::nil) 1) ((Proof_certif 7927 prime7927) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47569 : prime 47569. Proof. apply (Pocklington_refl (Pock_certif 47569 17 ((3, 1)::(2,4)::nil) 29) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47581 : prime 47581. Proof. apply (Pocklington_refl (Pock_certif 47581 2 ((5, 1)::(3, 1)::(2,2)::nil) 72) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47591 : prime 47591. Proof. apply (Pocklington_refl (Pock_certif 47591 11 ((4759, 1)::(2,1)::nil) 1) ((Proof_certif 4759 prime4759) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47599 : prime 47599. Proof. apply (Pocklington_refl (Pock_certif 47599 3 ((7933, 1)::(2,1)::nil) 1) ((Proof_certif 7933 prime7933) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47609 : prime 47609. Proof. apply (Pocklington_refl (Pock_certif 47609 6 ((11, 1)::(2,3)::nil) 12) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47623 : prime 47623. Proof. apply (Pocklington_refl (Pock_certif 47623 3 ((7937, 1)::(2,1)::nil) 1) ((Proof_certif 7937 prime7937) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47629 : prime 47629. Proof. apply (Pocklington_refl (Pock_certif 47629 10 ((3, 2)::(2,2)::nil) 24) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47639 : prime 47639. Proof. apply (Pocklington_refl (Pock_certif 47639 7 ((23819, 1)::(2,1)::nil) 1) ((Proof_certif 23819 prime23819) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47653 : prime 47653. Proof. apply (Pocklington_refl (Pock_certif 47653 5 ((11, 1)::(2,2)::nil) 25) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47657 : prime 47657. Proof. apply (Pocklington_refl (Pock_certif 47657 3 ((7, 1)::(2,3)::nil) 66) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47659 : prime 47659. Proof. apply (Pocklington_refl (Pock_certif 47659 2 ((13, 1)::(3, 1)::(2,1)::nil) 142) ((Proof_certif 3 prime3) :: (Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47681 : prime 47681. Proof. apply (Pocklington_refl (Pock_certif 47681 3 ((2,6)::nil) 104) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47699 : prime 47699. Proof. apply (Pocklington_refl (Pock_certif 47699 2 ((3407, 1)::(2,1)::nil) 1) ((Proof_certif 3407 prime3407) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47701 : prime 47701. Proof. apply (Pocklington_refl (Pock_certif 47701 2 ((3, 2)::(2,2)::nil) 26) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47711 : prime 47711. Proof. apply (Pocklington_refl (Pock_certif 47711 11 ((13, 1)::(5, 1)::(2,1)::nil) 106) ((Proof_certif 5 prime5) :: (Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47713 : prime 47713. Proof. apply (Pocklington_refl (Pock_certif 47713 5 ((2,5)::nil) 13) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47717 : prime 47717. Proof. apply (Pocklington_refl (Pock_certif 47717 2 ((79, 1)::(2,2)::nil) 1) ((Proof_certif 79 prime79) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47737 : prime 47737. Proof. apply (Pocklington_refl (Pock_certif 47737 5 ((3, 2)::(2,3)::nil) 86) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47741 : prime 47741. Proof. apply (Pocklington_refl (Pock_certif 47741 2 ((7, 1)::(2,2)::nil) 19) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47743 : prime 47743. Proof. apply (Pocklington_refl (Pock_certif 47743 3 ((73, 1)::(2,1)::nil) 34) ((Proof_certif 73 prime73) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47777 : prime 47777. Proof. apply (Pocklington_refl (Pock_certif 47777 3 ((2,5)::nil) 16) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47779 : prime 47779. Proof. apply (Pocklington_refl (Pock_certif 47779 2 ((7963, 1)::(2,1)::nil) 1) ((Proof_certif 7963 prime7963) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47791 : prime 47791. Proof. apply (Pocklington_refl (Pock_certif 47791 7 ((3, 3)::(2,1)::nil) 19) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47797 : prime 47797. Proof. apply (Pocklington_refl (Pock_certif 47797 5 ((7, 1)::(2,2)::nil) 22) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47807 : prime 47807. Proof. apply (Pocklington_refl (Pock_certif 47807 5 ((41, 1)::(2,1)::nil) 90) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47809 : prime 47809. Proof. apply (Pocklington_refl (Pock_certif 47809 7 ((2,6)::nil) 106) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47819 : prime 47819. Proof. apply (Pocklington_refl (Pock_certif 47819 2 ((23909, 1)::(2,1)::nil) 1) ((Proof_certif 23909 prime23909) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47837 : prime 47837. Proof. apply (Pocklington_refl (Pock_certif 47837 2 ((11959, 1)::(2,2)::nil) 1) ((Proof_certif 11959 prime11959) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47843 : prime 47843. Proof. apply (Pocklington_refl (Pock_certif 47843 2 ((19, 1)::(2,1)::nil) 41) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47857 : prime 47857. Proof. apply (Pocklington_refl (Pock_certif 47857 7 ((3, 1)::(2,4)::nil) 35) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47869 : prime 47869. Proof. apply (Pocklington_refl (Pock_certif 47869 2 ((3989, 1)::(2,2)::nil) 1) ((Proof_certif 3989 prime3989) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47881 : prime 47881. Proof. apply (Pocklington_refl (Pock_certif 47881 13 ((3, 2)::(2,3)::nil) 88) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47903 : prime 47903. Proof. apply (Pocklington_refl (Pock_certif 47903 7 ((43, 1)::(2,1)::nil) 40) ((Proof_certif 43 prime43) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47911 : prime 47911. Proof. apply (Pocklington_refl (Pock_certif 47911 3 ((5, 1)::(3, 1)::(2,1)::nil) 34) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47917 : prime 47917. Proof. apply (Pocklington_refl (Pock_certif 47917 5 ((3, 2)::(2,2)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47933 : prime 47933. Proof. apply (Pocklington_refl (Pock_certif 47933 2 ((23, 1)::(2,2)::nil) 152) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47939 : prime 47939. Proof. apply (Pocklington_refl (Pock_certif 47939 2 ((2179, 1)::(2,1)::nil) 1) ((Proof_certif 2179 prime2179) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47947 : prime 47947. Proof. apply (Pocklington_refl (Pock_certif 47947 2 ((61, 1)::(2,1)::nil) 148) ((Proof_certif 61 prime61) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47951 : prime 47951. Proof. apply (Pocklington_refl (Pock_certif 47951 7 ((5, 2)::(2,1)::nil) 58) ((Proof_certif 5 prime5) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47963 : prime 47963. Proof. apply (Pocklington_refl (Pock_certif 47963 2 ((23981, 1)::(2,1)::nil) 1) ((Proof_certif 23981 prime23981) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47969 : prime 47969. Proof. apply (Pocklington_refl (Pock_certif 47969 3 ((2,5)::nil) 23) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47977 : prime 47977. Proof. apply (Pocklington_refl (Pock_certif 47977 5 ((1999, 1)::(2,3)::nil) 1) ((Proof_certif 1999 prime1999) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime47981 : prime 47981. Proof. apply (Pocklington_refl (Pock_certif 47981 2 ((2399, 1)::(2,2)::nil) 1) ((Proof_certif 2399 prime2399) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48017 : prime 48017. Proof. apply (Pocklington_refl (Pock_certif 48017 3 ((3001, 1)::(2,4)::nil) 1) ((Proof_certif 3001 prime3001) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48023 : prime 48023. Proof. apply (Pocklington_refl (Pock_certif 48023 5 ((13, 1)::(2,1)::nil) 21) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48029 : prime 48029. Proof. apply (Pocklington_refl (Pock_certif 48029 2 ((12007, 1)::(2,2)::nil) 1) ((Proof_certif 12007 prime12007) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48049 : prime 48049. Proof. apply (Pocklington_refl (Pock_certif 48049 17 ((3, 1)::(2,4)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48073 : prime 48073. Proof. apply (Pocklington_refl (Pock_certif 48073 5 ((3, 1)::(2,3)::nil) 29) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48079 : prime 48079. Proof. apply (Pocklington_refl (Pock_certif 48079 3 ((2671, 1)::(2,1)::nil) 1) ((Proof_certif 2671 prime2671) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48091 : prime 48091. Proof. apply (Pocklington_refl (Pock_certif 48091 3 ((5, 1)::(3, 1)::(2,1)::nil) 40) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48109 : prime 48109. Proof. apply (Pocklington_refl (Pock_certif 48109 2 ((19, 1)::(2,2)::nil) 24) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48119 : prime 48119. Proof. apply (Pocklington_refl (Pock_certif 48119 7 ((7, 2)::(2,1)::nil) 98) ((Proof_certif 7 prime7) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48121 : prime 48121. Proof. apply (Pocklington_refl (Pock_certif 48121 11 ((3, 1)::(2,3)::nil) 32) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48131 : prime 48131. Proof. apply (Pocklington_refl (Pock_certif 48131 2 ((4813, 1)::(2,1)::nil) 1) ((Proof_certif 4813 prime4813) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48157 : prime 48157. Proof. apply (Pocklington_refl (Pock_certif 48157 2 ((4013, 1)::(2,2)::nil) 1) ((Proof_certif 4013 prime4013) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48163 : prime 48163. Proof. apply (Pocklington_refl (Pock_certif 48163 2 ((23, 1)::(2,1)::nil) 33) ((Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48179 : prime 48179. Proof. apply (Pocklington_refl (Pock_certif 48179 6 ((13, 1)::(2,1)::nil) 28) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48187 : prime 48187. Proof. apply (Pocklington_refl (Pock_certif 48187 2 ((2677, 1)::(2,1)::nil) 1) ((Proof_certif 2677 prime2677) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48193 : prime 48193. Proof. apply (Pocklington_refl (Pock_certif 48193 5 ((2,6)::nil) 112) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48197 : prime 48197. Proof. apply (Pocklington_refl (Pock_certif 48197 2 ((12049, 1)::(2,2)::nil) 1) ((Proof_certif 12049 prime12049) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48221 : prime 48221. Proof. apply (Pocklington_refl (Pock_certif 48221 2 ((2411, 1)::(2,2)::nil) 1) ((Proof_certif 2411 prime2411) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48239 : prime 48239. Proof. apply (Pocklington_refl (Pock_certif 48239 7 ((89, 1)::(2,1)::nil) 1) ((Proof_certif 89 prime89) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48247 : prime 48247. Proof. apply (Pocklington_refl (Pock_certif 48247 3 ((11, 1)::(3, 1)::(2,1)::nil) 70) ((Proof_certif 3 prime3) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48259 : prime 48259. Proof. apply (Pocklington_refl (Pock_certif 48259 2 ((7, 1)::(3, 1)::(2,1)::nil) 56) ((Proof_certif 3 prime3) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48271 : prime 48271. Proof. apply (Pocklington_refl (Pock_certif 48271 6 ((5, 1)::(3, 1)::(2,1)::nil) 46) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48281 : prime 48281. Proof. apply (Pocklington_refl (Pock_certif 48281 3 ((5, 1)::(2,3)::nil) 1) ((Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48299 : prime 48299. Proof. apply (Pocklington_refl (Pock_certif 48299 2 ((19, 1)::(2,1)::nil) 53) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48311 : prime 48311. Proof. apply (Pocklington_refl (Pock_certif 48311 7 ((4831, 1)::(2,1)::nil) 1) ((Proof_certif 4831 prime4831) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48313 : prime 48313. Proof. apply (Pocklington_refl (Pock_certif 48313 5 ((3, 1)::(2,3)::nil) 41) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48337 : prime 48337. Proof. apply (Pocklington_refl (Pock_certif 48337 10 ((3, 1)::(2,4)::nil) 46) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48341 : prime 48341. Proof. apply (Pocklington_refl (Pock_certif 48341 2 ((2417, 1)::(2,2)::nil) 1) ((Proof_certif 2417 prime2417) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48353 : prime 48353. Proof. apply (Pocklington_refl (Pock_certif 48353 3 ((2,5)::nil) 36) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48371 : prime 48371. Proof. apply (Pocklington_refl (Pock_certif 48371 2 ((7, 1)::(5, 1)::(2,1)::nil) 130) ((Proof_certif 5 prime5) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48383 : prime 48383. Proof. apply (Pocklington_refl (Pock_certif 48383 5 ((17, 1)::(2,1)::nil) 61) ((Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48397 : prime 48397. Proof. apply (Pocklington_refl (Pock_certif 48397 2 ((37, 1)::(2,2)::nil) 30) ((Proof_certif 37 prime37) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48407 : prime 48407. Proof. apply (Pocklington_refl (Pock_certif 48407 5 ((24203, 1)::(2,1)::nil) 1) ((Proof_certif 24203 prime24203) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48409 : prime 48409. Proof. apply (Pocklington_refl (Pock_certif 48409 17 ((2017, 1)::(2,3)::nil) 1) ((Proof_certif 2017 prime2017) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48413 : prime 48413. Proof. apply (Pocklington_refl (Pock_certif 48413 2 ((7, 1)::(2,2)::nil) 46) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48437 : prime 48437. Proof. apply (Pocklington_refl (Pock_certif 48437 2 ((12109, 1)::(2,2)::nil) 1) ((Proof_certif 12109 prime12109) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48449 : prime 48449. Proof. apply (Pocklington_refl (Pock_certif 48449 3 ((2,6)::nil) 116) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48463 : prime 48463. Proof. apply (Pocklington_refl (Pock_certif 48463 3 ((41, 1)::(2,1)::nil) 98) ((Proof_certif 41 prime41) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48473 : prime 48473. Proof. apply (Pocklington_refl (Pock_certif 48473 3 ((73, 1)::(2,3)::nil) 1) ((Proof_certif 73 prime73) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48479 : prime 48479. Proof. apply (Pocklington_refl (Pock_certif 48479 7 ((24239, 1)::(2,1)::nil) 1) ((Proof_certif 24239 prime24239) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48481 : prime 48481. Proof. apply (Pocklington_refl (Pock_certif 48481 7 ((2,5)::nil) 40) ((Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48487 : prime 48487. Proof. apply (Pocklington_refl (Pock_certif 48487 3 ((8081, 1)::(2,1)::nil) 1) ((Proof_certif 8081 prime8081) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48491 : prime 48491. Proof. apply (Pocklington_refl (Pock_certif 48491 2 ((13, 1)::(2,1)::nil) 41) ((Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48497 : prime 48497. Proof. apply (Pocklington_refl (Pock_certif 48497 3 ((7, 1)::(2,4)::nil) 208) ((Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48523 : prime 48523. Proof. apply (Pocklington_refl (Pock_certif 48523 2 ((8087, 1)::(2,1)::nil) 1) ((Proof_certif 8087 prime8087) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48527 : prime 48527. Proof. apply (Pocklington_refl (Pock_certif 48527 5 ((19, 1)::(2,1)::nil) 59) ((Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48533 : prime 48533. Proof. apply (Pocklington_refl (Pock_certif 48533 2 ((11, 1)::(2,2)::nil) 45) ((Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48539 : prime 48539. Proof. apply (Pocklington_refl (Pock_certif 48539 2 ((3467, 1)::(2,1)::nil) 1) ((Proof_certif 3467 prime3467) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48541 : prime 48541. Proof. apply (Pocklington_refl (Pock_certif 48541 2 ((5, 1)::(3, 1)::(2,2)::nil) 88) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48563 : prime 48563. Proof. apply (Pocklington_refl (Pock_certif 48563 2 ((24281, 1)::(2,1)::nil) 1) ((Proof_certif 24281 prime24281) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48571 : prime 48571. Proof. apply (Pocklington_refl (Pock_certif 48571 2 ((5, 1)::(3, 1)::(2,1)::nil) 57) ((Proof_certif 3 prime3) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48589 : prime 48589. Proof. apply (Pocklington_refl (Pock_certif 48589 2 ((4049, 1)::(2,2)::nil) 1) ((Proof_certif 4049 prime4049) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48593 : prime 48593. Proof. apply (Pocklington_refl (Pock_certif 48593 3 ((3037, 1)::(2,4)::nil) 1) ((Proof_certif 3037 prime3037) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. Lemma prime48611 : prime 48611. Proof. apply (Pocklington_refl (Pock_certif 48611 2 ((4861, 1)::(2,1)::nil) 1) ((Proof_certif 4861 prime4861) :: (Proof_certif 2 prime2) :: nil)). enc (refl_equal true). Qed. coqprime-8.18/src/Coqprime/examples/Makefile000066400000000000000000000003741451023060700211170ustar00rootroot00000000000000ifeq "$(COQBIN)" "" COQBIN=$(dir $(shell which coqtop))/ endif %: Makefile.coq Makefile.coq: _CoqProject $(COQBIN)coq_makefile -f _CoqProject -o Makefile.coq tests: all @$(MAKE) -C tests -s clean @$(MAKE) -C tests -s all -include Makefile.coq coqprime-8.18/src/Coqprime/examples/PocklingtonRefl.v000066400000000000000000000007711451023060700227470ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Require Export List. Require Export ZArith. Require Export Znumtheory. Require Export Pock. Require Export BasePrimes. coqprime-8.18/src/Coqprime/examples/TestLucas.v000066400000000000000000000075121451023060700215560ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Require Import ZArith. From Coqprime Require Import Lucas. Eval native_compute in 2. Time Eval native_compute in lucas 2. Eval native_compute in 3. Time Eval native_compute in lucas 3. Eval native_compute in 5. Time Eval native_compute in lucas 5. Eval native_compute in 7. Time Eval native_compute in lucas 7. Eval native_compute in 13. Time Eval native_compute in lucas 13. Eval native_compute in 17. Time Eval native_compute in lucas 17. Eval native_compute in 19. Time Eval native_compute in lucas 19. Eval native_compute in 31. Time Eval native_compute in lucas 31. Eval native_compute in 61. Time Eval native_compute in lucas 61. Eval native_compute in 89. Time Eval native_compute in lucas 89. Eval native_compute in 107. Time Eval native_compute in lucas 107. Eval native_compute in 127. Time Eval native_compute in lucas 127. Eval native_compute in 521. Time Eval native_compute in lucas 521. Eval native_compute in 607. Time Eval native_compute in lucas 607. Eval native_compute in 1279. Time Eval native_compute in lucas 1279. Eval native_compute in 2203. Time Eval native_compute in lucas 2203. Eval native_compute in 2281. Time Eval native_compute in lucas 2281. Eval native_compute in 3217. Time Eval native_compute in lucas 3217. Eval native_compute in 4253. Time Eval native_compute in lucas 4253. Eval native_compute in 4423. Time Eval native_compute in lucas 4423. Time Eval native_compute in 9689. Time Eval native_compute in lucas 9689. Time Eval native_compute in 9941. (* Time Eval native_compute in lucas 9941. Time Eval native_compute in 11213. Time Eval native_compute in lucas 11213. Time Eval native_compute in 19937. Time Eval native_compute in lucas 19937. Time Eval native_compute in 21701. Time Eval native_compute in lucas 21701. Time Eval native_compute in 23209. Time Eval native_compute in lucas 23209. Time Eval native_compute in 44497. Time Eval native_compute in lucas 44497. Time Eval native_compute in 86243. Time Eval native_compute in lucas 86243. Time Eval native_compute in 110503. Time Eval native_compute in lucas 110503. Time Eval native_compute in 132049. Time Eval native_compute in lucas 132049. Time Eval native_compute in 216091. Time Eval native_compute in lucas 216091. *) (* = 3 = 0 Finished transaction in 0. secs (0.01u,0.s) = 5 = 0 Finished transaction in 0. secs (0.u,0.s) = 7 = 0 Finished transaction in 0. secs (0.u,0.s) = 13 = 0 Finished transaction in 0. secs (0.u,0.s) = 17 = 0 Finished transaction in 0. secs (0.u,0.s) = 19 = 0 Finished transaction in 0. secs (0.u,0.s) = 31 = 0 Finished transaction in 0. secs (0.u,0.s) = 61 = 0 Finished transaction in 0. secs (0.01u,0.s) = 89 = 0 Finished transaction in 0. secs (0.02u,0.s) = 107 = 0 Finished transaction in 0. secs (0.02u,0.s) = 127 = 0 Finished transaction in 0. secs (0.04u,0.s) = 521 = 0 Finished transaction in 2. secs (1.85u,0.01s) = 607 = 0 Finished transaction in 3. secs (2.78u,0.07s) = 1279 = 0 Finished transaction in 21. secs (20.21u,0.26s) = 2203 = 0 Finished transaction in 94. secs (89.1u,1.05s) = 2281 = 0 Finished transaction in 102. secs (97.59u,1.1s) = 3217 = 0 Finished transaction in 244. secs (237.65u,2.39s) = 4253 = 0 Finished transaction in 506. secs (494.09u,4.65s) = 4423 = 0 Finished transaction in 572. secs (563.27u,5.45s) *) coqprime-8.18/src/Coqprime/examples/_CoqProject000066400000000000000000000003531451023060700216070ustar00rootroot00000000000000-R ../../Coqprime Coqprime ../examples/BasePrimes.v ../examples/PocklingtonRefl.v ../examples/TestLucas.v ../examples/prime21665NNNN21787.v ../examples/prime329719147332060395689499.v ../examples/russell1.v ../examples/russell2.v coqprime-8.18/src/Coqprime/examples/b1.v000066400000000000000000001417101451023060700201500ustar00rootroot00000000000000Require Import MEll. Local Open Scope positive_scope. Time Eval native_compute in (ell_test 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004887073355577764679769531135347133345576376585856457779999796708668648831253474767767777473527562199 13586730412023 ((1472024496953428138467289635128682373564124877508316982407887104355141494846923127837691048466483188942018943670958999837375145454806303229279048348113097299011411249757763835820456509678785661643213292144491701148848605775484675309473112733156519070199491940974372200221557574789017177989462900436494091915743874103589440595107720377304305523253065704014292580695953185491378768422250659162213178594661078559149878508175963416202060787708176144378679819549163390300318946375742121719324943002369150585523924321796056090069029236724978475090341366749194180490579129174578096429590414676001405338140447949091371851175794010994243957752794218684000317601228341255702818176379286738875148029617493200564933506710915854252518227955857087242029196375978945749273506984173662968191379592947177575113736268323065337776319271332219369037655043634359110443826898569641832187764338917515383479951331368181497364542823134703669210324345957749363198520477470001781987090034197573870961815018381913137394281287064366573846576118316340135039600296802745539982201337622331368094763252341907175628748033994666029973048579931639544675288305887707074714023753699660693147262235091561553874223885223350441100947851783627352906439384121869326611703805217735471505872113726853634827554887559136934584092184201686939290641840431941827040798823349617340377015997656591217867604393443899672700062866863623359428597799334412984201287507033179984416271117542979461326527678540758983552397178702355698502825774544001087462328311559080226551428328641317355111825979817080660160831573053537736877248685932918713764167890194789576172648934410021255856251805867899206865122445931556339159044337428731928845394328240429646824030184350657689767071744938023971581134618648208290052814452599649127975220479413790692130609621025061373589608218422597123875006365008228798998327452618262671729368229592441591069627373379681552366424279376183168325776874708515938122943315041259118769217766699609700871858954853305971670616376004942242122694907007122120643048215890751118484363191784721167733798368468144640296056583982891990759873294835823295366845324302925644708893684507419918420350073394562319980764262965817829605419434439800331927560777185579304340783859515660637311476509286157464996326768826528217443591229400982494575147194186101262765948790576207922025320540215442204181054360152107193345885130274052032320820350965878952035232653154021353888732587363017676580558224256216084906455051994679375537470727167221147426940932344244437972004590763248588877090121397473631363008022159809290804255076457573723237386908443910626192955336869133576450623250045070200606035501971367236358664459645109113351277885824361833126069659873818095289289396684935588598786019797433802320494516819196944121508081210407202869593570495729899956640003162299977776821667646343603747963590426305489384298749398352390651956206269576860965819811998915382934001571929660067494214576342595135959493144896656955738776815734320182317466787152639520841880769262785070877209361042691466976022464723910463890887574588206938346696566545374829872605584375300702150957500270928903854795101325761089420039895831219285283032519217581591333189074495882229129681410265845887718043988858861667112339711716686425604667853345723147581140683900811453317756558764175735317329556659175833818468124604912874246414171354674294398507455365916796592621161789367350058439103954501566701803964811446536914574994928585970615388885267877209988969259616914352817793362269974121620025752167896875445867084145155338279384521228665868078735872177853665868402406458598594636739763135542737185788986496358168360673863212860847124174483879215722151974795390567773025010024848973559616726544653310906473366320087628789159343227119397053785912262035609161240578605608051472396508077276397814363481377234648256618665518723605825606585022010301189193402174398612167737242059892138487852590271501104280816687378424831896951325839434792158124775470842184703544600642792122118777768326508848030898156345584914694195490228590067628166200818009737468925483824357691529652157868606276749684142892726240450075642265540247493349069794412357947558907947161389891955065902317767537098806413459197695641334437997256209040475889527207986714329620887569460277857016952314376178563479496518992237702174198297683128669937819918862715573977501655149387346358099218244337364569207310228546266666348824870366757154729476249023643470395845534362759501017002774948163808181416960642335545437568978126194965640059946144920875702340889271693761457607630603694282272045645672280006533593798361274745122078358116037387506480771121327445255576729902007989824259553891120661639613919556902508727733431552190139317699124653515125632491216909739969455358910134716430632222183087462506265630934074346487336212410806114043808368410054856656750211104202981159776862689201721400737274039009102162577213182896023748439220261006669772583167567984757858308519632475865456102865603432835235321002760585842183891160409209016055848138425986281339726517788095563375895271425899904185749377320307074093734811323302919491324393845255290960691523724682299716365682571914267178322553083656504965522010967382087926609102489321350295090764276049196602471180593892485753377085192497753256237041839008872017432625466941839667769075095400290336330462451867822184272068694885432959633332845362430558549794698951766638218162340942058557050411914814022628730525863819985745999587540480410572091237611537744989054717929330541859620475435109161860178280967667777406192460669094727765551394908702450096724688675531815317241537485422431157645691120746445478830752475042797168483410711146481303183784335565174497057720389009996343595628310683028095329511837607777225859608085660221194130875884912800540217876088653024762489583097525025128290557919888768851913428004602916561339512798159704802149477161836815520696994415288952983229724018444592308213814881719503437306900707484189560975506325378591590336558538982347780773610266392847895155243260137024784954764037038655954734881323953448003105137534865181167353900366215552046567648141103929227950989788298559269003619502889173402200662614554468214426353758729000438684736543146773962495047038097351259524056659688154045327798570471301789252133114165399704421599286530949375884198334065237550289844277600473801797566313327749070870562256973050505295157217450572947284063857211872493434456327261250241444532735904522026112002533426143172227336254070266114220257749334239558921414945296979537936534955569335806767704298004375397786908641082509922493026126313452452989898596293933686920931367579380178524876625553173618967476734207933403328961565995569338566207725824565918999995896461792616158158130451533555310526726691787445981531267997042507801278459363381717028987174646866713712450913569533483523454450096984198071530798502790714082906719993587193059515477741059309054068607106438764031961127114317911325529846414733128163692752536293996162479578694911672800448524304865392349910337764407679775282851414936935004661118973279752766476322900446276719550980761339258530888892023393586518888777532411419752667117253683171630129253286583215230865962774455274678929245904764515227651110617238952397395078585673733612017487541334083300908642245056589908309555595309242158131442531972733822827862099169353291155164009224027879953349031592745620641759827901036885552264972460458628654531779628701175048213736235206538375426832759914334392460585516677909832191190419858843448871546633074667736519782749177940689454968034297086992116631746145182369689003846490181373091161312509199161029701469012646280520213989417507992486613563539728168003430241863276001692081852665133705648639904637982356552396789021415509427937078777175994073266722054262747222996019736810473446543866584498566801479629835898159639844926786817312275072472973594478874902132904314010540810845074477403392592407903450253578797504203034065328409456200869259779038542373721241025551915028482761359418832591891170491144682804468793038454146966522123990344350406879350441644615728548988827492345083384779997019478870705556810170292961238729307916778216357043769984264443524057197307728456253712648449376080501395341246847232640693215009030299865907757691010725857442343857250503879772687576768106358286183133482485085736359742066933484585771660805178146311092826054360922958970333300330112543588121871684156485695221578878387210894892996993568616203678804271021467977088182707392839051628986703158908186842287598725187130811132722351117690458515840308102241655548886149883851944183969517185009436488440203571762954060014646927913740135681043755812094812883062904103981764943708368756531180858858925436279050157436420422644994156158437262276179285017225222636247150085117602698725448697127499829089285090640473786952787352922764432738411244114594104693932737360686460213835955625379216214869850373820584255615758834779953913563674636811233405780444551147680820116221488737395884861655440088726034980510244297358881295550892991999742467156123819097163351915955479868295006854089810983004269902448287955709571237934674656087266090459644961502839099110113666832393464129642350045017528525411023113201358663203286216448691349605897311701798018311217408401715405972412102873767032146291575539163937828832074671714248233235398342203195009730551412059736980604716462314816918922650370596772815705980994549412905680269867567917608628519088353545972574906299985941703190226666742195207390463920991573201191863031359262926760443123629387801978025279317602043017461278149496079264967312291473688677657733354581732580340688036079727911175747327242451262951216393484765822398337760289596609213227057399945808561119354856703868069205038249602880797961841497738323318700870750374081566616592492730836192563677128010437510714761396594962459279085288284944382181389554850268926514310317303494298755861594132693695360857243588801251196141186784329570618688117337879870606716470423806859893429021273602976153675474059631783570244184617187268106097456643,1)::nil) 5863261657303571070864521352319877114693063980742214025555105957831337807932539434943506290587110653371363167739338549376827213252799500910057795272195726455922875086697262735938446324181424313721154480712048932808982692116019006331831219888815976859222476975836250179750697195750995764902999313729505980852983230223634905925707560217838741376382140092072919403773723133778326953800604556949268558619312906112128585493823379364073773177397762336870866006631501071245125649141295173777845339195779355607098834472282035965708360288480744148741402443873283766836903361537030866242808053484446321999884040347869057557304748924703883103994204395049051810671400290390579695212902504229146459941484977346047622658093836785902003687650723628921661664256033215451645548627571594982391777545882925336366199474975550040567733406160358203744915158038790396840111068221158868629446321300064711793629181139480167861121757205426995937891937083280708731480582618693835928327673410144472766493946900259684571738350299762383899965691157453866473045750192238115025174661718943773995554223161412799174113885379568800673310360356436000614715150653013105756899363299536388006442471872269002696193676275489310409672858499801960932121271399078698346681440882117369902365385477077877886566900682771184290368703978045483141108489129208082814751067392771817910103217671221244080919756182467850608559753165706591966314025247024923281198766007419091509365918233147157774335718521453688218682658873087195408757420286319615042564593163106951989897481801048334211320181696478751697579613456675723510379649547942712628797789814590602003866174793625443780706364021775003179081188030441441284251215340578170713178241246343412295125190697912762617703817009117063445885868282857563729144270380466829863504182173215228704111781289428412227446928278394777742163712638414757286926089139120410901358615896195437826815402514202429193457627515230458588478296307594906682113621157825062707480745992788250654461247803755960788197775345283114806876612247441624508209672371256727705958465764708867973914228117850807205822627878856546255767934390339074754983451419828441212519615094799099129857234061998003582924480708106727536821372788522210427956591838419772868211119511776017845844401126856569348075558438648763868161035791808236640184344728751314214113829669739083375897274501348803756121712412117200480278546877856868588166705691537498653568969688780655829369976097613839837763758651901931246631712169248490248279218034647938100128860308893953318036744642777542584437453056508573894174373917195944305284410189261256457668699798583537068308352195691666431782925090960557139422265100540419066030735667662303764059062696400996242647046113758811982977999159205014719316709383536809099697492914264416914170021928149432424043316495408974976502600787607690287386936869545522272076425195470824486862956270219557267146013637401616253616032549792597994756784338347445857803655548849495919901771750290691825146285021158791550685753669618347112239632071683687597827952740959199487742892688104682636940862659952930062443146772070716570066962302191168499677003112973706747882937322053206117373788542330565310072078490060137022269497883893450201400922558425405586457676816774670214065996135230672736883544688893092366416446690207206309519994859107127575910694933442523758679409042056544729668597464407286159769713894104066082573006209220379714607103248196427809399699831109917010186479589407496741763695720337243199905165509998357783198995360672582022149614761995918852504991480835959537792251078052946242781732649259979671247287239231025952164504543661218764674909475127652424354188760352862386731704118170633640836067397704275702614646594315056781166176991212383311728271517897463209000578885781799911262365860561817452127125195263196287650332193046861338072473233638783602311592565401744579843799850406385557825066685317514643794384838357968876477926404304383797615535223121912574807857168943255625467200517117716324667564100116221274535904487156348673679810492196643584014834052010314238032070699637196521481334595956930519590006249438249606980808266921111369397899768192582803283145675714228568848548306119960845023755424887422358451657928672151395159380136269565827997380406985759558819770491577436133443176220728676320388858192445069244662466730333140888370306824239063788032648477928097429276360928336938115813955997983097042077843694925159594506197694693283384792046443722554306664265920708967621265087579195922700612321792537268623091120212565862928972821182654521704444640920515337141663211104076478323738437002727452946287293090556265353985432427317218277128513287374186238557426666024614130746355593306817921983245461390606779772258843596198499252166862390085866529195125960939892292836914398749906137341522144463230662488054613736949620915230047372538219680519451132522535318940215524652916952197724813836774485010601696253833349714727347738604843951508568068126723249300279490556136705771582459437670679572045768603264670457644357310653432513080046781934492687693030093958367303016390051289412617809495725706950690807475743305671741602969844413606571163297815426939175463806983689786497012090031448252464850303261821975790402818291521133057051185110965799011209147220730549935764920265308263911220596164606669187169215062429175585761824012010255383887086556842251649613035192581409178982874821903396711900198225367385928003727358642921034452426800915739954463962378759336178099355911052516150466953299497497030119739871411956143679849590809463900082697224134548377906810638989767419260897050152950828762745884261226230885981636113577402560339253437327707509450753333149380227994549072940244943797422976244792825707276513834962087434183253389707709907731579080869087803276542760854177763437499126644556888917615188598932794910715897932335411696661935343464464102571535997369320520849919448897305712995565560366990637777721621801668104823967793623274479226159412175036883441987958467305591771404904727138757428949927964555735958007684302525110913315880440741350618310507629326798054784475940497205935891061833890405244266989344136514047529147092519457021028180915919882111256427275916442614278362684527638816152067150749216001133406079164106538518033304326714584421981997831598618483963413631327418096274335008018785526476867819840614271890719325797015329063139570641714467264853899845744097646331026329103796238493112173541467599454755675475102225327853735395746714669007877355414749268502550154508134888566864586344765159558736829073203126514726385737164992742197897023563817196349409301029258609665594790871012266552070572185857680136745696301572264076510566784905275513116962887386678652865594697755004109841377089010619448026894778975138494570095807566094794655577810121765227903103162452717594742338169641820791747532642725056139646730376919309807958618164699601750967499609153648453345779934118827557971352443958897678392422902584793380752614472173015729489548445557620588403559549640827480624357618546280220770125677443578760427461346015172284270841574035669904050269023993756766872207247348775558913388346318923094827473610076149199315625399017335440873176314484178409251328592878089707559412336833992687184182886427341516356113411588526914472594166234554838205612026824624752848725779888261989583770874585895926218703120148028289791135719111360584754984515407376417306685388601337991284722311913035029773614842078561777229328488800985660060908552132250931735170885083030308826235856652135907827073798946544484072274007886769072588915558859846819001544068279376147089255689702154114521718447038701958995545058645520726031714672802382971828802591030006627516257303063101053151596292938392246304343818781729956016374736698226635071057479383203814597493247786521530004319410871078323587130481446814381178250626443112218315352536552222001755503451769264703194560038596230436987882010159728915808758954741907408661729433866879034197608210075841976535726772151826495673616523086145031512050838328713838042193028462036103623648940514706017418739563639540222882087497416718596672463253889533644999614726261090504661048653928666638119587980576461088515678477581193743840419410770167592142888415238609463032565033773338775838903545462877293933798669676739748322121384066784323520397673496928210687691131273642995493663214775407740388210787423519233893883156398854161165000584497126264268913207771950386256861854760955897376537560457367707876026563233535129191455261042838072783653825405398533145269801215074713986821998527921082295587726762709888260942085108527906881035172017174270062219145962438628857464541066839140827290632439137011869587197702316571770769085953626686132106770016675135668826354398352646129597291450673267681920159237732144835562151536119738391447485669818690425155109366131906331361396728656565438992024790079179576954835536639653593109817071155202131664537676019078440188919367617661884308566896589101190586932545018907272373831092966044553077807041706696258971243492472624541390706238384659421379540833120117228575228238730472897191715470410273818418541368439061165775478934768039055189077238498320588531591035998531636834740833861704748868004238104392392673301006268972618679010861259515624853040392993509366105364268809827532229573270637388232197962247513781005610395152175484289479028334336626635059846700364761239084186108414613481369159280352384571306634029190794814136731352269651354428595974047059973884965515791670349394867047400330620057249938091907784565695895281515824017940517503466933663982172861195380959791097758600760965906922370142677129929257777820581215487612284758881500203502791798986520093199662961176196728682520489271174754085308175533970888648715966843805887800899163694064181346792791956056941341652475477283986458933060029846955502712265156740254927802311703967166454065209982237117445993088011790195373955124847128330930765457789515809935900605401537494587907601292503918891908675481651348707301888903307825647718749951996136690048422206437576559529375853655753178861007695265800954586644310894 3698922116052066614391245205375026119471408976149005832477366397203166145519929653609928281164321275755005696735971550231280698448061817971954089800689693049757282714196643823036785309619875709920966117205639522974135907414717281900489357709556564030928568407442661000459160541341698690386391139287431681571041586233728062135853506705323149122485273891865365991172636408531147760305416973781203770082641080393670449858321540646056563200081959527738905561327266600995854823688139472239053606821711112467404593339916503008719630590351390274942166923880487488127446323399376363931506099703520620299798294315244245339089514355570418815810764204771667480500635256741935689539093742013490619995859178987658128933777735241650040526396059058918690558030581052539809144593085921073925019381903180559444544964752630277124613853393649656816287025162251509111635895950398178977751316779298590681002168953671354656511470382941370211994195145155950734646415131564213631239325773841542541355844911974843116616013816586948941175601324488830439786853094403354803714744880698267540815072051615735312814231832012684139561164319956386423685660546885268271076285450789105508682456232710149051426087484550247716143292991830920004159552124492869812237595864062565173802484506192051002321068462576345324106070495957688584757500469124045645305683549029356045109732294271584078151866969245385975006916615843131492096315335267082533062044039719924411375987761048715638975896857636208564411659195368024659452396805228231817166962419820847419102888674204297993363729184423521749468725205684113786370370732840965304920447152209541637579275133404399970828726102983776998106720819598241455113502969230463780227217698643846521333071665665882462373976234806609605626980061048266101345142177361704318649630861571668851371984541625463793859040981419992693390939310710690666606083705892296975826735874908405074608053737816472216937140036595603592594647175264000173257066148174164790976651484561243597442945616323471364923536091690575326712193630547261921375260739047616718819682850595523178905976690091047344176974207811347381835885149226661315141205300333878262199867424512062945070141740761534390967287270114926553434676368887777835489931600563477420988622809401615486173417023220841549162455598395935582253943692106838978264178083120732264675424500766785220787515251532544993450532049468732322174246240074935765381290506234950444758623513577308668066715185097974433206931044971646794464973491417904443188857715863246243893938382657933071118566770163264016032276675133245773701974599319896086556374883290757846611885999267858748596802250661878382546658124331405273045352242461075252700087133429698789486786562699619672267230367501085402327517985019177967805848080585229688833009929375016291017686810614071593314169489301590237099928741340287515056655235374982686705409921586661237226134317148956557296236782293658931258773154112060935530160469855509533052479831132700597391759654124837239079798673344310058490253687379770451822796161244917175859571271454825638898771958045966183956143051980772153087980511860319255768807336199192220359460991554821802283217137199787081657874161965120399383117919285964558602102266814571502946634900484503803666322852254877578321412848862234835964365067710128012730755939263651094343439963777020557829352907165565711683232751258207362686175187828463206221180567462438019982552208901104597575906956887905315126493270546237113104603181592224453309428218429123153529158299633413029993387115957325391675677683446555856996952076427252762737592316503578009437173273410884809447553233139381733194175524379683068597973382455872595062499253317066756110602369236593300808353013718094628071988053116286196075060724515015008981788414853700939499856799094012033476303729404232131865281310966900680820960574431040501005536473595070991446621824369836483422101552571414349059222011240741121878505194268376418764380658805325012006021498514022443233417987916210501035883611616429001486100780830664817707884576045107742375762359646082841142182465006196381008564310363248291069655173070573885238220699901426270421958593205172730402190544654938181900454849834179685324971792593072273158747617161825120842779644808395221231166396863054776266577520492499703990704328922683595800848604848593387145817983234857134170036805373137210788417930673697221013596624357546134923671774297510076257608399728214154936235328166255245353331187267583467543042094364381941035809045797725842288170283947793374436209679103118804719243303912239654145338456120534590947619706281923702355121265365381786889511578269783440046873319879651558312122630957072381184694138122595758191731059528518666488123683083360949897661883044941904015753082559839886667829975180791000628001458036044495915117406994920575303612122439853011335514266237839232504664714018456481615307843433078971552360727809393510767668756038766523581373199606876250076343175179315984129185995600898664445509422065601192511908492833028088606141200692324248369536657703062245173117171113724948449888288269496595529331276181640886645630693700616481418937200110434249738831351729369842286278947043517993222720349090230000533032995918721499558056763992906431278179731000177334444046751029628272738837104323048646889189569874329143370193242003178560935278843306149995898182940618790800076937528872371692689705963072277152558132931237165296920840266603614803596322768105299727079067252868389130937600829651038574376976840213544284721052167573523510527158931311819969145895841991979813290180981271547018278448564738670184294315316993074553413165809090035425108299889287970627312623479291846004196272746503622417754136367583221446429180794782321089488580084392556645382072753612418480444740998336166261715205172483056382698271956394302417400548354380209884008598250360899682710212174681550382883093590800907839180635993588138008041832673982360004215810002443117356945917111837501886216079477008391165117810083299020510366890323918626533273102184019670712564599481584638173215360122146061699756464229979341494410220383997266250042522339748500298112713714112372600415052168233131560285512523932362159013544909805546111728653225376686987145946974894925674415080936670943349722874748027168777540679570679206699357798410393735980297972475421627060908232284286525739369635297142431200821625803642043004620616738950800538057942037260550429441450373731899035382853928927526584497885818908389242136934580153540136405323839904542105431365341370322538491554008761476471898649951151910253157321129803805157465681305373502140713710390937352673218306478136028158002955200988807182344732224671530646532769114033802688083877538733011798477736041576482024717088366630671769165441688927030183857862235630595641542566198524036936165482235071021884799458197075329546816582824658411182410888866279360913949027707424198600376010069970206669615263615050998436678452653680368258441855000327440383221369004625950415825937447012468790877643429432140384210376827433509858419583057993113176024757582046056647647964372868033027280648548699880602238661745566707263110021252716780719735192686944243900091487521744685985147634432717706968061356782165407550350139960713908906490157018361965316068186547608448317959331783857265854368227347425794965865722703981030947281536730999179874913329322496827714630067391362950930747321798122778241500696583727789695453427099682640395744666463778454121393109116196305387530162077031640418051839389144689532555661025052675510296898389753569723768348438071750025518463956002604254830189524645323258277902062189936427954444378053354574848441287704956448564254185217587336623136400518967845893534071012283051485719180447247420630165332956460522146405483757704443754939940025919730845078703491497135311032654702845804824362536662161802490950199097033578484679097035016125391775640034197280510737808675202250348448990453167859419611941245598479401351939192646895352297162204687943839317263152791061332513102286517915234076337036782627297875332863000445226634491877062192532096073600875475837074796766469656047644069483276069273410755250736318955419524411147873955974881423753124933407534495989032236264194463302846338136627591411456591128670300484589467767440171317342265140149592812126462012292407909638018890783422526907089481161540629618804027424496889136097192313657799483296074529247950326317995565426344665559735972711772010958063943905026809319088438806360693688842539392359998788391327100994575333476324337774236314160890050699549495351145428320238142389939224101405617548626613419388715559504179465527826797970449159009428539039129498492001865135359210548461325696802876379410999561290334503093203655355602969884285696243112856446368830473367702784683496380831723372507091684689186626575073774243149575342706092920116890919038098872361202915817395599804469565809324867217864051426751038507935560676828675467368665383885423482863788615753736519003949944890974065457819590244276148691221021024860529734683694430707720945178041556629510080582923970650346090863667281341584623940116397493426255811890181778308918492301193045264901433900008925710909972497345485547839612656969153593089814924016592006486013728689390328950805956745319186439948534137074558665552359166902264197403476621213605937608355423078031674552237625498367178369788100342516532577686355291021429716293892520288734219180573017265125403961528180034940601028253457483786095014370444030171274149873225591123853689659306292365280005836715382660518086315835395048665480214628392923058765890335985382949961060103844644054476001204118329896019136124766822774225798315033688833994080762552953652143230263897593182516059517090223531721392793194000150760910746059761882422180351874501807277944699903038667057953981445917039947996273310473210429392744192120086179049486190419045104504070233459171606229195008962094657366693052563985372687485637818669098535515692962468871710083740463437927769341143909345514528760349621011958620241774456739896410428181056479064663210802394318454218505123552447737441668082698634932760224612963404203 0 14827862123064747663172095858604713583943930571176984715826388295175493936668893901068151404221625911723209363441386510011343417151620572048355902209070629519292833728218450090755851897109948422975626428670163639793765421374437724497300351259867754518954957388950877830375068594031256411415677290612792058694093316765138589588072875093666591998063436977334060996649113398720390876882949010839032731113735248651700261512710128817686943087902230355560953849344655407647723725791808871388701817043816121856603959321457061040131489990698057430516847127162119738853410028408220818155432277913339360051473292511138800689887676263080400250382006274192328611146977285920631986224500962946953549959070144156446484186941107138264994760024866346901029028884791520619929328717681665798928474824161341544467146472815874800389004880261604257349830341581823266905163569238707412910625022148856400270241876980497605787325266301374671276168507880032726140144486222457690181885159305865121779942060966287674599979077734223444490344260300119179910484005170723121802598540437844761945206519674362371477467630598038275810937045080702981904657111603403013080323453007846802664298730592921056005982508659609477671758203073680109114951558170964609337168823126453310109778438360515801761296424794279553837894551614987033074661152105349088400868332463255437967249240234045343592729680518241186737714825795291810129267927852009180571552606325064828899572373454547852353820668421270300213553530776569001779572967086067943204984959363418982010180440208038215381032395574374558449476190226150381964218650531228827441086809351988222517196824432462451886271549764282253701143404832694472867237542085747845779071178015512443024040325783991988292104956266470864684341913167563416898211598959656873448271073260918558651672647876668438516899157979851986954429748641247176764206146942448547077741121991186880298142908674863324916084223743864322854051989380408892009462146671146260255681800939583652717111577098546999421037519591825270122036645161205407156383421336092118740918622912730530372748809762924774750288614685931639734519754547698139952460083489444683061168115530921986164642637357637547908058361931426905777128184218361896229856054865180154426999974532278175856970987977831796103474831980469710295742531444502362830570272176418143622486950160620123140075249614398400546440537170925507203306343490306439164554664278324140674197071477769161525610466941806687046319308421315790415018558628956934054805415252135196574338512371414576537263629211399226939522091717211920702374427268902193146894545666780617668739125027108444449530502598351158413529549299684061773579457483742312579616285846737685831123425056917503120384714888558148885792561412168794038155410638159900770169963785706103711907425249256983060302764294030889691774928659136491436812255636164049099170646797989443033842897558259439678409032604755156578875557571039519716854319496816764900254222170843529463984707612989405733508106535439062280798132259101299064170052069999940325223789970679764294340399419399493492276971267012470738185713618253139655410715835733133474726292672241857647171415499473387217825737775066739733070633316006802527708619532102638110247210834450466445489711793226826405723303645178600491594688151557045216594920308059149015303015007327571127954187241816619849155545853581388166311718344273008735592433823361005535931969590897930583848309814546465615170669887289963422929634563310385923306542434396710767559912658540971414519679353062376631551375973059272898024723589599463504010258502445472587480171463274904102629519781413223959145906742781284733127909353271691127414057769247063696167870599199904064419177722195220499944729989645865572235150524734380205548822444318962807643609114539932637961332713439677255664934135962452825945769629447828452623435834880765687912697078887316868887080627310262270031840270350999254278783775723945199288346412615677472717567307057424274234196449412553463909780054793551540999396145481578421865429812709477433583426650469813308912177251978426136748448460594209272901002149328341488638561036403207574154843489462565911328328080764118468863475409497602069188123096481235994061858871927996924609960774356415510165701419029053123033510769430312705144910966832635921941363151882058533522865400297024551306819735987388610794862772093782456335673018330856413651769703187031169092471013680015889231752957213134974757272021197451623964795489272959326864588399332797704642069213566658194799181653384314539843949109019163903448701595193169699660872648493404543838555236916180682569638458708961722534580517172812136169266298075304798111338495568678227234484379933257346903806581921020540046227132739376001954829536964135609482320592799999936089672357459233008459301237254925264072342816236939986853090435812746623654717818497071985495481451189664881894494755205901192658862982945316625874925862340768880111027999853225016346153943912001417988406239670874345055326126134591705552382373650016956975763547355358309613535637188164308176927861674069165693225081023539042009161806654460920815823514402625309922917730143042746919273832453206484901933829717132765573670023868800552758173722571186062698008104026391971664258901710441210539900380806341222664617346952316878431384046311068306374037837134830936025055856773624265491634520179073600835202540259216434988788774253018662295583694632685418636070923244483970191459061246867412445149593440888611248949923974423372353259249780066138293028857275103889690426164605802527456804037091482731297872286717005311082180388596138127691246208566725452940328117119055188971502454456426299837490133951609954642165177833566246269641593906969349352302727345084103283703122538687303028229981203922460859197236967461341744814615188915905955533386417468652763204241138418095818480511445799709092186991691212240628036099016166144677761080561881093395730911663362658164385975797020640603805345397220213406128132812236419995679526001708705696397274091251699554408569223294559399730924922431449609152281251467195021551422697602983315569236103410124507920100890140717151244087549727582586644217838009210391697311731580607749670024157854520729085631964444785107895499453571959160754301237070652000382915038802341044314691748372852195057945925159620076456644647436671450685852255875403734162284792388639375277341655288486669009658324693563047472979123725995903137448238119562499943258594146353635863333791163498851775431066518568578710373270393770407365056492811159698262540133445806688316977748368840648357974021210112822297327406191317989220997520476768560866284715360688317640180130346008701087970327485011949113034186012393169491764504923253089307536445312504680957736665174105526720245452788762952897820546467108255375661285273812271675608426126325841404206010565438203117165709418626723926731786432530640769088056972557220873261659053426894866109341620039530915717675287528069298943709720497286198225618261538151296122451585218029925804478788974841091453761181954085308296722155716957180610611401086146049039291457695366298865044036947928220080733180910160956174144883520838484873340651784339481524711675308614527696493396408746700887487019791501461372455911243387247532384114347977027133151276195333103827638749691477538594837901260972542418079684546261968562301358910730128277397519765050898738710251957458264689240147384150910867547147606965902576789540991062052688078169663520039020925756504236490662183406458998366005944574281722487683608236313775938623804895114990282624028904424887612582046098949363222163747419108942697705098132764398531088413092168314915796419679922619478648155374025289551790835922001963421888959577373336689625292488395372680829636314146552245966673352115923935348301156297938145643579895210904509970592256734815336504728591717522054180359020447173915551830881915558631324099536701118323211329808353372287560057455403153767213887306612014390510060670020619021981435327963246294306082943328660685655531410007980336432669371734288198947396868182724497229539236233165713998341132947967962165576469364157026463766934902313912936972627313163850192938810601394260088360637009581966567322387560042105615623870923240016242748945902991567540435334483876309270673415260823532987617133529887734257652146386520111195998801094226528129898238125103240764150287257152697247484587406649147498430052232885578877513826092629099885357090796241092096919145848156360465294607511240919116180365568872138767706942071154775720704493198029420251164003169338008364342091418473159791797167726955911048794506365921196825464784932160285676083230929856439778957742663267231943023713030640056865383777618606637996214174425259832697259092186525695253645443502591841681981651973814077256635776149370609837186085050917374214852997011415528847562384984207963214811360823367304350565874656290754776509252571324983143515172207263957554258862234016488693662043002232617931798330304084449970389684728111063995862527409569535191653671814425637812877766086950076639462988411061096210535634468957259619176915354853380348350383379196512250000734481492782974876663351643915979519999553490839332908151415316036030911140206176748870951687104450122564215040889970712143338965967399499381830125637379583280799177183004382407702844128393650664105575086403478544431575154061933206060391797307103264686747311917588306386770285735101902985689440757624173145502843485986752487771935813126752612036828735172712608354890601058175223059318413681322415273633686190484728460075199505050414769338285110151770400258377590055029022632819322969979816006766911085105440371565866506552845966000136590691087466999883946508671086311033319009446988625352064750143852801876181777079947996940141191844234214453597770144843816178043650385083617308288467268360125294249534189637540241269562759478028706300595556689351603504894754209829519863669870110906233635788284862263365946914589721954903851418450313887885440317111277913948786002780901558467779436457264001063877521639649813025893268539517259855799379676268547654304652910349304739715). coqprime-8.18/src/Coqprime/examples/bbpp.v000066400000000000000000001417301451023060700205730ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Time Eval native_compute in (NEll.ell_test 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004887073355577764679769531135347133345576376585856457779999796708668648831253474767767777473527562199 13586730412023 ((1472024496953428138467289635128682373564124877508316982407887104355141494846923127837691048466483188942018943670958999837375145454806303229279048348113097299011411249757763835820456509678785661643213292144491701148848605775484675309473112733156519070199491940974372200221557574789017177989462900436494091915743874103589440595107720377304305523253065704014292580695953185491378768422250659162213178594661078559149878508175963416202060787708176144378679819549163390300318946375742121719324943002369150585523924321796056090069029236724978475090341366749194180490579129174578096429590414676001405338140447949091371851175794010994243957752794218684000317601228341255702818176379286738875148029617493200564933506710915854252518227955857087242029196375978945749273506984173662968191379592947177575113736268323065337776319271332219369037655043634359110443826898569641832187764338917515383479951331368181497364542823134703669210324345957749363198520477470001781987090034197573870961815018381913137394281287064366573846576118316340135039600296802745539982201337622331368094763252341907175628748033994666029973048579931639544675288305887707074714023753699660693147262235091561553874223885223350441100947851783627352906439384121869326611703805217735471505872113726853634827554887559136934584092184201686939290641840431941827040798823349617340377015997656591217867604393443899672700062866863623359428597799334412984201287507033179984416271117542979461326527678540758983552397178702355698502825774544001087462328311559080226551428328641317355111825979817080660160831573053537736877248685932918713764167890194789576172648934410021255856251805867899206865122445931556339159044337428731928845394328240429646824030184350657689767071744938023971581134618648208290052814452599649127975220479413790692130609621025061373589608218422597123875006365008228798998327452618262671729368229592441591069627373379681552366424279376183168325776874708515938122943315041259118769217766699609700871858954853305971670616376004942242122694907007122120643048215890751118484363191784721167733798368468144640296056583982891990759873294835823295366845324302925644708893684507419918420350073394562319980764262965817829605419434439800331927560777185579304340783859515660637311476509286157464996326768826528217443591229400982494575147194186101262765948790576207922025320540215442204181054360152107193345885130274052032320820350965878952035232653154021353888732587363017676580558224256216084906455051994679375537470727167221147426940932344244437972004590763248588877090121397473631363008022159809290804255076457573723237386908443910626192955336869133576450623250045070200606035501971367236358664459645109113351277885824361833126069659873818095289289396684935588598786019797433802320494516819196944121508081210407202869593570495729899956640003162299977776821667646343603747963590426305489384298749398352390651956206269576860965819811998915382934001571929660067494214576342595135959493144896656955738776815734320182317466787152639520841880769262785070877209361042691466976022464723910463890887574588206938346696566545374829872605584375300702150957500270928903854795101325761089420039895831219285283032519217581591333189074495882229129681410265845887718043988858861667112339711716686425604667853345723147581140683900811453317756558764175735317329556659175833818468124604912874246414171354674294398507455365916796592621161789367350058439103954501566701803964811446536914574994928585970615388885267877209988969259616914352817793362269974121620025752167896875445867084145155338279384521228665868078735872177853665868402406458598594636739763135542737185788986496358168360673863212860847124174483879215722151974795390567773025010024848973559616726544653310906473366320087628789159343227119397053785912262035609161240578605608051472396508077276397814363481377234648256618665518723605825606585022010301189193402174398612167737242059892138487852590271501104280816687378424831896951325839434792158124775470842184703544600642792122118777768326508848030898156345584914694195490228590067628166200818009737468925483824357691529652157868606276749684142892726240450075642265540247493349069794412357947558907947161389891955065902317767537098806413459197695641334437997256209040475889527207986714329620887569460277857016952314376178563479496518992237702174198297683128669937819918862715573977501655149387346358099218244337364569207310228546266666348824870366757154729476249023643470395845534362759501017002774948163808181416960642335545437568978126194965640059946144920875702340889271693761457607630603694282272045645672280006533593798361274745122078358116037387506480771121327445255576729902007989824259553891120661639613919556902508727733431552190139317699124653515125632491216909739969455358910134716430632222183087462506265630934074346487336212410806114043808368410054856656750211104202981159776862689201721400737274039009102162577213182896023748439220261006669772583167567984757858308519632475865456102865603432835235321002760585842183891160409209016055848138425986281339726517788095563375895271425899904185749377320307074093734811323302919491324393845255290960691523724682299716365682571914267178322553083656504965522010967382087926609102489321350295090764276049196602471180593892485753377085192497753256237041839008872017432625466941839667769075095400290336330462451867822184272068694885432959633332845362430558549794698951766638218162340942058557050411914814022628730525863819985745999587540480410572091237611537744989054717929330541859620475435109161860178280967667777406192460669094727765551394908702450096724688675531815317241537485422431157645691120746445478830752475042797168483410711146481303183784335565174497057720389009996343595628310683028095329511837607777225859608085660221194130875884912800540217876088653024762489583097525025128290557919888768851913428004602916561339512798159704802149477161836815520696994415288952983229724018444592308213814881719503437306900707484189560975506325378591590336558538982347780773610266392847895155243260137024784954764037038655954734881323953448003105137534865181167353900366215552046567648141103929227950989788298559269003619502889173402200662614554468214426353758729000438684736543146773962495047038097351259524056659688154045327798570471301789252133114165399704421599286530949375884198334065237550289844277600473801797566313327749070870562256973050505295157217450572947284063857211872493434456327261250241444532735904522026112002533426143172227336254070266114220257749334239558921414945296979537936534955569335806767704298004375397786908641082509922493026126313452452989898596293933686920931367579380178524876625553173618967476734207933403328961565995569338566207725824565918999995896461792616158158130451533555310526726691787445981531267997042507801278459363381717028987174646866713712450913569533483523454450096984198071530798502790714082906719993587193059515477741059309054068607106438764031961127114317911325529846414733128163692752536293996162479578694911672800448524304865392349910337764407679775282851414936935004661118973279752766476322900446276719550980761339258530888892023393586518888777532411419752667117253683171630129253286583215230865962774455274678929245904764515227651110617238952397395078585673733612017487541334083300908642245056589908309555595309242158131442531972733822827862099169353291155164009224027879953349031592745620641759827901036885552264972460458628654531779628701175048213736235206538375426832759914334392460585516677909832191190419858843448871546633074667736519782749177940689454968034297086992116631746145182369689003846490181373091161312509199161029701469012646280520213989417507992486613563539728168003430241863276001692081852665133705648639904637982356552396789021415509427937078777175994073266722054262747222996019736810473446543866584498566801479629835898159639844926786817312275072472973594478874902132904314010540810845074477403392592407903450253578797504203034065328409456200869259779038542373721241025551915028482761359418832591891170491144682804468793038454146966522123990344350406879350441644615728548988827492345083384779997019478870705556810170292961238729307916778216357043769984264443524057197307728456253712648449376080501395341246847232640693215009030299865907757691010725857442343857250503879772687576768106358286183133482485085736359742066933484585771660805178146311092826054360922958970333300330112543588121871684156485695221578878387210894892996993568616203678804271021467977088182707392839051628986703158908186842287598725187130811132722351117690458515840308102241655548886149883851944183969517185009436488440203571762954060014646927913740135681043755812094812883062904103981764943708368756531180858858925436279050157436420422644994156158437262276179285017225222636247150085117602698725448697127499829089285090640473786952787352922764432738411244114594104693932737360686460213835955625379216214869850373820584255615758834779953913563674636811233405780444551147680820116221488737395884861655440088726034980510244297358881295550892991999742467156123819097163351915955479868295006854089810983004269902448287955709571237934674656087266090459644961502839099110113666832393464129642350045017528525411023113201358663203286216448691349605897311701798018311217408401715405972412102873767032146291575539163937828832074671714248233235398342203195009730551412059736980604716462314816918922650370596772815705980994549412905680269867567917608628519088353545972574906299985941703190226666742195207390463920991573201191863031359262926760443123629387801978025279317602043017461278149496079264967312291473688677657733354581732580340688036079727911175747327242451262951216393484765822398337760289596609213227057399945808561119354856703868069205038249602880797961841497738323318700870750374081566616592492730836192563677128010437510714761396594962459279085288284944382181389554850268926514310317303494298755861594132693695360857243588801251196141186784329570618688117337879870606716470423806859893429021273602976153675474059631783570244184617187268106097456643,1)::nil) 5863261657303571070864521352319877114693063980742214025555105957831337807932539434943506290587110653371363167739338549376827213252799500910057795272195726455922875086697262735938446324181424313721154480712048932808982692116019006331831219888815976859222476975836250179750697195750995764902999313729505980852983230223634905925707560217838741376382140092072919403773723133778326953800604556949268558619312906112128585493823379364073773177397762336870866006631501071245125649141295173777845339195779355607098834472282035965708360288480744148741402443873283766836903361537030866242808053484446321999884040347869057557304748924703883103994204395049051810671400290390579695212902504229146459941484977346047622658093836785902003687650723628921661664256033215451645548627571594982391777545882925336366199474975550040567733406160358203744915158038790396840111068221158868629446321300064711793629181139480167861121757205426995937891937083280708731480582618693835928327673410144472766493946900259684571738350299762383899965691157453866473045750192238115025174661718943773995554223161412799174113885379568800673310360356436000614715150653013105756899363299536388006442471872269002696193676275489310409672858499801960932121271399078698346681440882117369902365385477077877886566900682771184290368703978045483141108489129208082814751067392771817910103217671221244080919756182467850608559753165706591966314025247024923281198766007419091509365918233147157774335718521453688218682658873087195408757420286319615042564593163106951989897481801048334211320181696478751697579613456675723510379649547942712628797789814590602003866174793625443780706364021775003179081188030441441284251215340578170713178241246343412295125190697912762617703817009117063445885868282857563729144270380466829863504182173215228704111781289428412227446928278394777742163712638414757286926089139120410901358615896195437826815402514202429193457627515230458588478296307594906682113621157825062707480745992788250654461247803755960788197775345283114806876612247441624508209672371256727705958465764708867973914228117850807205822627878856546255767934390339074754983451419828441212519615094799099129857234061998003582924480708106727536821372788522210427956591838419772868211119511776017845844401126856569348075558438648763868161035791808236640184344728751314214113829669739083375897274501348803756121712412117200480278546877856868588166705691537498653568969688780655829369976097613839837763758651901931246631712169248490248279218034647938100128860308893953318036744642777542584437453056508573894174373917195944305284410189261256457668699798583537068308352195691666431782925090960557139422265100540419066030735667662303764059062696400996242647046113758811982977999159205014719316709383536809099697492914264416914170021928149432424043316495408974976502600787607690287386936869545522272076425195470824486862956270219557267146013637401616253616032549792597994756784338347445857803655548849495919901771750290691825146285021158791550685753669618347112239632071683687597827952740959199487742892688104682636940862659952930062443146772070716570066962302191168499677003112973706747882937322053206117373788542330565310072078490060137022269497883893450201400922558425405586457676816774670214065996135230672736883544688893092366416446690207206309519994859107127575910694933442523758679409042056544729668597464407286159769713894104066082573006209220379714607103248196427809399699831109917010186479589407496741763695720337243199905165509998357783198995360672582022149614761995918852504991480835959537792251078052946242781732649259979671247287239231025952164504543661218764674909475127652424354188760352862386731704118170633640836067397704275702614646594315056781166176991212383311728271517897463209000578885781799911262365860561817452127125195263196287650332193046861338072473233638783602311592565401744579843799850406385557825066685317514643794384838357968876477926404304383797615535223121912574807857168943255625467200517117716324667564100116221274535904487156348673679810492196643584014834052010314238032070699637196521481334595956930519590006249438249606980808266921111369397899768192582803283145675714228568848548306119960845023755424887422358451657928672151395159380136269565827997380406985759558819770491577436133443176220728676320388858192445069244662466730333140888370306824239063788032648477928097429276360928336938115813955997983097042077843694925159594506197694693283384792046443722554306664265920708967621265087579195922700612321792537268623091120212565862928972821182654521704444640920515337141663211104076478323738437002727452946287293090556265353985432427317218277128513287374186238557426666024614130746355593306817921983245461390606779772258843596198499252166862390085866529195125960939892292836914398749906137341522144463230662488054613736949620915230047372538219680519451132522535318940215524652916952197724813836774485010601696253833349714727347738604843951508568068126723249300279490556136705771582459437670679572045768603264670457644357310653432513080046781934492687693030093958367303016390051289412617809495725706950690807475743305671741602969844413606571163297815426939175463806983689786497012090031448252464850303261821975790402818291521133057051185110965799011209147220730549935764920265308263911220596164606669187169215062429175585761824012010255383887086556842251649613035192581409178982874821903396711900198225367385928003727358642921034452426800915739954463962378759336178099355911052516150466953299497497030119739871411956143679849590809463900082697224134548377906810638989767419260897050152950828762745884261226230885981636113577402560339253437327707509450753333149380227994549072940244943797422976244792825707276513834962087434183253389707709907731579080869087803276542760854177763437499126644556888917615188598932794910715897932335411696661935343464464102571535997369320520849919448897305712995565560366990637777721621801668104823967793623274479226159412175036883441987958467305591771404904727138757428949927964555735958007684302525110913315880440741350618310507629326798054784475940497205935891061833890405244266989344136514047529147092519457021028180915919882111256427275916442614278362684527638816152067150749216001133406079164106538518033304326714584421981997831598618483963413631327418096274335008018785526476867819840614271890719325797015329063139570641714467264853899845744097646331026329103796238493112173541467599454755675475102225327853735395746714669007877355414749268502550154508134888566864586344765159558736829073203126514726385737164992742197897023563817196349409301029258609665594790871012266552070572185857680136745696301572264076510566784905275513116962887386678652865594697755004109841377089010619448026894778975138494570095807566094794655577810121765227903103162452717594742338169641820791747532642725056139646730376919309807958618164699601750967499609153648453345779934118827557971352443958897678392422902584793380752614472173015729489548445557620588403559549640827480624357618546280220770125677443578760427461346015172284270841574035669904050269023993756766872207247348775558913388346318923094827473610076149199315625399017335440873176314484178409251328592878089707559412336833992687184182886427341516356113411588526914472594166234554838205612026824624752848725779888261989583770874585895926218703120148028289791135719111360584754984515407376417306685388601337991284722311913035029773614842078561777229328488800985660060908552132250931735170885083030308826235856652135907827073798946544484072274007886769072588915558859846819001544068279376147089255689702154114521718447038701958995545058645520726031714672802382971828802591030006627516257303063101053151596292938392246304343818781729956016374736698226635071057479383203814597493247786521530004319410871078323587130481446814381178250626443112218315352536552222001755503451769264703194560038596230436987882010159728915808758954741907408661729433866879034197608210075841976535726772151826495673616523086145031512050838328713838042193028462036103623648940514706017418739563639540222882087497416718596672463253889533644999614726261090504661048653928666638119587980576461088515678477581193743840419410770167592142888415238609463032565033773338775838903545462877293933798669676739748322121384066784323520397673496928210687691131273642995493663214775407740388210787423519233893883156398854161165000584497126264268913207771950386256861854760955897376537560457367707876026563233535129191455261042838072783653825405398533145269801215074713986821998527921082295587726762709888260942085108527906881035172017174270062219145962438628857464541066839140827290632439137011869587197702316571770769085953626686132106770016675135668826354398352646129597291450673267681920159237732144835562151536119738391447485669818690425155109366131906331361396728656565438992024790079179576954835536639653593109817071155202131664537676019078440188919367617661884308566896589101190586932545018907272373831092966044553077807041706696258971243492472624541390706238384659421379540833120117228575228238730472897191715470410273818418541368439061165775478934768039055189077238498320588531591035998531636834740833861704748868004238104392392673301006268972618679010861259515624853040392993509366105364268809827532229573270637388232197962247513781005610395152175484289479028334336626635059846700364761239084186108414613481369159280352384571306634029190794814136731352269651354428595974047059973884965515791670349394867047400330620057249938091907784565695895281515824017940517503466933663982172861195380959791097758600760965906922370142677129929257777820581215487612284758881500203502791798986520093199662961176196728682520489271174754085308175533970888648715966843805887800899163694064181346792791956056941341652475477283986458933060029846955502712265156740254927802311703967166454065209982237117445993088011790195373955124847128330930765457789515809935900605401537494587907601292503918891908675481651348707301888903307825647718749951996136690048422206437576559529375853655753178861007695265800954586644310894 3698922116052066614391245205375026119471408976149005832477366397203166145519929653609928281164321275755005696735971550231280698448061817971954089800689693049757282714196643823036785309619875709920966117205639522974135907414717281900489357709556564030928568407442661000459160541341698690386391139287431681571041586233728062135853506705323149122485273891865365991172636408531147760305416973781203770082641080393670449858321540646056563200081959527738905561327266600995854823688139472239053606821711112467404593339916503008719630590351390274942166923880487488127446323399376363931506099703520620299798294315244245339089514355570418815810764204771667480500635256741935689539093742013490619995859178987658128933777735241650040526396059058918690558030581052539809144593085921073925019381903180559444544964752630277124613853393649656816287025162251509111635895950398178977751316779298590681002168953671354656511470382941370211994195145155950734646415131564213631239325773841542541355844911974843116616013816586948941175601324488830439786853094403354803714744880698267540815072051615735312814231832012684139561164319956386423685660546885268271076285450789105508682456232710149051426087484550247716143292991830920004159552124492869812237595864062565173802484506192051002321068462576345324106070495957688584757500469124045645305683549029356045109732294271584078151866969245385975006916615843131492096315335267082533062044039719924411375987761048715638975896857636208564411659195368024659452396805228231817166962419820847419102888674204297993363729184423521749468725205684113786370370732840965304920447152209541637579275133404399970828726102983776998106720819598241455113502969230463780227217698643846521333071665665882462373976234806609605626980061048266101345142177361704318649630861571668851371984541625463793859040981419992693390939310710690666606083705892296975826735874908405074608053737816472216937140036595603592594647175264000173257066148174164790976651484561243597442945616323471364923536091690575326712193630547261921375260739047616718819682850595523178905976690091047344176974207811347381835885149226661315141205300333878262199867424512062945070141740761534390967287270114926553434676368887777835489931600563477420988622809401615486173417023220841549162455598395935582253943692106838978264178083120732264675424500766785220787515251532544993450532049468732322174246240074935765381290506234950444758623513577308668066715185097974433206931044971646794464973491417904443188857715863246243893938382657933071118566770163264016032276675133245773701974599319896086556374883290757846611885999267858748596802250661878382546658124331405273045352242461075252700087133429698789486786562699619672267230367501085402327517985019177967805848080585229688833009929375016291017686810614071593314169489301590237099928741340287515056655235374982686705409921586661237226134317148956557296236782293658931258773154112060935530160469855509533052479831132700597391759654124837239079798673344310058490253687379770451822796161244917175859571271454825638898771958045966183956143051980772153087980511860319255768807336199192220359460991554821802283217137199787081657874161965120399383117919285964558602102266814571502946634900484503803666322852254877578321412848862234835964365067710128012730755939263651094343439963777020557829352907165565711683232751258207362686175187828463206221180567462438019982552208901104597575906956887905315126493270546237113104603181592224453309428218429123153529158299633413029993387115957325391675677683446555856996952076427252762737592316503578009437173273410884809447553233139381733194175524379683068597973382455872595062499253317066756110602369236593300808353013718094628071988053116286196075060724515015008981788414853700939499856799094012033476303729404232131865281310966900680820960574431040501005536473595070991446621824369836483422101552571414349059222011240741121878505194268376418764380658805325012006021498514022443233417987916210501035883611616429001486100780830664817707884576045107742375762359646082841142182465006196381008564310363248291069655173070573885238220699901426270421958593205172730402190544654938181900454849834179685324971792593072273158747617161825120842779644808395221231166396863054776266577520492499703990704328922683595800848604848593387145817983234857134170036805373137210788417930673697221013596624357546134923671774297510076257608399728214154936235328166255245353331187267583467543042094364381941035809045797725842288170283947793374436209679103118804719243303912239654145338456120534590947619706281923702355121265365381786889511578269783440046873319879651558312122630957072381184694138122595758191731059528518666488123683083360949897661883044941904015753082559839886667829975180791000628001458036044495915117406994920575303612122439853011335514266237839232504664714018456481615307843433078971552360727809393510767668756038766523581373199606876250076343175179315984129185995600898664445509422065601192511908492833028088606141200692324248369536657703062245173117171113724948449888288269496595529331276181640886645630693700616481418937200110434249738831351729369842286278947043517993222720349090230000533032995918721499558056763992906431278179731000177334444046751029628272738837104323048646889189569874329143370193242003178560935278843306149995898182940618790800076937528872371692689705963072277152558132931237165296920840266603614803596322768105299727079067252868389130937600829651038574376976840213544284721052167573523510527158931311819969145895841991979813290180981271547018278448564738670184294315316993074553413165809090035425108299889287970627312623479291846004196272746503622417754136367583221446429180794782321089488580084392556645382072753612418480444740998336166261715205172483056382698271956394302417400548354380209884008598250360899682710212174681550382883093590800907839180635993588138008041832673982360004215810002443117356945917111837501886216079477008391165117810083299020510366890323918626533273102184019670712564599481584638173215360122146061699756464229979341494410220383997266250042522339748500298112713714112372600415052168233131560285512523932362159013544909805546111728653225376686987145946974894925674415080936670943349722874748027168777540679570679206699357798410393735980297972475421627060908232284286525739369635297142431200821625803642043004620616738950800538057942037260550429441450373731899035382853928927526584497885818908389242136934580153540136405323839904542105431365341370322538491554008761476471898649951151910253157321129803805157465681305373502140713710390937352673218306478136028158002955200988807182344732224671530646532769114033802688083877538733011798477736041576482024717088366630671769165441688927030183857862235630595641542566198524036936165482235071021884799458197075329546816582824658411182410888866279360913949027707424198600376010069970206669615263615050998436678452653680368258441855000327440383221369004625950415825937447012468790877643429432140384210376827433509858419583057993113176024757582046056647647964372868033027280648548699880602238661745566707263110021252716780719735192686944243900091487521744685985147634432717706968061356782165407550350139960713908906490157018361965316068186547608448317959331783857265854368227347425794965865722703981030947281536730999179874913329322496827714630067391362950930747321798122778241500696583727789695453427099682640395744666463778454121393109116196305387530162077031640418051839389144689532555661025052675510296898389753569723768348438071750025518463956002604254830189524645323258277902062189936427954444378053354574848441287704956448564254185217587336623136400518967845893534071012283051485719180447247420630165332956460522146405483757704443754939940025919730845078703491497135311032654702845804824362536662161802490950199097033578484679097035016125391775640034197280510737808675202250348448990453167859419611941245598479401351939192646895352297162204687943839317263152791061332513102286517915234076337036782627297875332863000445226634491877062192532096073600875475837074796766469656047644069483276069273410755250736318955419524411147873955974881423753124933407534495989032236264194463302846338136627591411456591128670300484589467767440171317342265140149592812126462012292407909638018890783422526907089481161540629618804027424496889136097192313657799483296074529247950326317995565426344665559735972711772010958063943905026809319088438806360693688842539392359998788391327100994575333476324337774236314160890050699549495351145428320238142389939224101405617548626613419388715559504179465527826797970449159009428539039129498492001865135359210548461325696802876379410999561290334503093203655355602969884285696243112856446368830473367702784683496380831723372507091684689186626575073774243149575342706092920116890919038098872361202915817395599804469565809324867217864051426751038507935560676828675467368665383885423482863788615753736519003949944890974065457819590244276148691221021024860529734683694430707720945178041556629510080582923970650346090863667281341584623940116397493426255811890181778308918492301193045264901433900008925710909972497345485547839612656969153593089814924016592006486013728689390328950805956745319186439948534137074558665552359166902264197403476621213605937608355423078031674552237625498367178369788100342516532577686355291021429716293892520288734219180573017265125403961528180034940601028253457483786095014370444030171274149873225591123853689659306292365280005836715382660518086315835395048665480214628392923058765890335985382949961060103844644054476001204118329896019136124766822774225798315033688833994080762552953652143230263897593182516059517090223531721392793194000150760910746059761882422180351874501807277944699903038667057953981445917039947996273310473210429392744192120086179049486190419045104504070233459171606229195008962094657366693052563985372687485637818669098535515692962468871710083740463437927769341143909345514528760349621011958620241774456739896410428181056479064663210802394318454218505123552447737441668082698634932760224612963404203 0 14827862123064747663172095858604713583943930571176984715826388295175493936668893901068151404221625911723209363441386510011343417151620572048355902209070629519292833728218450090755851897109948422975626428670163639793765421374437724497300351259867754518954957388950877830375068594031256411415677290612792058694093316765138589588072875093666591998063436977334060996649113398720390876882949010839032731113735248651700261512710128817686943087902230355560953849344655407647723725791808871388701817043816121856603959321457061040131489990698057430516847127162119738853410028408220818155432277913339360051473292511138800689887676263080400250382006274192328611146977285920631986224500962946953549959070144156446484186941107138264994760024866346901029028884791520619929328717681665798928474824161341544467146472815874800389004880261604257349830341581823266905163569238707412910625022148856400270241876980497605787325266301374671276168507880032726140144486222457690181885159305865121779942060966287674599979077734223444490344260300119179910484005170723121802598540437844761945206519674362371477467630598038275810937045080702981904657111603403013080323453007846802664298730592921056005982508659609477671758203073680109114951558170964609337168823126453310109778438360515801761296424794279553837894551614987033074661152105349088400868332463255437967249240234045343592729680518241186737714825795291810129267927852009180571552606325064828899572373454547852353820668421270300213553530776569001779572967086067943204984959363418982010180440208038215381032395574374558449476190226150381964218650531228827441086809351988222517196824432462451886271549764282253701143404832694472867237542085747845779071178015512443024040325783991988292104956266470864684341913167563416898211598959656873448271073260918558651672647876668438516899157979851986954429748641247176764206146942448547077741121991186880298142908674863324916084223743864322854051989380408892009462146671146260255681800939583652717111577098546999421037519591825270122036645161205407156383421336092118740918622912730530372748809762924774750288614685931639734519754547698139952460083489444683061168115530921986164642637357637547908058361931426905777128184218361896229856054865180154426999974532278175856970987977831796103474831980469710295742531444502362830570272176418143622486950160620123140075249614398400546440537170925507203306343490306439164554664278324140674197071477769161525610466941806687046319308421315790415018558628956934054805415252135196574338512371414576537263629211399226939522091717211920702374427268902193146894545666780617668739125027108444449530502598351158413529549299684061773579457483742312579616285846737685831123425056917503120384714888558148885792561412168794038155410638159900770169963785706103711907425249256983060302764294030889691774928659136491436812255636164049099170646797989443033842897558259439678409032604755156578875557571039519716854319496816764900254222170843529463984707612989405733508106535439062280798132259101299064170052069999940325223789970679764294340399419399493492276971267012470738185713618253139655410715835733133474726292672241857647171415499473387217825737775066739733070633316006802527708619532102638110247210834450466445489711793226826405723303645178600491594688151557045216594920308059149015303015007327571127954187241816619849155545853581388166311718344273008735592433823361005535931969590897930583848309814546465615170669887289963422929634563310385923306542434396710767559912658540971414519679353062376631551375973059272898024723589599463504010258502445472587480171463274904102629519781413223959145906742781284733127909353271691127414057769247063696167870599199904064419177722195220499944729989645865572235150524734380205548822444318962807643609114539932637961332713439677255664934135962452825945769629447828452623435834880765687912697078887316868887080627310262270031840270350999254278783775723945199288346412615677472717567307057424274234196449412553463909780054793551540999396145481578421865429812709477433583426650469813308912177251978426136748448460594209272901002149328341488638561036403207574154843489462565911328328080764118468863475409497602069188123096481235994061858871927996924609960774356415510165701419029053123033510769430312705144910966832635921941363151882058533522865400297024551306819735987388610794862772093782456335673018330856413651769703187031169092471013680015889231752957213134974757272021197451623964795489272959326864588399332797704642069213566658194799181653384314539843949109019163903448701595193169699660872648493404543838555236916180682569638458708961722534580517172812136169266298075304798111338495568678227234484379933257346903806581921020540046227132739376001954829536964135609482320592799999936089672357459233008459301237254925264072342816236939986853090435812746623654717818497071985495481451189664881894494755205901192658862982945316625874925862340768880111027999853225016346153943912001417988406239670874345055326126134591705552382373650016956975763547355358309613535637188164308176927861674069165693225081023539042009161806654460920815823514402625309922917730143042746919273832453206484901933829717132765573670023868800552758173722571186062698008104026391971664258901710441210539900380806341222664617346952316878431384046311068306374037837134830936025055856773624265491634520179073600835202540259216434988788774253018662295583694632685418636070923244483970191459061246867412445149593440888611248949923974423372353259249780066138293028857275103889690426164605802527456804037091482731297872286717005311082180388596138127691246208566725452940328117119055188971502454456426299837490133951609954642165177833566246269641593906969349352302727345084103283703122538687303028229981203922460859197236967461341744814615188915905955533386417468652763204241138418095818480511445799709092186991691212240628036099016166144677761080561881093395730911663362658164385975797020640603805345397220213406128132812236419995679526001708705696397274091251699554408569223294559399730924922431449609152281251467195021551422697602983315569236103410124507920100890140717151244087549727582586644217838009210391697311731580607749670024157854520729085631964444785107895499453571959160754301237070652000382915038802341044314691748372852195057945925159620076456644647436671450685852255875403734162284792388639375277341655288486669009658324693563047472979123725995903137448238119562499943258594146353635863333791163498851775431066518568578710373270393770407365056492811159698262540133445806688316977748368840648357974021210112822297327406191317989220997520476768560866284715360688317640180130346008701087970327485011949113034186012393169491764504923253089307536445312504680957736665174105526720245452788762952897820546467108255375661285273812271675608426126325841404206010565438203117165709418626723926731786432530640769088056972557220873261659053426894866109341620039530915717675287528069298943709720497286198225618261538151296122451585218029925804478788974841091453761181954085308296722155716957180610611401086146049039291457695366298865044036947928220080733180910160956174144883520838484873340651784339481524711675308614527696493396408746700887487019791501461372455911243387247532384114347977027133151276195333103827638749691477538594837901260972542418079684546261968562301358910730128277397519765050898738710251957458264689240147384150910867547147606965902576789540991062052688078169663520039020925756504236490662183406458998366005944574281722487683608236313775938623804895114990282624028904424887612582046098949363222163747419108942697705098132764398531088413092168314915796419679922619478648155374025289551790835922001963421888959577373336689625292488395372680829636314146552245966673352115923935348301156297938145643579895210904509970592256734815336504728591717522054180359020447173915551830881915558631324099536701118323211329808353372287560057455403153767213887306612014390510060670020619021981435327963246294306082943328660685655531410007980336432669371734288198947396868182724497229539236233165713998341132947967962165576469364157026463766934902313912936972627313163850192938810601394260088360637009581966567322387560042105615623870923240016242748945902991567540435334483876309270673415260823532987617133529887734257652146386520111195998801094226528129898238125103240764150287257152697247484587406649147498430052232885578877513826092629099885357090796241092096919145848156360465294607511240919116180365568872138767706942071154775720704493198029420251164003169338008364342091418473159791797167726955911048794506365921196825464784932160285676083230929856439778957742663267231943023713030640056865383777618606637996214174425259832697259092186525695253645443502591841681981651973814077256635776149370609837186085050917374214852997011415528847562384984207963214811360823367304350565874656290754776509252571324983143515172207263957554258862234016488693662043002232617931798330304084449970389684728111063995862527409569535191653671814425637812877766086950076639462988411061096210535634468957259619176915354853380348350383379196512250000734481492782974876663351643915979519999553490839332908151415316036030911140206176748870951687104450122564215040889970712143338965967399499381830125637379583280799177183004382407702844128393650664105575086403478544431575154061933206060391797307103264686747311917588306386770285735101902985689440757624173145502843485986752487771935813126752612036828735172712608354890601058175223059318413681322415273633686190484728460075199505050414769338285110151770400258377590055029022632819322969979816006766911085105440371565866506552845966000136590691087466999883946508671086311033319009446988625352064750143852801876181777079947996940141191844234214453597770144843816178043650385083617308288467268360125294249534189637540241269562759478028706300595556689351603504894754209829519863669870110906233635788284862263365946914589721954903851418450313887885440317111277913948786002780901558467779436457264001063877521639649813025893268539517259855799379676268547654304652910349304739715). coqprime-8.18/src/Coqprime/examples/mil2.v000066400000000000000000000155031451023060700205110ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime16956227128806874788740039322257331454187103117215258402822754639444439150176651876776485904580009527601943923816762896447278161450601047675605920955352991146912809889393788383275988559054911295888721829605976854419166787073638194842131310862516073982891625984938090317109720062274452533422807676618055026575947807075176847196621981731534435122000052369548107604319339608903252079913578554791169782572481377092146219144800411212411986131890308469630790885182138135695302659166091775570804154531803228625689348137201329356540456101231353607074556964820520111191780391708942692504672622565995536493102616692889439256467875582491686567852505452615238453748481731189917697254592971701943898912826835097819868863453563205086858649343424074830406648641991461359441312447494379322488285783808178719040181648613929799733033927168650057077822050627855233805864256803317669603421091297480742931674802805786249535420221209942941757696865516674318082496965158247338805243023076327328468542928697189239715776511692379905048712275705407112403614798424206031705574321534640226758722180834588946485900779828265504316346990984519880077314844302068873674603490411264380530557953677643659654537099598223330457188802296436148103186029822738580486520602921469716777408128905357283769843138458373316316831532086678897873205466275738711362075711758881113393967587589110926092993622826554868172778946611292164358541457015429810428997189552967181771876072004789631657192947954053502043973595902669328376194266972486325762812319235317644619299197836613393426798742904083056775412229445713324636090985490999005183131451139556395735665487973802927885880243930464615895026607194044836695846663693272095862707204730604279754937134760580041610808394137312623865116223810625427962816045901699152633273516519473466359777228638364362530252777456951341275593886397426831655585085243207960204791349952790055068921915270370676384994206784178186490605906745590283452037983466078220087245936042046285093059704977817748127777709652208140691 : prime 16956227128806874788740039322257331454187103117215258402822754639444439150176651876776485904580009527601943923816762896447278161450601047675605920955352991146912809889393788383275988559054911295888721829605976854419166787073638194842131310862516073982891625984938090317109720062274452533422807676618055026575947807075176847196621981731534435122000052369548107604319339608903252079913578554791169782572481377092146219144800411212411986131890308469630790885182138135695302659166091775570804154531803228625689348137201329356540456101231353607074556964820520111191780391708942692504672622565995536493102616692889439256467875582491686567852505452615238453748481731189917697254592971701943898912826835097819868863453563205086858649343424074830406648641991461359441312447494379322488285783808178719040181648613929799733033927168650057077822050627855233805864256803317669603421091297480742931674802805786249535420221209942941757696865516674318082496965158247338805243023076327328468542928697189239715776511692379905048712275705407112403614798424206031705574321534640226758722180834588946485900779828265504316346990984519880077314844302068873674603490411264380530557953677643659654537099598223330457188802296436148103186029822738580486520602921469716777408128905357283769843138458373316316831532086678897873205466275738711362075711758881113393967587589110926092993622826554868172778946611292164358541457015429810428997189552967181771876072004789631657192947954053502043973595902669328376194266972486325762812319235317644619299197836613393426798742904083056775412229445713324636090985490999005183131451139556395735665487973802927885880243930464615895026607194044836695846663693272095862707204730604279754937134760580041610808394137312623865116223810625427962816045901699152633273516519473466359777228638364362530252777456951341275593886397426831655585085243207960204791349952790055068921915270370676384994206784178186490605906745590283452037983466078220087245936042046285093059704977817748127777709652208140691. Proof. apply (Pocklington_refl (Pock_certif 16956227128806874788740039322257331454187103117215258402822754639444439150176651876776485904580009527601943923816762896447278161450601047675605920955352991146912809889393788383275988559054911295888721829605976854419166787073638194842131310862516073982891625984938090317109720062274452533422807676618055026575947807075176847196621981731534435122000052369548107604319339608903252079913578554791169782572481377092146219144800411212411986131890308469630790885182138135695302659166091775570804154531803228625689348137201329356540456101231353607074556964820520111191780391708942692504672622565995536493102616692889439256467875582491686567852505452615238453748481731189917697254592971701943898912826835097819868863453563205086858649343424074830406648641991461359441312447494379322488285783808178719040181648613929799733033927168650057077822050627855233805864256803317669603421091297480742931674802805786249535420221209942941757696865516674318082496965158247338805243023076327328468542928697189239715776511692379905048712275705407112403614798424206031705574321534640226758722180834588946485900779828265504316346990984519880077314844302068873674603490411264380530557953677643659654537099598223330457188802296436148103186029822738580486520602921469716777408128905357283769843138458373316316831532086678897873205466275738711362075711758881113393967587589110926092993622826554868172778946611292164358541457015429810428997189552967181771876072004789631657192947954053502043973595902669328376194266972486325762812319235317644619299197836613393426798742904083056775412229445713324636090985490999005183131451139556395735665487973802927885880243930464615895026607194044836695846663693272095862707204730604279754937134760580041610808394137312623865116223810625427962816045901699152633273516519473466359777228638364362530252777456951341275593886397426831655585085243207960204791349952790055068921915270370676384994206784178186490605906745590283452037983466078220087245936042046285093059704977817748127777709652208140691 2 ((2161, 200)::(2,1)::nil) 32217084609912438855460574108149963755166745907265689689784245839834079965114594434309787570892395944973243173260935941982490254178475508874095343568401266758234115200504686182217001626237785260391273582300546879485267613309671493618077114772819115329919859761218889503442594245508985934806225501484721312170690280413052791109269836487428162138268152373754637756198760588406648341871069545916976076226638676867047227082287390273187738033725561201217895882160265581231712663886410179367728406356684939608662808889304382637965670556901154645312681745765890223115875045942955931520688201953020115294953840526326412286473293344859043099585339026917306512713302596098397724) ((Proof_certif 2161 prime2161) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. coqprime-8.18/src/Coqprime/examples/prime21665NNNN21787.v000066400000000000000000000033411451023060700224640ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime216656403549020227250327256032933021325435259861468456540459488823774358486649614451547405419273433458932168893949521787 : prime 216656403549020227250327256032933021325435259861468456540459488823774358486649614451547405419273433458932168893949521787. Proof. apply (Pocklington_refl (Pock_certif 216656403549020227250327256032933021325435259861468456540459488823774358486649614451547405419273433458932168893949521787 2 ((654898412672035770541549498678974366284701838721583240120874775390492750598525740460463, 1)::(2,1)::nil) 1) ((Pock_certif 654898412672035770541549498678974366284701838721583240120874775390492750598525740460463 5 ((933197156145546840982434002869386948167992766859866863595707, 1)::(2,1)::nil) 1) :: (Pock_certif 933197156145546840982434002869386948167992766859866863595707 2 ((663149843, 1)::(50782967, 1)::(547, 1)::(3, 1)::(2,1)::nil) 146915123513014632519) :: (Pock_certif 663149843 2 ((3659, 1)::(2,1)::nil) 2802) :: (Pock_certif 50782967 5 ((1093, 1)::(2,1)::nil) 1370) :: (Proof_certif 3659 prime3659) :: (Proof_certif 1093 prime1093) :: (Proof_certif 547 prime547) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. coqprime-8.18/src/Coqprime/examples/prime329719147332060395689499.v000066400000000000000000000010601451023060700233420ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime329719147332060395689499: prime 329719147332060395689499. Proof. apply (Pocklington_refl (Ell_certif 329719147332060395689499 8209062 ((40165264598163841,1)::nil) 329719147332060395595419 9834496 0 3136) ((SPock_certif 40165264598163841 2 ((303179835433, 1)::nil)) :: (Pock_certif 303179835433 5 ((7951, 1)::(2,3)::nil) 59386) :: (Proof_certif 7951 prime7951) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/russell1.v000066400000000000000000000020071451023060700214130ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime115792089237316195423570985008687907853269984665640564039457584007908834671663 : prime 115792089237316195423570985008687907853269984665640564039457584007908834671663. Proof. apply (Pocklington_refl (Pock_certif 115792089237316195423570985008687907853269984665640564039457584007908834671663 3 ((205115282021455665897114700593932402728804164701536103180137503955397371, 1)::(2,1)::nil) 1) ((Pock_certif 205115282021455665897114700593932402728804164701536103180137503955397371 2 ((255515944373312847190720520512484175977, 1)::(2,1)::nil) 1) :: (Pock_certif 255515944373312847190720520512484175977 3 ((4423, 1)::(2657, 1)::(1627, 1)::(7, 2)::(2,3)::nil) 11257515654800) :: (Proof_certif 4423 prime4423) :: (Proof_certif 2657 prime2657) :: (Proof_certif 1627 prime1627) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. coqprime-8.18/src/Coqprime/examples/russell2.v000066400000000000000000000015411451023060700214160ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime115792089237316195423570985008687907852837564279074904382605163141518161494337 : prime 115792089237316195423570985008687907852837564279074904382605163141518161494337. Proof. apply (Pocklington_refl (Pock_certif 115792089237316195423570985008687907852837564279074904382605163141518161494337 5 ((174723607534414371449, 1)::(631, 1)::(149, 1)::(2,6)::nil) 1122621917055392771987235982) ((Pock_certif 174723607534414371449 3 ((4051, 1)::(59, 1)::(17, 1)::(2,3)::nil) 53130590) :: (Proof_certif 4051 prime4051) :: (Proof_certif 631 prime631) :: (Proof_certif 149 prime149) :: (Proof_certif 59 prime59) :: (Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. coqprime-8.18/src/Coqprime/examples/t100/000077500000000000000000000000001451023060700201375ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/examples/t100/.depend000066400000000000000000000022221451023060700213750ustar00rootroot00000000000000prime1.vo: prime1.v ../PocklingtonRefl.vo prime1.vi: prime1.v ../PocklingtonRefl.vo prime2.vo: prime2.v ../PocklingtonRefl.vo prime2.vi: prime2.v ../PocklingtonRefl.vo prime3.vo: prime3.v ../PocklingtonRefl.vo prime3.vi: prime3.v ../PocklingtonRefl.vo prime4.vo: prime4.v ../PocklingtonRefl.vo prime4.vi: prime4.v ../PocklingtonRefl.vo prime5.vo: prime5.v ../PocklingtonRefl.vo prime5.vi: prime5.v ../PocklingtonRefl.vo prime6.vo: prime6.v ../PocklingtonRefl.vo prime6.vi: prime6.v ../PocklingtonRefl.vo prime7.vo: prime7.v ../PocklingtonRefl.vo prime7.vi: prime7.v ../PocklingtonRefl.vo prime8.vo: prime8.v ../PocklingtonRefl.vo prime8.vi: prime8.v ../PocklingtonRefl.vo prime9.vo: prime9.v ../PocklingtonRefl.vo prime9.vi: prime9.v ../PocklingtonRefl.vo prime1.html: prime1.v ../PocklingtonRefl.html prime2.html: prime2.v ../PocklingtonRefl.html prime3.html: prime3.v ../PocklingtonRefl.html prime4.html: prime4.v ../PocklingtonRefl.html prime5.html: prime5.v ../PocklingtonRefl.html prime6.html: prime6.v ../PocklingtonRefl.html prime7.html: prime7.v ../PocklingtonRefl.html prime8.html: prime8.v ../PocklingtonRefl.html prime9.html: prime9.v ../PocklingtonRefl.html coqprime-8.18/src/Coqprime/examples/t100/Makefile000066400000000000000000000003741451023060700216030ustar00rootroot00000000000000ifeq "$(COQBIN)" "" COQBIN=$(dir $(shell which coqtop))/ endif %: Makefile.coq Makefile.coq: _CoqProject $(COQBIN)coq_makefile -f _CoqProject -o Makefile.coq tests: all @$(MAKE) -C tests -s clean @$(MAKE) -C tests -s all -include Makefile.coq coqprime-8.18/src/Coqprime/examples/t100/Makefile.bak000066400000000000000000000114641451023060700223410ustar00rootroot00000000000000############################################################################## ## The Calculus of Inductive Constructions ## ## ## ## Projet Coq ## ## ## ## INRIA ENS-CNRS ## ## Rocquencourt Lyon ## ## ## ## Coq V7 ## ## ## ## ## ############################################################################## # WARNING # # This Makefile has been automagically generated by coq_makefile # Edit at your own risks ! # # END OF WARNING # # This Makefile was generated by the command line : # coq_makefile -f Make -o Makefile # ########################## # # # Variables definitions. # # # ########################## CAMLP4LIB=`camlp4 -where` COQSRC=-I $(COQTOP)/kernel -I $(COQTOP)/lib \ -I $(COQTOP)/library -I $(COQTOP)/parsing \ -I $(COQTOP)/pretyping -I $(COQTOP)/interp \ -I $(COQTOP)/proofs -I $(COQTOP)/syntax -I $(COQTOP)/tactics \ -I $(COQTOP)/toplevel -I $(COQTOP)/contrib/correctness \ -I $(COQTOP)/contrib/extraction -I $(COQTOP)/contrib/field \ -I $(COQTOP)/contrib/fourier -I $(COQTOP)/contrib/graphs \ -I $(COQTOP)/contrib/interface -I $(COQTOP)/contrib/jprover \ -I $(COQTOP)/contrib/omega -I $(COQTOP)/contrib/romega \ -I $(COQTOP)/contrib/ring -I $(COQTOP)/contrib/xml \ -I $(CAMLP4LIB) ZFLAGS=$(OCAMLLIBS) $(COQSRC) OPT= COQFLAGS=-q $(OPT) $(COQLIBS) $(OTHERFLAGS) $(COQ_XML) COQC=$(COQBIN)coqc GALLINA=gallina COQDOC=$(COQBIN)coqdoc CAMLC=ocamlc -c CAMLOPTC=ocamlopt -c CAMLLINK=ocamlc CAMLOPTLINK=ocamlopt COQDEP=$(COQBIN)coqdep -c GRAMMARS=grammar.cma CAMLP4EXTEND=pa_extend.cmo pa_ifdef.cmo q_MLast.cmo PP=-pp "camlp4o -I . -I $(COQTOP)/parsing $(CAMLP4EXTEND) $(GRAMMARS) -impl" ######################### # # # Libraries definition. # # # ######################### OCAMLLIBS=-I .\ -I ..\ -I ../../Tactic\ -I ../../N\ -I ../../Z\ -I ../../PrimalityTest\ -I ../../List\ -I ../../elliptic\ -I ../../num\ -I ../../num/W/W8 COQLIBS=-I .\ -I ..\ -I ../../Tactic\ -I ../../N\ -I ../../Z\ -I ../../PrimalityTest\ -I ../../List\ -I ../../elliptic\ -I ../../num\ -I ../../num/W/W8 ################################### # # # Definition of the "all" target. # # # ################################### VFILES=prime1.v\ prime2.v\ prime3.v\ prime4.v\ prime5.v\ prime6.v\ prime7.v\ prime8.v\ prime9.v VOFILES=$(VFILES:.v=.vo) VIFILES=$(VFILES:.v=.vi) GFILES=$(VFILES:.v=.g) HTMLFILES=$(VFILES:.v=.html) GHTMLFILES=$(VFILES:.v=.g.html) all: prime1.vo\ prime2.vo\ prime3.vo\ prime4.vo\ prime5.vo\ prime6.vo\ prime7.vo\ prime8.vo\ prime9.vo\ res spec: $(VIFILES) gallina: $(GFILES) html: $(HTMLFILES) gallinahtml: $(GHTMLFILES) all.ps: $(VFILES) $(COQDOC) -ps -o $@ `$(COQDEP) -sort -suffix .v $(VFILES)` all-gal.ps: $(VFILES) $(COQDOC) -ps -g -o $@ `$(COQDEP) -sort -suffix .v $(VFILES)` ################### # # # Custom targets. # # # ################### res: make clean; make -s all > res #################### # # # Special targets. # # # #################### .PHONY: all opt byte archclean clean install depend html .SUFFIXES: .v .vo .vi .g .html .tex .g.tex .g.html .v.vo: $(COQC) $(COQDEBUG) $(COQFLAGS) $* .v.vi: $(COQC) -i $(COQDEBUG) $(COQFLAGS) $* .v.g: $(GALLINA) $< .v.tex: $(COQDOC) -latex $< -o $@ .v.html: $(COQDOC) -html $< -o $@ .v.g.tex: $(COQDOC) -latex -g $< -o $@ .v.g.html: $(COQDOC) -html -g $< -o $@ byte: $(MAKE) all "OPT=" opt: $(MAKE) all "OPT=-opt" include .depend .depend depend: rm -f .depend $(COQDEP) -i $(COQLIBS) $(VFILES) *.ml *.mli >.depend $(COQDEP) $(COQLIBS) -suffix .html $(VFILES) >>.depend install: mkdir -p `$(COQC) -where`/user-contrib cp -f $(VOFILES) `$(COQC) -where`/user-contrib Makefile: Make mv -f Makefile Makefile.bak $(COQBIN)coq_makefile -f Make -o Makefile clean: rm -f *.cmo *.cmi *.cmx *.o $(VOFILES) $(VIFILES) $(GFILES) *~ rm -f all.ps all-gal.ps $(HTMLFILES) $(GHTMLFILES) - rm -f res archclean: rm -f *.cmx *.o html: # WARNING # # This Makefile has been automagically generated by coq_makefile # Edit at your own risks ! # # END OF WARNING coqprime-8.18/src/Coqprime/examples/t100/Makefile.coq.local000066400000000000000000000000461451023060700234510ustar00rootroot00000000000000 res : make clean; make -s all > res coqprime-8.18/src/Coqprime/examples/t100/_CoqProject000066400000000000000000000001611451023060700222700ustar00rootroot00000000000000-R ../../../Coqprime Coqprime prime1.v prime2.v prime3.v prime4.v prime5.v prime6.v prime7.v prime8.v prime9.v coqprime-8.18/src/Coqprime/examples/t100/prime1.v000066400000000000000000000107611451023060700215300ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime128075015790613 : prime 128075015790613. Proof. apply (Pocklington_refl (Pock_certif 128075015790613 2 ((109, 1)::(11, 1)::(3, 2)::(2,2)::nil) 78721) ((Proof_certif 109 prime109) :: (Proof_certif 11 prime11) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234568879: prime 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234568879. apply (Pocklington_refl (Ell_certif 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234568879 45778 ((26968585130924391389146438876779994055881066380989693668522024489536889340134667337979154985461,1)::nil) 664753466826514960509717270307781155721127367875536470545870213790282393842578427358462455592108798 1066949536887837845474343287185140129923708065140764730961872063439158873937531814092465119792708646 258533591519361098489633299073314845579165628979065330956106901328389038713216847394515309740313464 527364786192333184836771194782614780529233253858047739523622800044730617492469808169610629001738520) ( (SPock_certif 26968585130924391389146438876779994055881066380989693668522024489536889340134667337979154985461 2 ((246468517007168629036249669866386346699699016459419609472875383746453019010552616870582663, 1)::nil)) :: (SPock_certif 246468517007168629036249669866386346699699016459419609472875383746453019010552616870582663 2 ((68577773235160998618878594843179284001029219938625378261790590914427662495980138250023, 1)::nil)) :: (Ell_certif 68577773235160998618878594843179284001029219938625378261790590914427662495980138250023 26002760010 ((2637326699503734666006271956635240429657345180282035433909365188692640378079,1)::nil) 9574683878665620690738396565226734725608912102051371563961979234017062725086969019706 5989789951585473113280726171429669392308969092255867822149160098356694857390995803612 0 26433544158388942526079486972027982668405452614107071167901402917538854826350748466463) :: (Ell_certif 2637326699503734666006271956635240429657345180282035433909365188692640378079 14196 ((185779564631145017329266832673657398539410161537008895262054635563546679,1)::nil) 0 5832 9 81) :: (Ell_certif 185779564631145017329266832673657398539410161537008895262054635563546679 33300992 ((5578799713568443166175555150839272245207194761507009026976783873,1)::nil) 161576535781768262365025478016135538167000994582266455886427764978291880 116949320913430480919424492319827975683250152316577652210725576283843024 0 156005331631261073481675833374118458329410845179918881972015106727637130) :: (Ell_certif 5578799713568443166175555150839272245207194761507009026976783873 699497210 ((7975442408938905083231933335144283914081779243572412457,1)::nil) 1042169188617401582708901827299147890907520705280177257176160553 0 4413979268123896499256304652092280090743143644524790856101962951 459758965895128249249276577925651813675495146789068171738750092) :: (Ell_certif 7975442408938905083231933335144283914081779243572412457 4062 ((1963427476351281408968964384762463375267543044647701,1)::nil) 182261539303125828072434035369639915028261569276924030 1818896714813358048456218055302453781510211651997358610 0 2252225263348272691262486840529946391017117301334848852) :: (Ell_certif 1963427476351281408968964384762463375267543044647701 49844 ((39391450853689138290846729696561934075372333141,1)::nil) 4624 0 272 4624) :: (Ell_certif 39391450853689138290846729696561934075372333141 7597610 ((5184716095415418571214755401687864912827,1)::nil) 5185408785254035713743037011730102710849192973 16180129902632806607809003377724040331134923777 0 16152390643690358018742414050028510369692398625) :: (Ell_certif 5184716095415418571214755401687864912827 279 ((18583211811524797746770253211537874669,1)::nil) 5184716095415418571214755401687107328923 8234810772496 0 2869636) :: (Ell_certif 18583211811524797746770253211537874669 1633802 ((11374212916574222428711834302497,1)::nil) 254898 0 2499 127449) :: (Ell_certif 11374212916574222428711834302497 6670864 ((1705058432696908381922029,1)::nil) 900 0 90 900) :: (Ell_certif 1705058432696908381922029 29743 ((57326377053406663021,1)::nil) 0 19008 12 144) :: (Ell_certif 57326377053406663021 447600 ((128075015790613,1)::nil) 0 152000 20 400) :: (Proof_certif 128075015790613 prime128075015790613) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t100/prime2.v000066400000000000000000000065341451023060700215340ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime3496731851083 : prime 3496731851083. Proof. apply (Pocklington_refl (Pock_certif 3496731851083 2 ((107, 1)::(19, 1)::(3, 1)::(2,1)::nil) 11354) ((Proof_certif 107 prime107) :: (Proof_certif 19 prime19) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime2345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345679083: prime 2345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345679083. apply (Pocklington_refl (Ell_certif 2345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345679083 661628 ((3545313833807770968162557795335665478034839166253631953226810169610669323274281534339549613601,1)::nil) 1369389412186002820864171107727063082092121427444942295219566539095940031969074847272864708990665743 614481684194503446749248404078397348411519159332595447404428650603277601554767525555016575589782328 0 570556800706191009182318846023730975522705806222004467618408726124877673391667625867762857808873410) ( (Ell_certif 3545313833807770968162557795335665478034839166253631953226810169610669323274281534339549613601 33516 ((105779742027920126750285171122319652644553024415812068972193204218349349574116385651474191,1)::nil) 0 221184 48 576) :: (Ell_certif 105779742027920126750285171122319652644553024415812068972193204218349349574116385651474191 118679506 ((891305884167735975832972974477325955877782510407753918171114798868282921853494959,1)::nil) 103227062823669905639094925813080806685976235479131309684277153411291114948368452206968075 102443154496879002121694364425215745499133140164053319700207553228950425894418202536816913 0 98829346775369670287543903042792272350298112789739520335443292688535116989443420396187230) :: (SPock_certif 891305884167735975832972974477325955877782510407753918171114798868282921853494959 2 ((7819126788712468305892863238240221125190680979397930855923008227528259, 1)::nil)) :: (SPock_certif 7819126788712468305892863238240221125190680979397930855923008227528259 2 ((3909563394356234152946431619120110562595340489698965427961504113764129, 1)::nil)) :: (Ell_certif 3909563394356234152946431619120110562595340489698965427961504113764129 6027643088 ((648605655192076985323061918346966085127845685200665315395593,1)::nil) 100 0 20 100) :: (Ell_certif 648605655192076985323061918346966085127845685200665315395593 19509351568 ((33245884822535327091249531084803529535491053302969,1)::nil) 0 1080 6 36) :: (Ell_certif 33245884822535327091249531084803529535491053302969 248949 ((133544962311699693878061530228299430325183229,1)::nil) 0 221184 48 576) :: (Ell_certif 133544962311699693878061530228299430325183229 190677 ((700372684234069624957795706569199070529,1)::nil) 0 192 4 16) :: (Ell_certif 700372684234069624957795706569199070529 11037 ((63456798426571498137075401715693481,1)::nil) 0 500 5 25) :: (Ell_certif 63456798426571498137075401715693481 8642054001 ((7342791241437360423926971,1)::nil) 0 500 5 25) :: (SPock_certif 7342791241437360423926971 2 ((2239195184644277257, 1)::nil)) :: (Ell_certif 2239195184644277257 640368 ((3496731851083,1)::nil) 0 78608 17 289) :: (Proof_certif 3496731851083 prime3496731851083) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t100/prime3.v000066400000000000000000000112541451023060700215300ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime612727419833 : prime 612727419833. Proof. apply (Pocklington_refl (Pock_certif 612727419833 3 ((491, 1)::(11, 1)::(2,3)::nil) 8654) ((Proof_certif 491 prime491) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime3456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789041: prime 3456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789041. apply (Pocklington_refl (SPock_certif 3456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789041 2 ((231068784247705808906054003350498448463392090835644021917789001122260183534685911401596933386149, 1)::nil)) ( (Ell_certif 231068784247705808906054003350498448463392090835644021917789001122260183534685911401596933386149 538 ((429495881501311912464784392844792655136416525716417066486529413078647048781558015461346651739,1)::nil) 27703092998046380102635141614041981775575989823913652339793904096512820210365412401450571773903 45291317025356070551712898925739747197020283286149870656391777657046386131471849153744168166337 0 90216040561266267527350530712961712602235085303591617314568297050456514234771572583924221651056) :: (Ell_certif 429495881501311912464784392844792655136416525716417066486529413078647048781558015461346651739 971122 ((442267687789291059686408497433682539512457266696748514291662598506448937949513665293881,1)::nil) 42885763611109322734090016092739131464478481601505828108704855281412916790285176735662777761 106937273390672141124734032201189050591863019058825939742980959625835809111812108256302483827 0 305326664276331208010344034199265332391653856989101774846198954917175109442099267826772832217) :: (Ell_certif 442267687789291059686408497433682539512457266696748514291662598506448937949513665293881 468 ((945016426900194571979505336396757563060806070484792939866480683879480676590186828953,1)::nil) 286295102227592824863584198203084357233268770915387610534190572090721045270963390463025 9640154121510942035174478587498144385545615400437581123600118220268155228227485144738 143422586930223302548342723918716817235571315418030579255202575661703790387307267192458 299776915331549502398286782415289774296482631864386254968519373556549039218489681301209) :: (Ell_certif 945016426900194571979505336396757563060806070484792939866480683879480676590186828953 2416 ((391149183319616958600788632614551971465564858236815945361745535691106241094122263,1)::nil) 699519108252021823780147065603059031317632422531760576836360673512832118616197488207 899006380990363516030801126434416775767353309917067969422081815819351300715488877666 350450716025824549856026268101635270150729953895801472197626334215426373337206161439 12292888354593493077880967783463667234812916743547627485702900869491407902415376001) :: (SPock_certif 391149183319616958600788632614551971465564858236815945361745535691106241094122263 2 ((376829656377280306937175946642150261527519131249340987824417664442298883520349, 1)::nil)) :: (Ell_certif 376829656377280306937175946642150261527519131249340987824417664442298883520349 3519628034 ((107065193462793150072169230438102102447543282514321361052908766326221,1)::nil) 2178 0 99 1089) :: (Ell_certif 107065193462793150072169230438102102447543282514321361052908766326221 266905812400 ((401134739255281763478633148110873011248993806368608794451,1)::nil) 0 5832 9 81) :: (SPock_certif 401134739255281763478633148110873011248993806368608794451 2 ((2674231595035211756524220987405820074993292042457391963, 1)::nil)) :: (Ell_certif 2674231595035211756524220987405820074993292042457391963 11478 ((232987593224883407956457657234247386929140401267093,1)::nil) 2014449673400301209814187787791087333948773329098850508 907153499333720329129673222443621415887586846010332627 1930986266765197201373003375394781686436589330138106132 126177363413918616656360213554523579624863158572203108) :: (Ell_certif 232987593224883407956457657234247386929140401267093 3305009570957066 ((70495285481855584176562627716184379,1)::nil) 173664129972327489696592152760910383575122096542281 30112501639483819573311503297311132787718197474904 0 195548504574578868153040795582601884730047020068747) :: (Ell_certif 70495285481855584176562627716184379 5524001 ((12761635177447575531543334009,1)::nil) 70495285481855584176562627688600027 55816936272 852 181476) :: (Ell_certif 12761635177447575531543334009 9992368 ((1277138229641600515759,1)::nil) 0 19008 12 144) :: (SPock_certif 1277138229641600515759 2 ((612727419833, 1)::nil)) :: (Proof_certif 612727419833 prime612727419833) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t100/prime4.v000066400000000000000000000064671451023060700215430ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime42840479569 : prime 42840479569. Proof. apply (Pocklington_refl (Pock_certif 42840479569 7 ((521, 1)::(2,4)::nil) 4236) ((Proof_certif 521 prime521) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime4567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890239: prime 4567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890239. apply (Pocklington_refl (Ell_certif 4567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890239 7618 ((599618026182303624618755434659302689698537252430077490522024068238073122348000087593175360630901,1)::nil) 871400685165731416231513877124017495316108653755817704570562543188943238287851964623125666818661857 2008935613392676773366952987331049430637654273381654367424070507546524834378681020949888156881572357 0 20130470422235619769597782490716796967970720545153164582682757586975435850340647377010312905749240) ( (Ell_certif 599618026182303624618755434659302689698537252430077490522024068238073122348000087593175360630901 2164 ((277087812468717016921790866293577952725756586151202234109523286737782463415947853033504993861,1)::nil) 900 0 90 900) :: (Ell_certif 277087812468717016921790866293577952725756586151202234109523286737782463415947853033504993861 9073596 ((30537816811407188166829431935649102376362864974828023817652653039822986376045395337161,1)::nil) 0 10985 26 169) :: (Ell_certif 30537816811407188166829431935649102376362864974828023817652653039822986376045395337161 79694115249 ((383187851649941944972899035736794899822915964934902812170581284902428178277,1)::nil) 0 500 5 25) :: (Ell_certif 383187851649941944972899035736794899822915964934902812170581284902428178277 73200 ((5234806716529261543345615242305941253878393251829286963430133802493067,1)::nil) 134873771665060964171667255761499886057521204732937938682953663357304664619 107606320033212628836516569664611958895320118476181591944113333506144459036 0 20149493193722666245133160920949153674738372800898865078439692673726936380) :: (Ell_certif 5234806716529261543345615242305941253878393251829286963430133802493067 188164551250564 ((27820366172789258873882399782254796647501876113590203667,1)::nil) 0 192 4 16) :: (Ell_certif 27820366172789258873882399782254796647501876113590203667 2041597 ((13626766777571312494034033059776386859404818685401,1)::nil) 0 1080 6 36) :: (Ell_certif 13626766777571312494034033059776386859404818685401 307208268 ((44356770949834307499933655928993749761353,1)::nil) 13626766777571312494034033059776386859404818663531 1102248 27 729) :: (Ell_certif 44356770949834307499933655928993749761353 127081027716746 ((349043218699035039042583253,1)::nil) 1215036004390870672549860025967940731859 0 29976192634686495224139057294651813418188 15595614319538682948344458660309877075024) :: (Ell_certif 349043218699035039042583253 584 ((597676744347601583736317,1)::nil) 349043218699035039042583217 0 12 36) :: (Ell_certif 597676744347601583736317 3393250 ((176136961423159237,1)::nil) 36450 0 675 18225) :: (Ell_certif 176136961423159237 4111461 ((42840479569,1)::nil) 0 78608 17 289) :: (Proof_certif 42840479569 prime42840479569) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t100/prime5.v000066400000000000000000000106301451023060700215270ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime172779892108321 : prime 172779892108321. Proof. apply (Pocklington_refl (Pock_certif 172779892108321 17 ((29, 1)::(7, 1)::(5, 1)::(3, 1)::(2,5)::nil) 174412) ((Proof_certif 29 prime29) :: (Proof_certif 7 prime7) :: (Proof_certif 5 prime5) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime5678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901283: prime 5678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901283. apply (Pocklington_refl (Ell_certif 5678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901283 8613 ((659340675092057369494576687837649936286377323827160029599474171252548335017794784969008387843487,1)::nil) 1068370684844652260561789543542317206494058914638487074483065066870522241572631928238294289071616672 2822867551543524372833926155064065135726625003423672416040767219112868011384344197573385301080637618 0 1485199565862283195881180229577224102904204817342168821758275109328053353215060809132405108152024908) ( (Ell_certif 659340675092057369494576687837649936286377323827160029599474171252548335017794784969008387843487 784 ((840995759045991542722674346731696347304052708961154473076562011004759456840821740229534724691,1)::nil) 659340675092057369494576687837649936286377323827160029599474171252548335017794784969008387829487 784000 60 400) :: (Ell_certif 840995759045991542722674346731696347304052708961154473076562011004759456840821740229534724691 1238998 ((678770876987688069490567657681203962640821622719712124274147234798329001767408254730013,1)::nil) 348502809392728702382143600736008759783891417410604315630621259828045668880210579001104142401 251006917402217510235095378496438958480085365875972945273933630548402752573471274670116690452 0 715846432454144902090661893282057846625308601853694686281147014129806416784517730436789754527) :: (Ell_certif 678770876987688069490567657681203962640821622719712124274147234798329001767408254730013 1227312638091 ((553054581140359855568272010920571331757971842220703771483940258670602561773,1)::nil) 678770876987688069490567657681203962640821622719712124274147234798329001767407714121109 4964006108754 1431 2047761) :: (SPock_certif 553054581140359855568272010920571331757971842220703771483940258670602561773 2 ((1245618425991801476505117141712998494950387032028612097936802384393249013, 1)::nil)) :: (Ell_certif 1245618425991801476505117141712998494950387032028612097936802384393249013 2216 ((562102177794134240300143114491425312602019857606760176090665010402453,1)::nil) 1245618425991801476505117141712998494950387032028612097936802384393234613 0 600 14400) :: (SPock_certif 562102177794134240300143114491425312602019857606760176090665010402453 2 ((13574054106151981879085738582925082441400445206162064838440283, 1)::nil)) :: (Ell_certif 13574054106151981879085738582925082441400445206162064838440283 65053 ((208661462286934989609791071632731304020957206302253936841,1)::nil) 13574054106151981879085738582925082441400445206162064788882051 134414314742 571 326041) :: (Ell_certif 208661462286934989609791071632731304020957206302253936841 2864 ((72856655826443781288334871374370203901835514626114347,1)::nil) 208661462286934989609791071631883471778573702718360406921 9501955807025115933281263315351902213136 0 97477976010097357444) :: (Ell_certif 72856655826443781288334871374370203901835514626114347 193909 ((375726014916500942650082621555351061909959757389,1)::nil) 42468594832879496729329998977535240386338594816577001 7601203492123761869110523573895967176903156129914483 63698057858557777145788663331134240544889144218776424 68232934711282586914658866416333435773712638774607916) :: (SPock_certif 375726014916500942650082621555351061909959757389 2 ((500887618743807484206232002262750205251, 1)::nil)) :: (Ell_certif 500887618743807484206232002262750205251 87943750 ((5695545376946144372855130269723,1)::nil) 62004971613157849451395456945007846064 396441284199113617890290527436816450668 0 242419420997785707670081855384920877972) :: (SPock_certif 5695545376946144372855130269723 2 ((42732959595582599647, 1)::nil)) :: (SPock_certif 42732959595582599647 2 ((172779892108321, 1)::nil)) :: (Proof_certif 172779892108321 prime172779892108321) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t100/prime6.v000066400000000000000000000146461451023060700215430ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. (* Lemma prime856938537863 : prime 856938537863. Proof. apply (Pocklington_refl (Pock_certif 856938537863 5 ((337, 1)::(11, 1)::(2,1)::nil) 14398) ((Proof_certif 337 prime337) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. *) Lemma prime896191029759386718510467381341 : prime 896191029759386718510467381341. Proof. apply (Pocklington_refl (Pock_certif 896191029759386718510467381341 2 ((107732070073, 1)::(2,2)::nil) 205628528382) ((Pock_certif 107732070073 7 ((29, 1)::(11, 1)::(3, 1)::(2,3)::nil) 15170) :: (Proof_certif 29 prime29) :: (Proof_certif 11 prime11) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime6789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012577: prime 6789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012577. apply (Pocklington_refl (Ell_certif 6789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012577 1030 ((6591274122018350713172708857725037876063765923528591940139160823695821546928307976193586794059489,1)::nil) 215664362339499312212792095609854666185676397742176925508425561462145130240603820081256713847711632 5798578370028339554050165034854371297081586468565915144609788735674930233894754521718137630832942300 0 2348915875996267324864656708888366953731835439104889520282113790734436938461004593003099091933408870) ( (Ell_certif 6591274122018350713172708857725037876063765923528591940139160823695821546928307976193586794059489 82632 ((79766605213698696790259328803914196389579895482787027105240837535679250966814915177290272051,1)::nil) 6591274122018350713172708857725037876063765923528591940139160823695821546928307976193586793965409 9834496 0 3136) :: (Ell_certif 79766605213698696790259328803914196389579895482787027105240837535679250966814915177290272051 61668 ((1293484549745389777360370513133459758538948814058902376988648860114874282549740673000983,1)::nil) 11204526286206199257078472286409146395277836514697364523502542249293472955922423712393029196 67193342062567560124063437820106273872000420098087889405523418331907791541967324026608450663 38274834566922716574200061225395753384995373809728413314510774449616035942766711626421512640 22894053320828161885485046782183323277330035312276607925640553310330210775892980586139163355) :: (Ell_certif 1293484549745389777360370513133459758538948814058902376988648860114874282549740673000983 415890 ((3110160258110052603718219993588352108824325640348587986728077148775875191697901949,1)::nil) 369521705517498098289457884004193322459275183212964934556573397331609481426679589226586 599743174589317061177350613724028887973032225376954263645332168606539018104226352298080 0 43488875368532628271601402732040976820987647713612940424891140859738504384111607590545) :: (Ell_certif 3110160258110052603718219993588352108824325640348587986728077148775875191697901949 1042 ((2984798712197747220458944331658687244553017136559873421496261953981587012624217,1)::nil) 1166310096791269726394332497595632040809122115130720495023028930790953196886713232 0 1555080129055026301859109996794176054412162820174293993364038574387937595848950976 2332620193582539452788664995191264081618244230261440990046057861581906393773426464) :: (Ell_certif 2984798712197747220458944331658687244553017136559873421496261953981587012624217 4068 ((733726330432091253800133808175685163361843623590757024172626152788116398257,1)::nil) 448 0 8 64) :: (Ell_certif 733726330432091253800133808175685163361843623590757024172626152788116398257 622 ((1179624325453522916077385543690812159685590516367944910375372944064551049,1)::nil) 677036178851920932111255666313338190996776629808412779698726202679084313179 221418391602961761902304875545232027122503352408794488517874562121290857227 0 69685743552464557977479542006188648861097180665972832997158428045739380477) :: (Ell_certif 1179624325453522916077385543690812159685590516367944910375372944064551049 374688 ((3148284240364043994142821610755647792595838597014551801768372433667,1)::nil) 775989974587171284477069963761870192315428694686295785287490508971066533 70698164260961250708069557096192622744364464963096398982351049888175024 686933021265245198678151681572591273558220982787469032708960737376732025 771284776189227820901109292225488160483748882365433949325713603940138343) :: (SPock_certif 3148284240364043994142821610755647792595838597014551801768372433667 2 ((84237283682882324453973928687206287595543388371984582912408959, 1)::nil)) :: (SPock_certif 84237283682882324453973928687206287595543388371984582912408959 2 ((2216770623233745380367734965452797041987983904525910076642341, 1)::nil)) :: (Ell_certif 2216770623233745380367734965452797041987983904525910076642341 139046 ((15942714089105370743262912744365934806509384385822732833,1)::nil) 696865549268983227382791945966897198026369833357700223409753 797454496708609862846760084368522552314779055774329061775189 0 1857702177897627461794202069063735801995003222688650284192759) :: (Ell_certif 15942714089105370743262912744365934806509384385822732833 2025 ((7872945229187837404080450739905325832742917418037303,1)::nil) 3101915565937260008477658392513677117531190138492607103 9498559420310932935074350994174587373033223305813324982 11330660059992417291953980638603164792400040993553906500 28788781441243825762054882722341811304159452715671176) :: (Ell_certif 7872945229187837404080450739905325832742917418037303 3652036 ((2155768790118125178415670208357707397269959771,1)::nil) 0 768842307537874746492231517568879475853800529105089 3936472614593918702040225369952662916371458709018667 4428531691418158539795253541196745780917891047646043) :: (Ell_certif 2155768790118125178415670208357707397269959771 2405479098241940 ((896191029759386718510467381341,1)::nil) 1141749832247097563129063017211057306602578082 912508392708669590929340721028261816753891948 0 2053999471042100605444685631944122231783889868) :: (Proof_certif 896191029759386718510467381341 prime896191029759386718510467381341) :: nil)). (* (Ell_certif 896191029759386718510467381341 596920943292579 ((1501356318335977,1)::nil) 0 8192000 320 6400) :: (SPock_certif 1501356318335977 2 ((856938537863, 1)::nil)) :: (Proof_certif 856938537863 prime856938537863) :: nil)). *) vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t100/prime7.v000066400000000000000000000120171451023060700215320ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime4053914317 : prime 4053914317. Proof. apply (Pocklington_refl (Pock_certif 4053914317 2 ((6624043, 1)::(2,2)::nil) 1) ((Pock_certif 6624043 2 ((41, 1)::(3, 1)::(2,1)::nil) 358) :: (Proof_certif 41 prime41) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime7890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123653: prime 7890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123653. apply (Pocklington_refl (Ell_certif 7890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123653 10460852 ((754252469759538931023868919526620788006253124730718278972167741912248250564121911893610490193,1)::nil) 5711837973884804833670609687066636323072093184056713586174969642483249665305037356422406858435580528 5864824973376157764488234165361249338351528043620293388268984927406061454180414937119652693677642276 6330055507965069569110886336455501388716790303535113454240606863275824594393993716166055243703790267 6686656249294054193074581818726107163928467089018171242593247722001994028806603030371947672610942668) ( (Ell_certif 754252469759538931023868919526620788006253124730718278972167741912248250564121911893610490193 1983 ((380359288834865825024643933195471905197303643307314002479191872085676159414452866681923821,1)::nil) 754252469759538931023868919526620788006253124730718278972167741912248250564121911893069881289 4964006108754 1431 2047761) :: (Ell_certif 380359288834865825024643933195471905197303643307314002479191872085676159414452866681923821 1165630108 ((326312169035758833560126205315444636058854824155743279122140963325641791062731331,1)::nil) 313637151499851231302907976953652984456117832257646135697901903194811100931785300586057284 204090620937716585001362988602333029856974493650256664721167580993380387430660048720842363 0 194712919632394234290697224295782338978599730127751948077782169350596064601904666335472020) :: (Ell_certif 326312169035758833560126205315444636058854824155743279122140963325641791062731331 2146105 ((152048557286693257580652486861288071207529370334225203040662350004030368053,1)::nil) 209371817550697340488562184513210423052833713959921661157127008818740143056520531 167196752884304751237414052224311661970816342555911748178378246164145707756701729 0 222946114746880490872023983915294840107028453668415582397199933852944089317005350) :: (Ell_certif 152048557286693257580652486861288071207529370334225203040662350004030368053 26374 ((5765092791639237794064324215564118875390189647884942420499819425314341,1)::nil) 65644437298317324663011539370895386324918378748848230413614998772546204683 63122665259827460561961810690349622539657587030756853462869600163373992613 45298751333647943095923964431483186109868739791138029842429020730358495382 133683191535348014801026900164696011420702936759678420587917020250341459715) :: (Ell_certif 5765092791639237794064324215564118875390189647884942420499819425314341 2132 ((2704077294389886394964504791540393400367253472630376742383519887941,1)::nil) 4624 0 272 4624) :: (SPock_certif 2704077294389886394964504791540393400367253472630376742383519887941 2 ((42080256682071061235052984617808798636278454289299357958037969, 1)::nil)) :: (Ell_certif 42080256682071061235052984617808798636278454289299357958037969 4160 ((10115446317805543566118505917745577526158073480750719441653,1)::nil) 100 0 20 100) :: (Ell_certif 10115446317805543566118505917745577526158073480750719441653 393181348 ((25727177469785630741869540356890467466075961914623,1)::nil) 847815818871771120058488512568895361520663562004659206091 6030293246650983540490844248925323756749909868529593766436 0 9408003974440041714900154329254494269385904132775019829265) :: (Ell_certif 25727177469785630741869540356890467466075961914623 26419970 ((973777694289040855908221409820577458251227,1)::nil) 2964282123981597553619657781999093815919373170970 22794388619023187393464450857704686494180696161639 6042228320462774617836714127831652988066436168221 20598495339780754588293602035731056903135923582919) :: (Ell_certif 973777694289040855908221409820577458251227 701 ((1389126525376663132539066790092142602863,1)::nil) 973777694289040008075979026316993564721307 9501955807025115933281263315351902213136 0 97477976010097357444) :: (Ell_certif 1389126525376663132539066790092142602863 38885 ((35723968763704851037725820469085157,1)::nil) 1389126525376663132539066790092063367695 271737008656 0 521284) :: (SPock_certif 35723968763704851037725820469085157 2 ((992332465658468084381272790807921, 1)::nil)) :: (Ell_certif 992332465658468084381272790807921 2155396 ((460394500898427980137788937,1)::nil) 900 0 10 100) :: (Ell_certif 460394500898427980137788937 283674432 ((1622967913084201459,1)::nil) 0 192 4 16) :: (Ell_certif 1622967913084201459 400345884 ((4053914317,1)::nil) 0 221184 48 576) :: (Proof_certif 4053914317 prime4053914317) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t100/prime8.v000066400000000000000000000062511451023060700215360ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime4819935037 : prime 4819935037. Proof. apply (Pocklington_refl (Pock_certif 4819935037 2 ((57380179, 1)::(2,2)::nil) 1) ((Pock_certif 57380179 2 ((9563363, 1)::(2,1)::nil) 1) :: (Pock_certif 9563363 2 ((241, 1)::(2,1)::nil) 560) :: (Proof_certif 241 prime241) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime8901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901235157: prime 8901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901235157. apply (Pocklington_refl (Ell_certif 8901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901235157 1156922 ((7693893424007948208080590001468466529781515195887854519148778478161861100744009274334848368093,1)::nil) 2178 0 99 1089) ( (Ell_certif 7693893424007948208080590001468466529781515195887854519148778478161861100744009274334848368093 174332609734004 ((44133415060712164411292774692094034654673959380256317749993959868864621180235993,1)::nil) 6716617511956399606093670966280919847801782173513907580606549278856961954869757947286792229898 417422542823734559743201794605126495092036298685024850169386231229230783225870256079931728488 0 1375044944850795009802581112964584671990051818335005208014191429090934977392459228110871146792) :: (SPock_certif 44133415060712164411292774692094034654673959380256317749993959868864621180235993 2 ((324510404858177679494799813912456137166720289560708218749955587271063391031147, 1)::nil)) :: (Ell_certif 324510404858177679494799813912456137166720289560708218749955587271063391031147 8138719 ((39872417865536048055572358980873542527651362892785238594902199452149867,1)::nil) 0 711828 117 1521) :: (Ell_certif 39872417865536048055572358980873542527651362892785238594902199452149867 15961253415843 ((2498075610149703917611545457586296308821537391558714609661,1)::nil) 0 119164 93 961) :: (Ell_certif 2498075610149703917611545457586296308821537391558714609661 606 ((4122236980445055969656015606671113389530388835354169943,1)::nil) 1941535761979114296033961579264838036574568272261525721170 758577932551736704163510333117507469761998748606800467748 585616937911092920306132184545790765370916652261595391410 44885468115159188225229075154418382392705680871468124775) :: (Ell_certif 4122236980445055969656015606671113389530388835354169943 17040853965493 ((241903192691657908686211093523780482135679,1)::nil) 4122236980445055969656015606671113389418495002906369463 14406462054002124060149776 0 3795584547076) :: (SPock_certif 241903192691657908686211093523780482135679 2 ((13661701613075547282997699307, 1)::nil)) :: (SPock_certif 13661701613075547282997699307 2 ((764676011030759391189841, 1)::nil)) :: (SPock_certif 764676011030759391189841 2 ((3186150045961497463291, 1)::nil)) :: (SPock_certif 3186150045961497463291 2 ((15100952869621771, 1)::nil)) :: (SPock_certif 15100952869621771 2 ((503365095654059, 1)::nil)) :: (SPock_certif 503365095654059 2 ((4819935037, 1)::nil)) :: (Proof_certif 4819935037 prime4819935037) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t100/prime9.v000066400000000000000000000110601451023060700215310ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime8725915592549 : prime 8725915592549. Proof. apply (Pocklington_refl (Pock_certif 8725915592549 3 ((1493, 1)::(7, 1)::(2,2)::nil) 48418) ((Proof_certif 1493 prime1493) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime9012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012346103: prime 9012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012346103. apply (Pocklington_refl (Ell_certif 9012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012346103 13986778 ((644347517269612384488416378438909400412225119649982232019901316388005468995251584871148108053,1)::nil) 6876185946935048040751473751022855964435207604826800480584663082562294790804494778730289090926002123 1287604209866173807929447190325501394628999764593900337993219613475043207272374348910703520783514130 6516846521636749360666474081337202009939996170296211414189696691120500897237814287101042700085704070 2998572055249888636204342756351637531949479794472452565652191467026302998735989403985748205493541627) ( (Ell_certif 644347517269612384488416378438909400412225119649982232019901316388005468995251584871148108053 1497 ((430425863239554031054386358342624849974766278957837438467999123730922152371746873570509403,1)::nil) 0 16099776 660 17424) :: (Ell_certif 430425863239554031054386358342624849974766278957837438467999123730922152371746873570509403 1293660 ((332719465114136659597101524622099199151837638944376508147884923943200404443549457431,1)::nil) 289975626511744866140091265861677492458656809520477876988840499632959965536640266414272794 297185428712726663958979141683738649218638291445691368309364200908337676579577162068480917 89556275673284803859411324942479193383687199311131908539246861667374500136391048012989360 395257953085467719995030050059258928938403275170021505221014856868895404968479220279853944) :: (Ell_certif 332719465114136659597101524622099199151837638944376508147884923943200404443549457431 397 ((838084294997825339035520213153902264866089168032090424648531533231662847138518037,1)::nil) 0 3584 8 64) :: (SPock_certif 838084294997825339035520213153902264866089168032090424648531533231662847138518037 2 ((6026435233107726716681912540296130417249756723560347633161701708744375752427, 1)::nil)) :: (Ell_certif 6026435233107726716681912540296130417249756723560347633161701708744375752427 799153074 ((7541027406606367776646896236923103442102559577407705771339962284857,1)::nil) 6026435233107726716681912540296130417249756723560347633161701708744375658347 9834496 0 3136) :: (Ell_certif 7541027406606367776646896236923103442102559577407705771339962284857 99586 ((75723770475833628990489589268803847236986538662715608142908101,1)::nil) 180 0 6 36) :: (Ell_certif 75723770475833628990489589268803847236986538662715608142908101 2626 ((28836165451574116142608373674330220327400147348020509034137,1)::nil) 254898 0 2499 127449) :: (SPock_certif 28836165451574116142608373674330220327400147348020509034137 2 ((2497935330177937988791439160978016313877351641373917969, 1)::nil)) :: (Ell_certif 2497935330177937988791439160978016313877351641373917969 15130 ((165098171194840580885091814858811065991152869408649,1)::nil) 2475075068971992147402876221557265554480685179579767469 0 2219116945646725665515247979790417236813386655566029846 267388253928239402581909711477223697365631754910812929) :: (Ell_certif 165098171194840580885091814858811065991152869408649 74515521 ((2215621242114653950887518255254509324788641,1)::nil) 0 192 4 16) :: (Ell_certif 2215621242114653950887518255254509324788641 2575 ((860435433830933573161222805912158029721,1)::nil) 0 233678802879279908882667940983886400695947 553905310528663487721879563813627331197494 2077144914482488078957048364301102492100740) :: (Ell_certif 860435433830933573161222805912158029721 126423675 ((6805967583452494741774641449143,1)::nil) 0 221184 48 576) :: (SPock_certif 6805967583452494741774641449143 2 ((87255994659647368484290274989, 1)::nil)) :: (SPock_certif 87255994659647368484290274989 2 ((3511025054709776616943919, 1)::nil)) :: (SPock_certif 3511025054709776616943919 2 ((1709359812419560183517, 1)::nil)) :: (Ell_certif 1709359812419560183517 581 ((2942099505078979841,1)::nil) 1709359812419559033029 475439166 435 7569) :: (Ell_certif 2942099505078979841 337168 ((8725915592549,1)::nil) 100 0 20 100) :: (Proof_certif 8725915592549 prime8725915592549) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t100/res000066400000000000000000000015631451023060700206600ustar00rootroot00000000000000COQDEP VFILES COQC prime1.v Finished transaction in 3.043 secs (3.027u,0.s) (successful) COQNATIVE prime1.vo COQC prime2.v Finished transaction in 2.792 secs (2.773u,0.002s) (successful) COQNATIVE prime2.vo COQC prime3.v Finished transaction in 3.938 secs (3.913u,0.s) (successful) COQNATIVE prime3.vo COQC prime4.v Finished transaction in 2.921 secs (2.899u,0.001s) (successful) COQNATIVE prime4.vo COQC prime5.v Finished transaction in 4.797 secs (4.755u,0.001s) (successful) COQNATIVE prime5.vo COQC prime6.v Finished transaction in 4.292 secs (4.259u,0.s) (successful) COQNATIVE prime6.vo COQC prime7.v Finished transaction in 3.235 secs (3.206u,0.001s) (successful) COQNATIVE prime7.vo COQC prime8.v Finished transaction in 1.606 secs (1.58u,0.002s) (successful) COQNATIVE prime8.vo COQC prime9.v Finished transaction in 2.498 secs (2.476u,0.s) (successful) COQNATIVE prime9.vo coqprime-8.18/src/Coqprime/examples/t125/000077500000000000000000000000001451023060700201465ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/examples/t125/.depend000066400000000000000000000020201451023060700214000ustar00rootroot00000000000000prime1.vo: prime1.v ../PocklingtonRefl.vo prime1.vi: prime1.v ../PocklingtonRefl.vo prime2.vo: prime2.v ../PocklingtonRefl.vo prime2.vi: prime2.v ../PocklingtonRefl.vo prime4.vo: prime4.v ../PocklingtonRefl.vo prime4.vi: prime4.v ../PocklingtonRefl.vo prime5.vo: prime5.v ../PocklingtonRefl.vo prime5.vi: prime5.v ../PocklingtonRefl.vo prime6.vo: prime6.v ../PocklingtonRefl.vo prime6.vi: prime6.v ../PocklingtonRefl.vo prime7.vo: prime7.v ../PocklingtonRefl.vo prime7.vi: prime7.v ../PocklingtonRefl.vo prime8.vo: prime8.v ../PocklingtonRefl.vo prime8.vi: prime8.v ../PocklingtonRefl.vo prime9.vo: prime9.v ../PocklingtonRefl.vo prime9.vi: prime9.v ../PocklingtonRefl.vo prime1.html: prime1.v ../PocklingtonRefl.html prime2.html: prime2.v ../PocklingtonRefl.html prime4.html: prime4.v ../PocklingtonRefl.html prime5.html: prime5.v ../PocklingtonRefl.html prime6.html: prime6.v ../PocklingtonRefl.html prime7.html: prime7.v ../PocklingtonRefl.html prime8.html: prime8.v ../PocklingtonRefl.html prime9.html: prime9.v ../PocklingtonRefl.html coqprime-8.18/src/Coqprime/examples/t125/Makefile000066400000000000000000000003741451023060700216120ustar00rootroot00000000000000ifeq "$(COQBIN)" "" COQBIN=$(dir $(shell which coqtop))/ endif %: Makefile.coq Makefile.coq: _CoqProject $(COQBIN)coq_makefile -f _CoqProject -o Makefile.coq tests: all @$(MAKE) -C tests -s clean @$(MAKE) -C tests -s all -include Makefile.coq coqprime-8.18/src/Coqprime/examples/t125/Makefile.coq.local000066400000000000000000000000461451023060700234600ustar00rootroot00000000000000 res : make clean; make -s all > res coqprime-8.18/src/Coqprime/examples/t125/_CoqProject000066400000000000000000000001611451023060700222770ustar00rootroot00000000000000-R ../../../Coqprime Coqprime prime1.v prime2.v prime3.v prime4.v prime5.v prime6.v prime7.v prime8.v prime9.v coqprime-8.18/src/Coqprime/examples/t125/prime1.v000066400000000000000000000143411451023060700215350ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime76580149463 : prime 76580149463. Proof. apply (Pocklington_refl (Pock_certif 76580149463 5 ((2393, 1)::(2,1)::nil) 6053) ((Proof_certif 2393 prime2393) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012671: prime 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012671. apply (Pocklington_refl (Ell_certif 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012671 206 ((59930480103080426651084741694234687761656478484903511926160253588006814462928603452987461584902043367108261299742350588639,1)::nil) 725951084260195440770560463056578026202594606455322267710542981607787570079439667353771944419170720211139198308388754433170 9689640057172639871991863935657257906668981152847933415366856263996764137599448308029977883264632542173017885929817665606588 0 11140324108686787190294711548494522295725004466013705395992079378993006139835009153398876308220062617099334568765237224736530) ( (Ell_certif 59930480103080426651084741694234687761656478484903511926160253588006814462928603452987461584902043367108261299742350588639 1570530735 ((38159380626881158521921407475183659975719277142897500777761135955635318369552120284549450150698214687630782373829,1)::nil) 57414276893558116370794946409863393983523747075444145836350483510215460780376711638714853429166704865646141563359705118598 14756463187789876956714284082310450293022247885438835303181541696655878450033668305495350574201344136253075164995281901964 0 529129854827782151346794178999302851730578025660521040646208723696558342349287269064264336122584224407932733507460573388) :: (Ell_certif 38159380626881158521921407475183659975719277142897500777761135955635318369552120284549450150698214687630782373829 100943406 ((378027472412424428416071154515864661587892894587859466297657390325126739403099884215132629508596618721221,1)::nil) 28898946438760316111694924238282331747813038470055510346148955586092612492763802953100310487658864199873880184224 25120607095428707158122136214777174668153768639100335172610116317725461819656941516782158124833265485966433852312 0 21630315654193136488873113636377208277200692995540005050471653404185348847164755218241872945626120022257376577223) :: (Ell_certif 378027472412424428416071154515864661587892894587859466297657390325126739403099884215132629508596618721221 3482 ((108566189664682489493415035759869230783427023144129661688735876462020784644636423564131454188898656217,1)::nil) 141760302154659160656026682943449248095459835470447299861621521371922527276162456580674736065723732020459 0 189013736206212214208035577257932330793946447293929733148828695162563369701549942107566314754298309360612 283520604309318321312053365886898496190919670940894599723243042743845054552324913161349472131447464040918) :: (Ell_certif 108566189664682489493415035759869230783427023144129661688735876462020784644636423564131454188898656217 95353909 ((1138560451304439857766240456485839828374807614275469794354744545826977592881521191582268683087,1)::nil) 0 13310 11 121) :: (Ell_certif 1138560451304439857766240456485839828374807614275469794354744545826977592881521191582268683087 3932 ((289562678358199353450213747834648989922382404449714535143695998753873530067827552809557077,1)::nil) 532103789568660726250278817133300028523548832347301921709579707212171684941736175694315677056 984946349508046724326069774869722409492199973362323519311290415797810969451209837410244808729 123907945886544455569514780303211902053728110520154304496536532359869748720554640729890714435 50622519290809431655164733819579869900822093467377181627575460636043273213140820148957936800) :: (Ell_certif 289562678358199353450213747834648989922382404449714535143695998753873530067827552809557077 354576 ((816644889553154622563889681858470370026122476924948654723017361448891646954097111503,1)::nil) 268447358482123319696210536865476729380406371314203541963431353888290729811695506519413665 175988240056762662047455410873761726832349009791950501339651973485168503131593845433761667 0 137996452690759257815786716438975199457468549857633276804267164584571300015223574541701554) :: (SPock_certif 816644889553154622563889681858470370026122476924948654723017361448891646954097111503 2 ((960300009117003669498909558326811393647413678789835272473403717105584446669117, 1)::nil)) :: (Ell_certif 960300009117003669498909558326811393647413678789835272473403717105584446669117 12285347872 ((78166285490837395271676158713726278572273894626676958833971608271289,1)::nil) 960300009117003669498909558326811393647413678789835272473403717105584446525757 25690112 64 4096) :: (Ell_certif 78166285490837395271676158713726278572273894626676958833971608271289 12496954 ((6254827015514132105445547668153877122653475900923726253744581,1)::nil) 21731466879689543011811296746089403968203912962869835082497937216304 0 33299250790175646094495818486605227513492602529848931305489848495864 66598501580351292188991636973210455026985205059697862610979696991729) :: (Ell_certif 6254827015514132105445547668153877122653475900923726253744581 608293998754 ((10282572289593875951890890102834829295224458490241,1)::nil) 1116018 0 6723 558009) :: (Ell_certif 10282572289593875951890890102834829295224458490241 685396 ((15002381527750199814254658438718259406813337,1)::nil) 10368 0 288 5184) :: (Ell_certif 15002381527750199814254658438718259406813337 90784 ((165253585739229377580437110055651786309,1)::nil) 544644 0 6642 544644) :: (Ell_certif 165253585739229377580437110055651786309 2055 ((80415370189406023152041387832831331,1)::nil) 165253585739229377580437110054894202405 8234810772496 0 2869636) :: (Ell_certif 80415370189406023152041387832831331 9992425 ((8047633101014620946271243901,1)::nil) 0 66908100977904230200721935970285327 40207685094703011576020693916415681 25129803184189382235012933697759851) :: (SPock_certif 8047633101014620946271243901 2 ((457642973190889, 1)::nil)) :: (SPock_certif 457642973190889 2 ((76580149463, 1)::nil)) :: (Proof_certif 76580149463 prime76580149463) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t125/prime2.v000066400000000000000000000161621451023060700215410ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime1961683177021 : prime 1961683177021. Proof. apply (Pocklington_refl (Pock_certif 1961683177021 2 ((241, 1)::(5, 1)::(3, 1)::(2,2)::nil) 27936) ((Proof_certif 241 prime241) :: (Proof_certif 5 prime5) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime23456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123759: prime 23456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123759. apply (Pocklington_refl (Ell_certif 23456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123759 6882 ((3408426186042673481725453050003408426186042673481725453050003452826535939042576189732238722664141320044956894208296202329,1)::nil) 19164041832954522938153758457209035971202225231202356840837380295368997832444859364617239096195933889235595480861015491493925 16829476366300296414730794554612185737134080670970001306946721677572472598637689924472042278733065888578275300728624733840079 0 217956820989286608336690409017129974188427938356273515665447630589622192848687267899222457009104666772156065186043275416626) ( (Ell_certif 3408426186042673481725453050003408426186042673481725453050003452826535939042576189732238722664141320044956894208296202329 811091824 ((4202269194668486119181313619064921589181304179293176370435225509898317779609057734992784191190389067214666692107,1)::nil) 3408426186042673481725453050003408426186042673481725453050003452826535939042576189732238722664141320044956894208296121689 10838016 240 2304) :: (Ell_certif 4202269194668486119181313619064921589181304179293176370435225509898317779609057734992784191190389067214666692107 710477 ((5914715317552132045346033184839089216373371944895016123402008777804752391317277717365841658050376920791161,1)::nil) 4202269194668486119181313619064921589181304179293176370435225509898317779609057734992784191190287098713103005987 12532772959217148221216122 5579439 3458904394969) :: (Ell_certif 5914715317552132045346033184839089216373371944895016123402008777804752391317277717365841658050376920791161 15071 ((392456726000406877137949252527310013693409325518878376567779812060783824846781223731500814040622406969,1)::nil) 1506381280525099504423086992292609842482116171885290930424443702098231780336517379350871247566487914735393 2732457468109220168998018134654523024077274680197832879161321950220358715354309655137331874894863820312765 0 5751661266644342388059118508701481254034700767778475197703544590912732840471015278087637552536893748721717) :: (Ell_certif 392456726000406877137949252527310013693409325518878376567779812060783824846781223731500814040622406969 1060114 ((370202380121766977077889031299756454205311245317841349029652927453403345480282328138037277882739,1)::nil) 36590555445694217886717146944147487536157818821228091778399918730148082139846630610117494244190051396 106874380981078538338364495177943534751708186173770819315242645762693578311070458411968643284512387853 0 186191101727801689015332463409188031152611760870058225871469699485915494980918262589234875632442889499) :: (Ell_certif 370202380121766977077889031299756454205311245317841349029652927453403345480282328138037277882739 497 ((744874004269148847239213342655445581902034698826228971517097664715610972845267672987699063739,1)::nil) 356579436392611961685610485678160520508649640628897406514645434888181438677307266118558579583342 305692485472663633089258505353634038294160593951370380680655261754353591934898867984291565084757 165145784786314348302944851624502856388145613375598324231877635677102267952650985770247501869134 280982678633530540759364014264261207979007236939469254524356534346131299959353986043631867772162) :: (SPock_certif 744874004269148847239213342655445581902034698826228971517097664715610972845267672987699063739 2 ((141235116471207593333184175702587330660226526133149217200814877648011181806080332382953937, 1)::nil)) :: (Ell_certif 141235116471207593333184175702587330660226526133149217200814877648011181806080332382953937 14316308556 ((9865330571686764176584025261392063186000147122082709229472827886268226678512497,1)::nil) 141235116471207593333184175702587330660226526133149217200814877648011181806080332382859857 9834496 0 3136) :: (Ell_certif 9865330571686764176584025261392063186000147122082709229472827886268226678512497 8728 ((1130308268983359781918426359004590190879875734217998505539154759622949595913,1)::nil) 9865330571686764176584025261392063186000147122082709229472827886268226678418417 9834496 0 3136) :: (Ell_certif 1130308268983359781918426359004590190879875734217998505539154759622949595913 38210 ((29581477858763668723329661319146563486900078113776295472785057099747819,1)::nil) 298984771850871327261461586378679749427645606286333288976889406511855209178 816803205398307067660165096110611663624626499992584183215779701479795913353 0 538017927166193740861695103297384020689737549117567374854440851267401900682) :: (Ell_certif 29581477858763668723329661319146563486900078113776295472785057099747819 8258 ((3582160070085210550173124402899801866384780886492740629948779418487,1)::nil) 9839727280200167807382356056383354074427775361624679477233293457580188 7310730068411634116670610666059265415866783885335983401952231419392327 0 8302782497428043201791611188365934117861125543964231826184828636355965) :: (Ell_certif 3582160070085210550173124402899801866384780886492740629948779418487 1395881 ((2566235997255647544578029504592298250481236215853535709979663,1)::nil) 3582160070085210550173124402899801866384780886492740612712116600247 27544082901737469648 141572 5010657796) :: (Ell_certif 2566235997255647544578029504592298250481236215853535709979663 9582507 ((267804239251340755042290029591477219284050626453036417,1)::nil) 2381958227232120879249355724413813367341138409628879117495276 1073746747107438116578986367637217056544459247061314076934168 0 2285334279299639540387293364983674772028762034066632108557968) :: (Ell_certif 267804239251340755042290029591477219284050626453036417 580 ((461731446985070267314293155655037955122517309125373,1)::nil) 10368 0 288 5184) :: (Ell_certif 461731446985070267314293155655037955122517309125373 26034004 ((17735706231936903263681342023691764890346897,1)::nil) 100 0 20 100) :: (Ell_certif 17735706231936903263681342023691764890346897 152491233 ((116306399279602541240388647826703249,1)::nil) 0 6912 24 144) :: (Ell_certif 116306399279602541240388647826703249 6387727 ((18207791171977534509876171781,1)::nil) 0 2030264 38 1444) :: (Ell_certif 18207791171977534509876171781 1264 ((14404898079096358772429251,1)::nil) 0 54 3 9) :: (SPock_certif 14404898079096358772429251 2 ((19206530772128478363239, 1)::nil)) :: (Ell_certif 19206530772128478363239 70284 ((273270314322968279,1)::nil) 7793099363090197559823 3294272982075588828548 11460460945827528650848 11022513651716820048388) :: (Ell_certif 273270314322968279 139304 ((1961683177021,1)::nil) 273270314322632139 92236816 0 9604) :: (Proof_certif 1961683177021 prime1961683177021) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t125/prime3.v000066400000000000000000000142621451023060700215410ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime1530006859 : prime 1530006859. Proof. apply (Pocklington_refl (Pock_certif 1530006859 2 ((85000381, 1)::(2,1)::nil) 1) ((Pock_certif 85000381 6 ((41, 1)::(3, 1)::(2,2)::nil) 563) :: (Proof_certif 41 prime41) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime34567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234571: prime 34567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234571. apply (Pocklington_refl (Ell_certif 34567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234571 408112 ((84701969369821982721276705662255870668158389826842498331098409801997964565008323382754941254632980470988228116119434453,1)::nil) 11553433233306057777642839927701557072766669835295416931675223419190097981399321556236366461050588230766928895008562794851218 20328310847874039614493117470401962196611919742680390467614838890081893831793972794357287486029608843298386939002626761532952 0 12480944340430659735208986370306072441617252874185850041196585085647858434321673086441037153159235974885711282764963704201561) ( (Ell_certif 84701969369821982721276705662255870668158389826842498331098409801997964565008323382754941254632980470988228116119434453 116 ((730189391119155023459281945364274747139296464024504295957739896140626538734193390284315899310320302458814098923742279,1)::nil) 84701969369821982721276705662255870668158389826842498331098409801997964565008323382754941254632980470988228116119098313 92236816 0 9604) :: (SPock_certif 730189391119155023459281945364274747139296464024504295957739896140626538734193390284315899310320302458814098923742279 2 ((6365969129737537475015971346308475415766913079322978639934263536299511244217131264357342498913012000303517801989, 1)::nil)) :: (Ell_certif 6365969129737537475015971346308475415766913079322978639934263536299511244217131264357342498913012000303517801989 8537632969 ((745636308430247943001726307439309109021844281547374004950354205467659700097622092803172043701834654189,1)::nil) 5608984042099317999900301076355234991150544244421030272143592557355877222958550854842689029107221930756512867700 98742252664647816837734106107587117826323301682721213896958651984720114597829124024624081656141306784790376383 5440691689943396377789878361930443190776583165624090727967630158541712823583415099238284652963599765320715582975 932450645572209464625266630221736503098642048740593281218725766069578613305705874272582907431925848753908353494) :: (Ell_certif 745636308430247943001726307439309109021844281547374004950354205467659700097622092803172043701834654189 9362 ((79644980605666304529131201392790975114488814521189279453905133120982057084035469670062090332906331,1)::nil) 104259302845990508355082816838809556322019512371581976993449815967004827507273744303235652758339929447 685495543611574019979079586020030199715290760201476887788747166480412237149478855792404783161871087917 166783407533603691690656867010038010189810617989447180077252451878799877041686885401972075978204372452 521434129646972148493105195298920036007791876223774629653408705390694616429777114927958104836501266999) :: (Ell_certif 79644980605666304529131201392790975114488814521189279453905133120982057084035469670062090332906331 425 ((187399954366273657715602826806567000269385445932235450351841611721248306427464040568358070522937,1)::nil) 37243832862297226368233156815248178051331834485338206828148151381880691374471539483116695204766433 50094617850432182109625181188716018572257296829926375096598775999235866605226538574110451659836111 0 75653673385061255841505568572831270895867986727622554295583336280457923430322988117317726254080579) :: (Ell_certif 187399954366273657715602826806567000269385445932235450351841611721248306427464040568358070522937 22704980 ((8253693875364508478562977232596857617552864875088365730418846796708255421088765550918401,1)::nil) 18 0 3 9) :: (Ell_certif 8253693875364508478562977232596857617552864875088365730418846796708255421088765550918401 5283453 ((1562177968719416729658232453775373343446580291812344097710425591156280833123952971,1)::nil) 0 500 5 25) :: (Ell_certif 1562177968719416729658232453775373343446580291812344097710425591156280833123952971 3835225235146 ((407323657135862445824879053468404966218395979036592297566782001241529,1)::nil) 865091152683876183401440358778664674702862269838198165536789586865359524739270690 273620356257225171328559825496657590643324698970534808396158559418587572345002621 0 702598638897759944186317559308513526404753212918559589662687954997081920274579855) :: (Ell_certif 407323657135862445824879053468404966218395979036592297566782001241529 1460416 ((278909336200002222534455287718297346495830985107480131231820149,1)::nil) 0 832000 120 1600) :: (Ell_certif 278909336200002222534455287718297346495830985107480131231820149 1325226963080 ((210461561657167473132586640457344201683443361154861,1)::nil) 278909336200002222534455287718297346495830985107480131231816549 0 240 3600) :: (Ell_certif 210461561657167473132586640457344201683443361154861 5796 ((36311518574390523314801012213473916484951323689,1)::nil) 163275497291141947950809767352597642639593190151665 176525859174490070965433235523215228258339211317130 14593684798245772436768562798135720432394359616909 97897000997376742586806892320979813762580193759156) :: (SPock_certif 36311518574390523314801012213473916484951323689 2 ((22062629162688282547322070115499611559, 1)::nil)) :: (Ell_certif 22062629162688282547322070115499611559 1933503 ((11410703351734278433453927787783,1)::nil) 19836988909984020163759490326950992578 5361116539337066270170012875393271697 0 17169341377557869620950841620189787586) :: (Ell_certif 11410703351734278433453927787783 177221264433 ((64386761872180348841,1)::nil) 11410703351734278433453387178879 4964006108754 1431 2047761) :: (SPock_certif 64386761872180348841 2 ((1441064500272613, 1)::nil)) :: (SPock_certif 1441064500272613 2 ((1530006859, 1)::nil)) :: (Proof_certif 1530006859 prime1530006859) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t125/prime4.v000066400000000000000000000115171451023060700215420ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime41045840141 : prime 41045840141. Proof. apply (Pocklington_refl (Pock_certif 41045840141 2 ((286673, 1)::(2,2)::nil) 1) ((Pock_certif 286673 3 ((19, 1)::(2,4)::nil) 334) :: (Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime45678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345821: prime 45678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345821. apply (Pocklington_refl (Ell_certif 45678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345821 88929960 ((513650306764648158207389152231100507649329516060992907103661646811390346515943734850682428921975417709212774521005903,1)::nil) 34572144737301086553885713497063156374818292572560810208748302914033487680943020352709572397908670237274201658375053350250440 19735362942604219862402417715304611960589359181541945963687558909736120888802280928467829492787402039065781827440825377514922 44543643564115639648489882891248649738222486395582269073431017081247168646038971229040566617752812360817639596364528846832588 17090055775113944381537491402727050941648008660941811381022321706496112617242696178798817960695592684939575578055939934809811) ( (Ell_certif 513650306764648158207389152231100507649329516060992907103661646811390346515943734850682428921975417709212774521005903 43626807 ((11773731384115462729312029464615654949245529613501004258771830181809314538098253661162691792095247634657037083,1)::nil) 257621898235805839289550005189190906302502406638614404438657905287785836813434854013141607959461016321954097837704046 274363190417491530832377097439672147444515104259613258834331558339384383736726036915326371154872193060367238622248563 0 230638261196580161691585604944869069211443917871052958794749632378838443717331447549599322527858961170987464511575435) :: (Ell_certif 11773731384115462729312029464615654949245529613501004258771830181809314538098253661162691792095247634657037083 1483 ((7939131074926138050783566732714534692680734736008768889136315705131512079322561611142382921400304716162433,1)::nil) 11773731384115462729312029464615654949245529613501004258771830181809314538098253660316352683455795698819421003 9476865744830856719995764701724677178102 9864395859 97306305663056347881) :: (Ell_certif 7939131074926138050783566732714534692680734736008768889136315705131512079322561611142382921400304716162433 2224227206043724 ((3569388528902865198900825716614220296093030779959984523710135661116935330159401069007570891,1)::nil) 0 13310 11 121) :: (Ell_certif 3569388528902865198900825716614220296093030779959984523710135661116935330159401069007570891 1029 ((3468793516912405441108674165805850627884383650323186165116619069314346523917729085252539,1)::nil) 0 500 5 25) :: (Ell_certif 3468793516912405441108674165805850627884383650323186165116619069314346523917729085252539 9633 ((360094832026617402793384632596890961059315245123341972748090558696370014074127623491,1)::nil) 0 500 5 25) :: (Ell_certif 360094832026617402793384632596890961059315245123341972748090558696370014074127623491 221778 ((1623672465378069072646451102439786457896248926283343889391120053245254846122321,1)::nil) 360094832026617402793384632596890961059315245123341972748090558696370014074127529411 9834496 0 3136) :: (Ell_certif 1623672465378069072646451102439786457896248926283343889391120053245254846122321 687018704 ((2363359914256525209023204559565799620350359637370648980120117620525461,1)::nil) 100 0 20 100) :: (Ell_certif 2363359914256525209023204559565799620350359637370648980120117620525461 5600294792 ((422006341100574908632989075616110829011967967667735150683941,1)::nil) 2363359914256525209023204559565799620350359637370648980120117620521861 0 240 3600) :: (SPock_certif 422006341100574908632989075616110829011967967667735150683941 2 ((69638010082603120236466844161074394226397354400616361499, 1)::nil)) :: (SPock_certif 69638010082603120236466844161074394226397354400616361499 2 ((44812104300259408131574545792197164881851579408376037, 1)::nil)) :: (Ell_certif 44812104300259408131574545792197164881851579408376037 35644 ((1257213115819195604634007015046926693483017601537,1)::nil) 0 16464 28 196) :: (Ell_certif 1257213115819195604634007015046926693483017601537 106006560768 ((11859767043764975630022365295847781281,1)::nil) 0 78608 17 289) :: (SPock_certif 11859767043764975630022365295847781281 2 ((10811260379138513887027637, 1)::nil)) :: (Ell_certif 10811260379138513887027637 47962 ((225413043224478886333,1)::nil) 36450 0 675 18225) :: (SPock_certif 225413043224478886333 2 ((41045840141, 1)::nil)) :: (Proof_certif 41045840141 prime41045840141) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t125/prime5.v000066400000000000000000000122041451023060700215350ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime136298589143 : prime 136298589143. Proof. apply (Pocklington_refl (Pock_certif 136298589143 5 ((3313, 1)::(2,1)::nil) 3161) ((Proof_certif 3313 prime3313) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456911: prime 56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456911. apply (Pocklington_refl (Ell_certif 56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456911 283107 ((200592045924964417109318703258685899721114910267971360263516820882972467118724206614268561884760039309705727461153713641,1)::nil) 23413558191473904121219681693974627952108361562875070912402124848860725146120824401910309999209397829006771159035348649367319 1161636820027560037832689173790481485079589958793450594816424407813825854048574119617965849520702063115906502090732519480589 49588839176273358326732353275206448915627386685659279776486818026642856920422802976597621747130560789564841308941436024869178 35717469137160164489335700762330560523823985474802420183270351580038601474675423205621018792140511358776783121097983609488171) ( (Ell_certif 200592045924964417109318703258685899721114910267971360263516820882972467118724206614268561884760039309705727461153713641 2000 ((100296022962482208554659351629342949860557455133985680131757969176357473838705191979466500308365199397113415891461997,1)::nil) 100 0 20 100) :: (Ell_certif 100296022962482208554659351629342949860557455133985680131757969176357473838705191979466500308365199397113415891461997 49 ((2046857611479228746013456155700876527766478676203789390444296848484702210688397913241802488542887480248493663653163,1)::nil) 33549537043036984903889213330746277429885485560094403617647373685645697241152194430409392428171103349967525143718081 98065452764061167202980933852153108995932702806116937931514452803180302013413917455377638145129137180102629841109521 52225394203600906099941427028094827049595894655575961334927200463758772462374997020290054093503028980230027261496247 60916408394809772310007891062218475683040322004999742549152159131364626010250976240862629379134381792602778658106620) :: (Ell_certif 2046857611479228746013456155700876527766478676203789390444296848484702210688397913241802488542887480248493663653163 162622073 ((12586591559924517417838205491949893713176800274854382101282559207480435912812233650000542394503977624509753,1)::nil) 1784044627250048248224854924682306056594357961325203189552621276635795052859703742048443408669133141945016904832041 1218198453292314699020870868175244748864875211539698301951785557517579718853615342314543080286080577778061085641007 1157215836228498615258663681507982705813489705240063852951614704350337029029016985683370564673844926928115456016788 124622497753754459184663728003286165951334419428874625555104288009812943971708192971845629230584585659171144474539) :: (Ell_certif 12586591559924517417838205491949893713176800274854382101282559207480435912812233650000542394503977624509753 16296560800 ((772346491655129922740398421484727852098511501571201593564495154809866203114209575914243214838177,1)::nil) 900 0 90 900) :: (Ell_certif 772346491655129922740398421484727852098511501571201593564495154809866203114209575914243214838177 1054809 ((732214544675983920065526954628494686809186783173972810205373920474444908058223477983832617,1)::nil) 0 221184 48 576) :: (SPock_certif 732214544675983920065526954628494686809186783173972810205373920474444908058223477983832617 2 ((223848175339154101844777719884273430161853134782531265424909912368465031237304764363, 1)::nil)) :: (Ell_certif 223848175339154101844777719884273430161853134782531265424909912368465031237304764363 144921609468 ((1544615576385672147045256412155163342640206192164566087395188716080558449,1)::nil) 40054023688910559322452509255831264578134700548161996191370827860433452554552870866 151545330458947474227256751200354445178083565242332068776669649016316198167564067561 0 89820465580381337473814772958796476607806007217374576541851024528297855830048711981) :: (Ell_certif 1544615576385672147045256412155163342640206192164566087395188716080558449 536292881917200 ((2880171690632564396089882737155936437511522141560928390177,1)::nil) 100 0 20 100) :: (Ell_certif 2880171690632564396089882737155936437511522141560928390177 202515184041873945132 ((14222003669794127608494881015118155827,1)::nil) 2880171690632564396089882737155936437511522141560928296097 9834496 0 3136) :: (Ell_certif 14222003669794127608494881015118155827 21313 ((667292435123827129579919605246603,1)::nil) 0 23625 30 225) :: (Ell_certif 667292435123827129579919605246603 85388512739940 ((7814779924275514787,1)::nil) 667292435123827129579919064637699 4964006108754 1431 2047761) :: (SPock_certif 7814779924275514787 2 ((14525613242147797, 1)::nil)) :: (SPock_certif 14525613242147797 2 ((136298589143, 1)::nil)) :: (Proof_certif 136298589143 prime136298589143) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t125/prime6.v000066400000000000000000000130541451023060700215420ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime8171108121851 : prime 8171108121851. Proof. apply (Pocklington_refl (Pock_certif 8171108121851 2 ((433, 1)::(5, 2)::(2,1)::nil) 15586) ((Proof_certif 433 prime433) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime67890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234568297: prime 67890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234568297. apply (Pocklington_refl (SPock_certif 67890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234568297 2 ((272233463660796375167613951991240370409170478565852817878022916306336412570689328998948867839222823501983304174099713, 1)::nil)) ( (Ell_certif 272233463660796375167613951991240370409170478565852817878022916306336412570689328998948867839222823501983304174099713 118850 ((2290563430044563526862549028113086835584101628656733848363946218217289883668475517140209194753637425498884152237,1)::nil) 4313608629640181863338318810532560770939865385112338048133564509841429435291538084859708886792561303027154088892772 0 121232295439778399066902774152247529113572427439551937837350938608918485000044787226469480644476397184382977082316150 153157972535838067032380337244259121681067983818857049064738759952338642288290310814909241638142706969113904136230005) :: (SPock_certif 2290563430044563526862549028113086835584101628656733848363946218217289883668475517140209194753637425498884152237 2 ((12527419166308785231468076765510964732690717927067521211327395037394116753453629964014182553179964480644069, 1)::nil)) :: (Ell_certif 12527419166308785231468076765510964732690717927067521211327395037394116753453629964014182553179964480644069 733748040 ((17073189273948568546047600707064191589105598056612895381762792790135557954471951620327259177281737,1)::nil) 12527419166308785231468076765510964732690717927067521211327395037394116753453629964014182553179964480640469 0 240 3600) :: (Ell_certif 17073189273948568546047600707064191589105598056612895381762792790135557954471951620327259177281737 53386 ((319806489977682698573551131515082448377956731289494419932363077783023116610561220005998612501,1)::nil) 666114249978787541281429321542094510909843874666950915899844784926838072712410057362807141363017 0 11604164265958641544458876911890159229707013329297580559808476788399317993885437766005775165308830 6135139257968714542870153116716126870308428601982265737854160786663078033298923911684291153335924) :: (Ell_certif 319806489977682698573551131515082448377956731289494419932363077783023116610561220005998612501 11204836 ((28541826937733198288091957036683307848321629272795486689185629727397299565203271609897,1)::nil) 900 0 90 900) :: (Ell_certif 28541826937733198288091957036683307848321629272795486689185629727397299565203271609897 346876 ((82282507114165287561237897798300568065595853991936789768352345730524583293830967,1)::nil) 8929331847598938949420089919872439621411126083465424454287330103206360373188865723173 23622954502296817557509776912453838915188418726229660393006270464968896491208255429475 0 8673427663821499412341513361525016778103955326922699470769684865432705911529349479798) :: (Ell_certif 82282507114165287561237897798300568065595853991936789768352345730524583293830967 330 ((249340930648985719882539084237274448683569597434110440970641109707657422137807,1)::nil) 20339963486492817734431077856087432337234635691979925774173846225768006963253481 37283870997577485304881021870319472659847016098831553204637549784513808414883107 0 16532945695574909297981896314659755619062941317446619380862646305473202168136239) :: (Ell_certif 249340930648985719882539084237274448683569597434110440970641109707657422137807 4401 ((56655517075434155846975479263184378251043100110768684470294778314310777057,1)::nil) 0 1272112 129 1849) :: (Ell_certif 56655517075434155846975479263184378251043100110768684470294778314310777057 18284851 ((3098494872910594450399157163664302117495224286612548548961298502513,1)::nil) 0 21909750744015552456447548621309583776770573870961327197496808801238419003 42491637806575616885231609447388283688282325083076513352721083735733082825 53114547258219521106539511809235354610352906353845641690901354669666354531) :: (Ell_certif 3098494872910594450399157163664302117495224286612548548961298502513 23148 ((133855835187082877587660150495260961698313041015182467549890379,1)::nil) 0 221184 48 576) :: (Ell_certif 133855835187082877587660150495260961698313041015182467549890379 20538991407065 ((6517157173600995916292613781737838491068651071339,1)::nil) 133855835187082877587660150495260961698313041015182467536841331 18161012554 879 85849) :: (Ell_certif 6517157173600995916292613781737838491068651071339 1023500809 ((6367515410142676219704494400966598635007,1)::nil) 0 603592 114 1444) :: (Ell_certif 6367515410142676219704494400966598635007 565579 ((11258401408366782040756101074359171,1)::nil) 0 11212344 198 4356) :: (SPock_certif 11258401408366782040756101074359171 2 ((8672517077957396042375083, 1)::nil)) :: (Ell_certif 8672517077957396042375083 1939 ((4472675130454619193961,1)::nil) 0 982433575237361270425186 4336258538978698021187557 7046420125840384284429815) :: (Ell_certif 4472675130454619193961 1137 ((3933751214237752123,1)::nil) 0 500 5 25) :: (SPock_certif 3933751214237752123 2 ((8171108121851, 1)::nil)) :: (Proof_certif 8171108121851 prime8171108121851) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t125/prime7.v000066400000000000000000000140721451023060700215440ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime2178793065679 : prime 2178793065679. Proof. apply (Pocklington_refl (Pock_certif 2178793065679 3 ((6851550521, 1)::(2,1)::nil) 1) ((Pock_certif 6851550521 3 ((3229, 1)::(2,3)::nil) 6914) :: (Proof_certif 3229 prime3229) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime78901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345679243: prime 78901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345679243. apply (Pocklington_refl (Ell_certif 78901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345679243 50958133 ((1548354108026095136899717506245350496545230378111709646276594914935756031095735971109669078188685806901583046968256399,1)::nil) 78901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123344895179897878763 14406462054002124060149776 0 3795584547076) ( (Ell_certif 1548354108026095136899717506245350496545230378111709646276594914935756031095735971109669078188685806901583046968256399 37397 ((41403163569968049225866179272277201287408893176236319658703672231314815464020505002740962617876814277135865105623,1)::nil) 1256355774944127471188720009636504472827040476752957259372475668713644454304725205078399008397176016954166035525392869 693519294830862978729146232293744705789371429409436485588202722172553471334909720732750909864900606862004140295101930 0 89828489301231921858291361791191756884679551431280584667219051738282934004706473650429353065651426655147567548890153) :: (Ell_certif 41403163569968049225866179272277201287408893176236319658703672231314815464020505002740962617876814277135865105623 16425342 ((2520688066645312421858015453941671429880053223624586913216058484320592425527346894613050589373805930930993,1)::nil) 41306163734933707398547284817364917749738626708723160322675805106463291523318710176378400002182040554177784355049 13859460748418427300733737067828120535686687628982074911822060786348236859929556461820235955782227699557385757642 12818563564749521316375644101534825055329509464976527698738598320457923585438510254254338929439032527941278133455 638122050491038275919353137266211433581433218235037170384903998151388834012721613025357838861763495545918170551) :: (Ell_certif 2520688066645312421858015453941671429880053223624586913216058484320592425527346894613050589373805930930993 1987 ((1268589867461153710044295648687303185646730359146747351490140212983356564824450155739097058192567632193,1)::nil) 0 5934929 308 5929) :: (Ell_certif 1268589867461153710044295648687303185646730359146747351490140212983356564824450155739097058192567632193 1296 ((978850206374346998490968864727857396332353672181133940056636187318471114617416731676161406366225931,1)::nil) 1268589867461153710044295648687303185646730359146747351490140212983356564824450155739097058192567296053 92236816 0 9604) :: (Ell_certif 978850206374346998490968864727857396332353672181133940056636187318471114617416731676161406366225931 134425 ((7281757161051493386579645636807568505355058003951042585533395199803500306269001137061197133933,1)::nil) 978850206374346998490968864727857396332353672181133940056636187318471114617416731564267573918425451 14406462054002124060149776 0 3795584547076) :: (Ell_certif 7281757161051493386579645636807568505355058003951042585533395199803500306269001137061197133933 182071 ((39994052655565649590432554535360208409659187920019492196074934600454617671250312147868377,1)::nil) 0 19008 12 144) :: (Ell_certif 39994052655565649590432554535360208409659187920019492196074934600454617671250312147868377 54037277616 ((740119680709520693897433194025327384465681329040572371557006612855529080632599,1)::nil) 0 192 4 16) :: (Ell_certif 740119680709520693897433194025327384465681329040572371557006612855529080632599 17818 ((41537752874033039280358805366782320376246886193970076584971460111183079197,1)::nil) 285714959598313926059934459826901616238215470740172646419085776690009461543635 193844895119925969862760196623828048990791923179471488052862288998250471165363 703866304708169249869650746347812549955615885041768141380324650976773890827988 407043834398521422032248194957158943531460908239655802563232080153488617616490) :: (Ell_certif 41537752874033039280358805366782320376246886193970076584971460111183079197 242 ((171643606917491897852722336226373224675208051796029491999153689365394933,1)::nil) 18 0 3 9) :: (Ell_certif 171643606917491897852722336226373224675208051796029491999153689365394933 431450312500 ((397829372107574722993675746210922549738159214472513035906141,1)::nil) 100 0 20 100) :: (Ell_certif 397829372107574722993675746210922549738159214472513035906141 14444665 ((27541612914357980818085829350260599151230659782097651,1)::nil) 37291431077566900200634732808641226631368591364732324115904 272184234397945993298554133604605123808610208266939633915867 349710063408290099230845875490898310315800557700516455169643 141768444872060999484625159378112981341741558920880954152146) :: (Ell_certif 27541612914357980818085829350260599151230659782097651 49790 ((553155511435187403456232771277434693183457961289,1)::nil) 5835263102924592697646759465020077615877304169370198 19448165672006550970342508039572971468912987150226524 10264589413308469294877291208346705158394725011563484 7437795244466211004981470966014130535984186763761554) :: (Ell_certif 553155511435187403456232771277434693183457961289 1297148260 ((426439697367506319945440502385686908837,1)::nil) 18 0 3 9) :: (Ell_certif 426439697367506319945440502385686908837 5900568092338 ((72270956066289004491627557,1)::nil) 159914886512814869979540188394632590815 0 213219848683753159972720251192843454420 319829773025629739959080376789265181630) :: (SPock_certif 72270956066289004491627557 2 ((1113531022041382507, 1)::nil)) :: (Ell_certif 1113531022041382507 511077 ((2178793065679,1)::nil) 0 119164 93 961) :: (Proof_certif 2178793065679 prime2178793065679) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t125/prime8.v000066400000000000000000000146701451023060700215510ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime7904183756323 : prime 7904183756323. Proof. apply (Pocklington_refl (Pock_certif 7904183756323 2 ((12251, 1)::(2,1)::nil) 1) ((Proof_certif 12251 prime12251) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime89012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789641: prime 89012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789641. apply (Pocklington_refl (SPock_certif 89012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789641 2 ((9157648732397246354721206116953602093176841690799165650561398046537621286135243610095005842490982065730579688054539450287, 1)::nil)) ( (Ell_certif 9157648732397246354721206116953602093176841690799165650561398046537621286135243610095005842490982065730579688054539450287 2516 ((3639764996978237819841496866833705124474102420826377444579252265770227122151581380766784309395547021179608405732617297,1)::nil) 5743246371383453944315964157988306124677302428008878376685107481096293650864313943932623400743399896960591733243711574028 7874253622328762970245373795319834212079905214540599925245901830719753635707552953196197362151579660759357544819542144632 3538856406810921038587920711754165611974895482160904608112031340714772549063732267020389854734582912407030184501205263869 559568312448709268395106247232676162808360020330982255554526636823306026545755436170597375391908959514239463468427505145) :: (Ell_certif 3639764996978237819841496866833705124474102420826377444579252265770227122151581380766784309395547021179608405732617297 196 ((18570229576419580713477024830784209818745420514420293084587642737194246013304799084330840898871741039619634036570421,1)::nil) 2178 0 99 1089) :: (Ell_certif 18570229576419580713477024830784209818745420514420293084587642737194246013304799084330840898871741039619634036570421 19497 ((952465998687981777374828170015090004551747474709970410042288205602866652387634753625235669001639036833942043373,1)::nil) 0 500 5 25) :: (Ell_certif 952465998687981777374828170015090004551747474709970410042288205602866652387634753625235669001639036833942043373 2306948 ((412868429929058555881982675818913128753551217760422172540297879827220671884769630314981750815117584381523,1)::nil) 663032263578127500242174872175179129688405998570743909467240197631698997905640499884458831314564544323356920972 833539724754354234481715815849790305677863433434727920500206875263800669047321119921559870286026580676605537913 0 593797725403378965403671223315215650734363725035094907816975282238425233281716450166699148206654282189498870894) :: (Ell_certif 412868429929058555881982675818913128753551217760422172540297879827220671884769630314981750815117584381523 418374 ((986840553975769421335892468984480700888561951173883031009704452387096676767582633446691828772542881,1)::nil) 412868429929058555881982675818913128753551217760422172540297879827220671884769630314981750815117584359653 1102248 27 729) :: (Ell_certif 986840553975769421335892468984480700888561951173883031009704452387096676767582633446691828772542881 1897046901986 ((520198289743208572179148678209638056900027495456435862230038813242727318234171083214049,1)::nil) 13248 0 24 576) :: (Ell_certif 520198289743208572179148678209638056900027495456435862230038813242727318234171083214049 26384 ((19716430023620700886110850447606051277290308115588862377186619700658824823483238221,1)::nil) 100 0 20 100) :: (Ell_certif 19716430023620700886110850447606051277290308115588862377186619700658824823483238221 204373 ((96472772937818111424262747268993708940466967973792047801327062633694829573757,1)::nil) 0 2058 7 49) :: (Ell_certif 96472772937818111424262747268993708940466967973792047801327062633694829573757 582 ((165760778243673730969523620737102592680287927122393151220448911477221622667,1)::nil) 84676385470797088021174886943585254687565048757394348684692297146225279552299 74421274445523129910113609104175650337632632911708061085204337323033226917423 0 19100290632314115053195228213160123466282110253233937864787985300615581322956) :: (Ell_certif 165760778243673730969523620737102592680287927122393151220448911477221622667 556111 ((298071389063826701808674204856768869281366241874394088573684939188789,1)::nil) 0 57627770561277195532373446271883323236506349663644493978984191880752824970 41440194560918432742380905184275648170071981780598287805112227869305405747 51800243201148040927976131480344560212589977225747859756390284836631757799) :: (SPock_certif 298071389063826701808674204856768869281366241874394088573684939188789 2 ((8279760807328519494685394579354690813371284496510946904824581644133, 1)::nil)) :: (Ell_certif 8279760807328519494685394579354690813371284496510946904824581644133 1356724 ((6102759888767737207188340870622688432124948389521485447179227,1)::nil) 1659372867417401812933574045730259916332638264783747400136626456641 1687802998188305626249881641853491648894646123179089401784762469883 2196854950862329916759710422746405590884818321391526995676512953047 6064571075784459690221585336886363212944459706239651743472290657938) :: (Ell_certif 6102759888767737207188340870622688432124948389521485447179227 40076443 ((152277982573646498697210749731904048762702312047318697,1)::nil) 6102759888767737207188340870622688432124948389521485367944059 271737008656 0 521284) :: (Ell_certif 152277982573646498697210749731904048762702312047318697 814895496 ((186868111704039285421710994951573858131881113,1)::nil) 152277982573646498697210749731904048762702312047224617 9834496 0 3136) :: (Ell_certif 186868111704039285421710994951573858131881113 900 ((207631235226710317135264786216484946801689,1)::nil) 40204 0 92 2116) :: (Ell_certif 207631235226710317135264786216484946801689 5491520 ((37809428942571513376057308859699159,1)::nil) 207631235226710317135264786216484919217337 55816936272 852 181476) :: (SPock_certif 37809428942571513376057308859699159 2 ((2324445404068087629168652948463, 1)::nil)) :: (Ell_certif 2324445404068087629168652948463 137559 ((16897806788854855901624687,1)::nil) 2324445404068087629167895364559 8234810772496 0 2869636) :: (SPock_certif 16897806788854855901624687 2 ((1749617600834008687267, 1)::nil)) :: (Ell_certif 1749617600834008687267 221353356 ((7904183756323,1)::nil) 0 2058 7 49) :: (Proof_certif 7904183756323 prime7904183756323) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t125/prime9.v000066400000000000000000000116371451023060700215520ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime260857664677 : prime 260857664677. Proof. apply (Pocklington_refl (Pock_certif 260857664677 2 ((7, 1)::(3, 5)::(2,2)::nil) 5130) ((Proof_certif 7 prime7) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime90123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890793: prime 90123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890793. apply (Pocklington_refl (Ell_certif 90123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890793 10479980480 ((8599582505044164517270287374417907642590285850005600509913153033819152144635776137060342757079918916835171599955267,1)::nil) 78753175600710668689410950551648711512373449641843742211596273862296159851099789828656072751722419704692706103970397392990587 76162947129932123310740198083787154069223965682101438711248286784137524691934380644820230505578919682806479828753149216179930 0 85849065529943914814527312023382337891531282147597773942896588649093882142766553813644607684819455879038512434972084854546814) ( (Ell_certif 8599582505044164517270287374417907642590285850005600509913153033819152144635776137060342757079918916835171599955267 200427164 ((42906272450395818189944988566609202945117189055299911891729229259661689927382541115127924953417539112494401,1)::nil) 7060673069758174543799770402130102496882111265329807766992829758874488727482279747730785518009295441692471011220327 1971924143974787868691505934662184101321917871341526193629279884572095006790630374882682470061563519232686207254377 2108539703314924295784851805404944042465376560552203167518860348099864206280340007098509867059196161653010959903814 5995368067367104938838740719586304976967271087946485121847096510784230861319839236225373684230181789682859077431548) :: (Ell_certif 42906272450395818189944988566609202945117189055299911891729229259661689927382541115127924953417539112494401 11018771878912 ((3893925105438557160207053742627665454228106687103870995309947202312343312303945714667590034217,1)::nil) 100 0 20 100) :: (Ell_certif 3893925105438557160207053742627665454228106687103870995309947202312343312303945714667590034217 61147782 ((63680561715853522867060881171906864164396129482157040677419969455798825869701116544259,1)::nil) 568219501668384993545392970235485943346430099300421167078071073228564241334878472612882229456 3193181956740492342711054815305534053101518491518414471482996090973510513286856662512000581910 0 627143198267307034219100799541098581519439478655007362112976445096721416335509079951334275909) :: (Ell_certif 63680561715853522867060881171906864164396129482157040677419969455798825869701116544259 51286073 ((1241673577071372239146890446689237917755881703935603204937044382904553978624273,1)::nil) 6989652438400887180967471363937748594837689591230427415981726364736194328061736269997 51823368785146982259269293895148292425706961990478418691107677444142025337357360915291 0 54367948839905685617777665831657017456009807732462469679924938973122465049063188593270) :: (Ell_certif 1241673577071372239146890446689237917755881703935603204937044382904553978624273 761546410755160107 ((1630463435367138421459375814083562657510637556568952114558943,1)::nil) 0 192 4 16) :: (SPock_certif 1630463435367138421459375814083562657510637556568952114558943 2 ((90581301964841023414409767449086814306146530920497339697719, 1)::nil)) :: (SPock_certif 90581301964841023414409767449086814306146530920497339697719 2 ((45290650982420511707204883724543407153073265460248669848859, 1)::nil)) :: (Ell_certif 45290650982420511707204883724543407153073265460248669848859 11206 ((4041642957560281251758422606117759097777411145424156651,1)::nil) 38759865646442911505420043680786121348298016812808371316316 28532102209600135773576165631849874776332904831829792053303 0 9344956677130736947924772695713978663769250673918877040471) :: (SPock_certif 4041642957560281251758422606117759097777411145424156651 2 ((93654487497879973453267516453644402280539259, 1)::nil)) :: (Ell_certif 93654487497879973453267516453644402280539259 726224817 ((128960736820812849546673711694304037,1)::nil) 0 1080 6 36) :: (SPock_certif 128960736820812849546673711694304037 2 ((10746728068401070795556142641192003, 1)::nil)) :: (SPock_certif 10746728068401070795556142641192003 2 ((419826864145678209061494751199, 1)::nil)) :: (Ell_certif 419826864145678209061494751199 3108653 ((135051053992091472819497,1)::nil) 301836280100284575860529146129 278540872352615861922156551510 0 197701711357041448067128286993) :: (SPock_certif 135051053992091472819497 2 ((35459947505532673, 1)::nil)) :: (SPock_certif 35459947505532673 2 ((260857664677, 1)::nil)) :: (Proof_certif 260857664677 prime260857664677) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t150/000077500000000000000000000000001451023060700201445ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/examples/t150/.depend000066400000000000000000000022221451023060700214020ustar00rootroot00000000000000prime1.vo: prime1.v ../PocklingtonRefl.vo prime1.vi: prime1.v ../PocklingtonRefl.vo prime2.vo: prime2.v ../PocklingtonRefl.vo prime2.vi: prime2.v ../PocklingtonRefl.vo prime3.vo: prime3.v ../PocklingtonRefl.vo prime3.vi: prime3.v ../PocklingtonRefl.vo prime4.vo: prime4.v ../PocklingtonRefl.vo prime4.vi: prime4.v ../PocklingtonRefl.vo prime5.vo: prime5.v ../PocklingtonRefl.vo prime5.vi: prime5.v ../PocklingtonRefl.vo prime6.vo: prime6.v ../PocklingtonRefl.vo prime6.vi: prime6.v ../PocklingtonRefl.vo prime7.vo: prime7.v ../PocklingtonRefl.vo prime7.vi: prime7.v ../PocklingtonRefl.vo prime8.vo: prime8.v ../PocklingtonRefl.vo prime8.vi: prime8.v ../PocklingtonRefl.vo prime9.vo: prime9.v ../PocklingtonRefl.vo prime9.vi: prime9.v ../PocklingtonRefl.vo prime1.html: prime1.v ../PocklingtonRefl.html prime2.html: prime2.v ../PocklingtonRefl.html prime3.html: prime3.v ../PocklingtonRefl.html prime4.html: prime4.v ../PocklingtonRefl.html prime5.html: prime5.v ../PocklingtonRefl.html prime6.html: prime6.v ../PocklingtonRefl.html prime7.html: prime7.v ../PocklingtonRefl.html prime8.html: prime8.v ../PocklingtonRefl.html prime9.html: prime9.v ../PocklingtonRefl.html coqprime-8.18/src/Coqprime/examples/t150/Makefile000066400000000000000000000003741451023060700216100ustar00rootroot00000000000000ifeq "$(COQBIN)" "" COQBIN=$(dir $(shell which coqtop))/ endif %: Makefile.coq Makefile.coq: _CoqProject $(COQBIN)coq_makefile -f _CoqProject -o Makefile.coq tests: all @$(MAKE) -C tests -s clean @$(MAKE) -C tests -s all -include Makefile.coq coqprime-8.18/src/Coqprime/examples/t150/Makefile.coq.local000066400000000000000000000000461451023060700234560ustar00rootroot00000000000000 res : make clean; make -s all > res coqprime-8.18/src/Coqprime/examples/t150/_CoqProject000066400000000000000000000001611451023060700222750ustar00rootroot00000000000000-R ../../../Coqprime Coqprime prime1.v prime2.v prime3.v prime4.v prime5.v prime6.v prime7.v prime8.v prime9.v coqprime-8.18/src/Coqprime/examples/t150/prime1.v000066400000000000000000000206571451023060700215420ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime10899813148489 : prime 10899813148489. Proof. apply (Pocklington_refl (Pock_certif 10899813148489 7 ((13762390339, 1)::(2,3)::nil) 1) ((Pock_certif 13762390339 2 ((764577241, 1)::(2,1)::nil) 1) :: (Pock_certif 764577241 11 ((7, 1)::(5, 1)::(3, 1)::(2,3)::nil) 1329) :: (Proof_certif 7 prime7) :: (Proof_certif 5 prime5) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234568489: prime 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234568489. apply (Pocklington_refl (Ell_certif 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234568489 5504 ((22430375910673270149206861898641616422422301177125951047945153244329399045284484023731751359951023640306585907658159120263727439833471571763184517,1)::nil) 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234232349 92236816 0 9604) ( (Ell_certif 22430375910673270149206861898641616422422301177125951047945153244329399045284484023731751359951023640306585907658159120263727439833471571763184517 3187 ((7038084691143166033638801976354445065083872349270772214604691949899403527679701275259065464277360622520566726981479669985601735362489353734899,1)::nil) 0 1642545 276 4761) :: (Ell_certif 7038084691143166033638801976354445065083872349270772214604691949899403527679701275259065464277360622520566726981479669985601735362489353734899 12828 ((548650194195756628752635015306707597839403831405579374384525409253149642479931611426682362636891561182735550237925976048888026128707680819,1)::nil) 0 603592 114 1444) :: (Ell_certif 548650194195756628752635015306707597839403831405579374384525409253149642479931611426682362636891561182735550237925976048888026128707680819 1004 ((546464336848363176048441250305485655218529712555357942614069132722261823995958922377402744663053857022319986412942147291666985167633647,1)::nil) 548650194195756628752635015306707597839403831405579374384525409253149642479931611426682362636891561182735550237925976048888007179605414979 31749105730618655022 74219 5508459961) :: (SPock_certif 546464336848363176048441250305485655218529712555357942614069132722261823995958922377402744663053857022319986412942147291666985167633647 2 ((154611077593488043833872933379514443104015430852845353643576161482159635094530411565894543366775996391245492873719787528613039, 1)::nil)) :: (Ell_certif 154611077593488043833872933379514443104015430852845353643576161482159635094530411565894543366775996391245492873719787528613039 1241 ((124585880413769576014402041401703822001624037754105844998852668245330220080713225260922148818621117322660388448807184309541,1)::nil) 154611077593488043833872933379514443104015430852845353643576161482159635094530411565894543366775996391245492771751285964926919 12532772959217148221216122 5579439 3458904394969) :: (Ell_certif 124585880413769576014402041401703822001624037754105844998852668245330220080713225260922148818621117322660388448807184309541 1835314568 ((67882575873374517895943624091422687384032162138924320355992865900891085827517826062557953054815046315537520880209,1)::nil) 124585880413769576014402041401703822001624037754105844998852668245330220080713225260922148818621117322660388448807184309505 0 12 36) :: (Ell_certif 67882575873374517895943624091422687384032162138924320355992865900891085827517826062557953054815046315537520880209 2160273875028 ((31423134195193037798727357674988464770066473689759572310217502589391544771552482593949104061219019397,1)::nil) 58137940380673635469246911844065529964858930486254707938571083866094576618565027843084994078377896475742020102606 9426191743103355473639583767753835756754055402245478837789215227861068933614211257343208145532349054846187091823 0 23792392270079654301124106630391521333548945337676129810844135306689136693862569415356328169714624292731285857193) :: (Ell_certif 31423134195193037798727357674988464770066473689759572310217502589391544771552482593949104061219019397 17687 ((1776623180595524271992274420477665221352771735724532200818260622910414812386485655692332170145441,1)::nil) 20045053698804892812663058247613315665269484189307792983499754832143332283551414547356211287445087150 12176075345677820212292344665449873026525431560942818664109436668387411417452507245467631085733576536 4129050032210628565084319611970138259397267645433631379380593705081108506491523396797880174122746970 733555676711317561200048113044461464062629418819060085675026414078173211774676211793815547054563646) :: (Ell_certif 1776623180595524271992274420477665221352771735724532200818260622910414812386485655692332170145441 596 ((2980911376838127973141400034358498693544919019667590900487716588787303647140237602302539164813,1)::nil) 1776623180595524271992274420477665221352771735724532200818260622910414812386485655692332170128501 1043504 88 484) :: (Ell_certif 2980911376838127973141400034358498693544919019667590900487716588787303647140237602302539164813 391494450989 ((7614185512228075012424400517225126900290076947984748450199681672764059794974881253,1)::nil) 1523276921067113985463760967624645221067668821200263992198671976793034926317259800482350950630 2142526775204537794691011172741963239469059490334044222720852328533034472015247271466033035813 2047711085854849954876779544734564163716438599350493424150987878214855729253375768292793845970 1680707466542350930495280520967705865491540706746476682724606737773824490133598321880537245422) :: (Ell_certif 7614185512228075012424400517225126900290076947984748450199681672764059794974881253 85415608 ((89142788894367818729621412016702227305929532114453752638207248268022143127,1)::nil) 2642525435690488954815336056544600853264899804433439692643351205346488050235770863 3918324252995380337806689033596313717343049866516267980664589092498457303215485106 0 1696462133139707001889346313756274264410646577075908719902855675657334299844233972) :: (Ell_certif 89142788894367818729621412016702227305929532114453752638207248268022143127 955969 ((93248618830074844194342506939767113074796309152479433954348786073791,1)::nil) 42351042488404304090801885658418813414524105735567355387796141285769112531 53023538615900858951170947775339766069425402455354822726779249344558983531 70615868121620368056621073182634534573766265983549571758454858147937416098 77990660098197938443998641455776981392002949618153338359582303663591212906) :: (SPock_certif 93248618830074844194342506939767113074796309152479433954348786073791 2 ((9324861883007484419434250693976711307479630915247943395434878607379, 1)::nil)) :: (Ell_certif 9324861883007484419434250693976711307479630915247943395434878607379 1788469 ((5213879515388572247790848314383261033723179412229213083517153,1)::nil) 0 7030071653986111300589103062255880009154565494698644825464576445309 2331215470751871104858562673494177826869907728811985848858719651925 7576450279943581090790328688856077937327200118638954008790838869211) :: (SPock_certif 5213879515388572247790848314383261033723179412229213083517153 2 ((9684706797267997074829333309110346796083751780714383, 1)::nil)) :: (Ell_certif 9684706797267997074829333309110346796083751780714383 5588 ((1733125769017179147249343855669794440300601325303,1)::nil) 5224168995863301872429627699817309669792573194399855 7631057425661482634215551924568986458762246153235790 1286961615413341856653059029442382533316205908242333 8407350093962019979000361877610243916932795305602093) :: (SPock_certif 1733125769017179147249343855669794440300601325303 2 ((41164927296023446564280648322402604158961601, 1)::nil)) :: (SPock_certif 41164927296023446564280648322402604158961601 2 ((4266525048104080245740225040551, 1)::nil)) :: (Ell_certif 4266525048104080245740225040551 31515 ((135380772587786271561711859,1)::nil) 3074752774328766153745763587218 1924603331322472649273617289860 3547168376552645495644778979755 1438135298663808977693521378408) :: (Ell_certif 135380772587786271561711859 13116 ((10321803338502846952207,1)::nil) 0 1080 6 36) :: (Ell_certif 10321803338502846952207 946970668 ((10899813148489,1)::nil) 0 10985 26 169) :: (Proof_certif 10899813148489 prime10899813148489) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t150/prime2.v000066400000000000000000000240161451023060700215340ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime25319524138939 : prime 25319524138939. Proof. apply (Pocklington_refl (Pock_certif 25319524138939 3 ((43, 1)::(23, 1)::(3, 3)::(2,1)::nil) 63466) ((Proof_certif 43 prime43) :: (Proof_certif 23 prime23) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345679113: prime 234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345679113. apply (Pocklington_refl (Ell_certif 234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345679113 2132 ((110022462534454403851944502298890510267412503184339749380347670998072290551768829324972816896343908949898103135937463516552303491059656846942522497,1)::nil) 234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456770063243413273 31749105730618655022 74219 5508459961) ( (Ell_certif 110022462534454403851944502298890510267412503184339749380347670998072290551768829324972816896343908949898103135937463516552303491059656846942522497 110077 ((999504551672505644702749005685933576200409742129052839197540548870992946287878598177046317042849022662816022006589833790691464672716662490941,1)::nil) 90671871172029776553991590260209112975593874167127909920787662628350847440511836871743025638635988179688408665276186030731601262771256927249193070 46009763898713510373499625773274953648835766193109009044936391793339032432085419460988722739103866961480551160826716780851513207600836797185491318 59870669682894845206156765445769896785094914249969884624076977408209862896937535879721947722787746284916572456055551814969404678640988700140525317 32045799873945436400853377370845020120820089958953246185262275283776272360630896444023942421855535734539570906753343385080061648453653052183868857) :: (Ell_certif 999504551672505644702749005685933576200409742129052839197540548870992946287878598177046317042849022662816022006589833790691464672716662490941 307157000 ((3254051028211975129014637484042146446932382273980579440473570678418505788522119524849426258355725892687088197938279664054213751854629,1)::nil) 999504551672505644702749005685933576200409742129052839197540548870992946287878598177046317042849022662816022006589833790691464672716662490905 0 12 36) :: (Ell_certif 3254051028211975129014637484042146446932382273980579440473570678418505788522119524849426258355725892687088197938279664054213751854629 97970 ((33214770115463663662495023824049672827726674226605894054032567912780585945722397740880677892605569968922517510409718057070345357,1)::nil) 1220269135579490673380489056515804917599643352742717290177589004406939670695794821818534846883397209757658074226854874020330156945487 0 1627025514105987564507318742021073223466191136990289720236785339209252894261059762424713129177862946343544098969139832027106875927316 2440538271158981346760978113031609835199286705485434580355178008813879341391589643637069693766794419515316148453709748040660313890974) :: (SPock_certif 33214770115463663662495023824049672827726674226605894054032567912780585945722397740880677892605569968922517510409718057070345357 2 ((112411632864280087035381124621917186772679769008980626503734095303159319572406262875919177120052616822580128204128422893, 1)::nil)) :: (Ell_certif 112411632864280087035381124621917186772679769008980626503734095303159319572406262875919177120052616822580128204128422893 11537702 ((9742982862989535267541242148732666762643008894577154662491243078832182125092156376735310639736337611753768026769,1)::nil) 22586044277956701626282546709060925726262063901806454147946598683660599065514749529268405805053576344799951139659508765 11109249232060490146826738385362975187559654311974764851924110727660520234624778716759781603774700094201523803560122017 0 86503728680385255499282713087799670151866778863347803451104294744790072783040084461174518537090386886428471795108745059) :: (Ell_certif 9742982862989535267541242148732666762643008894577154662491243078832182125092156376735310639736337611753768026769 314452 ((30984006662350804789097357144278512340970987287653297362780720158804144901936440863372762568419779410038157,1)::nil) 1587542516888031989452939735532215025841962288900397447276052586637951843044412853744771264307989961508491210401 4829563978238465578046744523059348216976486949787570141831937742730414448644530303049252307221041271058448724509 8447471121519719935323184701399031484807984221038203772395123488070922983073583107149895691431003810383707308227 3940908382825220936110339032611630538716768626094402271238015012669479151289843231475525230269779520099249655786) :: (Ell_certif 30984006662350804789097357144278512340970987287653297362780720158804144901936440863372762568419779410038157 6299 ((4918877069749294298951795069737817485469278820075138478702371788429556745009308577095609654459116693087,1)::nil) 5792597046006886915298281093782695972911182645202796841423111653047173699569402127829431823694565606883507 16297142478541496846848606129726581609786656160419285123922673584864730913738783482083751381889067343049735 11989004693880349757576354833580911254019740051698611812397107956929270722312251817050506646925013445185974 25094107220751191237306435111193940554315613424200918658094871951489178429673046454498481907062589491492831) :: (Ell_certif 4918877069749294298951795069737817485469278820075138478702371788429556745009308577095609654459116693087 494209 ((9953030134516559388744023418711147481064243710808873324636502326312469686287321709900894563958113,1)::nil) 0 2030264 38 1444) :: (Ell_certif 9953030134516559388744023418711147481064243710808873324636502326312469686287321709900894563958113 123517666 ((80579810620098337906935704393176822828438514299746779503483067962951198035346851462638053,1)::nil) 3732102496044305760170550227722079477225912026946281797115745307460831053145455153732600699900861 0 9123421753707243432609715764288817972193437158503436747834831755848867159621851242422330175905983 3317298305639647782103396400510914722790508750793563508714910022229029789812719919993318505874796) :: (Ell_certif 80579810620098337906935704393176822828438514299746779503483067962951198035346851462638053 10548 ((7639344958295253878169862001628443574937288021718272350168094135771412705384682420101,1)::nil) 100 0 20 100) :: (Ell_certif 7639344958295253878169862001628443574937288021718272350168094135771412705384682420101 688976 ((11087969622011875418258200578290743908259920734845874457463298589002852631728429,1)::nil) 3865147880551990063036336047925159893046669093700314594232399212393950890308254116398 5524972026160627237473400555950460669081997692232223082579063131487253675524228552293 0 1650564414838334800270462084708337080926566302919276892666553275008678585511928221424) :: (Ell_certif 11087969622011875418258200578290743908259920734845874457463298589002852631728429 137641 ((80557171351645769925081920200309093280828792465278923378026356711025957519,1)::nil) 2434997453358988419237640320096041730384115549399087320358632229599078594007416 6954920495874327929880470940031045185471703170049506683544212686936904524790349 2100513285945557428137198741445318321076032138069142842140499949979494979588648 4500871778531361969777149498398903211223420431892249658079044960074321170581369) :: (Ell_certif 80557171351645769925081920200309093280828792465278923378026356711025957519 4948 ((16280754113105450672005238520676857981196132702524621980909998926201877,1)::nil) 51313876982650036979192282126750581073507286617874677309758460609938541911 15154753639741947332169547097162574510592513501873588966514911044794466171 73383191106375401107879649375611282448869916845623978140136871155064354560 45899302396147261737234854229658922216656531168170438701275161767697431815) :: (Ell_certif 16280754113105450672005238520676857981196132702524621980909998926201877 23714770 ((686523804072544269752784383769138715076723857550610137331979349,1)::nil) 8140377056552725336002619260338428990598066351262310990454999463100979 0 18 81) :: (Ell_certif 686523804072544269752784383769138715076723857550610137331979349 1594 ((430692474324055376256451934610468267889014185947722938447401,1)::nil) 285802057131904553098239543376491590133170291939520764149535716 371629716210701529370815202283277752332537351931072516038306537 0 593454785024234108177774482731475036781196746944603964960247821) :: (Ell_certif 430692474324055376256451934610468267889014185947722938447401 413482800 ((1041621258064556436825067293269037315411999170333147,1)::nil) 113560525189225467008077259287708905257243697675902489510770 88807046335270436480871505038170424289712392732352600111772 135097022023092648182518537261420769523219903947721870125974 130549662637697106032752500088027884968749595285182512790752) :: (Ell_certif 1041621258064556436825067293269037315411999170333147 8886896 ((117208669716012929241556021592321514523021283,1)::nil) 1041621258064556436825067293269037315411999169997007 92236816 0 9604) :: (SPock_certif 117208669716012929241556021592321514523021283 2 ((58604334858006464620778010796160757261510641, 1)::nil)) :: (Ell_certif 58604334858006464620778010796160757261510641 14162 ((4138139730123320478801956657663493082861,1)::nil) 52789559501000881634617173528398266598244229 0 51769699020616547274793740859489423640050226 3927248158887125852903851302790088289827265) :: (Ell_certif 4138139730123320478801956657663493082861 1800848954 ((2297882740766120065686839061233,1)::nil) 18 0 3 9) :: (Ell_certif 2297882740766120065686839061233 58370 ((39367530251261315335714633,1)::nil) 765960913588706688562279687339 0 84 784) :: (SPock_certif 39367530251261315335714633 2 ((96506075217345500519, 1)::nil)) :: (Ell_certif 96506075217345500519 3811528 ((25319524138939,1)::nil) 96506075217345121959 110236672 624 10816) :: (Proof_certif 25319524138939 prime25319524138939) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t150/prime3.v000066400000000000000000000211011451023060700215250ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. (* Lemma prime142141912093 : prime 142141912093. Proof. apply (Pocklington_refl (Pock_certif 142141912093 2 ((67, 1)::(19, 1)::(2,2)::nil) 379) ((Proof_certif 67 prime67) :: (Proof_certif 19 prime19) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. *) Lemma prime13524493647665641984723 : prime 13524493647665641984723. Proof. apply (Pocklington_refl (Pock_certif 13524493647665641984723 3 ((1356829, 1)::(3, 2)::(2,1)::nil) 2721212) ((Pock_certif 1356829 2 ((11, 1)::(3, 1)::(2,2)::nil) 246) :: (Proof_certif 11 prime11) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789247: prime 345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789247. apply (Pocklington_refl (Ell_certif 345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789247 22409735 ((15425389958184150331249199912999670852923274991432226074472203516860026884151788241583623646673074737638122684478429698586103297407466397188303,1)::nil) 286171914620584225886789723429342270863289758657114339204433747325306179390543434612018217514889412919460045850075862408310007886748080756221120562845 180246323223921187085300882978624600499400151200213761250109039543238464177739274436938567362085055083856878909860981068804771263128493893397534262573 47235353997382834272306929428686467778900023862695105819430658611317908334485965202193049658742048129360671471865786221440981020019800666820076326265 131991490141614437378226531517550380517007039504366925271198668469476424078848620728391557475123543607105029535304128061632420124977281918877186601217) ( (Ell_certif 15425389958184150331249199912999670852923274991432226074472203516860026884151788241583623646673074737638122684478429698586103297407466397188303 46669949 ((330520823114337457948565572955729410651879542260314577898343182609006639995466681480599319110802229403647823262469758654834109389717451,1)::nil) 7127825017615724184065435151828553337891904576012177745777115301777341182525187828439388730796352604411720540029115740073434934696804133005833 4792610772694221130506449281984301986432123807016166996104300014204319672346783304327098078660252929606035314442806704442815154385977004164124 0 8457112108375621380573738261065052397458088837048253331185725929054513501619275194665917732060014677045844700993912248022775208602339926972868) :: (Ell_certif 330520823114337457948565572955729410651879542260314577898343182609006639995466681480599319110802229403647823262469758654834109389717451 6325 ((52256256618867582284358193352684491802668702333646573580765720570598032896512946056229904643615414918832008968483839782069719248413,1)::nil) 171710208241147771576177296085542011931779588545539081357330829011685101164544436579532607075530161953306578280342265857832233628994415 15555722021950577945454595042530703984414163177850105708891601487487207693702524379519541187195994104241637041764173465233215363336446 0 37496764462370680397283787320513748951865348173213013449603779814760058225555085773225805461945113733063933249297951541297163824390097) :: (Ell_certif 52256256618867582284358193352684491802668702333646573580765720570598032896512946056229904643615414918832008968483839782069719248413 512653 ((101932996820203104798680966175335932497554295661288578396626413129758288904483069686565120717461693400071577931313777018836449,1)::nil) 0 10985 26 169) :: (Ell_certif 101932996820203104798680966175335932497554295661288578396626413129758288904483069686565120717461693400071577931313777018836449 87726336 ((1161942940603413606589940860807590693147771447576342164759125617748296872685654946584562055870513606806278743942724211,1)::nil) 1236402482334359909504155557133239904812717568019847089896182316623697592390775520288176743362585457904833784763293066296211 12338728205715928403566466979215409383114302268434602344101900317984285751843089115651930909692854892599517984073040120787157 3596971642361095062743726058359849344625819136784983466912350585414127323258862966775299962780467673231951643970771888084236 91029398787702124030766434651274898197549842579007791868255587003436409221822759031836010343155652814750376723796369208027188) :: (Ell_certif 1161942940603413606589940860807590693147771447576342164759125617748296872685654946584562055870513606806278743942724211 17510459124 ((66357080209898304811001874036731893355452114162186154494750677491244503479466149388052583668298094828424049,1)::nil) 0 1080 6 36) :: (Ell_certif 66357080209898304811001874036731893355452114162186154494750677491244503479466149388052583668298094828424049 241516 ((274752315415534808505448392805163605539393307947242228233098728120717235547335300905940453082909514809,1)::nil) 64717735424934844377866391951285415709521369100371316741473548589794485475656077035265658783150727650056266 35635626962948292466906895001745938658416506990391987102605259334086358710591647531813661805883820322822075 62598674139041881705375502105572145910805500277636164309400044321769096399001565520654384243085012016753988 26093568794857369845403343575355116014626748843298136324930869201239477822976346553889644072900333020309806) :: (Ell_certif 274752315415534808505448392805163605539393307947242228233098728120717235547335300905940453082909514809 13537 ((20296396204146768745323808288776213750416880250221116116756467421833139096189977380096830456129549,1)::nil) 0 783000 30 900) :: (Ell_certif 20296396204146768745323808288776213750416880250221116116756467421833139096189977380096830456129549 82647 ((245579345942947339229782185545467031476240882914391327123878241960155139906977002685817450051,1)::nil) 0 1272112 129 1849) :: (Ell_certif 245579345942947339229782185545467031476240882914391327123878241960155139906977002685817450051 4614795675 ((53215648803984661624218538244484038066591297762995217868026541137984785034929475281,1)::nil) 0 221184 48 576) :: (Ell_certif 53215648803984661624218538244484038066591297762995217868026541137984785034929475281 277524770900 ((191750987241278582474161906404744781167898828374810971915532275051895509,1)::nil) 5894269982528307611636550948167034280260927351117582588702035967376126809926215677 14084285012058497771078565220790605583621801937449080025833953666149408671606815108 25274091562420331764513309188840948088223510639543768076706188404499088684379302874 29110324568411901569685946392924227414585056171737724007327968056555756880101956918) :: (Ell_certif 191750987241278582474161906404744781167898828374810971915532275051895509 11671780 ((16428598486372993877040340582562795219088579348169777435663793297,1)::nil) 900 0 90 900) :: (Ell_certif 16428598486372993877040340582562795219088579348169777435663793297 500 ((32857196972745987754080681165125384073829729359257975931172457,1)::nil) 10368 0 288 5184) :: (Ell_certif 32857196972745987754080681165125384073829729359257975931172457 8574892 ((3831791347663152813362626743886305410180048193367968691,1)::nil) 9880032171248846696803434841329689631002501121379956630823850 22195427636036476801579057845130396982446701415309167531833007 20859276187480343485774390360578835136723564484461725835863752 24694571567378281115257288162285398845882886911450762756395937) :: (Ell_certif 3831791347663152813362626743886305410180048193367968691 6751 ((567588705030832885996537808330517485770366172760277,1)::nil) 3831791347663152813362626743886305410180048193318410459 134414314742 571 326041) :: (Ell_certif 567588705030832885996537808330517485770366172760277 10849 ((52317144900989297262101372441313058578555524233,1)::nil) 0 54 3 9) :: (Ell_certif 52317144900989297262101372441313058578555524233 603 ((86761434329998834597182905132218798065864193,1)::nil) 0 221184 48 576) :: (Ell_certif 86761434329998834597182905132218798065864193 1161184297 ((74718056861561946007934875697465623,1)::nil) 0 1016735558554673842935737169518189040882534 65071075747499125947887178849164098549398177 81338844684373907434858973561455123186748721) :: (SPock_certif 74718056861561946007934875697465623 2 ((13524493647665641984723, 1)::nil)) :: (Proof_certif 13524493647665641984723 prime13524493647665641984723) :: nil)). (* ::(Ell_certif 13524493647665641984723 95147824089 ((142141912093,1)::nil) 0 16464 28 196) :: (Proof_certif 142141912093 prime142141912093) :: nil)). *) vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t150/prime4.v000066400000000000000000000131111451023060700215300ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime79269110391727 : prime 79269110391727. Proof. apply (Pocklington_refl (Pock_certif 79269110391727 3 ((8689, 1)::(3, 1)::(2,1)::nil) 51811) ((Proof_certif 8689 prime8689) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890623: prime 456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890623. apply (Pocklington_refl (Ell_certif 456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890623 2096709836940 ((217859908079760917208571070941167646779546128350618949087880200437236350746326699926982419517455838813196654116870897284066534301781804763,1)::nil) 456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901233810306719 8234810772496 0 2869636) ( (Ell_certif 217859908079760917208571070941167646779546128350618949087880200437236350746326699926982419517455838813196654116870897284066534301781804763 410 ((531365629462831505386758709612604016535478361830777924604585854724964731357367962824466905608196096549615910504825388975966094025450251,1)::nil) 212066071812397253256779982946716148225632960758791093702171017459203692975182940215920995880679495181039472126581793888505085836313660305 107920331650513527087750219481500901862418867031681761245757106704919914184453138580997056054121346524058599654066907169912085033860104455 0 37636421592379598422929638940047888528556932057369969221678597284123898821274126278786673347964417879557941616405268100378140382193259862) :: (Ell_certif 531365629462831505386758709612604016535478361830777924604585854724964731357367962824466905608196096549615910504825388975966094025450251 5749589157907 ((92418017160770912421897676826640575851794789297359886250369947588906554780692892501765195932300324158235478792491850514797,1)::nil) 44031239885139399255783735040979037158858157600762224077577189977751799570446847340817648125712929556511748158736108763487107313062003 211106640525480606617372789942747350485170203135470606703862368692347947108909663988156556574464197117731525160262602319527089841437515 235835959813083996492019592406663609507675470849711444604531733678616488967578174909042817780411406397564053843064447644932671691742070 217093313387036279088171884255404296245715302942328615978637360772958164757274495202383307968551597936085738250966561926862397346170586) :: (Ell_certif 92418017160770912421897676826640575851794789297359886250369947588906554780692892501765195932300324158235478792491850514797 404835363009406696 ((228285435525610199049435959154791136199624073195491638114475254958232836820289243005126264164797178348061,1)::nil) 92418017160770912421897676826640575851794789297359886250369947588906554780692892501765195932300324158235478792491850514761 0 12 36) :: (Ell_certif 228285435525610199049435959154791136199624073195491638114475254958232836820289243005126264164797178348061 110864776 ((2059134052871853536685411777269916066033670362491794593343442338627773481383053958424976492092549,1)::nil) 79960917964880957901222752428765481156613710204708015005580922235762563970059547106251829149136944689655 122363409299354679279712386800508306513849566902056938440600906906576795559571950672853420772477315085840 0 14388430786832649499797117051775033078914013350688957485860174562243370098287250974797017700528141806464) :: (Ell_certif 2059134052871853536685411777269916066033670362491794593343442338627773481383053958424976492092549 149542939 ((13769517080788772893419005074321269465177960441786820095406919635881113572817607546991549,1)::nil) 0 13310 11 121) :: (Ell_certif 13769517080788772893419005074321269465177960441786820095406919635881113572817607546991549 904644 ((15220923458055072374789425535703845341568573578627347949493682537739954113732079381,1)::nil) 16900 0 650 16900) :: (SPock_certif 15220923458055072374789425535703845341568573578627347949493682537739954113732079381 2 ((23064709348098145171502504296018810092764521446120432911465007600563597, 1)::nil)) :: (Ell_certif 23064709348098145171502504296018810092764521446120432911465007600563597 2111550529 ((10923115043342704289840134010839392092540075062822367359477823,1)::nil) 23064709348098145171502504296018810092764521446120432911444261769087437 36370126051009921296 0 6030764964) :: (Ell_certif 10923115043342704289840134010839392092540075062822367359477823 3138674226107 ((3480168458544039500063719510192883985262122626611,1)::nil) 6383045692262322351759276748445259951073989684914691035668821 127164500549847390970506047294119955469318562977670344176084 5870899935567418224055778803438820605079198431915410945601142 9672183556150971969083809234723061670427637888501751780716583) :: (SPock_certif 3480168458544039500063719510192883985262122626611 2 ((60237091730315661700354005775088079245711, 1)::nil)) :: (SPock_certif 60237091730315661700354005775088079245711 2 ((7193856445479330647167725488107, 1)::nil)) :: (SPock_certif 7193856445479330647167725488107 2 ((371545111325241743991722213, 1)::nil)) :: (SPock_certif 371545111325241743991722213 2 ((591632342874588764318029, 1)::nil)) :: (SPock_certif 591632342874588764318029 2 ((79269110391727, 1)::nil)) :: (Proof_certif 79269110391727 prime79269110391727) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t150/prime5.v000066400000000000000000000204311451023060700215340ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime13584024017 : prime 13584024017. Proof. apply (Pocklington_refl (Pock_certif 13584024017 3 ((26699, 1)::(2,4)::nil) 1) ((Proof_certif 26699 prime26699) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901289: prime 567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901289. apply (Pocklington_refl (Ell_certif 567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901289 1079377851 ((526127271307875866674309681785908621654176215824856386553029767413787201000779201457216734898431167485613622987714903041820994571478823244923,1)::nil) 0 192 4 16) ( (Ell_certif 526127271307875866674309681785908621654176215824856386553029767413787201000779201457216734898431167485613622987714903041820994571478823244923 79416 ((6624953048603252073565902107710141805859980555868545211960181417016561431988573297370811416036509193774523711624687929377681872553416087,1)::nil) 526127271307875866674309681785908621654176215824856386553029767413787201000779201457216734898431167485613622987714903041820994571478823101563 25690112 64 4096) :: (Ell_certif 6624953048603252073565902107710141805859980555868545211960181417016561431988573297370811416036509193774523711624687929377681872553416087 57793941 ((114630581233476569344283029733344223849693526798398212919243237228218452714436603079226119697711443789721217414513389843213282067,1)::nil) 0 1272112 129 1849) :: (Ell_certif 114630581233476569344283029733344223849693526798398212919243237228218452714436603079226119697711443789721217414513389843213282067 7310607246 ((15680035512261544537675609352977710745110041273088275671162110359774130480194132133927297144276661190867294646160182061,1)::nil) 39934223032022218775631132573242643825932512698858118011738941629652355991634326494194231907950772631976745553502271723912028794 108421727562967769110326103896040068853941817391783414420681895755402124483283096126174998791506532631215988809923070910926128993 66649385823771832478883584824629796720580077143785732033601063219504428333840745367496960058165337354044945815312147281622037094 48152053626964756071587378022184190285755895710173071860494302638027130182330925262622332884443670292503623450892194223971112246) :: (Ell_certif 15680035512261544537675609352977710745110041273088275671162110359774130480194132133927297144276661190867294646160182061 1981412 ((7913566442648749749005057682590854776851074523162409267311336870307234202997331292035297584432859854432962552369,1)::nil) 4447327333273117431552150077382058203489166032239478988567762415794814375059987196812153950399151925102422372301628851 4175564375283566440000668203633522952139621982757270390365902548125123485334815093637259396462671015955401654892921284 0 4035989985684553740691132832010583145132967365288147345272954459242805829724472578299465535500671877639171554072473970) :: (Ell_certif 7913566442648749749005057682590854776851074523162409267311336870307234202997331292035297584432859854432962552369 2488705216 ((3179792605316237561582326704373674916125974207450051516060747005285376905702223040741231603964359207787,1)::nil) 7913566442648749749005057682590854776851074523162409267311336870307234202997331292035297584432859854432962530499 1102248 27 729) :: (Ell_certif 3179792605316237561582326704373674916125974207450051516060747005285376905702223040741231603964359207787 35714 ((89034905228096476496117116659396172820909845087362050929484628547776805758657309892537850996196083,1)::nil) 1107295613582100466300273420587822077537615161039101056704555910125448843801650849573569356461741622856 3166339931076345574842954129636154327764032901237562636788094855444138783626734941559033325655348871153 2611740665428576791445920876153498659634017834232716952849687449750738764480615943780698817817181936196 2095177961454761600943584828654993051359468180334881208912394743144099524137837801788073291239131345287) :: (Ell_certif 89034905228096476496117116659396172820909845087362050929484628547776805758657309892537850996196083 468344 ((190105788113216944160952455159874307818419463230831935777113534336144376253756719440320141479,1)::nil) 89034905228096476496117116659396172820909845087362050929484628547776805758657309892537850996052723 25690112 64 4096) :: (Ell_certif 190105788113216944160952455159874307818419463230831935777113534336144376253756719440320141479 81829310 ((2323199207144933082790902858155278442631612844470272367249844784932418596739432343917,1)::nil) 107246485369601809627745970571266974564487205137864636309627893637147570406823671482554899476 122366845726977323252639452352543081222069168854121086648286705465150271088166885933264824322 96366730632470910054358833496851710024415048577352558192803608927093878922519686771723532952 174956765963479500527388869677364897055409617507893871762947903515204284924550761364641540761) :: (Ell_certif 2323199207144933082790902858155278442631612844470272367249844784932418596739432343917 1568 ((1481632147413860384432973761578621455759958288416741245085245200291883053485848059,1)::nil) 2323199207144933082790902858155278442631612844470272367249844784932418596739432200557 25690112 64 4096) :: (Ell_certif 1481632147413860384432973761578621455759958288416741245085245200291883053485848059 588 ((2519782563629014259239751295201737169659891280700424895672918371421834445839049,1)::nil) 0 1080 6 36) :: (Ell_certif 2519782563629014259239751295201737169659891280700424895672918371421834445839049 370 ((6810223144943281781729057554599289647736857269143474338990077186952201432649,1)::nil) 1999981543752301384631972887072447528035090717958456112763872663893609548527455 0 2142293401807767982479520240830047777166166843756809073885025624122921982876823 23911136155293106286581995428559147762962758072395628152250420718135195665955) :: (Ell_certif 6810223144943281781729057554599289647736857269143474338990077186952201432649 24844 ((274119431047467468271174430631109710507317839006278477004255745422247219,1)::nil) 4287142403350198159624839877905355479747712687598746074698261385847154168380 6571012276661919992129572126221726556143296431773715755844174959727145213777 4962559505898221144600496029857997958973936497745578872567650798380250752132 5368755936735549550085069474989536502646273055888765199663833842378861687636) :: (Ell_certif 274119431047467468271174430631109710507317839006278477004255745422247219 261542 ((1048089526911423282957132814733808380888903169072661182591618445447,1)::nil) 142834313527378251693409223571789993851694658081461115803742530612915109 79947833102295848144045681544600786331707499506926610584524751934203407 0 34023792044946217785375813181273175242555187809128616783078840225370677) :: (Ell_certif 1048089526911423282957132814733808380888903169072661182591618445447 1048371519 ((999731018934160193412439330807315011128676084169115499277,1)::nil) 0 1257728 272 4624) :: (SPock_certif 999731018934160193412439330807315011128676084169115499277 2 ((4384785170763860497422979521084714961090684579689103067, 1)::nil)) :: (Ell_certif 4384785170763860497422979521084714961090684579689103067 46212896 ((94882285039307220595371896142904061995704665629,1)::nil) 4384785170763860497422979521084714961090684579688959707 25690112 64 4096) :: (SPock_certif 94882285039307220595371896142904061995704665629 2 ((209137384257119979094197494606166543223267, 1)::nil)) :: (Ell_certif 209137384257119979094197494606166543223267 1359 ((153890643309139057465077770223419607637,1)::nil) 0 78608 17 289) :: (Ell_certif 153890643309139057465077770223419607637 1596 ((96422708840312692662191560618774969,1)::nil) 0 3515200 156 2704) :: (SPock_certif 96422708840312692662191560618774969 2 ((7236559425561465529246061, 1)::nil)) :: (Ell_certif 7236559425561465529246061 732100 ((9884659780844834509,1)::nil) 900 0 90 900) :: (SPock_certif 9884659780844834509 2 ((6696923970762083, 1)::nil)) :: (SPock_certif 6696923970762083 2 ((3348461985381041, 1)::nil)) :: (Ell_certif 3348461985381041 246500 ((13584024017,1)::nil) 900 0 10 100) :: (Proof_certif 13584024017 prime13584024017) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t150/prime6.v000066400000000000000000000177471451023060700215550ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime67049123182759 : prime 67049123182759. Proof. apply (Pocklington_refl (Pock_certif 67049123182759 3 ((257, 1)::(17, 1)::(3, 2)::(2,1)::nil) 107418) ((Proof_certif 257 prime257) :: (Proof_certif 17 prime17) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789013609: prime 678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789013609. apply (Pocklington_refl (Ell_certif 678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789013609 55131876 ((12314132654725736585796373269534287228582025580327736154168700497353555824792768060062372291180732393892322294470649055931460531746350774356077,1)::nil) 0 221184 48 576) ( (Ell_certif 12314132654725736585796373269534287228582025580327736154168700497353555824792768060062372291180732393892322294470649055931460531746350774356077 978948302293928656 ((12578940712058587797006373034295536455383623151938235689088524601423264847000232819163083204841409608138578923020802621067233,1)::nil) 0 5832 9 81) :: (Ell_certif 12578940712058587797006373034295536455383623151938235689088524601423264847000232819163083204841409608138578923020802621067233 876 ((14359521360797474654116864194401297323497286703125839827726626111890050201912716815668808123781845035469023170273998593603,1)::nil) 5662150698479805643945637347768096304452580312275545802934297155266954116854130471734546056416538387205497523337286324715337 10927466027933072726863671001310453135172947063718324558981500226119584571527717509703158191714991056026674198262918059343686 5794710928316470182265367612739784866205944956222924024815691063932509989301585055882770380632153695557837117166119895217014 8662488489243363410157100770909544217939647019565429003752667519773748827318167000640785900875997394391797473423558604664261) :: (Ell_certif 14359521360797474654116864194401297323497286703125839827726626111890050201912716815668808123781845035469023170273998593603 155607137 ((92280608959455854869412989677981783852865866320295063508087240522538419688095224965911618422215289645670479685513,1)::nil) 3288236385062526091985268748915526214340345125718331136501932775173973722409945578780868226598993009722817716742266910747 9009859322972045237726354640167695301044898318795838607496119754048518209027564674780397077053640222810712104782009908039 14300120395482191366254854695683752417770032934834521652129855983205394977004921791398718289920269662717967768942647308539 13717667867876828200808626096244537393571222052953872654999418879436464446268963614980089071626534435910408314764969233169) :: (Ell_certif 92280608959455854869412989677981783852865866320295063508087240522538419688095224965911618422215289645670479685513 2883 ((32008535886040879247108217023233362418614591162086390394824146804827067705987587354218018905526708359504835119,1)::nil) 0 6912 24 144) :: (Ell_certif 32008535886040879247108217023233362418614591162086390394824146804827067705987587354218018905526708359504835119 892801 ((35851814554464969514044246168220423609084881358876603414620835319869930801597795030877007425545406700583,1)::nil) 0 2058 7 49) :: (Ell_certif 35851814554464969514044246168220423609084881358876603414620835319869930801597795030877007425545406700583 348 ((103022455616278648028862776345460987382427819996771855149157869748570918917745426438535064971045589411,1)::nil) 3236723770753189880155762361221553674973795519811303952355634051389503000361472344015199624290228523791 13510809712071762247534164531134653053356636427803616606577961062818788104656843918629016755722105391095 10812389076573473784526661560647579085594299203124040258819987668570682064215714791680065128129908263339 19048936013190856079310670497920735159235312028144816995258227999021082326022834245616402361163696925723) :: (Ell_certif 103022455616278648028862776345460987382427819996771855149157869748570918917745426438535064971045589411 126 ((817638536637132127213196637662388788749427142831526963546627198313556891119700009463829008129533889,1)::nil) 58527241504507728994518719225097984851764470286113309724170946361291833702949176197150528582166670331 1347468434357525234842973489968318410013538530176785777791741867236263257712358500564198942058687558 0 25037110801257936104406374058542929352729709643971174539271552133937998948827966361272207827245177037) :: (Ell_certif 817638536637132127213196637662388788749427142831526963546627198313556891119700009463829008129533889 257551036 ((3174666075259476444945057948291028379903030725263977509258749361802240137264743302135744881,1)::nil) 164369715735597279549397146376957607059543310149211219555352470567245445195714250397445467586256946 199732083502818405861566413738803607071715029249483042756042402322944069288325529025164840041533780 0 157286114453624618161229277225584617455843998111841203739656747828418122924494702110763557396854094) :: (Ell_certif 3174666075259476444945057948291028379903030725263977509258749361802240137264743302135744881 850 ((3734901265011148758758891703871798094003565555744075612465649447811488027048699064738137,1)::nil) 1336599939832077038466208120882556807589899427200389498955467367411718223539333041681790637 0 1831138445949022349569697734010315034288806691096501249935768058589706905648287107810418050 892221241467780868462330762821397294730653719294774126031563900907947983705742553228449853) :: (Ell_certif 3734901265011148758758891703871798094003565555744075612465649447811488027048699064738137 916717 ((4074214032259845468949405000531023308178604298583290706333736160744592945227930977,1)::nil) 0 20039049 138 4761) :: (Ell_certif 4074214032259845468949405000531023308178604298583290706333736160744592945227930977 314136 ((12969586523861784287535987599418797298554536388146755199179697479580315866017,1)::nil) 4074214032259845468949405000531023308178604298583290706333736160744592945227909107 1102248 27 729) :: (Ell_certif 12969586523861784287535987599418797298554536388146755199179697479580315866017 42848194 ((302686888597026616513545182310806315392270583130527124330835594363829,1)::nil) 650311683204259976000708059388963923906222766740988915346996038256932708127 0 4756736630090101413179134572732241715455660640542911009957896518698060427424 3028679998249310682590275345755084781634053087012444420325944297605962921839) :: (Ell_certif 302686888597026616513545182310806315392270583130527124330835594363829 23112770018 ((13096088801182074588734618988272855043958368035020126183057,1)::nil) 103968 0 1368 51984) :: (Ell_certif 13096088801182074588734618988272855043958368035020126183057 3794976 ((3450901613391514093563337156414392073244865769766861,1)::nil) 6516539737693550457799613845699563814585323542821816497881 2605032195317549621492134265330284992521275027945172582657 0 12273939219998907808675547410909399702261395526430499764567) :: (Ell_certif 3450901613391514093563337156414392073244865769766861 213 ((16201416025312272739733976839023736572686551535623,1)::nil) 3450901613391514093563337156414392073244865405901997 2741054664656 2348 1378276) :: (Ell_certif 16201416025312272739733976839023736572686551535623 13757 ((1177685252984827559768406672823319347639894721,1)::nil) 16201416025312272739733129006781353069102658005703 9501955807025115933281263315351902213136 0 97477976010097357444) :: (SPock_certif 1177685252984827559768406672823319347639894721 2 ((919418752830908976700067036201, 1)::nil)) :: (SPock_certif 919418752830908976700067036201 2 ((458837585003946989070799, 1)::nil)) :: (Ell_certif 458837585003946989070799 463356 ((990248502237429943,1)::nil) 0 8192000 320 6400) :: (Ell_certif 990248502237429943 14769 ((67049123182759,1)::nil) 0 44851536 705 19881) :: (Proof_certif 67049123182759 prime67049123182759) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t150/prime7.v000066400000000000000000000170501451023060700215410ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime813071101 : prime 813071101. Proof. apply (Pocklington_refl (Pock_certif 813071101 7 ((31, 1)::(5, 1)::(3, 1)::(2,2)::nil) 1894) ((Proof_certif 31 prime31) :: (Proof_certif 5 prime5) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123473: prime 789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123473. apply (Pocklington_refl (Ell_certif 789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123473 109198892 ((7225461094228879488702963428024425489094512984935487167062618080523616291837054568617580317880633388134411459484196880557671326221390480873323,1)::nil) 580638276441929697529974632400812251062905527073858753140658709586315483252599113153962251424109711793700926927514712564013419069287649451336882204000 29167820905648565743855640302784925176252845437509780712685787889919026313575190630379167893495650185798565965478539058869975560597191542450915006416 0 388221756714965492681513123386909035220363953985593710783986835567822503655614870973980126149827771725392919584575471918440941760483934916978466641693) ( (Ell_certif 7225461094228879488702963428024425489094512984935487167062618080523616291837054568617580317880633388134411459484196880557671326221390480873323 3342937 ((2161411086786523194634826629405347898896842203408406191041774966301673123422863627583451187901582333702906007490637477842343206807033191,1)::nil) 3525862106334455007368520728996070377941898321014798263982909875198607946450884095636076326384251204978866399202255683861920089433383459574614 4131801100697721015718467065222797846921876890631529352253567695440533033244073789852791790433187987469989679365509556139337478498039592434417 1659039511746732461418663702889336080192872904441217013312095159006680161439296024433043637951571944174034264377122376831083177830069365114095 7031904022044869344563334506723436378045878342285727698198735594926548411257601617921836659886352461567556133009209768862756691038746244617843) :: (Ell_certif 2161411086786523194634826629405347898896842203408406191041774966301673123422863627583451187901582333702906007490637477842343206807033191 2739 ((789124164580694850177008627019112047790011757359768598408826201643512347716969278435919060529782495050720100245897005557574820021351,1)::nil) 574725705716005067515361458677858892370503562919970860259132691601453690776975611588952552131982293555606912660858327170233614290227074 857081183174422855977763553507941315299300248372005394664604476101693350534333332994444184932991586491390564758633774436202563967365258 0 1847999082519053179261559444315418178598728619388958744452656420655254523312254464341965278696731509781191190815967306795074759433883797) :: (Ell_certif 789124164580694850177008627019112047790011757359768598408826201643512347716969278435919060529782495050720100245897005557574820021351 82853413724 ((9524340991059378237683688213738663741507174948949585641925531744693112622020777101870209676190672326910848763646626782999,1)::nil) 512673348837502505592221785981738615872692976124611011005549674579495961637860601135821185574702238017085045323281679976198306087014 553577720538461139644788225184585709863708340748845326683711579081386465004631504638437250749813206707259085853608012768828464994479 765323769019858641664566472679617440775064873521148613157930423617109831935115327553009078008055656111156977223395222916817819957374 755463060626604339490619213690609353001600274497347638365825363486602572375428187527685259085102821965318238999953483218880758433369) :: (Ell_certif 9524340991059378237683688213738663741507174948949585641925531744693112622020777101870209676190672326910848763646626782999 131 ((72704893061521971280028154303348578179444083579767829327675790297456150297315980719547015797629181785363741305933506473,1)::nil) 9524340991059378237683688213738663741507174948949585641925531744693112622020777101870209676189824494668465260062733253079 9501955807025115933281263315351902213136 0 97477976010097357444) :: (Ell_certif 72704893061521971280028154303348578179444083579767829327675790297456150297315980719547015797629181785363741305933506473 61356706357062812356 ((1184954300487038144368271887844922361540769368771975880875607244943406657356434223180291791565296893,1)::nil) 18 0 3 9) :: (Ell_certif 1184954300487038144368271887844922361540769368771975880875607244943406657356434223180291791565296893 16572109504520 ((71502924848755369619775781542086469376185242270555922440045326041727581567428937257573,1)::nil) 1184954300487038144368271887844922361540769368771975880875607244943406657356434223180291791565296857 0 12 36) :: (Ell_certif 71502924848755369619775781542086469376185242270555922440045326041727581567428937257573 16370 ((4367924547877542432484775903609436125606918220659397268125769085254333215507546931,1)::nil) 31536645957996633635467559932295713549134275153269085168397910201748631406399828626065 54067411024990610197544281284966975321509571133962139061595213465517700253853814612927 0 16916723168392260337119675805706238225752411813071648414712740103413813582547617646358) :: (Ell_certif 4367924547877542432484775903609436125606918220659397268125769085254333215507546931 138021552 ((31646684771937229284921936710358365812369936535473824412217353406004045289,1)::nil) 4367924547877542432484775903609436125606918220659397268125769085254333215507210791 92236816 0 9604) :: (Ell_certif 31646684771937229284921936710358365812369936535473824412217353406004045289 9747 ((3246812842098823154295879420371228667447367394459009273382144806228479,1)::nil) 0 78608 17 289) :: (Ell_certif 3246812842098823154295879420371228667447367394459009273382144806228479 1265639840004 ((2565352906470265460883404522512261538279391589640742990421,1)::nil) 0 5832 9 81) :: (Ell_certif 2565352906470265460883404522512261538279391589640742990421 577512 ((4442077232109922323490082496275917019332064785789781,1)::nil) 2565352906470265460883404522512261538279391589640742986821 0 240 3600) :: (Ell_certif 4442077232109922323490082496275917019332064785789781 90101152 ((49301003744213196336158747595198904624144519,1)::nil) 4442077232109922323490082496275917019332064785453641 92236816 0 9604) :: (SPock_certif 49301003744213196336158747595198904624144519 2 ((200410584326069903805523364208125628553433, 1)::nil)) :: (Ell_certif 200410584326069903805523364208125628553433 1434340 ((139723206719515528957485408185773133,1)::nil) 10368 0 288 5184) :: (Ell_certif 139723206719515528957485408185773133 27494 ((5081952670383193740759174045349,1)::nil) 31227853966978320425743303308288711 134567375533998817152886143229668472 0 5484862734833425860480736103258053) :: (Ell_certif 5081952670383193740759174045349 49844 ((101957159746071530043867869,1)::nil) 49284 0 1332 49284) :: (Ell_certif 101957159746071530043867869 7308 ((13951444957040456008723,1)::nil) 48128590351283600028065665 25659602736477622127207556 41893595775936716059381058 54506567583420402082946930) :: (Ell_certif 13951444957040456008723 7851 ((1777027761663470677,1)::nil) 0 1257728 272 4624) :: (SPock_certif 1777027761663470677 2 ((16453960756143247, 1)::nil)) :: (Ell_certif 16453960756143247 20236804 ((813071101,1)::nil) 0 26364 13 169) :: (Proof_certif 813071101 prime813071101) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t150/prime8.v000066400000000000000000000211771451023060700215470ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime313986697 : prime 313986697. Proof. apply (Pocklington_refl (Pock_certif 313986697 5 ((47, 1)::(3, 1)::(2,3)::nil) 868) ((Proof_certif 47 prime47) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234911: prime 890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234911. apply (Pocklington_refl (Ell_certif 890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234911 113644 ((7832560071706489965848625836541217516602627612066443465863291419903002261553951987776822052363040485901030122590427242710315690853226063103561891,1)::nil) 649927821572636230657182679391294427155455899755679745811467809015072447356688690040396042203391635486173159189815322332675206637752563641808571626773 885810896256513844674298293431816491285090765288005342003392998041379389290560304546806190529589150881748373276635336680963071872893542499509337443971 636713151879163247352280666642962716793278420173286784478809175039183659121785447555920136073221247606601731066298958889187211599833063328901809757362 733350490447444594817337471795132769322232976505746505875755875487123530653275796722960793844536762526361464406614635301972884006368628602457448245382) ( (Ell_certif 7832560071706489965848625836541217516602627612066443465863291419903002261553951987776822052363040485901030122590427242710315690853226063103561891 16704 ((468903260997754428032125588873396642516919756469494939287792829256645250162595812817451029309998142399341563752115326717841534735642126956207,1)::nil) 7832560071706489965848625836541217516602627612066443465863291419903002261553951987776822052363040485901030122590427242710315690853226063103225751 92236816 0 9604) :: (Ell_certif 468903260997754428032125588873396642516919756469494939287792829256645250162595812817451029309998142399341563752115326717841534735642126956207 28742 ((16314218251957220375482763512399855351642883462163208520207112561987518010917310562803606835862642557483861045840599068813489547758748151,1)::nil) 49878856518522495535626331932973721587885157131135706481749198953555038596149980082905585318308117292315156249308093024146420039472822041017 232658267244261449957207062227671837925146413933780634811177017119455482374183864055579494124060422850667156518799803236436512235756097059185 0 458853499824694907902476959499796050059588434749119043397639514612301150825654635282189418175625278207168034166607019153125222562858541622949) :: (SPock_certif 16314218251957220375482763512399855351642883462163208520207112561987518010917310562803606835862642557483861045840599068813489547758748151 2 ((441425298465617649618493494986879863835967629844193850059922332536146198484966348679208097717889405893543112957545083380034648683, 1)::nil)) :: (Ell_certif 441425298465617649618493494986879863835967629844193850059922332536146198484966348679208097717889405893543112957545083380034648683 73433518419598555043 ((6011223593336722827497034169330291080661282023668387397874034227849577054115152083621047130917470787424016363,1)::nil) 88724422390247057130155732201846607390740436834433342003377159183758518542370938771868406438178316377370056824814319640784140605 228482279363707202375450273186793758973881396882360834096299411946569799707944021632443417373961835378529619907798740010233300019 0 314973075913329527554525896197324167287999272802919249913295180262667911165308749965652318611504450244472506252663623971790690904) :: (Ell_certif 6011223593336722827497034169330291080661282023668387397874034227849577054115152083621047130917470787424016363 64068 ((93825678862095317904367768142134779931655148025041945947637587775499679610704308152207468586630819417781,1)::nil) 4348242791871846112666318815006127368634296124904175415995684397870613926545464483790218826809633084328167476 5665970786662700612467155927349149503413532413225524313348317166537529631657262487640836480982755315936377865 1846464716334368070587516473623648655447207632660231736738856253410323157552132386644604259519913251742106523 4334165847566699788868311409790349095206284170664496879514225657430235392006899747468012142455232838914213450) :: (Ell_certif 93825678862095317904367768142134779931655148025041945947637587775499679610704308152207468586630819417781 292741 ((320507475420577636560535654869440153349394680024465108783284189834174376202175059791482144623689961,1)::nil) 93825678862095317904367768142134779931655148025041945947637587775499679610704308152207468565884987941621 36370126051009921296 0 6030764964) :: (Ell_certif 320507475420577636560535654869440153349394680024465108783284189834174376202175059791482144623689961 1482064 ((216257513454599556132890114643794163645695921380213934469691396289886339572626063235128039489,1)::nil) 0 99144 18 324) :: (Ell_certif 216257513454599556132890114643794163645695921380213934469691396289886339572626063235128039489 12073 ((17912491796123544780327185839790786353490923660352567413491924321372065406609983862392029,1)::nil) 0 120800095406280220808606587476806896098962956083478877457679178396303697495646590136919918341 2453 94612662136387305808139425156659946594991965603843596330489985876825273563023902665368893352) :: (Ell_certif 17912491796123544780327185839790786353490923660352567413491924321372065406609983862392029 144 ((124392304139746838752272123887436016343686970213055799390659693579341068081418290959607,1)::nil) 0 78608 17 289) :: (Ell_certif 124392304139746838752272123887436016343686970213055799390659693579341068081418290959607 26153676 ((4756207278080023578799099747486204858685522789771331881901559561258254092630269,1)::nil) 124392304139746838752272123887436016343686970213055799390658845747098684577834397429687 9501955807025115933281263315351902213136 0 97477976010097357444) :: (Ell_certif 4756207278080023578799099747486204858685522789771331881901559561258254092630269 2671 ((1780684117588926835941257861282742365661235941349511532465363097669392515851,1)::nil) 0 13310 11 121) :: (Ell_certif 1780684117588926835941257861282742365661235941349511532465363097669392515851 2262244 ((787131767213849096711609296469674520391621008011718831292095658988639,1)::nil) 0 5832 9 81) :: (Ell_certif 787131767213849096711609296469674520391621008011718831292095658988639 1797144071429 ((437990353543531366129095579004524049694603299703096007041,1)::nil) 368459110706155304638781228022193544254913349911633309920792563812728 282633646669827835404705248462955912799649802176076067748124935875793 8869331603589138581466015712744763247687459993291309443876801351804 364402844338474557542794738731481669439389194319638755858095856018865) :: (Ell_certif 437990353543531366129095579004524049694603299703096007041 7328386 ((59766277805717570844261694043270415718193585901269,1)::nil) 111900797816510134491462359036505108488913289984502000694 0 220597316392183878370673432359178088890809959890700002810 222199456012602073676799075216094152934318269929852002099) :: (Ell_certif 59766277805717570844261694043270415718193585901269 692056 ((86360464768338936219412450601293421125608991,1)::nil) 15089647062320374594965379744497389861624553266497 2016265366386704676139097198705351638419112168430 8692777117937473074451924101835752965420494868854 17293110294111836969709714113373272959093122750123) :: (SPock_certif 86360464768338936219412450601293421125608991 2 ((411240308420661601044821193339492481550519, 1)::nil)) :: (Ell_certif 411240308420661601044821193339492481550519 422 ((974503100522894789208286406898327658883,1)::nil) 158319335655114412899754814848261480457861 248647169737457324438830101440664524914518 0 345220764274918438872824875372248551216286) :: (Ell_certif 974503100522894789208286406898327658883 885 ((1101133446918525185492107270041655723,1)::nil) 974503100522894789208286406897570074979 8234810772496 0 2869636) :: (SPock_certif 1101133446918525185492107270041655723 2 ((1013935033994958734338956970572427, 1)::nil)) :: (SPock_certif 1013935033994958734338956970572427 2 ((57284018576293514453896177, 1)::nil)) :: (Ell_certif 57284018576293514453896177 53697 ((1066801098316557707359,1)::nil) 0 192 4 16) :: (SPock_certif 1066801098316557707359 2 ((177800183052759617893, 1)::nil)) :: (Ell_certif 177800183052759617893 512631 ((346838531174209,1)::nil) 0 1272112 129 1849) :: (Ell_certif 346838531174209 1104628 ((313986697,1)::nil) 0 99144 18 324) :: (Proof_certif 313986697 prime313986697) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t150/prime9.v000066400000000000000000000177301451023060700215500ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime723014899 : prime 723014899. Proof. apply (Pocklington_refl (Pock_certif 723014899 2 ((2003, 1)::(2,1)::nil) 4218) ((Proof_certif 2003 prime2003) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345947: prime 901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345947. apply (Pocklington_refl (Ell_certif 901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345947 656 ((1373833182759334537788128575730032369768125188196324713941583690906353491039475699510897172852159221278365919571307142471288625343754350114144522417,1)::nil) 365904499642407290780853922729127354316095442126762414322970856451736531409310469115748890161758537378719590252937544802440963734043551679202229175458 272008848662838358952020696860403251471170813358135192292647774986060650703032740893189186459869442107642626160130128740273398027561694116689640101058 0 159905396948426633431409578912620099316783623271959718055007096712039096031202629973214070627173907470446453672521817951760556148661843873083153495523) ( (Ell_certif 1373833182759334537788128575730032369768125188196324713941583690906353491039475699510897172852159221278365919571307142471288625343754350114144522417 6224 ((220731552499893081264159475535030907739094663913291245813236454194465535182418424342077866740550027266109144350141983905437855365561175404138603,1)::nil) 1373833182759334537788128575730032369768125188196324713941583690906353491039475699510897172852159221278365919571307142471288625343754350114144508417 784000 60 400) :: (SPock_certif 220731552499893081264159475535030907739094663913291245813236454194465535182418424342077866740550027266109144350141983905437855365561175404138603 2 ((492684562896787810454400215024911739570942827996400246894625783326709050043566161051738695187581809806992451977692824630791297147795792589, 1)::nil)) :: (Ell_certif 492684562896787810454400215024911739570942827996400246894625783326709050043566161051738695187581809806992451977692824630791297147795792589 161074 ((3058746681008653230530068260705711285315710965124105981689321574721613764641064200632449209590580142400006447870993140200017548119069,1)::nil) 18 0 3 9) :: (Ell_certif 3058746681008653230530068260705711285315710965124105981689321574721613764641064200632449209590580142400006447870993140200017548119069 68196670133904 ((44851847971503760810518001438107004649162937348445195622940476419511794927576068068240807817871197499250992642846159841,1)::nil) 1493350086961636679706275945023426601443928075536938857661203920093338991797490596590538031102536636571535961626238266308813701048935 2088658050595997566728263761577771252868824175490506624671488794814005792516983249197652132035825679404480022652454157140559351585807 1412034827399171064650913638748722189814504130315858170928964997408422642309616504207738441270855150388195193266596856530358088374874 2607074756990346774685127855578394630847789694081929927188394621344620084828127443280584949099433731631031094113961919551999599338988) :: (Ell_certif 44851847971503760810518001438107004649162937348445195622940476419511794927576068068240807817871197499250992642846159841 216 ((207647444312517411159805562213458354857235821057616646402500410083452402538417389011448668028706768169932620968577201,1)::nil) 44851847971503760810518001438107004649162937348445195622940476419511794927576068068240807817871197499250992642846137971 1102248 27 729) :: (Ell_certif 207647444312517411159805562213458354857235821057616646402500410083452402538417389011448668028706768169932620968577201 600644 ((345708013919255684165338473727296626383075201046904066972236278345466022775313016284456021380914804849051395141,1)::nil) 18 0 3 9) :: (Ell_certif 345708013919255684165338473727296626383075201046904066972236278345466022775313016284456021380914804849051395141 2609986 ((132455888238195792684458259058591358874367602372926163964751519907564104636457782871882146534952593895769,1)::nil) 103968 0 1368 51984) :: (Ell_certif 132455888238195792684458259058591358874367602372926163964751519907564104636457782871882146534952593895769 1874973 ((70644157669574864643095265403070528948612914624864540314765642669126334646158119321396048841961677,1)::nil) 0 500 5 25) :: (Ell_certif 70644157669574864643095265403070528948612914624864540314765642669126334646158119321396048841961677 73976 ((954960496236277504097210790027448482597233084038849548372507447911839797093894270696279342377,1)::nil) 2166976140760798349823670448360898060994628050802342399566438904150217324318147043517797558193062 61827133583253968236475803669336191009947436280897784472170685653338575709685947069540226625513483 0 10173828995225372674579662824749071293619048996761711599332738620648337549670815893905495947116148) :: (Ell_certif 954960496236277504097210790027448482597233084038849548372507447911839797093894270696279342377 705 ((1354553895370606388790369914932551039145011466653039830045926744702374006092227168866810569,1)::nil) 954960496236277504097210790027448482597233084038849548372507447911839797093894270695521758473 8234810772496 0 2869636) :: (Ell_certif 1354553895370606388790369914932551039145011466653039830045926744702374006092227168866810569 1192220960 ((1136160108584742872487638461692999458040908347129666428050723970341512867856190949,1)::nil) 100 0 20 100) :: (Ell_certif 1136160108584742872487638461692999458040908347129666428050723970341512867856190949 2932112 ((387488645926466271577497197137421578043703795923885601516173800377029256347,1)::nil) 520840536041397763178064189810329402665749722458540479637416125526720042229223559 219090214454884499439870936398032949675972774868145079754221281568889214546148743 0 352428083439895851446795859857850384867356180242678886858634949567493639773577059) :: (Ell_certif 387488645926466271577497197137421578043703795923885601516173800377029256347 18618565 ((20811950111432662591209214949563598380357813561659744870261039479521,1)::nil) 263139844142900609015297650800669974733436054580354888783681426423934612144 133215430600891508082372500733290151102409228353043130915855688825147033772 191660687254338013060412163639977988576357634924612137628056818267616836022 214115708523287636478091233908826225165941851891175214625393640597547132380) :: (Ell_certif 20811950111432662591209214949563598380357813561659744870261039479521 885464651081600 ((23503987523398872767987964470075485065249200891033747,1)::nil) 11273993964347254939114697988149076254768225664974339373496640569913 19157513750861692441399961182132391970312170904572460471303507021347 0 6035650757997749634602105579659886675671351625807661947200416568939) :: (Ell_certif 23503987523398872767987964470075485065249200891033747 20658 ((1137766846906712787684575686286536647850743875449,1)::nil) 23503987523398872767987964470075485065249200890939667 9834496 0 3136) :: (Ell_certif 1137766846906712787684575686286536647850743875449 37044 ((30713930647519511599302817003221823198708993,1)::nil) 0 221184 48 576) :: (Ell_certif 30713930647519511599302817003221823198708993 567552 ((54116505003100176898845267024956803483,1)::nil) 0 5832 9 81) :: (Ell_certif 54116505003100176898845267024956803483 3445092 ((15708290229433692014389554504811,1)::nil) 0 78608 17 289) :: (Ell_certif 15708290229433692014389554504811 132354 ((118683910039996495763343787,1)::nil) 15708290229433692014389554410731 9834496 0 3136) :: (Ell_certif 118683910039996495763343787 160119 ((741223153029803833723,1)::nil) 0 78608 17 289) :: (SPock_certif 741223153029803833723 2 ((36006176674915177, 1)::nil)) :: (SPock_certif 36006176674915177 2 ((1500257361454799, 1)::nil)) :: (SPock_certif 1500257361454799 2 ((723014899, 1)::nil)) :: (Proof_certif 723014899 prime723014899) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t175/000077500000000000000000000000001451023060700201535ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/examples/t175/.depend000066400000000000000000000022221451023060700214110ustar00rootroot00000000000000prime1.vo: prime1.v ../PocklingtonRefl.vo prime1.vi: prime1.v ../PocklingtonRefl.vo prime2.vo: prime2.v ../PocklingtonRefl.vo prime2.vi: prime2.v ../PocklingtonRefl.vo prime3.vo: prime3.v ../PocklingtonRefl.vo prime3.vi: prime3.v ../PocklingtonRefl.vo prime4.vo: prime4.v ../PocklingtonRefl.vo prime4.vi: prime4.v ../PocklingtonRefl.vo prime5.vo: prime5.v ../PocklingtonRefl.vo prime5.vi: prime5.v ../PocklingtonRefl.vo prime6.vo: prime6.v ../PocklingtonRefl.vo prime6.vi: prime6.v ../PocklingtonRefl.vo prime7.vo: prime7.v ../PocklingtonRefl.vo prime7.vi: prime7.v ../PocklingtonRefl.vo prime8.vo: prime8.v ../PocklingtonRefl.vo prime8.vi: prime8.v ../PocklingtonRefl.vo prime9.vo: prime9.v ../PocklingtonRefl.vo prime9.vi: prime9.v ../PocklingtonRefl.vo prime1.html: prime1.v ../PocklingtonRefl.html prime2.html: prime2.v ../PocklingtonRefl.html prime3.html: prime3.v ../PocklingtonRefl.html prime4.html: prime4.v ../PocklingtonRefl.html prime5.html: prime5.v ../PocklingtonRefl.html prime6.html: prime6.v ../PocklingtonRefl.html prime7.html: prime7.v ../PocklingtonRefl.html prime8.html: prime8.v ../PocklingtonRefl.html prime9.html: prime9.v ../PocklingtonRefl.html coqprime-8.18/src/Coqprime/examples/t175/Makefile000066400000000000000000000003741451023060700216170ustar00rootroot00000000000000ifeq "$(COQBIN)" "" COQBIN=$(dir $(shell which coqtop))/ endif %: Makefile.coq Makefile.coq: _CoqProject $(COQBIN)coq_makefile -f _CoqProject -o Makefile.coq tests: all @$(MAKE) -C tests -s clean @$(MAKE) -C tests -s all -include Makefile.coq coqprime-8.18/src/Coqprime/examples/t175/Makefile.coq.local000066400000000000000000000000461451023060700234650ustar00rootroot00000000000000 res : make clean; make -s all > res coqprime-8.18/src/Coqprime/examples/t175/_CoqProject000066400000000000000000000001611451023060700223040ustar00rootroot00000000000000-R ../../../Coqprime Coqprime prime1.v prime2.v prime3.v prime4.v prime5.v prime6.v prime7.v prime8.v prime9.v coqprime-8.18/src/Coqprime/examples/t175/prime1.v000066400000000000000000000247121451023060700215450ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime10253426992453 : prime 10253426992453. Proof. apply (Pocklington_refl (Pock_certif 10253426992453 2 ((47, 1)::(7, 1)::(3, 3)::(2,2)::nil) 48970) ((Proof_certif 47 prime47) :: (Proof_certif 7 prime7) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012667: prime 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012667. apply (Pocklington_refl (Ell_certif 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012667 6669874 ((185096133768562462950926161259003478609959267114942852845331296298534293669833794813167181266097957496731190179324879313345719962045451507417119835244396488072537704949,1)::nil) 194186849977340823774898631913461955744397564866662680020022897760205603772432692633816805839028886325159813210987367369083757797671670120843727352660154875041516296033101923 476196572370686307545841846008103887356663383263419688508734192942517794358015235174007544251621174577998371423915690849427479286755301886839097494181149755770826935948751172 739938355695868094229866262080922799746749439216384327294426892068097053526279497204927068991783912828192804572413606961668313760101899684251497934176385454172550104454790414 472076747489057492000806459634504788843607122460095011594298095004365529301899639572398011895287397215820893848813876962553707971408863174928425211545129864490220198396641748) ( (Ell_certif 185096133768562462950926161259003478609959267114942852845331296298534293669833794813167181266097957496731190179324879313345719962045451507417119835244396488072537704949 144660725616 ((1279518908676690340146469691264012044674377565821865418544405874332375114814962555233588268941624426778319908956414834871945659129899437367660646214133588571,1)::nil) 83137234497337171487468900797623245883694922754017670572728054584940626309112299658901733089854830198632951288185770951368825043376757015843957754042375792060812134692 106057306021955310387125684048186681269690976657964975880422452507239434537089504352830580518921521562981766359697793540225442929903808751955593988184418044933970979576 0 778243872284620423088606330084309318251350220905063955618896348440272729418951985629973467542364749156278760936107660941676433508508315489793143093735588717264490546) :: (Ell_certif 1279518908676690340146469691264012044674377565821865418544405874332375114814962555233588268941624426778319908956414834871945659129899437367660646214133588571 546 ((2343441224682583040561299800849838909660032171834918348982428341268086290869897446451566377954312779638846205219585612371749016608082423755798932234100039,1)::nil) 480079018372240620419757058988560819806621551251429358354079459963175219778039742553296886888773198391931166277822814471049761588325476366590077959844667300 742297247793094385365031905165329818972274537627624129414467672735881736396632910470366175431943296439600576303302085881124655708657384158883309550543863277 24666440401795262521311801215267061686458680548710384179527386421509036503008849030326655140107124461091284675521193447635567458376615052662840945360573808 132023182769149048451444415585213409689157134294332856885764885525244889108707616706737022284772056758670801173071318136861926126633580500956316440030740694) :: (Ell_certif 2343441224682583040561299800849838909660032171834918348982428341268086290869897446451566377954312779638846205219585612371749016608082423755798932234100039 37299 ((62828526895696480885849481242120134847047700255634691251305084352612303034125158928953451767653375229608255574779538526174204140914261537894275849851,1)::nil) 0 500 5 25) :: (Ell_certif 62828526895696480885849481242120134847047700255634691251305084352612303034125158928953451767653375229608255574779538526174204140914261537894275849851 5151468 ((12196237440608479153097618240493803872419997611483695764256923337699526238741239023179902400165534328729276739527916848501328639730862573140231,1)::nil) 0 964894 123 1681) :: (SPock_certif 12196237440608479153097618240493803872419997611483695764256923337699526238741239023179902400165534328729276739527916848501328639730862573140231 2 ((76389814302322910340310843751893981959235860229660623373071074977619713902647112485179084755987801560627294603295116983595635999603, 1)::nil)) :: (Ell_certif 76389814302322910340310843751893981959235860229660623373071074977619713902647112485179084755987801560627294603295116983595635999603 235206 ((324778340273304721564547008800345152586396011282282864268220517240848947720085989379934401876774667209799161079316069875696401,1)::nil) 76389814302322910340310843751893981959235860229660623373071074977619713902647112485179084755987801560627294603295116983595635977733 1102248 27 729) :: (Ell_certif 324778340273304721564547008800345152586396011282282864268220517240848947720085989379934401876774667209799161079316069875696401 186122 ((1744975555137515831360865501124773818175153991910052891480966871769444907424807313823842883910563012174155775862695465857,1)::nil) 98046034480961062107810878246261528412240376891795685183749474073028877310916091998527156402106495509678753945378741004905358 0 294138859936324255952253501058432442766365364300462306304182097218145113379571773448748754801694509492581407289690881056447111 79662497577460996666198946865043474026150835427718400555913157059218272995972261930449225276133405472057130762314559321702025) :: (Ell_certif 1744975555137515831360865501124773818175153991910052891480966871769444907424807313823842883910563012174155775862695465857 9178558 ((190114346407956002605296551062244616003423848485791874004714955482626116724320095988679077385788842572141488546169,1)::nil) 1153269454093098159109888100913667186212346798416967743336495794418964259559995168979670898453625599075831628016718996627 826635018180912943627959164609023275795615972140890846045113752954525615841584634119719395362411930561593243784505979338 674713558568997797333196938541674881339674332582076001389924684448520844382634114326747715606561167358515631704422683350 1222098173262993341863939999389206198281157432684315465103295066738111897613038443457864944468153192717698731825313053704) :: (Ell_certif 190114346407956002605296551062244616003423848485791874004714955482626116724320095988679077385788842572141488546169 239897592 ((792481261787554760471695568591804022790790865819911497925289983680325286286354435993094622631073739618593,1)::nil) 57479621259448867778507840825160631003718157534018811353784404155334549503592506754938004530891843616813496092825 148271094512206115345659123419984311869230446803913255551578804434743080459314203789685736791496739581729225150151 0 102741567325553061267894028916713080514594240899643410105442531444825478780547549076154933470257865847031241529174) :: (Ell_certif 792481261787554760471695568591804022790790865819911497925289983680325286286354435993094622631073739618593 76811450 ((10317228249011765309360721202266120777446472704524018783708495740677068522935305483584800111290281,1)::nil) 103096923369159728583311958462494290142406961176198742936316975782635485924925176106852594455270051550218 0 597052123437809659370005018036198875288798551330740160574404639641973848140853074733298144724229194112541 5382354194287178032466683184691716391410803931613074260874303763459766852174495476954355501847778797192) :: (Ell_certif 10317228249011765309360721202266120777446472704524018783708495740677068522935305483584800111290281 36324 ((284033373224638401865453177025275872080345576052435775071279477494621710776756786020110964213,1)::nil) 18 0 3 9) :: (SPock_certif 284033373224638401865453177025275872080345576052435775071279477494621710776756786020110964213 2 ((71008343306159600466363294256318968020086394013108943767819869373655427694189196505027741053, 1)::nil)) :: (Ell_certif 71008343306159600466363294256318968020086394013108943767819869373655427694189196505027741053 76257 ((931171476797665794174479644574517329820034803327707062775081763416534971085508020445067,1)::nil) 0 1272112 129 1849) :: (Ell_certif 931171476797665794174479644574517329820034803327707062775081763416534971085508020445067 1084 ((859014277488621581341770889828890525664238804536360600264207590544326298245392106043,1)::nil) 673405700112550374073168930304190770655689712705285139946216673700976623293236270154757 663980621182777166906542357836060762364765413050723170663404803021220115917818366432895 0 746226120971063725883030967730443093341211164843666290759548053053313800668501885698594) :: (Ell_certif 859014277488621581341770889828890525664238804536360600264207590544326298245392106043 72310649 ((11879498930906035449104749285667323019936353922925180261046484721262572843859,1)::nil) 859014277488621581341770889828890525664238804536360600263359758301942794661498576123 9501955807025115933281263315351902213136 0 97477976010097357444) :: (SPock_certif 11879498930906035449104749285667323019936353922925180261046484721262572843859 2 ((21757324049278453203488551805251507362520794730632198280304917071909474073, 1)::nil)) :: (Ell_certif 21757324049278453203488551805251507362520794730632198280304917071909474073 1931212576 ((11266146627080815573297380912069778978770628212766468601398775473,1)::nil) 4624 0 272 4624) :: (Ell_certif 11266146627080815573297380912069778978770628212766468601398775473 74247629690629 ((151737458475428573804971205393186504199001959884761,1)::nil) 0 58320 36 324) :: (Ell_certif 151737458475428573804971205393186504199001959884761 214610071 ((707037921232636719107982562738959342812161,1)::nil) 0 3584 8 64) :: (Ell_certif 707037921232636719107982562738959342812161 394558528 ((1791972219727656524279605825109491,1)::nil) 0 428089366371323013522411317283354345574549 176759480308159179776995640684739835703127 309329090539278564609742371198294712487846) :: (SPock_certif 1791972219727656524279605825109491 2 ((71778143606084754970357243, 1)::nil)) :: (SPock_certif 71778143606084754970357243 2 ((17114483454002087498893, 1)::nil)) :: (Ell_certif 17114483454002087498893 8127 ((2105879593181076343,1)::nil) 0 78608 17 289) :: (Ell_certif 2105879593181076343 205383 ((10253426992453,1)::nil) 0 119164 93 961) :: (Proof_certif 10253426992453 prime10253426992453) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t175/prime2.v000066400000000000000000000262031451023060700215430ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime22327418167 : prime 22327418167. Proof. apply (Pocklington_refl (Pock_certif 22327418167 3 ((3721236361, 1)::(2,1)::nil) 1) ((Pock_certif 3721236361 7 ((31010303, 1)::(2,3)::nil) 1) :: (Pock_certif 31010303 5 ((389, 1)::(2,1)::nil) 958) :: (Proof_certif 389 prime389) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime2345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890124299: prime 2345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890124299. apply (Pocklington_refl (Ell_certif 2345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890124299 1649 ((1422485689044613638643697264410155050880069477192312587500917128974470124055724756492899769778983305229002186481441323168404622775738011225733081454976452830030224624559353,1)::nil) 46154457354539360160715742012695681251881012758183746275083986543941088893656306201189105562856481925527054809365248383220126706186403161332791690213730482467231674995293327 584531739189990624337817755931600558102322071658868783773618299684664123595862703836594686610946465570916579057062331971208021979514765780660084645457227168250861718668457500 0 1206402909195119279823636841857498173567559559094704005649091178077995100770682091841914235338371758726390317823917028209406718250283352271667774075249262286723540042048472261) ( (Ell_certif 1422485689044613638643697264410155050880069477192312587500917128974470124055724756492899769778983305229002186481441323168404622775738011225733081454976452830030224624559353 1968825710566316 ((722504628728892263053831165972818183226085042814911742692626444064341625627685989753696000735662450416867296463233689024359151087059166538908998699716853439,1)::nil) 1230158749911039616042227340204395299686841620600772410962212808707197359813210808168253755887548200170252549861274606135824618860561905359017291746921982964068316003580033 820625808410987576049133992915083341554139043938543508913681313242667891375925751554316797026387228907085629559944314655568057220463454158432390204426735950797266081951122 0 1268284317711700903470253128907523622539665944781231591201224723947800201030841947797420391934814644144770138866566655552867280121042828561284244085247531375216883469036002) :: (Ell_certif 722504628728892263053831165972818183226085042814911742692626444064341625627685989753696000735662450416867296463233689024359151087059166538908998699716853439 643921 ((1122039238864538139078910558861751959054115400514832941762462233821138968332586744923425117985251005037767028055560278353255800286701063085492665548747,1)::nil) 0 223608 22 484) :: (Ell_certif 1122039238864538139078910558861751959054115400514832941762462233821138968332586744923425117985251005037767028055560278353255800286701063085492665548747 2683825599 ((418074572089413228329114897477267843533269540333806519356648492054695156192461109094659218479409525522617951106076213747509813436582932945083,1)::nil) 0 167127692 2429 120409) :: (Ell_certif 418074572089413228329114897477267843533269540333806519356648492054695156192461109094659218479409525522617951106076213747509813436582932945083 7974 ((52429718094985355947970265547688467962536937588889706465594242795923642896629686510178070253717493612273136291203401498287108376709851803,1)::nil) 418074572089413228329114897477267843533269540333806519356648492054695156192461109094659218479409525522617951106076213747509813436582932923213 1102248 27 729) :: (Ell_certif 52429718094985355947970265547688467962536937588889706465594242795923642896629686510178070253717493612273136291203401498287108376709851803 198 ((264796556035279575494799320947921555366348169640857103361587084827895595932255511649405032062156385829135161391183003200480795551798097,1)::nil) 52429718094985355947970265547688467962536937588889706465594242795923642896629686510178070253717493612273136291203401498287108376709822973 1668296 155 961) :: (Ell_certif 264796556035279575494799320947921555366348169640857103361587084827895595932255511649405032062156385829135161391183003200480795551798097 38988 ((6791745050663783099794791242123770272041350406300838805827102822095919385524296850085870423489880435095215356030492760550223470219,1)::nil) 264796556035279575494799320947921555366348169640857103361587084827895595932255511649405032062156385829135161391183003200480795551769267 1668296 155 961) :: (Ell_certif 6791745050663783099794791242123770272041350406300838805827102822095919385524296850085870423489880435095215356030492760550223470219 192766 ((35233106723508207359154577270492567527683047873073253612292120094268410066428754279393767641916387491064324780586958918819601,1)::nil) 5153591364902182594852810149866189483352151346136258885840195036161271522862812271083828369414108415085988310614383704709530021365 4502995798150410728020040887723113654363617188580766030885307875276243736736638657254520949909534202907419203987937929025129364760 0 5225760918222897840135513295297530029704724114974708360312633473017393916707441149226261916569819182844268195075034897663566183760) :: (Ell_certif 35233106723508207359154577270492567527683047873073253612292120094268410066428754279393767641916387491064324780586958918819601 269793 ((130593109248602474338305950378596062639442268231841647530855582729854977321831617633214357458973851780482862773656258803,1)::nil) 0 221184 48 576) :: (Ell_certif 130593109248602474338305950378596062639442268231841647530855582729854977321831617633214357458973851780482862773656258803 10547 ((12382014719693038241993547964216939664306652909058656255888451977344520028480839017020597622389346305379520887019209,1)::nil) 130593109248602474338305950378596062639442268231841647530855582729854977321831617633214357458973851780482862773115649899 4964006108754 1431 2047761) :: (Ell_certif 12382014719693038241993547964216939664306652909058656255888451977344520028480839017020597622389346305379520887019209 27376 ((452294517814620040984568525869993412635397899951002931615012948651439507062318405223524400491052693886302449049,1)::nil) 8856006435003696690632687321205767377472225672924217533531514620923946996703303667030797751428289499316995224492300 8309885204155049741589010457621947569825753503695142962694278409960713767470884058672499549166951932568557466562957 5598047240949086365079574094860682549169076930612471048237082376141170783503491198288265105258477374542203061930011 3987223963705752868160465339694550510638745628940794376108615187774367626584117430466426696533062386587847936789382) :: (Ell_certif 452294517814620040984568525869993412635397899951002931615012948651439507062318405223524400491052693886302449049 18426592622 ((24545749021151830453951006432034063157756497556708340387514130787575572996794413366377194374555932861,1)::nil) 178187617358196335154079250969003406929332702682110999583184313971330042222541665834514809556167533264351205753 69655439201257166850135903594053594926571953430157206664404205147936724587176473600214619395620884536066915074 441016261910970914599725774911419401464560813060520384512950720212273574587553099035614968106952683289963976020 104989364396597543720913481465729960101718223002558264708079500953943095290875671911893610594583723863323885231) :: (Ell_certif 24545749021151830453951006432034063157756497556708340387514130787575572996794413366377194374555932861 107 ((229399523562166639756551461981626758483705584642136286634801263376189670752300985914686264194328213,1)::nil) 8821144263413629331755494137421913563689303097585530412556268946034185149470478387692960677149182602 18305160372776300705049615697001140915072662031855094466850327253917349351960207408821621437275402335 0 15344761414405399694985399409500991049191254653865069771624721345570194504654173367669018777909534260) :: (Ell_certif 229399523562166639756551461981626758483705584642136286634801263376189670752300985914686264194328213 1909 ((120167377455299444607936858031234551327242317780074190497187656727302835132637836468092206970511,1)::nil) 134461650283975222325197251160843956528777586128766994915512228744239202227887189877836213461792346 10125570209556757530296382058344002416153166487728319924491090412820687384374406844143017483549071 0 193348579526720601825333553221113737947827772831709138911376152148250276228491493785949249855912180) :: (Ell_certif 120167377455299444607936858031234551327242317780074190497187656727302835132637836468092206970511 107236 ((1120588025059676271102398989436705503070259220602070138352197554911852851036953712848073859,1)::nil) 120167377455299444607936858031234551327242317780074190497187656727302835132637836468092127735343 271737008656 0 521284) :: (Ell_certif 1120588025059676271102398989436705503070259220602070138352197554911852851036953712848073859 1376 ((814380832165462406324417870230163883045246527360048918028535193360674428694838452150373,1)::nil) 1120588025059676271102398989436705503070259220602070138352197554911852851036953712847930499 25690112 64 4096) :: (SPock_certif 814380832165462406324417870230163883045246527360048918028535193360674428694838452150373 2 ((418572640535373477041138589460823335953550022385275410851404522469265552829, 1)::nil)) :: (Ell_certif 418572640535373477041138589460823335953550022385275410851404522469265552829 511830920 ((817794752484616359326510773246804503189536171772372429117810762409,1)::nil) 418572640535373477041138589460823335953550022385275410851404522469265552793 0 12 36) :: (Ell_certif 817794752484616359326510773246804503189536171772372429117810762409 54336 ((15050698477705689769701685314465640816772088798777002919602353,1)::nil) 0 1080 6 36) :: (Ell_certif 15050698477705689769701685314465640816772088798777002919602353 224666244 ((66991365546244186864590504813316864214034593447695571,1)::nil) 15050698477705689769701685314465640816772088798777002919508273 9834496 0 3136) :: (Ell_certif 66991365546244186864590504813316864214034593447695571 567192230 ((118110513513635733099853122511872353351504687,1)::nil) 36726663439445127454165592652457612406146557553092112 29027422890581369979615751461229212261994303312438895 0 65453452837208368778787725093699130737560525035345089) :: (Ell_certif 118110513513635733099853122511872353351504687 38790 ((3044870160186536042790933309081503405821,1)::nil) 51698088241492512414062670968014925808948207 71090104187888173900361455014255759349286615 0 80480604178274856187791730927440947896615639) :: (Ell_certif 3044870160186536042790933309081503405821 47116 ((64624971563514221132298234378742081,1)::nil) 0 5832 9 81) :: (SPock_certif 64624971563514221132298234378742081 2 ((38752485415215641729866517, 1)::nil)) :: (Ell_certif 38752485415215641729866517 10730 ((3611601623038842807701,1)::nil) 36450 0 675 18225) :: (Ell_certif 3611601623038842807701 162100 ((22280084040485981,1)::nil) 900 0 90 900) :: (SPock_certif 22280084040485981 2 ((1114004202024299, 1)::nil)) :: (SPock_certif 1114004202024299 2 ((22327418167, 1)::nil)) :: (Proof_certif 22327418167 prime22327418167) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t175/prime3.v000066400000000000000000000346221451023060700215500ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime208574597317 : prime 208574597317. Proof. apply (Pocklington_refl (Pock_certif 208574597317 2 ((17381216443, 1)::(2,2)::nil) 1) ((Pock_certif 17381216443 2 ((36669233, 1)::(2,1)::nil) 1) :: (Pock_certif 36669233 3 ((2291827, 1)::(2,4)::nil) 1) :: (Pock_certif 2291827 2 ((53, 1)::(2,1)::nil) 207) :: (Proof_certif 53 prime53) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime3456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234979: prime 3456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234979. apply (Pocklington_refl (SPock_certif 3456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234979 2 ((1728394506172839450617283945061728394506172839450617283945061728394506172839450617283945061728394506172839450617283945061728394506172839450617283945061728394506172839450617489, 1)::nil)) ( (Ell_certif 1728394506172839450617283945061728394506172839450617283945061728394506172839450617283945061728394506172839450617283945061728394506172839450617283945061728394506172839450617489 5330 ((324276642809163123943205242975934032740370138733699302803951543788837931114343455400365018212364149669932033085045658820671006205678920833650003211535090729742162398181249,1)::nil) 576131502057613150205761315020576131502057613150205761315020576131502057613150205761315020576131502057613150205761315020576131502057613150205761315020576131502057613150221671 0 1308 47524) :: (Ell_certif 324276642809163123943205242975934032740370138733699302803951543788837931114343455400365018212364149669932033085045658820671006205678920833650003211535090729742162398181249 5920 ((54776459933980257422838723475664532557494955867178936284451274288655055931476935033839372999886845044558474684439457135878826558259281379044002825870222848938333666039,1)::nil) 194793747286410541613704330395541797216594126710112356427534604540974419867422895314375238671329503251722811132529747820341823194653596447515528900593597165000376473094524 25477912608175642712422540943835936598610092317725923360960877078092175016080748037870657493924853085356431761102438049794555370874161008610787655611302976252789509407134 249554573202502234470752652793705221393403958316844599770068668895279869770328778498452593944442381203924221213780722758989352001990585011363698612576531880488692104737694 200917219138597366434906486399850976138207269866178727143059500036828833903494612873835080268789872004931586706068363534868642630144118400833002823563648687053160327185219) :: (Ell_certif 54776459933980257422838723475664532557494955867178936284451274288655055931476935033839372999886845044558474684439457135878826558259281379044002825870222848938333666039 19561188 ((2800262434673203765683286898304158855663314307248564672270992655898765245315209640350330617426436722217912740947742363503472165053268878901966182223258841199523,1)::nil) 22324055542197282741865135525919614520601426717844320987934023197945262077082752249255266289515425818553107453938987837567281075144204590884031947603982336357813412891 10781594092328127422443526678243844622128004144049360873009198553450186925736715047282637160980773132958099100639854185990528833524462875686208235902151749549652520308 0 26036652031028970617691357476766137133885641614426636062136973523169631450302023280347050240325747678177501411587432521253053322624914463932986842827389388721759628045) :: (Ell_certif 2800262434673203765683286898304158855663314307248564672270992655898765245315209640350330617426436722217912740947742363503472165053268878901966182223258841199523 46 ((60875270318982690558332323876177366427463354505403579831978101215190548811200209727363828523563400032455008962530229969763415961676392830946926168474835084419,1)::nil) 98180121360204196485381931965065762684505176586247729797602170409678624213904703464075837984517350379820671409377372825645167538109513516920365987043170048310 780744546291996472639337285428078896675422713562273970274672149328802916438949087774992239883318538497504569174639073321514760659124708864696089471521893007252 0 2011731511704766787600473772363108751072204050782039248717517547630075350441039446144871215467057196555189031714970861778451332373041109995891916206878397186998) :: (Ell_certif 60875270318982690558332323876177366427463354505403579831978101215190548811200209727363828523563400032455008962530229969763415961676392830946926168474835084419 2439612198 ((24952847165171737085376027405884189806573247222878322332432484917092773452020671171073871626133007958181685316077599122089079636359706263960786472931,1)::nil) 60875270318982690558332323876177366427463354505403579831978101215190548811200209727363828523563400032455008962530229969763415961676392830946926168474835055589 1668296 155 961) :: (Ell_certif 24952847165171737085376027405884189806573247222878322332432484917092773452020671171073871626133007958181685316077599122089079636359706263960786472931 8596 ((2902844016422956850322944090959072802067618336770395804145240218368168154063176614410510596673120970257693254343283172590310386364436927324191409,1)::nil) 0 14523336826603862600472765951081032348357085297690898545048594736901653298246406267539089344897727288160434031623290114028409632099985286445923991137 12476423582585868542688013702942094903286623611439161166216242458546386726010335585536935813066503979090842658038799561044539818179853131980393237760 7797764739116167839180008564338809314554139757149475728885151536591491703756459740960584883166564986931776661274249725652837386362408207487745819339) :: (Ell_certif 2902844016422956850322944090959072802067618336770395804145240218368168154063176614410510596673120970257693254343283172590310386364436927324191409 8748 ((331829448608019758838928222560479286930454771007132579349021515588496588584165671021534044465066226288846612467077805602145943841406055527887,1)::nil) 1673188819959506846397899534620548159516879166700047504358217150231790750388303668647534503354142705227126186445258120173257630786183843679387244 2260613407613517629933218179629112983800016737481421089390368695384628661139978718970467828299403269050655475221262437910428225254892032033080132 280154498721302900703894164451001422930310857606778901728111193711432491389386820940556347332038819530369006611169508342866388310669658557171259 2204991337158580318292726797166011165749595789290351857107920015177525318984751563828632018688014313125178201830827385392241996973535746816675089) :: (Ell_certif 331829448608019758838928222560479286930454771007132579349021515588496588584165671021534044465066226288846612467077805602145943841406055527887 332048090 ((999341536968394423949037690776897066116100143828963387047404837017724208581766284926528199284735996711233844134219791681471370637379,1)::nil) 179820567841700309685722067294223206082471213838673361750679749883909472965279043814460114590254525398124070963356329096057187611444043723957 43721722561614774697614510285152164080671752243467669131544240819084785886319869394860803041733999186136583889401579138689749597227691356381 12241089697157202441383130981937420268710537242725502410246346051381648007060151768942247993561908856526302385948985343493749332215038269939 211279259235337418225013098293901494181469890416408677964041574657253821605745839017817668365342469300283887744969259137713983185582587921856) :: (Ell_certif 999341536968394423949037690776897066116100143828963387047404837017724208581766284926528199284735996711233844134219791681471370637379 202113623 ((4944454125036363451606810743167456189314364741405696275344115903643913394069489528313955006538901685913428676796786968360001,1)::nil) 999341536968394423949037690776897066116100143828963387047404837017724208581766284926528199284735996711233844134219679787638922836899 14406462054002124060149776 0 3795584547076) :: (Ell_certif 4944454125036363451606810743167456189314364741405696275344115903643913394069489528313955006538901685913428676796786968360001 3212 ((1539369279276576417063141576328597817345692634310615278749724794824333435446378039782524570840696599264800268879942113973,1)::nil) 4499835011473351277445164104830357788491288967833671977169868196740242243653778914538285681240960303956842494541682140003214 914445826993403888221514175962098438211976441308739446576738625919072759637368843097180650324537004929777159363035738798424 3210544792958381217990022132926650041036924911043337438221588473817056958874082052061963734538589523010753163699459460472276 791102667095481039165501552975227463729426242995620783999176270790556860857283020165525758998735242477272319780924511635389) :: (Ell_certif 1539369279276576417063141576328597817345692634310615278749724794824333435446378039782524570840696599264800268879942113973 698 ((2205400113576757044503068160929223234019616954599735356374960346485421125713523683113618099388737370665743560289365341,1)::nil) 2178 0 99 1089) :: (Ell_certif 2205400113576757044503068160929223234019616954599735356374960346485421125713523683113618099388737370665743560289365341 207909 ((10607525954031605387467921835655133900021725632847713934341009801243453517087755916345692272173019718843595909001,1)::nil) 148441967051525337102147044911096714290222960000773796396168205441851366282590518630015367726568855900152838294710442 53505080809324034644870762393214842527523005831164737911421755618927851705219651632497337096457015205085176390186135 0 1707918645713915877824553110616887037874477936752155698347706145990597102176903535456877328753332324632037878825605862) :: (Ell_certif 10607525954031605387467921835655133900021725632847713934341009801243453517087755916345692272173019718843595909001 4332 ((2448644033709973542813463027621222045249705824757090012525035206892133213918955024642905712133061156935251503,1)::nil) 0 5832 9 81) :: (Ell_certif 2448644033709973542813463027621222045249705824757090012525035206892133213918955024642905712133061156935251503 240818 ((10168027446910004828598622310712745912887349885627694008110108690203989349199298180028249966107564729691,1)::nil) 1041328242434004707001783073961444595134776769754679970538498503830979499709852316440036594853343541719719290 1443670614985331564239325565304200964311465793598923786895048226144513543668209270474189781053798931654086573 0 1259359203432411596323830909232651927841975623544522106028242646721009041745244529294895145524317334671405042) :: (Ell_certif 10168027446910004828598622310712745912887349885627694008110108690203989349199298180028249966107564729691 1597266 ((6365894877190151689573698000654083861352680070587929188258185013542956980044975632380799653110171,1)::nil) 10168027446910004828598622310712745912887349885627694008110108690203989349199298180028249966107564635611 9834496 0 3136) :: (Ell_certif 6365894877190151689573698000654083861352680070587929188258185013542956980044975632380799653110171 415 ((15339505728169040215840236146154418943018506194189457051704405635960591294995518450466673992901,1)::nil) 323058255936179860769198787143004320459119885840775923712592557103908299651252154594413527847526 222479777988981226347503036044130744750304647537261840975891466740304672843943587727814311766442 0 2495112319627902228826269501700353535861581700371053575527882917552713670220621169684282544802398) :: (Ell_certif 15339505728169040215840236146154418943018506194189457051704405635960591294995518450466673992901 420 ((36522632686116762418667228919415283197663109986450354867722456197963962544747801770187209381,1)::nil) 2477401738329348623978937198650306251326396555617551737757307912166917789712999487475742626435 6285225998740462305330779210639776163448899591322926151686135082164498868572480567574694125467 0 8729329438110176576410162632027018729822315394802970328997916883034888864262742282911383488252) :: (SPock_certif 36522632686116762418667228919415283197663109986450354867722456197963962544747801770187209381 2 ((608710544768612706977787148656921386627718499774172581128707603299399375745796696169786823, 1)::nil)) :: (Ell_certif 608710544768612706977787148656921386627718499774172581128707603299399375745796696169786823 93 ((6545274674931319429868679017816358995996973124691036907677081345592090047074708889313761,1)::nil) 608710544768612706977787148656921386627718499774172581128707603299399375745796695412202919 8234810772496 0 2869636) :: (SPock_certif 6545274674931319429868679017816358995996973124691036907677081345592090047074708889313761 2 ((2153050879911618233509433887439591774999004317332577930156934653155292778642996345169, 1)::nil)) :: (Ell_certif 2153050879911618233509433887439591774999004317332577930156934653155292778642996345169 91365215337050 ((23565323761006044366691925736135773397287354485498180482214382830855369,1)::nil) 1443364429311423176052225592203477623754896586561610617579043162670561197488399063076 0 2093542823437778193593775858122671241783330982204308724215553822861632955966623881436 1330698936131234471235966309033156889214341878251695563244827791627594423467369488113) :: (Ell_certif 23565323761006044366691925736135773397287354485498180482214382830855369 272601 ((86446211719715057416120724928139564088543125874592062207854633669,1)::nil) 0 221184 48 576) :: (SPock_certif 86446211719715057416120724928139564088543125874592062207854633669 2 ((437778855278962123819669712572371621360918737684089063, 1)::nil)) :: (Ell_certif 437778855278962123819669712572371621360918737684089063 2488356 ((175930958142228091084904938704982437683772579397,1)::nil) 67709214180110495090221112302565674033547721904615244 277545821707103076610895619172231227555051565315251558 251597498597696075022107818383978813794668579585303837 406236876543903037683356569813009784501895530347937959) :: (Ell_certif 175930958142228091084904938704982437683772579397 1974763 ((89089656906792405511397841603124530069583,1)::nil) 0 10985 26 169) :: (Ell_certif 89089656906792405511397841603124530069583 381 ((233831120490268780870489544712538903639,1)::nil) 0 1257728 272 4624) :: (Ell_certif 233831120490268780870489544712538903639 132177 ((1769075712796241259077281880028439,1)::nil) 0 75449 38 361) :: (Ell_certif 1769075712796241259077281880028439 7607729385676 ((232536624676358204437,1)::nil) 0 192 4 16) :: (Ell_certif 232536624676358204437 1114884687 ((208574597317,1)::nil) 0 275128 102 1156) :: (Proof_certif 208574597317 prime208574597317) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t175/prime4.v000066400000000000000000000240441451023060700215460ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime11454716149 : prime 11454716149. Proof. apply (Pocklington_refl (Pock_certif 11454716149 2 ((32915851, 1)::(2,2)::nil) 1) ((Pock_certif 32915851 10 ((11, 1)::(5, 1)::(3, 1)::(2,1)::nil) 77) :: (Proof_certif 11 prime11) :: (Proof_certif 5 prime5) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime4567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345853: prime 4567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345853. apply (Pocklington_refl (Ell_certif 4567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345853 9570811 ((477273046501157426716051429835420205259873670999494784600932415015835487378134658147455373169714222441644540184936690749743003157279335709611189947787301232305120527697,1)::nil) 0 54 3 9) ( (Ell_certif 477273046501157426716051429835420205259873670999494784600932415015835487378134658147455373169714222441644540184936690749743003157279335709611189947787301232305120527697 366681 ((1301602882345028585380893555530338919278265497801889884125254417370508663874415795054510205344790516990541741862405739092026754519108145047019676750878917027194077,1)::nil) 0 6912 24 144) :: (Ell_certif 1301602882345028585380893555530338919278265497801889884125254417370508663874415795054510205344790516990541741862405739092026754519108145047019676750878917027194077 44137996232180 ((29489396743299819265050944283261312443606501179739389169670572265138525893983787919261193996352213215192095612256326106894057849223084044098544225801,1)::nil) 100 0 20 100) :: (Ell_certif 29489396743299819265050944283261312443606501179739389169670572265138525893983787919261193996352213215192095612256326106894057849223084044098544225801 907 ((32513116585777088495094756651886783289533077375677386074609230722313699993171623039060292681973608190982342845949303216411367757941382121527235249,1)::nil) 0 47250 15 225) :: (Ell_certif 32513116585777088495094756651886783289533077375677386074609230722313699993171623039060292681973608190982342845949303216411367757941382121527235249 53527 ((607415259322904113720080644382961557522989843923204851282702761640175985967816542178880343713702894731873456193862727425000292476432162630599,1)::nil) 0 99144 18 324) :: (Ell_certif 607415259322904113720080644382961557522989843923204851282702761640175985967816542178880343713702894731873456193862727425000292476432162630599 215 ((2825187252664670296372468113409123523362743460107929540849780286698492790564870080932788813252810508963982072824758374957380021545782104573,1)::nil) 10971982541655199038091422755206988558208302194469072383254947974375265509505758969579555650663088518473224058305240880743654894725498892937 416669298876404779916934508442206617407558381509361912223275291798466697657653152764793754193929495888546668182139033962373072335959333177562 0 193786988302616102556570169994128012077053181511493355991159485829277538423290810484884192910855079669401234184584784781201868743300168172323) :: (Ell_certif 2825187252664670296372468113409123523362743460107929540849780286698492790564870080932788813252810508963982072824758374957380021545782104573 59632 ((47377033348951406901872620630016157824033127517237884707032805988370166606549842436679324849682760480018204793477533757410815316918053,1)::nil) 2527017294414573972998867560122746653164696693452711541773522442837733837555276829709092821454023139477860553430112296846894879256652504487 2022063125554162858120142384813426631522572353208178264473555271179908918395511475108364005169899020716439256004209842620548308278677408685 0 722416922581695735836477942856385198660604297689195108633080338307821887030805037914204633354739104035518397811714720275931729379079188621) :: (Ell_certif 47377033348951406901872620630016157824033127517237884707032805988370166606549842436679324849682760480018204793477533757410815316918053 11994 ((3950061142984109296470953862766062850094474530368341229534167582823209648184640252492142848849478685607118408348823364862147386883,1)::nil) 15506483679404923843691420551839533817031462819667371173614482011018632404286998749651492732503340138429747436905539871995892723051910 27398169081385414689261163428654707016106778256769520644254583849359729519393355930995563170407369180965895736492301049181036510770179 0 32433371471428496382417492945527430815604579488312660624713307914312600216294717705124620541947988022223768387409312467020295038642029) :: (Ell_certif 3950061142984109296470953862766062850094474530368341229534167582823209648184640252492142848849478685607118408348823364862147386883 76562083868 ((51592915754414080160796203561950608871513409972070657661924333124458498980914891140324692431759790288242160577597830593,1)::nil) 2785815021133463737468916460195582325526905301810039171934774521062702181718453451774956659511306707462069450683769531225987053079 2202766743502727890829317914324633704918673151192921229786000577413203014714283097982266035118497574659648283043986664663288904436 0 1758303869278038047289140005501037779093792443402035219140846310962174962667386635320379815993905429046970444336925186502060182847) :: (Ell_certif 51592915754414080160796203561950608871513409972070657661924333124458498980914891140324692431759790288242160577597830593 256 ((201534827165680000628110170163869565904349257703401006491893686436658161725848652954330639499565955902686866568266813,1)::nil) 900 0 90 900) :: (Ell_certif 201534827165680000628110170163869565904349257703401006491893686436658161725848652954330639499565955902686866568266813 1549687 ((130048730592487386567810254692637652573938645483507964183679047450044837256409409962482716544651388495618983107,1)::nil) 186643893275442397528888124384267782029496336887430533948743302440150396993574085339128128679855207807487912809656636 145372845372733605831059503184322030925802627846258985430768903588743786492088675830081197211296492642277083409078052 44619411508708224769111380221237518423250513064244462706160872122634129609609712650074419686379016412975296733512182 85251190597343647859566191565424189287204540757690274779073226950295887739038010103944223722787398075410126956777685) :: (SPock_certif 130048730592487386567810254692637652573938645483507964183679047450044837256409409962482716544651388495618983107 2 ((614509187843061839883748255401251353145139024615167551162223983097599561720536912112660477390606012411, 1)::nil)) :: (Ell_certif 614509187843061839883748255401251353145139024615167551162223983097599561720536912112660477390606012411 22521404474272 ((27285562432177122440956169565808903424929404022371299956748974847099541717298085939256943,1)::nil) 614509187843061839883748255401251353145139024615167551162223983097599561720536912112660477390605869051 25690112 64 4096) :: (Ell_certif 27285562432177122440956169565808903424929404022371299956748974847099541717298085939256943 12050 ((2264362027566566177672711167287045927380033554521229745729240425165707312356893375883,1)::nil) 16968996811275605549600162301033455861877685641211694309265768867744196815213816059555226 25256775105196938964297978647545358341927572340446518958853544320475253005930116858294262 0 22985458537971059338484603301245392370451781995856695372755140631139221245031735068162019) :: (Ell_certif 2264362027566566177672711167287045927380033554521229745729240425165707312356893375883 32196342 ((70329791737414336624723118150721778498316254776367340280225462656207553431593,1)::nil) 2264362027566566177672711167287045927380033554521229745729240425165707312356893281803 9834496 0 3136) :: (Ell_certif 70329791737414336624723118150721778498316254776367340280225462656207553431593 592 ((118800323880767460514734996876219220435809012683336160691890735423021980341,1)::nil) 70329791737414336624723118150721778498316254776367340280225462656207553417593 784000 60 400) :: (Ell_certif 118800323880767460514734996876219220435809012683336160691890735423021980341 5994502236 ((19818213290056308941334257077791374511606112544319560137949300023,1)::nil) 98615951312737312004673237329597993254148111945593036587752396449130492398 68797288446233327521586176290394463742132002858155459009161141524555013229 0 51199987926309898704101224462870713918472689172892725609203545588667969890) :: (Ell_certif 19818213290056308941334257077791374511606112544319560137949300023 823410 ((24068463207947813290261542946759780236647596568959539644717,1)::nil) 12438179536577279129201092905695893873426610496531052616276077361 7509889789324841063611757875313846228366995275342516396733524770 10340919258810343804421998687442547884632402080336994205247774583 1997705671829984933311344415411712122548006836337478476932114874) :: (Ell_certif 24068463207947813290261542946759780236647596568959539644717 1169220866036 ((20585044200884755420563707038674641791866074543,1)::nil) 20416252598501655906019256492576512393036723380786588267321 6332911104241812234210752137721577367280329437531874914845 0 15494934167932248236907664320652033247414192248519172191521) :: (Ell_certif 20585044200884755420563707038674641791866074543 20265 ((1015792953411534933163773015882920894410279,1)::nil) 14662209292777910819785651046594562034186563958 13660063864424067044793991441549539296500097865 0 1811256998315103633022131808093072095154865143) :: (Ell_certif 1015792953411534933163773015882920894410279 40287 ((25213914002321715023799830237465184007,1)::nil) 0 163840 96 1024) :: (Ell_certif 25213914002321715023799830237465184007 169727076 ((148555637653957551324862233277,1)::nil) 0 1272112 129 1849) :: (SPock_certif 148555637653957551324862233277 2 ((5816834107366089904711, 1)::nil)) :: (Ell_certif 5816834107366089904711 36876 ((157740376050326221,1)::nil) 0 10985 26 169) :: (SPock_certif 157740376050326221 2 ((11454716149, 1)::nil)) :: (Proof_certif 11454716149 prime11454716149) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t175/prime5.v000066400000000000000000000277711451023060700215610ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime119736050422693 : prime 119736050422693. Proof. apply (Pocklington_refl (Pock_certif 119736050422693 2 ((73, 1)::(19, 1)::(11, 1)::(2,2)::nil) 57343) ((Proof_certif 73 prime73) :: (Proof_certif 19 prime19) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime5678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456797: prime 5678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456797. apply (Pocklington_refl (Ell_certif 5678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456797 63 ((90141289437585557515187127180090141289437585557515187127180090141289437585557515187127252482161959040928976085076837633316164513993086112295980273870125347797966292872584921,1)::nil) 0 199794688 1392 53824) ( (Ell_certif 90141289437585557515187127180090141289437585557515187127180090141289437585557515187127252482161959040928976085076837633316164513993086112295980273870125347797966292872584921 859 ((104937473152020439482173605564714949114595559438318029251664831363549985547796874490252347636812080872038324034887635317614385726376223149025842392403550391246877154845227,1)::nil) 0 20774750300068546458578283217286399750300068546458578283217286399750300068546458578283233970498263997714099957107552423303334790334344064943214203743505451250314825491926468 67605967078189168136390345385067605967078189168136390345385067605967078189168136390345439361621469280696732063807628224987123385494814584221985205402594010848474719654439920 84507458847736460170487931731334507458847736460170487931731334507458847736460170487931799202026836600870915079759535281233904231868518230277481506753242513560593399569559419) :: (Ell_certif 104937473152020439482173605564714949114595559438318029251664831363549985547796874490252347636812080872038324034887635317614385726376223149025842392403550391246877154845227 117666 ((891824937977159412932993435356984592954596565178709476413448501381452463309680574594579622107701635615912653096501312120201631675353561324087432332383736806189502449,1)::nil) 104937473152020439482173605564714949114595559438318029251664831363549985547796874490252347636812080872038324034887635317614385726376223149025842392403550391246877154823357 1102248 27 729) :: (Ell_certif 891824937977159412932993435356984592954596565178709476413448501381452463309680574594579622107701635615912653096501312120201631675353561324087432332383736806189502449 96800 ((9213067541086357571621833009886204472671452119614767318320748981213351893695047257594162910698622230951800086202123193657751403606982168291326553253161981026813,1)::nil) 882109588693945926345344777770859674159745836293673068143046990377116720895709191126128378652086674364793875432889916609503327749744651906454457044166045756113051971 756856421483420564724727276243798124678738418253384618230779596711601010164949708211297847868044779010599830015452768358967883022977429741959889268098114886935201529 139447230800444472219919904778457783514998413563876612381867715163325015621733526806138235487858782585148567444384131780292480650937436875554552500206475100198075907 215771019152488333048504981355892963840376070443188523426603684699730128378964207558297488328495083142203033332395458373222780037815440247759591728478313274084405894) :: (Ell_certif 9213067541086357571621833009886204472671452119614767318320748981213351893695047257594162910698622230951800086202123193657751403606982168291326553253161981026813 2082235210 ((4424604625279752891904000129690537925670487590887855228574657029843113590272564407122232930234252610121090813326307332069196743907656941556215857922249,1)::nil) 5836469881407758159336966098358313485361481571624585303532622045555271489997917193931509566578138498819952214585434253456909110309121981880592953700902239232578 8229721475827218348975990844880076634159439156141014117908266704191499737209483431350351303758912549608152991263257621857022577299653733163581579243940334574776 0 3264479987041264622363849745484678589337353479410483842055436090032386702667840818632477427730091305369456016465679678371377594859876457130320148620869444321547) :: (Ell_certif 4424604625279752891904000129690537925670487590887855228574657029843113590272564407122232930234252610121090813326307332069196743907656941556215857922249 112908 ((39187698172669367023629859086074839034173730744392383432304681952059319005529360067603779448593071633970029831607284391820379144549269591264841099,1)::nil) 0 192 4 16) :: (Ell_certif 39187698172669367023629859086074839034173730744392383432304681952059319005529360067603779448593071633970029831607284391820379144549269591264841099 31783 ((1232976691082319699953744425827481327570516651807330441818100303686225938252308723228714285350535028145971449987335976252832215258751929667443,1)::nil) 7558355387180671124745171978042293148076581650874113663784217169742265549176733204419137694650083295302176612756977743733863362320641786407753982 10956636187856899288280366651773511065461364652630333916822565633483747704974226481301684957691244856222036126004637681265157553438538022634842435 0 3133190950651113474248594025984935523285931916061358568549013942271996973008148044089528007028166917993507525305319348361236396710583657529275650) :: (Ell_certif 1232976691082319699953744425827481327570516651807330441818100303686225938252308723228714285350535028145971449987335976252832215258751929667443 2280275 ((540714032773380272096016675983151737211747114627547309784170902056210752567014936443463040394349381755359798709890155611012439388174019,1)::nil) 543349772629106990426905544639310551910914956667997171238860952016327904267491015921358700398987419837158422516453722706254094912984781820415 369914756472961719854326275132559920350003982529428751791640788869429124338278291173126371831532342386862324865834895260547457167372501002405 0 1193317132648637365666002206053910887754580822270433187784975134841334452932316900871430895221689386436639397699909887628145589509647628820366) :: (Ell_certif 540714032773380272096016675983151737211747114627547309784170902056210752567014936443463040394349381755359798709890155611012439388174019 1836895508 ((294362978415743543805332598147521702803220701559659598113716385687960859272264283070658517727242779791178757016225209363441287,1)::nil) 159920264105151002825286359482677399269738250375295459130023451860979855531364206824065110872863214055793206008969372862227065158416153 171160751077857764906129218157719188274637376506692291177344763629860137278406556573047183568382030115201312599472979165806997976817810 452861536886422191591988785575261391631802137066405122653754051860849102612401432799916253215311152488165618188897315274300299919659066 475692201940495254571514735607952779291622809286663353777228555558091732681652739147008428445522216338132236919596339615427433988404517) :: (Ell_certif 294362978415743543805332598147521702803220701559659598113716385687960859272264283070658517727242779791178757016225209363441287 2754572385018 ((106863402834055494444492370545390783090059790701066845219642750975855939497188894086840743020839746969517969475911,1)::nil) 235605281419346333715316646912441171347017385800568132915109372914816716721184563534388588298512768799372952382539408645191881 201455043322774821556601991308336563514896257214684947737662181519594969792715098939588025881877633321621472074752877203688451 0 82715865140467096730871310723239962557513312177157682608030483692026949903231852138666194829840432125070488337142421492319581) :: (Ell_certif 106863402834055494444492370545390783090059790701066845219642750975855939497188894086840743020839746969517969475911 32509388689 ((3287155100219223763715490348370074916915635967868532725311463363070358086418518809214897083155843210159,1)::nil) 0 78895246623580033007847882941714289078208204853522006822314374743893642831908988212550392308354344442339437916780 80147552125541620833369277909043087317544843025800133914732063231891954622891670565130557265629810227138477107557 6678962677128468402780773159086923943128736918816677826227671935990996218574305880427546438802484185594873107807) :: (Ell_certif 3287155100219223763715490348370074916915635967868532725311463363070358086418518809214897083155843210159 4893707532 ((671710575003611344486757192740645972243940786420607530615840961529087744825733443883898644863,1)::nil) 0 3584 8 64) :: (Ell_certif 671710575003611344486757192740645972243940786420607530615840961529087744825733443883898644863 11008180 ((61019221615526939465629849143150454684056836498296977133757711477426570417612051162143,1)::nil) 55982996878778008180873982472933254373620333828355693946171743468750361163021948798125811275 96915634212618528614658994877092497673339155960084989382601373565464801735841568322753894196 0 286442142512050070041181552686951175281851911280044705661437904922808763254566317394930273531) :: (Ell_certif 61019221615526939465629849143150454684056836498296977133757711477426570417612051162143 63628 ((958999522466947561853741263958484545861206090103229608083351991260420617150033109,1)::nil) 0 10985 26 169) :: (SPock_certif 958999522466947561853741263958484545861206090103229608083351991260420617150033109 2 ((15617867280094905248090373004339856456602274934910260049562764498410862763827, 1)::nil)) :: (Ell_certif 15617867280094905248090373004339856456602274934910260049562764498410862763827 444672 ((35122218804185793681838238081866761245311466133969769295672934765676883,1)::nil) 14232747918936093000105818892714593606817542974154433929368218259432676603752 15134252466775985072218109893875772893066071674390390725176550833000380295283 5611853220596012256032142063432902277898747429178829822413092103289502762620 1947961446168905261208017402270366771918778922307814392518085206158851233460) :: (Ell_certif 35122218804185793681838238081866761245311466133969769295672934765676883 764 ((45971490581395017908165233091448640088293798339405899519864941949653,1)::nil) 12878451230681640526850440035998674638297925903110273004532092682741030 5283534128168245252385454028446040099596622736471090377604900877975618 0 18886154627101950876914930519844517387641010022903547014383753152522992) :: (SPock_certif 45971490581395017908165233091448640088293798339405899519864941949653 2 ((1467987309407172624478389101144738794491435634800290570949832097, 1)::nil)) :: (Ell_certif 1467987309407172624478389101144738794491435634800290570949832097 650 ((2258442014472573268428290924838169929922385907885463046928473,1)::nil) 800159442574733537807099620741314517160127117893822814594506877 0 864753309302423635944539191735558347366850416296423212945739777 1070547675428676727296662024834606755939509613432912324541951066) :: (Ell_certif 2258442014472573268428290924838169929922385907885463046928473 65680 ((34385536152140275097872882534036271389137113639255310557,1)::nil) 900 0 90 900) :: (SPock_certif 34385536152140275097872882534036271389137113639255310557 2 ((384155398754798154012361897075757407108205404999, 1)::nil)) :: (Ell_certif 384155398754798154012361897075757407108205404999 180 ((2134196659748878633402013837638207865489717317,1)::nil) 384155398754798154012361897075757407107447821095 8234810772496 0 2869636) :: (SPock_certif 2134196659748878633402013837638207865489717317 2 ((5979432293484933205266039335719913, 1)::nil)) :: (Ell_certif 5979432293484933205266039335719913 9328 ((641019757020254419462555559807,1)::nil) 5979432293484933205266039335705913 784000 60 400) :: (SPock_certif 641019757020254419462555559807 2 ((45787125501446744247325397129, 1)::nil)) :: (SPock_certif 45787125501446744247325397129 2 ((56665551396303506142547, 1)::nil)) :: (SPock_certif 56665551396303506142547 2 ((122609715632837633, 1)::nil)) :: (SPock_certif 122609715632837633 2 ((119736050422693, 1)::nil)) :: (Proof_certif 119736050422693 prime119736050422693) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t175/prime6.v000066400000000000000000000262761451023060700215610ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime12972321046309 : prime 12972321046309. Proof. apply (Pocklington_refl (Pock_certif 12972321046309 2 ((6396608011, 1)::(2,2)::nil) 1) ((Pock_certif 6396608011 2 ((29, 1)::(13, 1)::(3, 1)::(2,1)::nil) 347) :: (Proof_certif 29 prime29) :: (Proof_certif 13 prime13) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime6789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234568177: prime 6789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234568177. apply (Pocklington_refl (Ell_certif 6789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234568177 228 ((29776369937188163309508290015161355317305609215941087237383582407948884556584362139868982706650034363192317043111017446063006561323688618234180525930324572479751859991679807,1)::nil) 2168543617832982232527181859800881654960678911411457225268808989156242224924947764924618268078024953473399470968538793435789926665526936066406185827170147913648623349143421507 3769487211111931672347873877732520508758527026068322094444769225941294429663202872276131403892777160702121339865766867859974861553431543038411513662733243720594810379460609609 247448482283153049885572516961662626615103005681672869478882551207397583880886631954897551453991991497510201997746517448482747760286966077800140426581614248233602462980067501 4786983905553484893385922467798764184721630729092412834787370341150645515662636654373981941041066175164815725715783115283809626477588111551254133596180600371710378549390240460) ( (Ell_certif 29776369937188163309508290015161355317305609215941087237383582407948884556584362139868982706650034363192317043111017446063006561323688618234180525930324572479751859991679807 193 ((154281709519109654453410829094100286618163778320938275841365711958284375940851617305022003874283316913131337889685546833991973157546157467999602673411743349659767891629761,1)::nil) 7456187763351206065176832992076285214612314452124513752995105646505429857983149662286382820773004310543376310184103494099275771729073654829770417545955628175721528165391726 13829051028114974280909183584192973350463949628827919440522805707136554866894697338994529899198779387472660622433045252417907137979602558992046881895743108254721910980445756 6166145831035833401460304733253265491126827453697456398282543457191453198686585683856066485383000057081833451066516555716688206403142028103487944261453082009297059768392470 10585843438483507089454156025305694094243980548802639802714003376408122901471662506633817741442464595219028547113946886608773728530158976073005197253199271542082492923863329) :: (Ell_certif 154281709519109654453410829094100286618163778320938275841365711958284375940851617305022003874283316913131337889685546833991973157546157467999602673411743349659767891629761 165243 ((933665628916865794335680356166980063410636325417344612730135085651340001941695668228046835690375080280722437761107781172227357691476188403682603424637212210682192757,1)::nil) 0 192 4 16) :: (SPock_certif 933665628916865794335680356166980063410636325417344612730135085651340001941695668228046835690375080280722437761107781172227357691476188403682603424637212210682192757 2 ((371714175244102162249622844498429112157881006456619997279058754224331809092878969445935284745256050521634297736207138885949624732729447630039373434255531, 1)::nil)) :: (Ell_certif 371714175244102162249622844498429112157881006456619997279058754224331809092878969445935284745256050521634297736207138885949624732729447630039373434255531 17428 ((21328561811114422897040557981319090667769164933246499729117440568299966094381799084665190131415798825696088495026096097968861495566081485941286623813,1)::nil) 221826310422149289604841033223710826812385680204182095182808245820545659392072137111236350881009536564117250036751352429989639734438719998950605187585996 120059960841415861291736816085792508663338102646642788231361390301792671836663067141060811231156889061318614418483342727063210051214788166858861011446588 0 71474213458821875032389608767199621548759072616856399372164643971158760367072496869007761181160952295964197397398890980874654132107042525102832725504620) :: (Ell_certif 21328561811114422897040557981319090667769164933246499729117440568299966094381799084665190131415798825696088495026096097968861495566081485941286623813 11364 ((1876853380069906977916275781531070984492182764277235104638986322448078677766028372054638253515682614744638959695916170319561708814684012852822847,1)::nil) 21328561811114422897040557981319090667769164933246499729117440568299966094381799084665190131415798825696088495026096097968861495566081485940529039909 8234810772496 0 2869636) :: (Ell_certif 1876853380069906977916275781531070984492182764277235104638986322448078677766028372054638253515682614744638959695916170319561708814684012852822847 9704112414461 ((193408041859967871412874442079781936323867825675409785808631545721735240051406331026082669899796465919012960046253521487500971010751,1)::nil) 1876853380069906977916275781531070984492182764277235104638986322448078677766028372054638253515682614744638959695916170319561708814684012095238943 8234810772496 0 2869636) :: (Ell_certif 193408041859967871412874442079781936323867825675409785808631545721735240051406331026082669899796465919012960046253521487500971010751 84845 ((2279545546113122416322404880426447478624171438215684905517491257251846650209391262744786210737024475934504436815952601742592237,1)::nil) 118201257214529204733940240267048513318601533302537782573099288032884848983872494646369200601333440907109755344047736604920915715617 60394854002220963234301426329127927721956787286275479838399484620035564201496386539506507208603750918343057753402638514278768285770 0 55543877358858310640034794954562766741279998379602304898290458631573699860004076865851264783103918300300378642464139799697815065313) :: (Ell_certif 2279545546113122416322404880426447478624171438215684905517491257251846650209391262744786210737024475934504436815952601742592237 6313128649 ((361080166879571285657544166486135467096858053940108278873360126899667540589754073802674837798237400517364969060253463,1)::nil) 0 275128 102 1156) :: (Ell_certif 361080166879571285657544166486135467096858053940108278873360126899667540589754073802674837798237400517364969060253463 1730737 ((208627981535941789918135549471777322086982628753015783954112942186189216128423671945221635682470258572248837987,1)::nil) 0 125531776766725954779380589129945533482892057815115768827066606617462543408156689720461174078293471273615165024788972 255 203107593869758848182368593648451200241982655341310906866265071381062991581736666514004596261508537791017795096396637) :: (Ell_certif 208627981535941789918135549471777322086982628753015783954112942186189216128423671945221635682470258572248837987 2317 ((90042288103557095346627341161751110093648091822622263245221137790211595372458506164018863447092252083272861,1)::nil) 0 711828 117 1521) :: (Ell_certif 90042288103557095346627341161751110093648091822622263245221137790211595372458506164018863447092252083272861 35427 ((2541628930012620186485656170766678242404044706653746094058287710673330866281536524335357646113762195899,1)::nil) 0 192 4 16) :: (Ell_certif 2541628930012620186485656170766678242404044706653746094058287710673330866281536524335357646113762195899 1908 ((1332090634178522110317429858892389015935033913340538067395189770995332852814033566096699273358986363,1)::nil) 2286218257973499937471329603139055504226622268745554076469530487982497539620305159407850715970112269592 929761191592217140911014836234232079588035967271937351972549953370595816537918000971669642544667149261 1656372042366230515171856541517902843693695683201957082243798971428202522822369107793369842435766194408 991946507966778892390334025737870686121645302533858617637583169586689306732588253859301701614707889617) :: (SPock_certif 1332090634178522110317429858892389015935033913340538067395189770995332852814033566096699273358986363 2 ((609589412801477792373617126508832045717483643952862572290092544659148688883453503709318520537, 1)::nil)) :: (Ell_certif 609589412801477792373617126508832045717483643952862572290092544659148688883453503709318520537 28080 ((21709024672417300298205738123533904762018648287245671048853190490046347506856128943806821,1)::nil) 213619803748876511572600500533461883072158047950851971461617973343768112069937112346601298881 199262027012698842823073129379626094974021766322281651835207393438742855540461714774154398236 0 535385742080669639858429775289505082867339876767903248255496303098442301512006813687792920054) :: (Ell_certif 21709024672417300298205738123533904762018648287245671048853190490046347506856128943806821 7773327 ((2792758451100449048162484110540300795530491402926090847615072805038180364037119321,1)::nil) 914643217148678413006787822413310318686862989226293193813429342706669006225466760436863 13603916589636728891510097682481270413361812147549645733157517970880310930182533565691098 0 8053438452391521780096676641990902522983900069903600938379601461631385998601464423417493) :: (Ell_certif 2792758451100449048162484110540300795530491402926090847615072805038180364037119321 3799089 ((735112668089757583505541489167613813609100997589201194688496121574507944137,1)::nil) 0 78608 17 289) :: (Ell_certif 735112668089757583505541489167613813609100997589201194688496121574507944137 2740 ((268289294923269191060416601885990442909512149844476339424393992492779829,1)::nil) 40204 0 92 2116) :: (SPock_certif 268289294923269191060416601885990442909512149844476339424393992492779829 2 ((86322166963728825952514994171811596817732351944812207022005789090341, 1)::nil)) :: (Ell_certif 86322166963728825952514994171811596817732351944812207022005789090341 354081 ((243792146327334214353537733376858948179199597636651846834234113,1)::nil) 0 500 5 25) :: (Ell_certif 243792146327334214353537733376858948179199597636651846834234113 452204239 ((539119551082612063602388595425857723609403802989469653,1)::nil) 0 197128805819367899887430901597694540129274674651511454278008586 121896073163667107176768866688429474089599798818325923417117135 106659064018208718779672758352375789828399823966035182989978965) :: (Ell_certif 539119551082612063602388595425857723609403802989469653 11139016861552 ((48399204147312557238176180302101894947461,1)::nil) 0 54 3 9) :: (SPock_certif 48399204147312557238176180302101894947461 2 ((267902159566658680605425552430542981, 1)::nil)) :: (SPock_certif 267902159566658680605425552430542981 2 ((13395107978332934030271277621527149, 1)::nil)) :: (Ell_certif 13395107978332934030271277621527149 856329 ((15642478508065164481704454991,1)::nil) 13395107978332934030271277393684325 1358190060766 2787 863041) :: (SPock_certif 15642478508065164481704454991 2 ((412621432552497084719189, 1)::nil)) :: (SPock_certif 412621432552497084719189 2 ((38449959367091851, 1)::nil)) :: (Ell_certif 38449959367091851 2964 ((12972321046309,1)::nil) 0 1080 6 36) :: (Proof_certif 12972321046309 prime12972321046309) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t175/prime7.v000066400000000000000000000324721451023060700215550ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime48295171001269 : prime 48295171001269. Proof. apply (Pocklington_refl (Pock_certif 48295171001269 2 ((8053, 1)::(2,2)::nil) 15955) ((Proof_certif 8053 prime8053) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime7890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345680107: prime 7890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345680107. apply (Pocklington_refl (Ell_certif 7890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345680107 161755870 ((48777972983540024517681498882036801035145055399508400537393591281252771778930468977114952216755342918143809637027018634438504416676506376944617627599821323858001478273,1)::nil) 2846985632514633126035113388255293704596168397504297481821340839944762767722240399340198967135426117476590664459985749185490983713162215532065371747325005366941442089444468164 3455350558428306468937559397987009825828534084100630523289051105892452062767620775819968479661147273014237286975442824284242942388521177109540491840721671455234833475336301553 3061991348962531680625384882996057091382803361854597424861540814580180661519070577220515934080470603817945055337612219352829952060999083423976399081807526339239714011543367911 7671055859834071935202171542740320849648288542044310525632841072114024167161600602337522662421789385151447197454959199584019392306958610762146392843441617427376322302248892908) ( (Ell_certif 48777972983540024517681498882036801035145055399508400537393591281252771778930468977114952216755342918143809637027018634438504416676506376944617627599821323858001478273 2586425 ((18859225758929806399830460532216012849839084991642286374974565773704156037360630591399724511786340362067968077948732702172234687833760334114345256654546536634573,1)::nil) 12034316319649774386208603300137210058155098988422621732167891262126913118173742578479834501796644383527760146426226946732296545977357018498302602736654877524323214003 7389457349741037410336379683506256282872301326556357547293180936236637677408338736118871999966291366565656109807698394672375081996959193386253076297559117007103835122 0 14555344770691091990280684301708489174076194727443581823103091419005403408475672918538630722748100896942311407561686958343242283198550076057708916194602359971178814779) :: (Ell_certif 18859225758929806399830460532216012849839084991642286374974565773704156037360630591399724511786340362067968077948732702172234687833760334114345256654546536634573 423 ((44584458058935712529150024898855822340045118183551504432563985280624482357826550323695337533764218520666446588821224064811433357276797727342102686227629912541,1)::nil) 18859225758929806399830460532216012849839084991642286374974565773704156037360630591399724511786340362067968077948732702172234687833760334114345256654545779050669 8234810772496 0 2869636) :: (Ell_certif 44584458058935712529150024898855822340045118183551504432563985280624482357826550323695337533764218520666446588821224064811433357276797727342102686227629912541 1414 ((31530734129374619893316849291977243521955529125566834817937754795349704637783989156291366323093726296271578055753848996037103964650508857519706192009607017,1)::nil) 36109913654881752883826526750523557934220450913666272748581651958466163209114075564538084329231478283261568989195269125274923852954454822782351274369668138676 28965342872845024547017208376761534136491522768767083020633917280581463209991399749242391865983680827349378346064478934211161314962199574741388226949954310341 0 20449658656984103300189101192451438003265792889352561597639562937951818552013451573228746920515171352710787160858005271645791266540771472067252128954612722736) :: (Ell_certif 31530734129374619893316849291977243521955529125566834817937754795349704637783989156291366323093726296271578055753848996037103964650508857519706192009607017 71782 ((439256834991705718610749899584537119639401648401644351201384118516476339998663652380243945916558948655676051317689409182292620793769278976937231758139,1)::nil) 21664189474259532914667733509669168953556440396382864985416928570777016447433371003067774723236469474019872537078469071198705089909378643721796589425425770 4125820873424774803198431609463768800647706665359688639194894239980592060185606412895478844007174500143601436203035882868367459332551219009253285562894142 22433414095490364230045875986362038122796246846201496155806409859772932197814716095173070554015746513132833133800102085135842372381841468799954126800570308 7452809891178326142978335238950230904880950763982390318649753255016804175392724385168467364847926770980832314854031562833716595745992278661099683225019486) :: (Ell_certif 439256834991705718610749899584537119639401648401644351201384118516476339998663652380243945916558948655676051317689409182292620793769278976937231758139 3045343 ((144238870626955885957919978007251439210427741112132311927222686743817146376399932670431357045336881948645407303603003372543775492053177281684389,1)::nil) 0 317952 24 576) :: (Ell_certif 144238870626955885957919978007251439210427741112132311927222686743817146376399932670431357045336881948645407303603003372543775492053177281684389 82 ((1759010617401901048267316804966480965980826111123564779600276667607526173570651216119975339506545577941458532040974089131265226834228580204589,1)::nil) 80682188005300380657302416203369337354909327096064167233360061959407599404064974009886806742239325737560475446273625272086689798334275248532309 91175847798797781326584253387445642986117519800851911790318961452627577949967521023081924266786588819996078416669571684796554097068474986281430 47886655892710860980528096271232376582683133151233552228721592847492773532229669101481131627384896457148436084970507459105164063398173140884384 112404616316428812750591328338560479451380868427043417720935707340765504442489812249258926671825180560085755124503645724505664627260600629205530) :: (Ell_certif 1759010617401901048267316804966480965980826111123564779600276667607526173570651216119975339506545577941458532040974089131265226834228580204589 1989 ((884369340071342910139425241310447946697247919116925479939807273809716530188346650164967643719192120729182210336983964241703047218643274911,1)::nil) 1056983222810106515611835486168659018994707422944032296481766035312915835761331864320669294151320219958845412868322255018247632991628910726238 797019786552191708572845393160869433296525219348175444152387084970568973078889398806965574452141995903158457132816306235121576522634754269757 0 149835121834661347267917438716992129046182392851677489484515513653682237191788097261202208222629190820694360725597091348112645130824389790508) :: (Ell_certif 884369340071342910139425241310447946697247919116925479939807273809716530188346650164967643719192120729182210336983964241703047218643274911 2541700 ((347944029614566199842398883153184068417692064018934366738721042534412857484436261629066938867909821917670056911231430966941501233707,1)::nil) 0 192 4 16) :: (Ell_certif 347944029614566199842398883153184068417692064018934366738721042534412857484436261629066938867909821917670056911231430966941501233707 1158520 ((300334935620072333531055901627234806837768932792644379672962954921416380980484134719976917435222903347051676618689560340703679,1)::nil) 287801867425002179759283734662700283687655546302963953780972753319682107097755084087113743042231611201466916655383878239198018661527 151865441503209943283364615108874676770912006801270064096222894551789911135113644846356291989179274837627765874034229186073881402789 317584063090440840106283068577779090962859712677761639585080075827282266564892515009657752886455073911168717920292406107777428475754 81134864955429889416799918353598000479075286890919674432234771664635591307865166336952046481699045124498762866452850317700786682171) :: (Ell_certif 300334935620072333531055901627234806837768932792644379672962954921416380980484134719976917435222903347051676618689560340703679 52443 ((5726883199284410379479738032287146174661421596641007945254141736990458805528127602481922401102008981450682571802083446807,1)::nil) 0 78608 17 289) :: (Ell_certif 5726883199284410379479738032287146174661421596641007945254141736990458805528127602481922401102008981450682571802083446807 281796 ((20322798049952484703401531718999368957193933187983533993577431572430790560413611458823008956570989908644403492409219,1)::nil) 3352057262380302433159956528395138286641076238021517631592873706118888475792493117330024012784804945315858817464550240852 4398394423868050941501258843405325282032625356863556518880386472215716859942671306829288107980936531437356778243027689242 0 144290147060743698621329843738860872396840868041016559854394194431556965729981275048963522499047359916202929553469464334) :: (Ell_certif 20322798049952484703401531718999368957193933187983533993577431572430790560413611458823008956570989908644403492409219 289 ((70321100518866729077513950584772902966068972968801155687112998273283661852658956378797776723446528957383779986489,1)::nil) 20322798049952484703401531718999368957193933187983533993577431572430790560413611458823008110231881269192467654793139 9476865744830856719995764701724677178102 9864395859 97306305663056347881) :: (Ell_certif 70321100518866729077513950584772902966068972968801155687112998273283661852658956378797776723446528957383779986489 17291811568 ((4066728361127994052029213656810125087413800863180974242708727083597041846553233250188810839654101775511,1)::nil) 28571494051671973044268778284784895982549556386710172819024227673753620284560133973214182533385657557426295125106 45908004331693333084924231931855735990990628428776209165152597575570091832009766759386823625739022138471740113514 9678149513037688653672039554214311669570524789332945938442601182325484634559502937651805377811894880273900468970 45873929273118195980091614098192676345379083274643484034078209255387773088948522107296656706103923111152295311514) :: (Ell_certif 4066728361127994052029213656810125087413800863180974242708727083597041846553233250188810839654101775511 49332153 ((82435655324591125224743660727925762482205081606330344321055168639449172489317379238860019695537,1)::nil) 0 9000 10 100) :: (Ell_certif 82435655324591125224743660727925762482205081606330344321055168639449172489317379238860019695537 163 ((505740216715282976838918163975004677804939150961221142461435167076311500331797794415912830933,1)::nil) 0 223608 22 484) :: (SPock_certif 505740216715282976838918163975004677804939150961221142461435167076311500331797794415912830933 2 ((1046015687364595436613052881898779458201871284243009486116492448843644776608088229827821, 1)::nil)) :: (Ell_certif 1046015687364595436613052881898779458201871284243009486116492448843644776608088229827821 137456 ((7609821960224329506264207323789281356956926800526562910664145480319987473784407561,1)::nil) 1046015687364595436613052881898779458201871284243009486116491605486851657127982931777821 9426818268552947841706936612224615906250 29541001575 96963419339350275625) :: (Ell_certif 7609821960224329506264207323789281356956926800526562910664145480319987473784407561 1501250 ((5068990481415040470450762580375874342685797855417453834533568048918499876373,1)::nil) 48 0 4 16) :: (Ell_certif 5068990481415040470450762580375874342685797855417453834533568048918499876373 18530 ((273555881349975200779857667586393650440585709174296498049809117619736557,1)::nil) 2534495240707520235225381290187937171342898927708726917266784024459249938227 0 18 81) :: (Ell_certif 273555881349975200779857667586393650440585709174296498049809117619736557 11739 ((23303167335375687944446517385330407138279413825589809434578855014417,1)::nil) 0 6912 24 144) :: (Ell_certif 23303167335375687944446517385330407138279413825589809434578855014417 1056688 ((22053025429810585475037586672064410272347802756457659760202401,1)::nil) 0 58320 36 324) :: (Ell_certif 22053025429810585475037586672064410272347802756457659760202401 8425 ((2617569783953778691399120079771309435309917425727616598799,1)::nil) 0 317952 24 576) :: (Ell_certif 2617569783953778691399120079771309435309917425727616598799 1629129 ((1606729598425771495933790436310178078553286751598037,1)::nil) 0 500 5 25) :: (Ell_certif 1606729598425771495933790436310178078553286751598037 200 ((8033647992128857479668951832401655370775689635433,1)::nil) 1606729598425771495933790436310178078553286751583637 0 600 14400) :: (SPock_certif 8033647992128857479668951832401655370775689635433 2 ((412947100984786672669874565929150889832343, 1)::nil)) :: (Ell_certif 412947100984786672669874565929150889832343 286 ((1443870982464289065279503264787152878957,1)::nil) 395782698413311403961951326194589326448116 13398506095084338303206331787761877375005 319902652602782924935210088488657893499781 302181422103189559887336984150565332399698) :: (Ell_certif 1443870982464289065279503264787152878957 121089 ((11924047456534359563858259246341107,1)::nil) 0 192 4 16) :: (SPock_certif 11924047456534359563858259246341107 2 ((64107782024378277225044404550221, 1)::nil)) :: (Ell_certif 64107782024378277225044404550221 277436308 ((231072070150163120992111,1)::nil) 0 2058 7 49) :: (SPock_certif 231072070150163120992111 2 ((48295171001269, 1)::nil)) :: (Proof_certif 48295171001269 prime48295171001269) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t175/prime8.v000066400000000000000000000326631451023060700215600ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime335795197057 : prime 335795197057. Proof. apply (Pocklington_refl (Pock_certif 335795197057 7 ((19, 1)::(3, 1)::(2,7)::nil) 1383) ((Proof_certif 19 prime19) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime8901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789417: prime 8901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789417. apply (Pocklington_refl (Ell_certif 8901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789417 506 ((17591372663814473234760893963792294929976067437661638364319523520226418755184697211486837760402204506984888761267256149932889725704708670016918042959153706043664881550540167,1)::nil) 3619966932051649542009678965869333041970857980313298677974157375317874483683029545004507273108661525608068703056780473930421586993486033365539714581709078384902854562661316947 748066231169499188197862707902524962876297610262128433020065997608294145388865631717002342607181279105102779733588740971222016277548214370414112918072628460702416836730561165 842358277696625851770126757849901021948466307067434118540173976487111107521493701536893038037760266786376641908539086347576789938457527282702513883572102906349852830073751428 2701028273577793120965634553148603112822555320945313117632350374142243724022766291936244130040762824548273664171311149955627701416251590233906736239083268470487054187262400101) ( (Ell_certif 17591372663814473234760893963792294929976067437661638364319523520226418755184697211486837760402204506984888761267256149932889725704708670016918042959153706043664881550540167 1876 ((9377064319730529442836297422064123097002168143742877592920854754918133664810606189492042120828165929042003912772395099987269115274764784505797055290541066684891304206229,1)::nil) 16475823800292812237424416743935840832077848637925278041894741044254829214607594195473450710110038062321649825590293297653186872351198147214152928846878654862890365576666737 813969524080539205071998473291828280261700278210005006793516362688196778259696250773423812881211064278309212519523296389562279615767045859626017623878268342677936666943778 0 14165856779304523613434491807999679962058109354523064230704081121462741177344202024969983749207310334547935740232635667303767381011207727646112696914327812674848107730991445) :: (Ell_certif 9377064319730529442836297422064123097002168143742877592920854754918133664810606189492042120828165929042003912772395099987269115274764784505797055290541066684891304206229 3083 ((3041538864654728979187900558567668860526165469913356338929891260109676829325529091627216120914938276928819665738658911646252196651163067072279558338653537281124561597,1)::nil) 2969977189794486498709573724453972072691428856638618086161594642782585156662781348759866263842410782783744185294255895471041179660682501484840928956357551043873759803541 112451295705045390986321578022040483704964238675076247627101547583272042935146551312468167411475929200135295854244424586283001232320034182304522547280828461744576546490 0 2558850988303667447595913448099398788899724695338000226789589548022177521843457146031348605741984175028375141190416725619977612885995313134823919268367470284534011062840) :: (Ell_certif 3041538864654728979187900558567668860526165469913356338929891260109676829325529091627216120914938276928819665738658911646252196651163067072279558338653537281124561597 144 ((21121797671213395688804864990053255975876149096620530131457578195206089092538396468956707601541164694163464726889032763257788117025030402852609909567604926237249153,1)::nil) 3041538864654728979187900558567668860526165469913356338929891260109676829325529091627216120914938276928819665738658911646252196651163067072279558338541643448676761117 14406462054002124060149776 0 3795584547076) :: (Ell_certif 21121797671213395688804864990053255975876149096620530131457578195206089092538396468956707601541164694163464726889032763257788117025030402852609909567604926237249153 11119 ((1899613065132961209533668944154443383026904316631039673662881391780383945726989520377512347569509677873027563849466280662410927270580791855795262431646183843029,1)::nil) 21121797671213395688804864990053255975876149096620530131457578195206089092538396468956707601541164694163464726889032763257788117025030402852609909455711093789448673 14406462054002124060149776 0 3795584547076) :: (Ell_certif 1899613065132961209533668944154443383026904316631039673662881391780383945726989520377512347569509677873027563849466280662410927270580791855795262431646183843029 2464 ((770946860849416075297755253309433191163516362269090776648896668742038939012576888777085480686014575760052509049947237374070805041583914369463445611498856633,1)::nil) 1899613065132961209533668944154443383026904316631039673662881391780383945726989520377512347569509677873027563849466280662410927270580791855795262431646183699669 25690112 64 4096) :: (Ell_certif 770946860849416075297755253309433191163516362269090776648896668742038939012576888777085480686014575760052509049947237374070805041583914369463445611498856633 179989 ((4283299873044553141012813301420826779211598276945206521781312573224135580577577184661008441103306642750784464755171872695608524486431952813504568447073,1)::nil) 0 61440 16 256) :: (Ell_certif 4283299873044553141012813301420826779211598276945206521781312573224135580577577184661008441103306642750784464755171872695608524486431952813504568447073 324769172564 ((13188751380645504624215837497541467484476053089486931288264895187289311729841261709315662031882831408601183193727986976637788596038175358589,1)::nil) 3144236304965886538112651720938090680057399563145872703352261936062057841337834201526566186918168366823442868973603272302645437878240533519987187537502 3632948941811554563459765372394242521806372866346286841524118787922104281129742265119969259657592987391741690263201515547981309864859311956669991736646 0 3310743306568721136815990475618969656156288754985679894063293303492291895209983476281464634109364884531880010165337910646426657878360931043923877067806) :: (Ell_certif 13188751380645504624215837497541467484476053089486931288264895187289311729841261709315662031882831408601183193727986976637788596038175358589 1530629 ((8616556579449039985663304104091499301578666737326243843717122298930256023464583659011219747802049132206524310443862995461919558715311,1)::nil) 555295994849304730161896141427359222207044037466101407717612848090700933443221322842684140347294112411988406714047892594573306286769156031 12283566448900742792867956506223145283019203521307512760195640990931394721205379187061910055525900609716972695735085745086931668595783071150 8463662805311553318193500608151757069730173318557156500350750582835076134945716512712632725729573198016741624403429026955818365993336120119 10916541879968655701741289703018493236872746598828199399708577579716383235734034340187510473967684077214166045599213108048718656565687281254) :: (Ell_certif 8616556579449039985663304104091499301578666737326243843717122298930256023464583659011219747802049132206524310443862995461919558715311 17002 ((506796646244502998803864492653305452392581269105178440402136354483263559820652822493909642133602360312077462489443317331014459171,1)::nil) 8118723195346357896162611716072609458426735399651447699816060943334332107609840740643726180975112073829373377352630262516906995191079 6178943968412248049012652325534662408146901286301026288222276949467151368280006466896269065963603996211304141719349693788292621338297 0 625980123745319053291297357394914550852953980037864418833171562886473563081056833660113945579215304930595378237479131658805770677877) :: (Ell_certif 506796646244502998803864492653305452392581269105178440402136354483263559820652822493909642133602360312077462489443317331014459171 346705004 ((1461751749751217893595399311436835945963391024795184209115529103926317844448851035217706135547674402676008159681675134539,1)::nil) 331445149000070030612285742221408292341196428714395425883381517683328381553896937429347645018895935295202932708958097619172826469 346915921623068741360771715954856017414125024071853220354845978785027267328475400871999117218560124605548589148458248689326282783 0 384525312295617131583217379476220717905109703294995903193230773630230535232562403551117424963148370848365574204890372423444162646) :: (Ell_certif 1461751749751217893595399311436835945963391024795184209115529103926317844448851035217706135547674402676008159681675134539 5687 ((257033893045756619236047003945285026545347463477261158627664980642414523409287191430158658402354330243371616823527477,1)::nil) 1253676870244535138563342410194265335247788065880382534688096316433449387295986462418229878494486042283029557053325017734 282457685062000868136385983062456259190974770378884489096953948334424656435713821234063227105074278066421934304583263655 0 838069378198426838553889913697695732936513422190633373210973212544716047836647829085188225942066795472372104391153600862) :: (Ell_certif 257033893045756619236047003945285026545347463477261158627664980642414523409287191430158658402354330243371616823527477 27091 ((9487796428546625050239821488512237515977537317827365495097847339014244596991179779323471012318553965150721910179,1)::nil) 0 2058 7 49) :: (Ell_certif 9487796428546625050239821488512237515977537317827365495097847339014244596991179779323471012318553965150721910179 16268 ((583218369101710416169155488597998372017306203456317033131529733488151458390415806416772094000136221055178813,1)::nil) 1644610343423658594214962788303831908843945454403231921590095114489352223423801028859982274960646499613190127770 1430372673770092472968625510541311002470447710053676841621645199865979639483599353425653186556093493342246582446 0 9041083433259021810685342409012012258115806413216402652304883194360881612727495639245543724641278737776515444551) :: (Ell_certif 583218369101710416169155488597998372017306203456317033131529733488151458390415806416772094000136221055178813 587794 ((992215587606730276541025407877586998195466785057889383867380068126517483889229824726234740605737095137,1)::nil) 291609184550855208084577744298999186008653101728158516565764866744075729195207903208386047000068110527589447 0 18 81) :: (Ell_certif 992215587606730276541025407877586998195466785057889383867380068126517483889229824726234740605737095137 584485312 ((1697588574487104094313024255907370001105291735813355208214390106348768611572385844316766244889,1)::nil) 0 290688160431659260705378537464136815877578159684928530429896504333940669108172800212764084161843216025 248053896901682569135256351969396749548866696264472345966845017031629370972307456181558685151434273959 930202113381309634257211319885237810808250110991771297375668813868610141146152960680845069317878530084) :: (Ell_certif 1697588574487104094313024255907370001105291735813355208214390106348768611572385844316766244889 98141043 ((17297437673319857567776452670340685100578070438185104620842469790544253222044626594209,1)::nil) 0 500 5 25) :: (Ell_certif 17297437673319857567776452670340685100578070438185104620842469790544253222044626594209 167713 ((103137131130680731772590393531453644622528186623543544042332596534562146070255721,1)::nil) 0 317952 24 576) :: (Ell_certif 103137131130680731772590393531453644622528186623543544042332596534562146070255721 2709 ((38072030686851506745142264131212124260802125324666142896519338833019651613641,1)::nil) 0 78608 17 289) :: (Ell_certif 38072030686851506745142264131212124260802125324666142896519338833019651613641 44958916 ((846818252620937451987104496274156704772085901019030693794770592063149,1)::nil) 18 0 3 9) :: (Ell_certif 846818252620937451987104496274156704772085901019030693794770592063149 141975 ((5964558919675558739123821069020297300742161202405806633670736317,1)::nil) 846818252620937451987104496274156704772085901019030693794769834479245 8234810772496 0 2869636) :: (Ell_certif 5964558919675558739123821069020297300742161202405806633670736317 145047 ((41121560043817236751699939116425673889955053818741722957209,1)::nil) 0 13310 11 121) :: (Ell_certif 41121560043817236751699939116425673889955053818741722957209 366238348 ((112280869189092226769491487319771048913718765303797,1)::nil) 4179733674737320519904576685923693897640110139738250951856 20726657336837179087755558372779219835997884503176261066551 0 14635892166852833210696764091857564573876305469884652228951) :: (Ell_certif 112280869189092226769491487319771048913718765303797 14998809 ((7485985666534737976161405750954549684017473,1)::nil) 0 6912 24 144) :: (Ell_certif 7485985666534737976161405750954549684017473 784 ((9548451105273900479791740782284034812397,1)::nil) 4624 0 272 4624) :: (SPock_certif 9548451105273900479791740782284034812397 2 ((82314233666154314480963282605896851831, 1)::nil)) :: (Ell_certif 82314233666154314480963282605896851831 464067352 ((177375618671305096389262687307,1)::nil) 82314233666154314480963282605896834891 1043504 88 484) :: (Ell_certif 177375618671305096389262687307 4132189986 ((42925329975693004019,1)::nil) 177375618671305096389262658477 1668296 155 961) :: (SPock_certif 42925329975693004019 2 ((21462664987846502009, 1)::nil)) :: (Ell_certif 21462664987846502009 63915938 ((335795197057,1)::nil) 5471475671583451518 0 16132268549092151845 10801872110337801682) :: (Proof_certif 335795197057 prime335795197057) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t175/prime9.v000066400000000000000000000326131451023060700215540ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime7820117907853 : prime 7820117907853. Proof. apply (Pocklington_refl (Pock_certif 7820117907853 2 ((29629, 1)::(2,2)::nil) 88750) ((Proof_certif 29629 prime29629) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime9012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890127: prime 9012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890127. apply (Pocklington_refl (Ell_certif 9012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890127 1433054 ((6288908637707465711613186562955068228886630395343015771531839702024961307274232436547018459851803881429355750742573634110800379144961772141022058352053271081647928871509,1)::nil) 4229354894944145007384868926473290470560569497071659030082827190739028082786688955261628144562091015445664333942854120932407066198814767556063781749516808753814197591579285805 6265080120501491566429653199327095593741076568861236596198085206522522165886641115668261995521494502971128810550626396452339768679106174727476638764934735135197952488942689856 0 3390779899595320300041875992253913629932245418658056308823800683608892890446611240621236671624013559318732451310686173709186884452517308164026602790226460152274195076423422176) ( (Ell_certif 6288908637707465711613186562955068228886630395343015771531839702024961307274232436547018459851803881429355750742573634110800379144961772141022058352053271081647928871509 67 ((93864308025484562859898306909777137744576573064821130918385667194402407571257200545407860399210476092652506655154409309169775974963349585688201834984500021896964812983,1)::nil) 4801472833727706686409732303970526363175087397216442585093418973639035362192918525252259519793046279814999694880237510215089192009498312428341926173899175921201013285523 5498723166164317729914389570536806644374929653970334385049611754591055346838177005699449412749499311513961922477640630046661004193687998608081522203224223969063383624114 5836104885242415015900341850445478710287681145440414613947560410942085167547104594515150477304376686263160763820482323072604257310199402972984868296793727280791730334436 4243139520483649893559534800371735742864605315893851358209320022060996738070936031996785780457225444368890181313523199962636884584165351761119710221172529155821808827677) :: (SPock_certif 93864308025484562859898306909777137744576573064821130918385667194402407571257200545407860399210476092652506655154409309169775974963349585688201834984500021896964812983 2 ((53759626589624606448968102468371785649814761205510384260243795643987633202323711652581821534484808758678411600890268791047981658054610301081444349933848809792076067, 1)::nil)) :: (Ell_certif 53759626589624606448968102468371785649814761205510384260243795643987633202323711652581821534484808758678411600890268791047981658054610301081444349933848809792076067 716777 ((75001885648708882189255657573236565416879672765044615354906471111639510199579104293340747123599210215303232424723221948711959384559733007628760514956613363791,1)::nil) 27621444361365644857830349046157587348589160125518289424519224674381791561770037877865293834237966461325047665394057724669132576782773990250774505861339923468878068 35515903146260312429993579003415410016466597855753779115851124147552956863533087255450615291691596820444460367779394796554916291535193051765256352739234601403377955 35761678409653300304527996144774546805682913137215042162104238101362316084353237958950927413984148145699824816973980708898446721409272366381348495963703621501697980 5300352452099430617876837141426728672717906428041836199868262462897864415282723459791755493093018868744063379523185962442717398099128700523508772404426157813758529) :: (Ell_certif 75001885648708882189255657573236565416879672765044615354906471111639510199579104293340747123599210215303232424723221948711959384559733007628760514956613363791 128 ((585952231630538142103559824790910667319372443476911057460206805559683673434211616975487459755469519563269598894178823752351420938814861484840279129293240203,1)::nil) 75001885648708882189255657573236565416879672765044615354906471111639510199579104293340747123599210215303232424723221948711959384559733007628760514956593781151 41013881216 7480 559504) :: (Ell_certif 585952231630538142103559824790910667319372443476911057460206805559683673434211616975487459755469519563269598894178823752351420938814861484840279129293240203 2368 ((247446043762896174874814115198864302077437687279100953319344090185677226957015670341153148829609530926077870975464551115989124459007046448172130650561597,1)::nil) 585952231630538142103559824790910667319372443476911057460206805559683673434211616975487459755469519563269598894178823752351420938814861484840279129293096843 25690112 64 4096) :: (Ell_certif 247446043762896174874814115198864302077437687279100953319344090185677226957015670341153148829609530926077870975464551115989124459007046448172130650561597 25929 ((9543215849546691923129087708699305876718642727413357758469053576523476684676783716425353876977100347120779427057473499163546810901204227159082868111,1)::nil) 0 1272112 129 1849) :: (Ell_certif 9543215849546691923129087708699305876718642727413357758469053576523476684676783716425353876977100347120779427057473499163546810901204227159082868111 2849946 ((3348560235719095001494445055695548574154963893145118454338802762060571212483311825125201258768090731023853354702890996311430725631151776532137,1)::nil) 7104771896004991896014629710860463062754714169952156061120133240838842189923263953354599793696182594486424358493278302773751711468647358827850058138 3694974158250754804485860817542477531997698012647272764852474173123249770116223543064000418638195309101252848742757792566478288192515833015279747865 4999532276409639300134995095357419223808797984614430696962855079784940423459318486691324119334322153278990814686143835921896762088848883363904807308 648343966373939547300454169477784658695375934179426350024068754625819012435056763186308257419611342717828179772113104508539901856036188103679466271) :: (Ell_certif 3348560235719095001494445055695548574154963893145118454338802762060571212483311825125201258768090731023853354702890996311430725631151776532137 60 ((55809337261984916691574084261592476235916064885751974238980046034342851762314075188427955513401554950854702000415845449783411770921668363633,1)::nil) 82074058091025655322358929603428886143149332741437427775992890149129626584615233394023905797367202115156568190718722933709925135605960045774 2726967937844591199627037770309140183954938672248771776385365347635187073940092426400424853628233606672956122314015293589100485221613659636841 0 2444056382348888034264565891878007043596699063727213372749292963199158524636399674346115255760839715908064946909903118444338234733110023161253) :: (Ell_certif 55809337261984916691574084261592476235916064885751974238980046034342851762314075188427955513401554950854702000415845449783411770921668363633 351129 ((158942546078463803022746865857256097434037248093298970574860082859413106591294580834087386908285629484325327604768427550004521665624313,1)::nil) 0 419904 108 1296) :: (Ell_certif 158942546078463803022746865857256097434037248093298970574860082859413106591294580834087386908285629484325327604768427550004521665624313 3513518812 ((45237425664440644247999792937285146214847489506852530999017199188229568901634422518055910434282177678609374479011596418044187,1)::nil) 0 58320 36 324) :: (Ell_certif 45237425664440644247999792937285146214847489506852530999017199188229568901634422518055910434282177678609374479011596418044187 964 ((46926790108340917269709328773117371592165445546527521783212861850131179103815446210119142435887113513873843261788772988101,1)::nil) 0 192 4 16) :: (SPock_certif 46926790108340917269709328773117371592165445546527521783212861850131179103815446210119142435887113513873843261788772988101 2 ((5336652918510788585594637823469843129674348145352429893579527805275741656012583013216783509704788135725364000066957, 1)::nil)) :: (Ell_certif 5336652918510788585594637823469843129674348145352429893579527805275741656012583013216783509704788135725364000066957 386988 ((13790228427007526294341524345638219091223366474806531193680902530628200191746920220719398813934672948646035963,1)::nil) 2727301617958132659309507913645803052130810610412767692642507110937514116120222357183752592088309575137734935080102 1900614469460966405084872035107652777389656469032583986790435332224548296935861099422054216425184206428073310786259 0 2841566079423335368305702233230524594651340205317108068650457860526518118240905300404859424942095242104937523673617) :: (Ell_certif 13790228427007526294341524345638219091223366474806531193680902530628200191746920220719398813934672948646035963 37813 ((364695433501904802431479235861693573406589439473369772046626718473919383290576164653951138789020924344937,1)::nil) 0 35672 14 196) :: (Ell_certif 364695433501904802431479235861693573406589439473369772046626718473919383290576164653951138789020924344937 404037894421 ((902626804410328199994852620590732561678709846474531295454065226368991868644059638304228636463,1)::nil) 0 13310 11 121) :: (SPock_certif 902626804410328199994852620590732561678709846474531295454065226368991868644059638304228636463 2 ((4065886506352829729706543335994290818372566876011402231775068587247711120018286659028056921, 1)::nil)) :: (Ell_certif 4065886506352829729706543335994290818372566876011402231775068587247711120018286659028056921 1548 ((2626541670770561840895699829453676239258764129200452721693884755146440496209049156284651,1)::nil) 4065886506352829729706543335994290818372566876011402231775068587247711120018286659028035051 1102248 27 729) :: (Ell_certif 2626541670770561840895699829453676239258764129200452721693884755146440496209049156284651 153 ((17166939024644195038533985813422720518031137667908168458105528249945264365016044066623,1)::nil) 1835707837943306146043212579326490514922931914293883717957376103602595378599478736601638 2362885331961342901734713033821884366827066100160549713731888114050851341837868868939014 1700192316973100440712980766762931877048601751369395369872787806564815983039411883309693 2537401621677724592364365871052828159931714423671833271825267633683565266775096359465970) :: (Ell_certif 17166939024644195038533985813422720518031137667908168458105528249945264365016044066623 105015 ((163471304334087464062600445778438513717384463067521517101423199849634395347213579,1)::nil) 17166939024644195038533985813422720518031137667908168458105528249945264365015503457719 4964006108754 1431 2047761) :: (Ell_certif 163471304334087464062600445778438513717384463067521517101423199849634395347213579 3406 ((47995098160331022919142820252037144367985866637496473723433957237819124566981,1)::nil) 26764957526627837789178319386891298063551886968954483728793881421509036898280621 103749674828931234796702965349708008725299874892949035572646638087750533058654179 69518043304771469819329522946431151837549841751782258328360538629320477236650033 89281221407482444410029733290137381483857829912956201110666676247088132530489699) :: (Ell_certif 47995098160331022919142820252037144367985866637496473723433957237819124566981 36912 ((1300257319038009940375564051041318388827528224465140258541251341275885743,1)::nil) 0 23625 30 225) :: (Ell_certif 1300257319038009940375564051041318388827528224465140258541251341275885743 4701 ((276591644126358208971615411836060070403046499846071947025866518047161,1)::nil) 0 8586756 645 16641) :: (SPock_certif 276591644126358208971615411836060070403046499846071947025866518047161 2 ((754688745407359809933879551955805419110056206217513288832819, 1)::nil)) :: (Ell_certif 754688745407359809933879551955805419110056206217513288832819 37641 ((20049646539873005763233696021822730078058378233775376681,1)::nil) 138684312594856460291620415461943089352011796801432189774744 423756709004138969291681890228993060204534771259258429965395 51063076632398555935409182364592786637645236485555822661939 66413243602777554279441146350144053375695249538337483401981) :: (Ell_certif 20049646539873005763233696021822730078058378233775376681 48964840100 ((409470274975390060821084883174457425573798051,1)::nil) 12262803188402347902822008794394546178916565097736177877 7410622176732715138282559678702242290602646913634377617 0 12716723508174917333297076690100066304853762011828181653) :: (SPock_certif 409470274975390060821084883174457425573798051 2 ((1926465655024182831433003449421112329211, 1)::nil)) :: (Ell_certif 1926465655024182831433003449421112329211 28536562 ((67508680794280082915604632603387,1)::nil) 599118952060138999446530659087679548288 999349547194817363979623121758692167777 1892992685132700765659688707790032124848 608693904421996004330531239141567053433) :: (Ell_certif 67508680794280082915604632603387 51458856 ((1311896261243741345281969,1)::nil) 66426622861300467377196007790758 43939388122672613228192734077914 0 4307194824677324012956317351780) :: (Ell_certif 1311896261243741345281969 62608 ((20954131440797414659,1)::nil) 0 1224778150145524217227661 655948130621870672641172 1229902744916007511210635) :: (Ell_certif 20954131440797414659 2604 ((8046901478030479,1)::nil) 0 44217 34 289) :: (Ell_certif 8046901478030479 1029 ((7820117907853,1)::nil) 0 500 5 25) :: (Proof_certif 7820117907853 prime7820117907853) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t200/000077500000000000000000000000001451023060700201405ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/examples/t200/.depend000066400000000000000000000022221451023060700213760ustar00rootroot00000000000000prime1.vo: prime1.v ../PocklingtonRefl.vo prime1.vi: prime1.v ../PocklingtonRefl.vo prime2.vo: prime2.v ../PocklingtonRefl.vo prime2.vi: prime2.v ../PocklingtonRefl.vo prime3.vo: prime3.v ../PocklingtonRefl.vo prime3.vi: prime3.v ../PocklingtonRefl.vo prime4.vo: prime4.v ../PocklingtonRefl.vo prime4.vi: prime4.v ../PocklingtonRefl.vo prime5.vo: prime5.v ../PocklingtonRefl.vo prime5.vi: prime5.v ../PocklingtonRefl.vo prime6.vo: prime6.v ../PocklingtonRefl.vo prime6.vi: prime6.v ../PocklingtonRefl.vo prime7.vo: prime7.v ../PocklingtonRefl.vo prime7.vi: prime7.v ../PocklingtonRefl.vo prime8.vo: prime8.v ../PocklingtonRefl.vo prime8.vi: prime8.v ../PocklingtonRefl.vo prime9.vo: prime9.v ../PocklingtonRefl.vo prime9.vi: prime9.v ../PocklingtonRefl.vo prime1.html: prime1.v ../PocklingtonRefl.html prime2.html: prime2.v ../PocklingtonRefl.html prime3.html: prime3.v ../PocklingtonRefl.html prime4.html: prime4.v ../PocklingtonRefl.html prime5.html: prime5.v ../PocklingtonRefl.html prime6.html: prime6.v ../PocklingtonRefl.html prime7.html: prime7.v ../PocklingtonRefl.html prime8.html: prime8.v ../PocklingtonRefl.html prime9.html: prime9.v ../PocklingtonRefl.html coqprime-8.18/src/Coqprime/examples/t200/Makefile000066400000000000000000000003741451023060700216040ustar00rootroot00000000000000ifeq "$(COQBIN)" "" COQBIN=$(dir $(shell which coqtop))/ endif %: Makefile.coq Makefile.coq: _CoqProject $(COQBIN)coq_makefile -f _CoqProject -o Makefile.coq tests: all @$(MAKE) -C tests -s clean @$(MAKE) -C tests -s all -include Makefile.coq coqprime-8.18/src/Coqprime/examples/t200/Makefile.coq.local000066400000000000000000000000461451023060700234520ustar00rootroot00000000000000 res : make clean; make -s all > res coqprime-8.18/src/Coqprime/examples/t200/_CoqProject000066400000000000000000000001611451023060700222710ustar00rootroot00000000000000-R ../../../Coqprime Coqprime prime1.v prime2.v prime3.v prime4.v prime5.v prime6.v prime7.v prime8.v prime9.v coqprime-8.18/src/Coqprime/examples/t200/prime1.v000066400000000000000000000352621451023060700215340ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime3259999916207 : prime 3259999916207. Proof. apply (Pocklington_refl (Pock_certif 3259999916207 5 ((271, 1)::(29, 1)::(2,1)::nil) 22223) ((Proof_certif 271 prime271) :: (Proof_certif 29 prime29) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234571423: prime 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234571423. apply (Pocklington_refl (Ell_certif 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234571423 1571217 ((7857399010597879153626428933121488425151481028966796729407212591054514579824359158191891388869697125263035101409466682601634263276390713436616145199998667490289404452611338064885484002280906391,1)::nil) 2214486619997696483492338817424698481323841514269918360255184369678021787855561694563591140105335822067752052031799553030687348435611311838172549310786728215147121619401926807649020322706485997325279 6358268502326496958467840293428097262429831251931792899139917478212383718551393118315637331013411416415664905797456842073092051154326363844386104855501668154769847706600106538805991825172494091701453 0 11208658529219248429790750877455004940036318822307025277740101048515024436432432840306432488485127198826223981644452217866442131057230323702993148113858111673972727323431197618058217272852014617675987) ( (Ell_certif 7857399010597879153626428933121488425151481028966796729407212591054514579824359158191891388869697125263035101409466682601634263276390713436616145199998667490289404452611338064885484002280906391 1337770218763426 ((5873504209011994412150411683803195740624824193450948610292450610747106779935908557961738435187080835519342899647839764729122387672305164328860748086261007880857448190129778473763,1)::nil) 4550287404510327323720007731053859522302411690924409811925866701438741086617143185820695916294845430199641486377530643698201355147073869540300092296474815473413175095717364717591582844306361427 4453114550451771030368194058940604995169877268471792039099969253290717429528128310708454504966103881684700368063807984931425836294802229307464152591725324745616996896819078425685543820132212654 0 3473552376103258786148123064551628458671825648770181167351518103771350661255470982831458002193256202353340837661859930007852477197307801913700194221524166545975201813573217213221229669194979090) :: (Ell_certif 5873504209011994412150411683803195740624824193450948610292450610747106779935908557961738435187080835519342899647839764729122387672305164328860748086261007880857448190129778473763 56433 ((104079248117448911313423204220991188500076625262717711450613127261480105256426356173900704364666693757308417510009234028519553126492838407728205000561705214235860799050822091,1)::nil) 4316945691762961109438473153432327084833693898473894902850103084045596600419495510615338720940693403738532263657130716357677346786756129936677152958060799138089633210034916845655 4116198132005065389645160397507024721362747503985461690497863014857480736919130931425487503331637264146546879903696743250453234541487741133967589268747344125401396888487683392806 3378405734926337299068142748315801766780614275841211764311013248070033342745974224701032089837575191843497685185812807029004766337718965341805736975846036594323397612002635169261 1056472255624755971117023346601284084937476855466399980564491206813295341318478022149765752397541679567192403143842791686782940661131266430021184704522856171958822245638513603677) :: (Ell_certif 104079248117448911313423204220991188500076625262717711450613127261480105256426356173900704364666693757308417510009234028519553126492838407728205000561705214235860799050822091 10903 ((9545927553650271605376795764559404613416181350336394703348906471749069545668747700073418601294057323322081646157699806071567074084252296653338758021328602960797171935289,1)::nil) 97368652896395104277831053450250916739724621878754640156931487767565949529526177727677031695162881137399969985234397177905413686905060492018692696751188918120546177334932820 98358357100268736696840218091205495319401275912818628604240003470578052540690159252710235474137664495934826321547382727181097355330264492788510110360514133221537386002473123 0 85055582202573820056936107965057590584025315642642230417589466061276991031795558704248768655360796541432204642864539729076275579750714133651606233601954777172684018392443310) :: (Ell_certif 9545927553650271605376795764559404613416181350336394703348906471749069545668747700073418601294057323322081646157699806071567074084252296653338758021328602960797171935289 1537 ((6210753125341751207141701863734160451149109531773841706798247541801606731079211255742276962468820393399458223913584612613129721081675207033171581513029738035710906573,1)::nil) 3763566248645594925780881303136029845270380528593813515630271204095485295727421883917157430225249147417049865558893559757725708035564056737032921068883894813598736944105 2159528854799089441201213489578363580803122267165876147513015339399575980928374625069805259305955880806118869193758735263220579365517879719834374494329687881750819767632 0 3840353982102252756864375117578500556931812151844217721401802744996068200196810850037943451639854224272893043542959830538711146800466698616743100269792956821139502230683) :: (Ell_certif 6210753125341751207141701863734160451149109531773841706798247541801606731079211255742276962468820393399458223913584612613129721081675207033171581513029738035710906573 22583266974 ((275015706650953539187509667339513446038452236727910087664637265329333246143787595276401494753216368954934895280018810838981209229343713312612332597402854111,1)::nil) 2177001789043994901382571738672634725128601757186626644869913038803455170525739513102816259785330022667250446308314049907145520196080665849641011938972651443499174387 6078180756282693667884606539214024170525833254168830311303136161395747230253951399196737206214797962270605324072176741039880346314276026680383112937365396693764584376 0 61277730714436420484980584197832581464965112576691048489978997837303781997785922350452980375500138556014242460851304603206306036819343816223603105093081226662739434) :: (Ell_certif 275015706650953539187509667339513446038452236727910087664637265329333246143787595276401494753216368954934895280018810838981209229343713312612332597402854111 9389604 ((29289382880359335621343527090121526534926524774411155961916739548263509956733844845775189446644065851038907656764890013134788370472374307230740600381,1)::nil) 0 5832 9 81) :: (Ell_certif 29289382880359335621343527090121526534926524774411155961916739548263509956733844845775189446644065851038907656764890013134788370472374307230740600381 7610823 ((3848385763321435227352354284171570740106099534099157996699797058513055678261304208894020415817141215295261147219407303635354452704790300758841,1)::nil) 29289382880359335621343527090121526534926524774411155961916739548263509956733844845775189446644065851038907656764890013134788370472374286484909124221 36370126051009921296 0 6030764964) :: (Ell_certif 3848385763321435227352354284171570740106099534099157996699797058513055678261304208894020415817141215295261147219407303635354452704790300758841 400 ((9620964408303588068380885710428926850265248835247894991749492646282638985494029322580737462168554287086596482850029540590213328715181361767,1)::nil) 1206512723451500202124974371842508050757465444466156488697105500957812123445228181542576745406207317402960650258762955264070678346737493704995 2060128083270602805015176627313073904819802699519127995924742629972027357147824702642458986872158301642648085140717261042376312989683754240921 2712036371834483591191509360972785410222977483694544504325548536610918064418405575214662963239239521765659804947934051921287667345302405974603 291388831175206545470903768962897803630446218344847546019736498188418020614161100717085101634248587555382439316374853082732855727414999495639) :: (Ell_certif 9620964408303588068380885710428926850265248835247894991749492646282638985494029322580737462168554287086596482850029540590213328715181361767 250777322422 ((38364571068008051691697576611542847244353966337237308872113038603430546609241303966052542984761621006886997198151523258577641453,1)::nil) 7143253333846117814849173490904999934674378989821146241837635489851045081510644363668530637056126169435231601939012198489074060687746850987 7988683156830804444658061624330252068088751624465915515865822824528046016998302139930404077229691831255454642458715994924470268527188949973 851358554687424465371023908991399272266138416117739758532580668259745855409260257294973020327394705860566389159259592871530353740859338602 68653378158836776780585558450103610048067831198044061635341313186806019860796633249572706413469448858936587640256673687000105614288297205) :: (Ell_certif 38364571068008051691697576611542847244353966337237308872113038603430546609241303966052542984761621006886997198151523258577641453 1372360969920 ((27955160419816124999010185061925553048414084948153571919176136541806466633655765117573091303740518194305164484283693,1)::nil) 4844661376022731499979523401945402965435540475562822008216158663977523183610927376323396147255276756963656067579880343717575623 27579761085646809586256542997219494988629533267558317869533020141245593028313280107602943920649523901303307991116022454347473895 0 22313018641674320221931912694155599805831391860437820567977242841710127445902750195193364620460239839167956244059160868887476600) :: (SPock_certif 27955160419816124999010185061925553048414084948153571919176136541806466633655765117573091303740518194305164484283693 2 ((2329596701651343749917515421827129420701173745679464326598011378483872219471313759797757608645043182858763707023641, 1)::nil)) :: (Ell_certif 2329596701651343749917515421827129420701173745679464326598011378483872219471313759797757608645043182858763707023641 559 ((4167435960020292933662818285916152809841097935025875360645612938788941030699307153267262028527938714756948525989,1)::nil) 0 1810897436049286743099943628685932635623178028868021097628922907493322545604654055467788141095170286675462143416857 1164798350825671874958757710913564710350586872839732163299005689241936109735656879898878804322521591429381853512935 2183996907798134765547670707962933831907350386574497806185635667328630205754356649810397758104727983930090975645191) :: (Ell_certif 4167435960020292933662818285916152809841097935025875360645612938788941030699307153267262028527938714756948525989 5268 ((791085034172417033724908558450294762688135522973780440541382259464295806715619831196410747088586141556927367,1)::nil) 2586473718159947258501131775006563328513464300402044442144808955842563314372505548122202583840454379247276808098 1843764705047508508622408257675436810088156087015096454153593134966996720254574162129446091134063332206235900720 0 2398442437703220334049623015694382560943085603543386112858865404058139264918985102066151535985662794642207110854) :: (Ell_certif 791085034172417033724908558450294762688135522973780440541382259464295806715619831196410747088586141556927367 16592 ((47678702638163996728839715432153734491811446659461212768757405548446941804993609579083852838354564848509,1)::nil) 506672572366001772424297248027454097490682131771763053758418693079166461876576100896860371768162904344466418 242740277414684764828645741990175914588264048815152535066299253449779454136783892320013571884164733689272080 151682374912083665580612181231497942361361840298258436930600639180107133633566728858686130075130926624974102 112289432608005432525681376563801128802564119225023738338041294985378104654277249236899924227191918543791361) :: (Ell_certif 47678702638163996728839715432153734491811446659461212768757405548446941804993609579083852838354564848509 1541649 ((30927080443190373897586101266989914365599073887416154109937588495066423826131829307644047740252953,1)::nil) 0 419904 108 1296) :: (Ell_certif 30927080443190373897586101266989914365599073887416154109937588495066423826131829307644047740252953 10096 ((3063300360854831012042997352118652373771699077597738536502755691413454328560359961344749489307,1)::nil) 30927080443190373897586101266989914365599073887416154109937588495066423826131829307644047740238953 784000 60 400) :: (Ell_certif 3063300360854831012042997352118652373771699077597738536502755691413454328560359961344749489307 2270617016758046 ((1349104819635574993831336755183016241366982844787016159055674852668648478421027,1)::nil) 2215240918354327855892021064021223539147201548329740748759546625791827746710766175331182021982 749073597777973888738569803146580974020363622956992109899904140690554602616977950125275127226 1414432521626293524792453560798195480589211733991492549265488062204014291000943779407278492002 757445765740195030297812179016855920339186203285358227745978396073642932687129064389511348512) :: (Ell_certif 1349104819635574993831336755183016241366982844787016159055674852668648478421027 60922 ((22144788740283887492717520028610620816224597747920515634870775551237647537,1)::nil) 863508927274984329807579387193889492758972376467643570700502451398253467210897 137963939654548335059693918252183719480970975416162075914265339742875718996984 0 147573970406941205324516524739892017171060581672900774348397259406840190040084) :: (Ell_certif 22144788740283887492717520028610620816224597747920515634870775551237647537 14261326912 ((1552785997889891684485461154023829785395006584622672420700917581,1)::nil) 0 185220 21 441) :: (Ell_certif 1552785997889891684485461154023829785395006584622672420700917581 33832048 ((45896896276864223072911848375946720797606740262851226007,1)::nil) 0 2058 7 49) :: (Ell_certif 45896896276864223072911848375946720797606740262851226007 68580195229 ((669244176450756762439776524268650909847626911,1)::nil) 0 163840 96 1024) :: (Ell_certif 669244176450756762439776524268650909847626911 18508 ((36159724251715839768737143957355058426457,1)::nil) 0 2058 7 49) :: (Ell_certif 36159724251715839768737143957355058426457 777301004 ((46519590307535277245595106130027,1)::nil) 36159724251715839768737143957355058332377 9834496 0 3136) :: (Ell_certif 46519590307535277245595106130027 5862 ((7935788179381657334441362321,1)::nil) 46519590307535277245595105058397 378071064 1323 35721) :: (Ell_certif 7935788179381657334441362321 1204045444 ((6590937425931356569,1)::nil) 0 832000 120 1600) :: (Ell_certif 6590937425931356569 1872 ((3520799909503561,1)::nil) 0 221184 48 576) :: (SPock_certif 3520799909503561 2 ((3259999916207, 1)::nil)) :: (Proof_certif 3259999916207 prime3259999916207) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t200/prime2.v000066400000000000000000000346221451023060700215340ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime64281251149 : prime 64281251149. Proof. apply (Pocklington_refl (Pock_certif 64281251149 2 ((5356770929, 1)::(2,2)::nil) 1) ((Pock_certif 5356770929 3 ((17620957, 1)::(2,4)::nil) 1) :: (Pock_certif 17620957 2 ((241, 1)::(2,2)::nil) 926) :: (Proof_certif 241 prime241) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime23456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678989: prime 23456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678989. apply (Pocklington_refl (Ell_certif 23456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678989 3410714 ((6877383742039255974331054403894157290529884850767679309344062110393604490343928348893483922561900238478142704373172745691101675801273659229637103778679515065642916026754345986841535424015187341,1)::nil) 17770060730634013050959764540100376796485681806649092768001750797185206897358727175481343957076707401412231297934660523754682851051995909532380022382498658024261172388888613563750915163760110249779757 3566264608434214508266094695745935548659236870557725559659596891952663178764746733992121208558573519617305911740834546343568484486399029844047045894836680640374073424995000469429893958370920908679180 22482274304608054939776145965465511883836236381233730953031969491020124340590085892851585139126651840777564541338470077920328000826997558719392413099882095662875495963076783669914188753297759842659775 6538793599447158761120327629592579815050409923375232578850369797774608489057418973624299986790439112556296367507470269394543033713419185333558046048922977931098200525826326175246621072843884195014200) ( (Ell_certif 6877383742039255974331054403894157290529884850767679309344062110393604490343928348893483922561900238478142704373172745691101675801273659229637103778679515065642916026754345986841535424015187341 56711 ((121270718944107068722664992750862395135509598680461979322248983625638844145649492142502934572867793028814569126517370976925527986225135211908359251357461454585755716732776546447683941641001,1)::nil) 886208252772448634166452000580968422776202202046257787389631973415685503107302130211330641016450761159603787342366094361147679156988284008958435038113159137759629391295797798249988319002207429 5104583180793274529535849468884314903098602983772860408728618875704847036594389950557920502761648074864684218216105122465700901118434951284770495875529664569111058359967302967385440933276500805 0 3926198995116665637262889538242924374698709962721686133452169568680290979656012048380049156529512072533450253990035296355109838503916319010221864896065546356753765745903621237378498894970320238) :: (Ell_certif 121270718944107068722664992750862395135509598680461979322248983625638844145649492142502934572867793028814569126517370976925527986225135211908359251357461454585755716732776546447683941641001 5772754724 ((21007426218877590532229408600603900373770600318417751525146728826381164665199014982868850288062089601798202969050167587934319925747213960948859660983256268373265480746697702499731,1)::nil) 999126667809578493140272651756333277103656741428011012340693745242382467715141693653633071605559958659175416555466210434782912745682460196456424661105258133091189822113689255184634685793 2854056043542473708083258358121963021907537006088623303018060194168625103022109372133799230282461947316723127908968428530520317624296953501718891273602561638796558426160999217305522501181 0 86417238321154938185968690137975506955672052405428612678313167262399900671332876630389653496530313259506296831279676965162259259891403041911586637099215190512732923623589666424531284201619) :: (Ell_certif 21007426218877590532229408600603900373770600318417751525146728826381164665199014982868850288062089601798202969050167587934319925747213960948859660983256268373265480746697702499731 488 ((43048004546880308467683214345499795847890574422987195748251493496682714477866833981288627577881650382650655567417076330465601023377310187399986372385602353316459431056569086803,1)::nil) 2616982521858007500180563235002064392484678517578253793452943584546771064524199527841992099686485195327990068343884775558039284021193680656334626818022317114419942239064186347199 19677646320175844408081615595648453639759431283942407566477627387105146396338974210506861393769766325148329118535169339346756304715701736200840343211320158781668284431568190097131 5258336032082208877760424939909121648384851799227522591110883330814603594501916652462151507104176515989775429409812728805849019256272964490399003066734186061749652624996029561138 3152022829987989528512015127685035820511062324349858630998320289936210369514006930665334824824335821192330254323388007688061356368900464160587781269393817518258731465194537612279) :: (Ell_certif 43048004546880308467683214345499795847890574422987195748251493496682714477866833981288627577881650382650655567417076330465601023377310187399986372385602353316459431056569086803 80972 ((531640623263354103488653044824134217357735691633987004745486013642774224149913970030240475672108658060562642977365647180039258743023666211855376935789388429478178782609357,1)::nil) 22770885890829805110465328032311515131803073381171074254150642826803961915913459896671773037757105318346035246999595998878097481742938135598066268946300186623741026010776713208 9968511205162820895340397345575063506558488498095426376075774712480454486023917114467915266266042961671323744899166813996791054130837643313945285321693103733283983453748042916 31718637753620564553552340338332460183895866506655212127910062944488177469784475021305366342383272567314607369520714084600610114916389745784813530208784723328194064338344045772 23206078971187081466135037526593973870299750134478627564350486316340848692726866213591520595063132842302062995142895421015584586222628288267080521686045067455150111445237928078) :: (Ell_certif 531640623263354103488653044824134217357735691633987004745486013642774224149913970030240475672108658060562642977365647180039258743023666211855376935789388429478178782609357 464346736 ((1144921633008644866384186331018237667460928791010145066994690824407505309028195624121270548891102983197283488460567039585691210811846852559737810244705968777072689,1)::nil) 0 54 3 9) :: (Ell_certif 1144921633008644866384186331018237667460928791010145066994690824407505309028195624121270548891102983197283488460567039585691210811846852559737810244705968777072689 9572 ((119611537088241210445485408589452326312257500105531243940105602215577236630609655474499100341149882247463144189020116175688598086279581024319286262486208383067,1)::nil) 1144921633008644866384186331018237667460928791010145066994690824407505309028195624121270548891102983197283488460567039585691210811846852559737810244705968776978609 9834496 0 3136) :: (Ell_certif 119611537088241210445485408589452326312257500105531243940105602215577236630609655474499100341149882247463144189020116175688598086279581024319286262486208383067 536754 ((222842376746593803577589377236969498713111593216876341750793850098140370878670023093292543744156701760163972499859537686004878184820127371596881081802411,1)::nil) 119611537088241210445485408589452326312257500105531243940105602215577236630609655474499100341149882247463144189020116175688598086279581024319286262486208288987 9834496 0 3136) :: (Ell_certif 222842376746593803577589377236969498713111593216876341750793850098140370878670023093292543744156701760163972499859537686004878184820127371596881081802411 17773 ((12538253347583064399796847872445253964615517538787843456411064541615955149870511891805056635722402029017640122260608839043647136817919428211166601863,1)::nil) 0 192 4 16) :: (Ell_certif 12538253347583064399796847872445253964615517538787843456411064541615955149870511891805056635722402029017640122260608839043647136817919428211166601863 1291400513522001 ((9709035435790428707440670109701680695151722085646987330863211069452338144278787206866075833616932672820320038371361126076326905194553,1)::nil) 12519805191746668613832343244224958778890092817826910993866581059516547673044339599352696332395327504402387698549267599509464946739889708343392851509 12293875894545215470556957742029517329268841687321063955903449411038859875573553934813657613692938813855225269630567601608171758588185405514779454671 0 5676429208729647971973793274983481514782487227551188215634788589707165278947497636945657702372576395386653659346361796331116180013208884001597538424) :: (Ell_certif 9709035435790428707440670109701680695151722085646987330863211069452338144278787206866075833616932672820320038371361126076326905194553 76519 ((126883982223897707856096787852712145939593069507533910935365217389788374111668219041795575227171414021943754816001776005195964671,1)::nil) 0 58320 36 324) :: (Ell_certif 126883982223897707856096787852712145939593069507533910935365217389788374111668219041795575227171414021943754816001776005195964671 36773477590 ((3450421078978995411787944199506211181252413867979079835929251785714031052227473061808836540090403763061741112080603857,1)::nil) 67257219050013038100271836052010597200434126876663553984970730454271737457226860925184090676404545684425195676932374988060082462 106470768574863079511858967615082609628905141348579753571246309024315866180808111744005788195946015783171115260358681488709430853 0 122121100601742178677664307971317045398806570710767708516611800871955830222794944580988769877237195950719500327554081528722259080) :: (Ell_certif 3450421078978995411787944199506211181252413867979079835929251785714031052227473061808836540090403763061741112080603857 233730 ((14762422791164999836511976209755748860875428348860137063831462927353794560939351972819561044454199073311718937433,1)::nil) 1040736877089017764469873769333932091787522957251821905419296150415885193258021171482443809246669348767389556627696191 0 2848000028506500999958426591963141408886191140297265353301762876889494587485110089227238357379470159488153223217376940 2245578978034006588128908984420071636519968412615450870674273968064958122742747116645640174668536555914565334354150025) :: (Ell_certif 14762422791164999836511976209755748860875428348860137063831462927353794560939351972819561044454199073311718937433 215222 ((68591606764945032740667665060987022055716554761409786471388963751851807441576784030475329311251775619353929,1)::nil) 6747524097766865262098108358184276549116500707846467875117009784095079046040754423981813223272114222310299231747 2303318336256873113090100653754829913015557531913378761176045840719525339693229115428682640386006904086235756589 0 8481501105028277924085238684782227499697440606595613906244108286410919023008648866495149835075647101083506039026) :: (Ell_certif 68591606764945032740667665060987022055716554761409786471388963751851807441576784030475329311251775619353929 422829 ((162220677306771845688606186096476405487127313314389000782939073485238996996864466425368964208632241369,1)::nil) 68591606764945032740667665060987022055716554761409786471388963751851807441576784030475329311251774861770025 8234810772496 0 2869636) :: (Ell_certif 162220677306771845688606186096476405487127313314389000782939073485238996996864466425368964208632241369 84989908 ((1908705175993034910552040909333334088173472470571317506338446003831772962658198923381876011507,1)::nil) 77768023867728758002972176760802276153023319252115732499757967996299123010380447120484583165291172799 39935958571863822664835437826315771981949966009236644774982664396458807829713145388651190923613228896 0 98745141692029587789475743553469171373550874256702354218528286336407038694252138690469590496597872052) :: (Ell_certif 1908705175993034910552040909333334088173472470571317506338446003831772962658198923381876011507 342097 ((5579426817519694445002560412202779001784501093426650630823396968284168438092259319183341,1)::nil) 0 192 4 16) :: (Ell_certif 5579426817519694445002560412202779001784501093426650630823396968284168438092259319183341 169407 ((32935042929275026681321081255218373513399688931433016006474822683433415969415947343,1)::nil) 0 8192000 320 6400) :: (Ell_certif 32935042929275026681321081255218373513399688931433016006474822683433415969415947343 351 ((93832031137535688550772311268428414568089773906641064187187440086909021167312251,1)::nil) 0 1272112 129 1849) :: (Ell_certif 93832031137535688550772311268428414568089773906641064187187440086909021167312251 117643080 ((797599239475332408423617532526591573155605618786716942950561969193607027,1)::nil) 63978850993503601579542997022066679189927879467778160031355113776113760065820146 39914808030139817577351538988008813955335013552407031375377004272858831362041899 0 12558623133518422169307815556428795801852844481815387545191831388573473441697422) :: (Ell_certif 797599239475332408423617532526591573155605618786716942950561969193607027 40848180944 ((19525942674626936220311155614591902795144902084984079344235903,1)::nil) 747449137736174342828790407113313306992303299703555359519941658875780197 93811414665548287857142967107638495965180619660612692622466867769141601 678439039355730538953133243488457392234066968411329803078621935016140190 745055986981532443197673427600600732452561269784882123593105380749913359) :: (Ell_certif 19525942674626936220311155614591902795144902084984079344235903 28098979817 ((694898633394998186111945119469730816569700665852561,1)::nil) 5029777419322935423893124188470183346825977075548886917252262 17212514823880955046903261353992534876446689568465319781745973 0 12321304087331066496691651031293564663297643734204602579979912) :: (SPock_certif 694898633394998186111945119469730816569700665852561 2 ((2878206016315629712919178124024501275250729, 1)::nil)) :: (Ell_certif 2878206016315629712919178124024501275250729 518730294411 ((5548559718463583059279760924719,1)::nil) 0 221184 48 576) :: (Ell_certif 5548559718463583059279760924719 920986 ((6024586387267101189086479,1)::nil) 2322704450620483015224692100090 4730280996841661908486087208108 4356223935382727006473661421767 5205942087478904881233889778420) :: (SPock_certif 6024586387267101189086479 2 ((1849167092469951255091, 1)::nil)) :: (SPock_certif 1849167092469951255091 2 ((1113479832402979, 1)::nil)) :: (SPock_certif 1113479832402979 2 ((64281251149, 1)::nil)) :: (Proof_certif 64281251149 prime64281251149) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t200/prime3.v000066400000000000000000000374401451023060700215360ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime2745982553 : prime 2745982553. Proof. apply (Pocklington_refl (Pock_certif 2745982553 3 ((191, 1)::(2,3)::nil) 167) ((Proof_certif 191 prime191) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime34567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789287: prime 34567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789287. apply (Pocklington_refl (Ell_certif 34567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789287 1596 ((21659079024722298879915838910547974868498406509406231628384232185394814195983090442154700021659079027291506895204300154561107084289821076117585850162298530363044142671788837419131509390645406250651,1)::nil) 24303149061913677612766055282424335166500903506159757797800668989897007505266581118524413121833423875251545648504474875329381888845245364385444158772258260273067648093712195446279311392670874486638423 28751044237952173645861437915340057754388921712055933006713383464508639993377341439956676305134023797282348724931666313488702015794273109932451798526928565469535064555328289943155890797330858637791067 0 17699492259070871289227136343317236777024340078654616193791800306128209592712052774510906441066732642871348582140586795720044434592728401285323194104456533230713669822627922717677046924523304468557908) ( (Ell_certif 21659079024722298879915838910547974868498406509406231628384232185394814195983090442154700021659079027291506895204300154561107084289821076117585850162298530363044142671788837419131509390645406250651 1292 ((16763993053190633807984395441600599743419819279726185470885628626466574455095271240057817354225293237183565750284345061275579029497409374273784547042121792088748468666934060767308141745068293667,1)::nil) 21192307991559559739312972496006743248392483852305742129445931716175618084044578286466923482236261858428866712635441405424456053085893112749417899784711181117778787874949202295867986692321720310669 9577104754661374979752955560921699254122375240375698999507096531067781236708682555312535549117498576055117125457006159932485637065549730752635084496732927623951915255512772957542038692783193850719 18445308614784337629816126476995009589440017235981591254821662610035565893922173904057136511645266482209229548550130936448000107052454363778928766377282474812787577100318525877886434585247817277474 5661091263206164015313755862394149300137183128504959677719173384399544412408326512216253361753458398635118152634141527825969187659600152505133486879194432808094566498717594870520917733548970185535) :: (Ell_certif 16763993053190633807984395441600599743419819279726185470885628626466574455095271240057817354225293237183565750284345061275579029497409374273784547042121792088748468666934060767308141745068293667 478732 ((35017490063732179607764668836845248998228276529929450028169473998952596557354158986777189229517351951182381162982701005286196371177364784983392276701618740758543431576030450382904719842371,1)::nil) 6718861739808330028016300133335882384785017302550626233165904448518743407719508077732908587873224251828404397928043801998078073351384568978014872970558990557363055077233813559277833430663410156 5129769540193386886539221104259755406121424902105436182729600312673628969793139200469699616389928075266312635422828773638755264926143980847480808548955456403211944135255546207417130259464532575 3941390741828125576260624585906842452674454989533248841586039450249633892179036204258230116203122353185718862261383057037455600494319950489916460964508682375812872639326593045632505539296482445 977997336443657048561522350172466816886894899796776281033687733375514672022527060037992197105798064649117477446864754074343353775076877111761340536995924876365530352749115595472815451502592047) :: (Ell_certif 35017490063732179607764668836845248998228276529929450028169473998952596557354158986777189229517351951182381162982701005286196371177364784983392276701618740758543431576030450382904719842371 11275775 ((3105550621906891509254545149831851823775153063086967417154871749299058961122775063069029776625386285854380364358194953304219623954646982845887009061450861201591502156748828703938089,1)::nil) 30642561251967326333131949494583747453071253273147362005197063518919809802131212367972239174051515400928231122298839521157300210781402522200859076058959486647331296120731396312421645217789 7343770798295920231251290036720721827252474606885539592674180521092592656250013324104583016386935911679146380882551322061337972315694592584858123366955273817309073097084390331866055461639 23670028441742541357942367060540175608488056446813555990586069643846902091990184419297919640163654526890901622034189918607366127663168313843636224271206727682231385580635861757495791507456 13146372209321656218035933033957831742887587002269929587111825432015988470443648197146246822505009429563511434753104023301741068375422756332695309307482358561619824959628920356522316882636) :: (Ell_certif 3105550621906891509254545149831851823775153063086967417154871749299058961122775063069029776625386285854380364358194953304219623954646982845887009061450861201591502156748828703938089 73302732 ((42366096558405101589590755632843968540969974530921540784521806762932914439297774918798794280213950314377662608597760521280396941014391220261405096910507310958228373613956321,1)::nil) 3105550621906891509254545149831851823775153063086967417154871749299058961122775063069029776625386285854380364358194953304219623954646982845887009061450861201591502156748828703916219 1102248 27 729) :: (Ell_certif 42366096558405101589590755632843968540969974530921540784521806762932914439297774918798794280213950314377662608597760521280396941014391220261405096910507310958228373613956321 1500 ((28244064372270067726393837088562645693979983020614360523014537841955276292865183279198923201008858547184110924038663907298374935692886306472416660245111483215220847541729,1)::nil) 1023168583030021327973587016224902468480087634584341938258433532775992967918288687914293258402928551012353037832132846726621702034643978985226662040064405952520728952253916 41416619528047008798806123074982592664623079509254844311787345115504667005262239942492049685864811412118682738326130930494590005264092102615695617998300107349537562449917387 17834487023005777338763985456016209528878982174825620052757594792676246120206607450866147466080614899018865280226363223358806181213442662636045680064026528835670890880774731 4604877196010460118129515954444509374515741133799975149714168984642769899631164832910468493498729137886350696904758608351477821874891036042765360564693465060827547686672233) :: (Ell_certif 28244064372270067726393837088562645693979983020614360523014537841955276292865183279198923201008858547184110924038663907298374935692886306472416660245111483215220847541729 3411795920 ((8278356922435755690332684696030308194395162715539668188305512084074265582938261817022402069157343548306597641262492408516609749696900684286307418640206604855673,1)::nil) 100 0 20 100) :: (Ell_certif 8278356922435755690332684696030308194395162715539668188305512084074265582938261817022402069157343548306597641262492408516609749696900684286307418640206604855673 3274004 ((2528511548072560598683656066403800421256407357944482715447358061894324375577507449089025565290098861894876224243151105245292195594855531287480063595434697,1)::nil) 8278356922435755690332684696030308194395162715539668188305512084074265582938261817022402069157343548306597641262492408516609749696900684286307418640206525620505 271737008656 0 521284) :: (Ell_certif 2528511548072560598683656066403800421256407357944482715447358061894324375577507449089025565290098861894876224243151105245292195594855531287480063595434697 32860 ((76948008158020712071931103664144869788691642055522906739116191780107254278071042166257136663589715436107340131088263761394825255168405554667321015737,1)::nil) 2065505006748167274861713967736708353708124445986979571536828231957130796228349263555739062464515496413073906268837160850882861033526869118345968604695242 1058464726519829674578471866952176967282497800835341774098245733514795073834211065272740294680398616174257711770282228684470131471498294406861588775710441 0 1705975675375246214826008800400841076602711698844303079886612982203698335915149911591402361926060503808252006456272102318362717962225136769774856432085068) :: (Ell_certif 76948008158020712071931103664144869788691642055522906739116191780107254278071042166257136663589715436107340131088263761394825255168405554667321015737 340835099688 ((225763157105764098500798486999707476526333041203029898019486607929133695304590093819089071268067828492899447755791269828420334344409200993,1)::nil) 70620886447136651918360444834246780113465689204158679625589120494665123028096932282469237867772584763930376776483820281898321563975686763489618106565 21999239763879495138557978577788396828598592314168086026705373730085351226146018625809394372382829505075622979325012546160669999727608170229622518476 0 22550905224715869971074249212535889711556829756436445208678255605306766312122154496300834191228167845229017395890699365804875582300057274017646045362) :: (Ell_certif 225763157105764098500798486999707476526333041203029898019486607929133695304590093819089071268067828492899447755791269828420334344409200993 13244713 ((17045530326384882669847091967920141155669665413137294709178417677237236500249390160866826862271985588170236352080041314591396834119,1)::nil) 222836314780692703595493917735697778324706267785830203701280794819501933834155896993886227167969494877288408831747603381788778350576222550 177411878642456739331695745012497093471937915044073832620196238803812795375625818258128937188568811342347041641514810048886481136167157715 84434050493442323350039240734111630238446551748180709072001415061031834933123159558224017471091966620833298729089491645695455331279808795 27330167112577965739569299705690974374960997516858642934543173123762919370748569665012373117760615250575727603870513864339101622605693643) :: (Ell_certif 17045530326384882669847091967920141155669665413137294709178417677237236500249390160866826862271985588170236352080041314591396834119 368 ((46319375886915442037627967304130818357798003840046996492332656730932510734675203185593854259826114429311499556584558568148317247,1)::nil) 17045530326384882669847091967920141155669665413137294709178417677237236500249390160866826862271985588170236352080041314591396817179 1043504 88 484) :: (SPock_certif 46319375886915442037627967304130818357798003840046996492332656730932510734675203185593854259826114429311499556584558568148317247 2 ((9526815279085858090832572460742661118428219629791648805498283984149014959826244999093758589022236616477066959396248162926433, 1)::nil)) :: (Ell_certif 9526815279085858090832572460742661118428219629791648805498283984149014959826244999093758589022236616477066959396248162926433 384 ((24809414789286088778209824116517346662573488619249085430985115016354452365996066428158753678611762545656890745431899714449,1)::nil) 9526815279085858090832572460742661118428219629791648805498283984149014959826244999093758589022236616477066959396248162832353 9834496 0 3136) :: (SPock_certif 24809414789286088778209824116517346662573488619249085430985115016354452365996066428158753678611762545656890745431899714449 2 ((30403694594713344090943411907496748360996922327511134106599405657297122997544199054116119704181081551050111207637132003, 1)::nil)) :: (Ell_certif 30403694594713344090943411907496748360996922327511134106599405657297122997544199054116119704181081551050111207637132003 281253120879 ((108100825689303351763869377545235997733054411343619251354644542890690585919396686146582439328024504523174661,1)::nil) 2991382213570844755535844752171162596280865531846485960428790510882836947944710463641091639047357356627705853304052162 19021016271540730560662539265528827728583246669241145881461754873960140471683958016960744045664450159602426386017916739 20411810744089003055150303610893157860220399941096398900259792825157143129324527297711575584488511479494132482898307625 16480344387691132783371354761611572708294021168315619231209823830466495116619777802772044519368458101184713179129281746) :: (Ell_certif 108100825689303351763869377545235997733054411343619251354644542890690585919396686146582439328024504523174661 13478 ((8020539077704655866142556577031903675104200277757772028453306577963611436079729396560421179220932266081,1)::nil) 73108191533173115712567386239020396102167556561394752134349499504205272752091073600612418004932504787063746 48043846935775061442854222897745016784616424382892922976346916691711711502446361845873401114709127279615014 0 4879214084391489950021116553188169787730314119036036674767810706007303078682326673962985010746772639071561) :: (Ell_certif 8020539077704655866142556577031903675104200277757772028453306577963611436079729396560421179220932266081 26079169953886056460 ((307545795816615533791694041497066234303251586690002973365592134007897857632783538827,1)::nil) 2522678214233609580196814935925049657641205640449400215880486896336885405261761117054353046694547912601 2349003426836542753189039220793829063098678532946182470306479227113495393540216457090690445485406844119 0 2693449753531244721781511388919149909137861527916777791065361550917907626858161785613857860786238315456) :: (Ell_certif 307545795816615533791694041497066234303251586690002973365592134007897857632783538827 676203006 ((454812819652883255286348196886108244102142513038296066160821300547274273729,1)::nil) 55775193103839426619536650300256437326788423821972396088126708906461242658229693483 54388223203678449216359175617044516088508408938205804464359587171059575238169295204 75251000035086925813135079067152741837928615372965723675334043027862345596244652241 285849715559094952999414183486541621265929924077286643672183393764153313405642844833) :: (Ell_certif 454812819652883255286348196886108244102142513038296066160821300547274273729 205803 ((2209942613338402527107710756821369193428780661036415528171557420943203,1)::nil) 0 78608 17 289) :: (Ell_certif 2209942613338402527107710756821369193428780661036415528171557420943203 24210 ((91282222773168216733073554598156516925947733955628484193064885437,1)::nil) 392204316588110676578054942225265966546252422544584809582985181294765 1579897558385447999868976084171909581834410494496115895896415606471480 1633436234121364509878738948956400063874668153199791498316311336955777 1387683984350096780821733526647401936446136886883761434753557701616707) :: (Ell_certif 91282222773168216733073554598156516925947733955628484193064885437 96052012047 ((950341599596083021686809148556691085063739163273367233,1)::nil) 73145896470385599028751005586157810412566154153546392863939926694 83384223124410372628562484674837870986331307702859877281814815334 0 68702675296216827783455102922891255057309982995264912148568531293) :: (Ell_certif 950341599596083021686809148556691085063739163273367233 71824 ((13231532629707103777105273283824049579274625756019,1)::nil) 950341599596083021686809148556691085063739163273353233 784000 60 400) :: (Ell_certif 13231532629707103777105273283824049579274625756019 3091874620578 ((4279453164641449738975026604135673539,1)::nil) 13231532629707103777105273283824049579274625661939 9834496 0 3136) :: (Ell_certif 4279453164641449738975026604135673539 134017 ((31932166550821535649151982349139,1)::nil) 0 275128 102 1156) :: (Ell_certif 31932166550821535649151982349139 3595905477 ((8880146253861485175253,1)::nil) 0 221184 48 576) :: (SPock_certif 8880146253861485175253 2 ((381253059155997131, 1)::nil)) :: (Ell_certif 381253059155997131 138840306 ((2745982553,1)::nil) 381253059155975261 1102248 27 729) :: (Proof_certif 2745982553 prime2745982553) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t200/prime4.v000066400000000000000000000365531451023060700215430ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime12465641919551 : prime 12465641919551. Proof. apply (Pocklington_refl (Pock_certif 12465641919551 7 ((13219, 1)::(2,1)::nil) 9429) ((Proof_certif 13219 prime13219) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime45678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890407: prime 45678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890407. apply (Pocklington_refl (Ell_certif 45678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890407 3293 ((13871515710467017954283871549452073762901478253909340051324732972639305972635931811961437092523201107582050578551607516409667495867576608729051559227775840412059414198551025209022087034690807643993,1)::nil) 45678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345567007402120089927 14406462054002124060149776 0 3795584547076) ( (Ell_certif 13871515710467017954283871549452073762901478253909340051324732972639305972635931811961437092523201107582050578551607516409667495867576608729051559227775840412059414198551025209022087034690807643993 18634944 ((744381936992513524821103382411670985590376781057637739685438978117632442181523690758686320308942215925944537786657751045805285267217440351134151439176673081853234184254596339978076413454169,1)::nil) 7738042984638501784740551948715599496451943429244525232253976481190084194414139957450245316863923413408562122302850214664864525546094589108722998148175777903591734733586820350754281897711408012958 3388817940564033410442718134486432719910575447420008141524764057223898023869187191226024742968794151896871521404223317833302871674296098617743765020194674996961952370788326623976954630582695685519 8976935109907646042331030695438344689179047598205216671850447632307542098668744542332172383290261440601654438168155614029940449285269220916843979138399326659801772842155217236281804782628677067230 8821508006393764244553709926499351758919070390074042078229654452370660698656421019771608609119034833789282026349186213371237373515850973448011150547867363387599359345281090203481849253762021272841) :: (Ell_certif 744381936992513524821103382411670985590376781057637739685438978117632442181523690758686320308942215925944537786657751045805285267217440351134151439176673081853234184254596339978076413454169 696 ((1069514277288094144857907158637458312629851696921893304145745658214989141065407601664779195846257415850999483144763951382476749901143696558050436550165403458950893192262171062663935163001,1)::nil) 371439265737442492463318925876986781694310916790335658575744179345351991436120921502424970842117659912675412793083814031086998059796614790019896079186791436879316927659954270522324292592630 162788473226431686020461489402882094806819338509860255025278813063313674733443651214269979384064704502036213914258658223563500258281691483598069909824898828913518686553597485887353692366963 194659328558852901811183145878670889231194766175747424788062613881207239798665863570900798471816864451066113416456763755621287332665816474030011090621858316909798462514390191544660391945994 114121903448741976847018833347215207596730144314273863937783795854238100861364505574254801584105652745935108416781234612750206575761503333349016907427855919413299916380342608358889499222958) :: (Ell_certif 1069514277288094144857907158637458312629851696921893304145745658214989141065407601664779195846257415850999483144763951382476749901143696558050436550165403458950893192262171062663935163001 160 ((6684464233050588405361919741484114453936573105761833150910910363843682131658797510404869974051659320035592952284410641995936758999713834200792135231515239784547240427161389220103281003,1)::nil) 27508958888224667850106255820846546275494176595167081081536375621703304644257783847098155633012541949577738407519904792636910717545062438301500726124659796364782099721698488124118381161 1033420920306978914337394383351636920532324149419130934133771395038318963060374111714947429360128495179158319086011783029436575665939714299035954684219364973978976015810526592795162288400 119343875477125128802970235302341616552868700369579283812429566090829383563347000729382670031383273856239636282635459077397108296807437594286632269071508041664341785882169594005099177427 825180010828583463627419241257093759357265930302463996817339056761947367180372547314893265060092944832758621587761417721266914265276429355677923389557535494006271464761607909722983117210) :: (Ell_certif 6684464233050588405361919741484114453936573105761833150910910363843682131658797510404869974051659320035592952284410641995936758999713834200792135231515239784547240427161389220103281003 42807 ((156153531736645604816079607108279357440058240609288974955285592633066604332440897759825962434469754419593105400759448313858475906508488474519724827772977280313070464599585066918111,1)::nil) 0 119164 93 961) :: (Ell_certif 156153531736645604816079607108279357440058240609288974955285592633066604332440897759825962434469754419593105400759448313858475906508488474519724827772977280313070464599585066918111 19693977076 ((7928999365341071183852717870822779942188769947428214166734393767254459473630033068686098778116217375185345369167175217146509964160747075836980130885037768878256107490159,1)::nil) 41813220380952367710982039264252732455908067585635794477865387538264385346071618116755324276365329780339754534762784242459538456640568364326075357989260504726961561647902439034118 147443852597517702597919968818534667100003458315471582992094363137143341777021544002921825534372280881150065510025561960640509979833154528892700533247824836005965557568938297216297 137597576549946834630759973245998713943578878648184290332210730568937853267131878031352579385359827616390301640410846657003273971612329545801711507814951096868395938724688765727115 58699787537997047833274878911500588331123110525238949847742985600372514387604248555642778603822071902289682735017485944268405760102163055155496825058837212668791839322324442218108) :: (Ell_certif 7928999365341071183852717870822779942188769947428214166734393767254459473630033068686098778116217375185345369167175217146509964160747075836980130885037768878256107490159 9635324 ((822909469919337552515381721551115452079117417061244039819978421821047167031439012190075080844180436611381698702452512823457680414543019856657965370418670748559009,1)::nil) 7928999365341071183852717870822779942188769947428214166734393767254459473630033068686098778116217375185345369167175217146509964160747075836980130885037768878256028254991 271737008656 0 521284) :: (Ell_certif 822909469919337552515381721551115452079117417061244039819978421821047167031439012190075080844180436611381698702452512823457680414543019856657965370418670748559009 111179999505172 ((7401596272547712114297724515603794555552364358662613695703204098205362875860787129230413031701717425622138805116305846920847650533333715951708369493,1)::nil) 2153806893496368125749683474736883451977342288940823492094228644569033254052198932611842778288817685767601542360266018472847110604833457535007965801097988766839 272577997667913712068290974359031465788146544313973590333135673864689076862106679242357834341923737647381998699566156039907481829474418074541463781181269462099892 68343449494904650672956253910344236766214469170266594733132859732515358586496333640980869771103073012802609433245820481008925056699584387869967245242934734516028 104089286048587258166682585186957624230166040154522136569479447338993492642671630794738928438692803714751568689909970431475148628577002618333571495885118565807731) :: (Ell_certif 7401596272547712114297724515603794555552364358662613695703204098205362875860787129230413031701717425622138805116305846920847650533333715951708369493 5012105 ((1476744057147189078101461265397232211925401474762123637813494349820157972751870879309949330408237250760107251128264592911766978611207675673573,1)::nil) 414752694027358282794966214223130084048267839450618984310815582720998514375529984838992364454412772735427527167985018867366910402653607646182994900 6225753479929745237882381304205725982446732333783123431122660613882091777531528402617708904944407764918079869222893881970674869795339844258183555190 6787379918680787234845424163076585309340633273413948898953672394434939167190783085045074761835306599641813331140752639135517622341856027442232284988 5158802129871653500007364885370170044844308051053454746318578060390099950849835219025250581336862162579875668932698507537589425595191452905619345939) :: (Ell_certif 1476744057147189078101461265397232211925401474762123637813494349820157972751870879309949330408237250760107251128264592911766978611207675673573 414468341703 ((3562983969003343847418518609270601996614666091328826911798624037307894955352097058165321449271532804481649453095947912660828716307,1)::nil) 1453540728305613566419116165437441504253197436379480998868946267814023560805955133446688713821390326076139647172327857883529757202204009826333 646534734138064379004363007289059550521805956381915561612142232215300746060603669471605233191585790688525017870572833990871522726276875710758 0 1156541277632569460049030299136004184851612096913186696171477660092296086064366301883013861878292351269234367634013385624721103351999637910722) :: (Ell_certif 3562983969003343847418518609270601996614666091328826911798624037307894955352097058165321449271532804481649453095947912660828716307 5429930572242 ((656174866621213500424878902515695241601307870803713548303564821106071470558183832202315062764700334029425992347530681,1)::nil) 3562983969003343847418518609270601996614666091328826911798624037307894955352097058165321449271532804481649453095947912660828462387 43606528 552 8464) :: (Ell_certif 656174866621213500424878902515695241601307870803713548303564821106071470558183832202315062764700334029425992347530681 122 ((5378482513288635249384253299308977390174654678718963510685116001824283124111943096318713547347446973658699344384337,1)::nil) 491110518515211371230692298438037908082266015480971638664003395024821921712452249009031039847563234136181254742078996 0 536924542167810791781652989301241911844300173004384017818370810167205822893522262077865588391430167930895501906538583 558488728299203326249296793908795058451139475779545346497557123996775745118721970699717238486690245043197588205119980) :: (Ell_certif 5378482513288635249384253299308977390174654678718963510685116001824283124111943096318713547347446973658699344384337 26004452176 ((206829295110186490759021990762239750948047607842787247750888336598683225969788307469853640276185445649273,1)::nil) 1518013160606415168449130360097598380564475116964871407567422308288582148821385541281460282358101120807342271296435 2794208081437507901232319817125755631174144547020113832198674075767370226397363232192608850654736459912409052444846 1288671912020314482039887567880298183181573538309932706357893182838175787235327423915851054332201556490549504990529 4945251389846007555066194069600532925906194263287646616954346405148407265142588493263813044661196275663397728845597) :: (Ell_certif 206829295110186490759021990762239750948047607842787247750888336598683225969788307469853640276185445649273 2873 ((71990704876500692919951963370079969003845321212247565891353124892382247514536418106544227495173237539,1)::nil) 206829295110186490759021990762239750948047607842787247750888336598683225969788307469853640257236343383433 31749105730618655022 74219 5508459961) :: (Ell_certif 71990704876500692919951963370079969003845321212247565891353124892382247514536418106544227495173237539 101 ((712779256202977157623286766040395732711339813982653759581774515506682621997616025199883932267292503,1)::nil) 71990704876500692919951963370079969003845321212247565891353124892382247514536418106544210258510419299 27544082901737469648 141572 5010657796) :: (Ell_certif 712779256202977157623286766040395732711339813982653759581774515506682621997616025199883932267292503 1667889 ((427354132201229912556103413380863914032252634307613613562374682663357754441768503819347772007,1)::nil) 712779256202977157623286766040395732711339813982653759581774515506682621997616025199883931509708599 8234810772496 0 2869636) :: (Ell_certif 427354132201229912556103413380863914032252634307613613562374682663357754441768503819347772007 1115107833620 ((383240184775583939419104924304678309046863347353715169191345303613364962627546903,1)::nil) 427354132201229912556103413380863914032252634307613613562374682663357754441768503819268536839 271737008656 0 521284) :: (Ell_certif 383240184775583939419104924304678309046863347353715169191345303613364962627546903 2516 ((152321218114302042694397823650508071958221678090616595819144796069724733971481,1)::nil) 38952862646187624542981365878842651790626361454294280715660827012575980864852409 306909122137156335975579315768912314240572122529026562854675450745882159726980524 0 333855597231955247373734515478280793747461837377720235090744886253134197624024692) :: (Ell_certif 152321218114302042694397823650508071958221678090616595819144796069724733971481 16525 ((9217622881349594111612576317731199513398601023618888414504862343593048129,1)::nil) 0 99144 18 324) :: (Ell_certif 9217622881349594111612576317731199513398601023618888414504862343593048129 7695250 ((1197832803528097737125184538219187097609561058563680529957981675973,1)::nil) 3203611134123145495377754267407006613267807692943207782809188696928241643 0 2037600277089347463908483469717693950053525615880520472818032661224133908 9023936343559472015514973501724892560767658014992703267210000871255265246) :: (Ell_certif 1197832803528097737125184538219187097609561058563680529957981675973 484939 ((2470069026265360668300929680267388556608148824494829051486881,1)::nil) 0 53969305 1326 48841) :: (Ell_certif 2470069026265360668300929680267388556608148824494829051486881 882367488 ((2799365411642819582560287715710654546977581324139557,1)::nil) 0 221184 48 576) :: (Ell_certif 2799365411642819582560287715710654546977581324139557 65027308 ((43049074269579475480674790111900892212280269,1)::nil) 0 10985 26 169) :: (Ell_certif 43049074269579475480674790111900892212280269 89472 ((481145769286251290690552336551982568383,1)::nil) 31508645034218946098320895629253783877547196 22424395846784587524932507904817069277005976 0 38063708008414025040528231972876318151911850) :: (Ell_certif 481145769286251290690552336551982568383 338 ((1423508193154589617347140607843845129,1)::nil) 420953259328040318037970708507965630440 396174767760086424991251795691013820995 28038785603090225102124312772178704499 239704930553764960585640354764462410624) :: (Ell_certif 1423508193154589617347140607843845129 119024282 ((11959813319055263156864223637,1)::nil) 535940682894433201458104877508406084 0 1054557451192267610334804188320725403 1188181707028446769187217791724992417) :: (Ell_certif 11959813319055263156864223637 657 ((18203673240570844534583791,1)::nil) 0 44851536 705 19881) :: (SPock_certif 18203673240570844534583791 2 ((157158536135464426613, 1)::nil)) :: (SPock_certif 157158536135464426613 2 ((330164991881227787, 1)::nil)) :: (SPock_certif 330164991881227787 2 ((12465641919551, 1)::nil)) :: (Proof_certif 12465641919551 prime12465641919551) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t200/prime5.v000066400000000000000000000357061451023060700215430ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime31030386103 : prime 31030386103. Proof. apply (Pocklington_refl (Pock_certif 31030386103 3 ((84551, 1)::(2,1)::nil) 1) ((Pock_certif 84551 11 ((5, 2)::(2,1)::nil) 90) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901643: prime 56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901643. apply (Pocklington_refl (Ell_certif 56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901643 317 ((179145149355453947112201546130778514234528955524399267792187560848619386999688437122681777466211395429779987918108071301842037244132304188175485466219491519937063802289928803326944503266519981874693,1)::nil) 56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456680479071004636323 13762346127466829996235398 1918747 3681590050009) ( (Ell_certif 179145149355453947112201546130778514234528955524399267792187560848619386999688437122681777466211395429779987918108071301842037244132304188175485466219491519937063802289928803326944503266519981874693 256 ((699785739669741980907037289573353571228628732517184639813232659564919480467532957510475693227388266268729616064759650055755420572534054645393258240788867258678634769432810090625846855254672199487,1)::nil) 179145149355453947112201546130778514234528955524399267792187560848619386999688437122681777466211395429779987918108071301842037244132304188175485466219491519937063802289928803326944503266519981731333 25690112 64 4096) :: (Ell_certif 699785739669741980907037289573353571228628732517184639813232659564919480467532957510475693227388266268729616064759650055755420572534054645393258240788867258678634769432810090625846855254672199487 29640002 ((23609503793884426219237005772582389543314765380825029627637429294536467321005341278670483666883298235949993802567141838835021254617951052047082292084221450958585795971061285696783774395563,1)::nil) 688669969755872957071488664446682594109994277588839308607776291470500076785036745311955632548393955536528006146869588193178271864656460843078169324225781496941280622763280009425042981064090915716 512077864979424165061153389050637516889123733880068100680171161928411481074803146317805959230380047556661273490286183558260398607639069942552592301966758865027845811159185012282523513849269685889 0 208901508578337366782627272991156365547342104201435622457701598029106056082410515099242019239485806719023769612439607940378356595117139389477957384552679180399090679339561677787638938236442494555) :: (Ell_certif 23609503793884426219237005772582389543314765380825029627637429294536467321005341278670483666883298235949993802567141838835021254617951052047082292084221450958585795971061285696783774395563 1017 ((23214851321420281434844646777367148026858176382325496192367187113605179273358251011475401835667270510248819191840820919363338006377086789135806926178760226369675478797541521385458382619,1)::nil) 23609503793884426219237005772582389543314765380825029627637429294536467321005341278670483666883298235949993802567141838835021254617951052047082292084221450958585795971061285696783016811659 8234810772496 0 2869636) :: (Ell_certif 23214851321420281434844646777367148026858176382325496192367187113605179273358251011475401835667270510248819191840820919363338006377086789135806926178760226369675478797541521385458382619 46783130 ((496222705095197380655049090930152557703133081996127582578745524585575596873450985675293676070445749532850077836134040936495613613270571263062604572264485396359807152508056450699,1)::nil) 18726013183914340835224516737784903891057399468896536015841234024485867053868875959327210216354206901872006048552921168424678379109158930348164609108820646969125424793011151702281228396 6742017161081699532635478255282669220184481865940669433083042492456741984269723852641542417330489170581302722424009211668394639240623093858430042518282035567437350553800494538080154947 11872342586489416293786828512821382631269376866160658306117072168628898678289974141019864927951570940980661882344716635398313467301749507930553399667295812006176400208074677675512023088 955699490833930088893174944782865971072429497387997290840893068650622629009749502640527367604610484418657468630743460897699925208330155730181433300235781652005790059276657320196645042) :: (Ell_certif 496222705095197380655049090930152557703133081996127582578745524585575596873450985675293676070445749532850077836134040936495613613270571263062604572264485396359807152508056450699 1355603457 ((366052994725578794872495733780171790830076853364152775673207452277525135341589045295045772639270693427420812253321776535745754275157586406350046812209324747664865298473,1)::nil) 37501051029651645717254953884295152421359407776507279631195497118214239440917765223905200453966247798591613142805064257122991665587455785150000990887480319001610859923392714671 239369720244233189227573193409596772218487069838648628627614653893734745673336122356751009892000959678203038582456807447848006285706561146080174313488402120910200381772558818325 392223734638268510795658282321898622069359294523447100817493693593869289340694090872458634741156118567450791770054267083318523123795188653298387873160751270220384784164748008641 196019141629857122128382069067645833318597409687095636020783743406036700582777199271309229446413878092179023894387317122230664383192127960717023809034378615056903335881229166287) :: (Ell_certif 366052994725578794872495733780171790830076853364152775673207452277525135341589045295045772639270693427420812253321776535745754275157586406350046812209324747664865298473 968177437 ((378084616245378164986606410432359405242034010924954839319610638971671403804454746133752882129254267397384044920833682361483455540845204901908829434152506023761,1)::nil) 0 3584 8 64) :: (Ell_certif 378084616245378164986606410432359405242034010924954839319610638971671403804454746133752882129254267397384044920833682361483455540845204901908829434152506023761 102612 ((3684604298185184627398417440770664300881320030064269669430579649277583555572980824006797207740285698994786470047512772175668624582444693867352772412189813,1)::nil) 214669133444526218610284373654351666253302766806873035555606735159691836366789312255338675352071645728060597821427531918571525570298073892090605088179100179499 139831144162400097124357779493753469185862064020541805680296065568471000904700162792666716144916038789619156894009418102234855775678575562545638279998453583359 154254063115109440049975687812872533007570393047263412275481257849737391901807873766983783616667917861187932068126036717311084331783217907154243325680241601245 65850363782280009803853995097810380180644328589036104359847376595823487126356165250595515696649059700044258810908200716381171819651269500464250858180295265922) :: (Ell_certif 3684604298185184627398417440770664300881320030064269669430579649277583555572980824006797207740285698994786470047512772175668624582444693867352772412189813 1882092 ((1957717421988502489463011075319731607637309988068739290869192180444730414651934236258539156763771779249451072419443514305748132312249499180471893461,1)::nil) 0 5267712 304 5776) :: (Ell_certif 1957717421988502489463011075319731607637309988068739290869192180444730414651934236258539156763771779249451072419443514305748132312249499180471893461 3250 ((602374591381077689065541869329148186965326150174996704882828363213763204482262426640468959632284325086486077422335812702626885799718730263567749,1)::nil) 978858710994251244731505537659865803818654994034369645434596090222365207325967118129269578381885889624725536209721757152874066156124749590235946771 0 18 81) :: (Ell_certif 602374591381077689065541869329148186965326150174996704882828363213763204482262426640468959632284325086486077422335812702626885799718730263567749 722 ((834313838477946937763908406273058430699897714923818150807241500296070922459390005344637665513087826424182656369878105251615800128978663783299,1)::nil) 306754968490475566655222655716424281913848657806685968574134267842763158487430023469241190382920728186925751540636132644251120587986810142790042 443654941058981426309054521651924027099984879487418790921399078778139577443903339613102427363728127681297336737293938247582150884835285317723554 576593332761449832979719656250848464628137016794155265952392686995609217394313903818790845572296247541017410375514531538142609980060660942546029 303999545921120866366767784641606946859020906270942941887613169491823478584466397918162199351199061793078359332931029209176793204246748745310027) :: (Ell_certif 834313838477946937763908406273058430699897714923818150807241500296070922459390005344637665513087826424182656369878105251615800128978663783299 364379248 ((2289685384272890693720045237793175397024524609930086223810532427181667915565877271225522316675693073655524378268057314790644788514091,1)::nil) 834313838477946937763908406273058430699897714923818150807241500296070922459390005344637665513087826424182656369878105251615800128978663639939 25690112 64 4096) :: (Ell_certif 2289685384272890693720045237793175397024524609930086223810532427181667915565877271225522316675693073655524378268057314790644788514091 473819154 ((4832403597328804258765877661824484615547062941085927952609810339535746733911011298911956868358813309822083472778824903314859,1)::nil) 2289685384272890693720045237793175397024524609930086223810532427181667915565877271225522316675693073655524378268057314790644788485261 1668296 155 961) :: (Ell_certif 4832403597328804258765877661824484615547062941085927952609810339535746733911011298911956868358813309822083472778824903314859 301450219 ((16030519444833457754979695874178431482735339930490904545038032983369866902148656853512089847249529379660599829844891,1)::nil) 0 13310 11 121) :: (Ell_certif 16030519444833457754979695874178431482735339930490904545038032983369866902148656853512089847249529379660599829844891 13560 ((1182191699471493934733015919924663088697296455050951662613268599099710849396211713004928707305092597963034137439,1)::nil) 4213812983812081513659698442752618724274799264077923911345749191843346091152458387709930977086115347249783034528526 7310602653083487183983123520883998079797059894647957529392730775236857499039251904048928787034302297599244895825071 0 3993723456244310534317058116694927763971280236510192093770666212378773439507784592484302354177552358716555076885112) :: (Ell_certif 1182191699471493934733015919924663088697296455050951662613268599099710849396211713004928707305092597963034137439 107256684629 ((11022079449506437855131401498922076929725983941973329728301196395820370719198192610500582807651792781,1)::nil) 1039831084985524878980613494917742930767855122879763952866053382782707549011321505090258650311355231140350505950 422748403504648853360301080349272868764239419274514116440207738971656363563098644819062768656148685395490232232 0 914018479318734979940410394265550752427960943823766535745172895262391660308697662053563538798096585938713306923) :: (Ell_certif 11022079449506437855131401498922076929725983941973329728301196395820370719198192610500582807651792781 10442 ((1055552523415671121924095144505083023340929318327261137857218212113030779011118353714687420815437,1)::nil) 6257010676449663590551676035059976871541981751115821585611011718555683621312937092489812417859235906 3073396148241313984645266053415765675060919598993674617276029238273103560191984169632483499555483827 10444403415119173069749673885479238479263210634280575873587107468303674778951798531206653392823643513 2846308131738858183297286569859749301170570493331169847514686989111298790052823980651991580975399858) :: (Ell_certif 1055552523415671121924095144505083023340929318327261137857218212113030779011118353714687420815437 71258968 ((14812907807136234725208133024114003774808095990499272107615472701051163411359308152470131,1)::nil) 101760306095130389474865677238456413232600342350659137442897495052152905578169948800645769401336 322946624316770841802909848248872235054427444916448995173075109248179267400096634724099278934375 20530146683728348121956509189337399883590488081217017596275327924535406347408009318082788242074 442365458155661673361608348366098919760361138175488764994513100698917211079461496878684186249303) :: (SPock_certif 14812907807136234725208133024114003774808095990499272107615472701051163411359308152470131 2 ((1468078078011519794371470071765510780456699305302207344659610773146795184475649965557, 1)::nil)) :: (Ell_certif 1468078078011519794371470071765510780456699305302207344659610773146795184475649965557 112 ((13107839982245712449745268497906346254077687911308198543528431473477600455551842567,1)::nil) 0 1642545 276 4761) :: (Ell_certif 13107839982245712449745268497906346254077687911308198543528431473477600455551842567 193149778989 ((67863603317880120827070425107781878074338318830799432746628756283207181,1)::nil) 0 119164 93 961) :: (Ell_certif 67863603317880120827070425107781878074338318830799432746628756283207181 248389200 ((273214790811678288859058385420066083965125590824706730550960027,1)::nil) 0 78608 17 289) :: (Ell_certif 273214790811678288859058385420066083965125590824706730550960027 257245429 ((1062078311260015776058972792943502281326069730826612251,1)::nil) 187642008825906325036380855818707592634949004622506215701923627 157481667176591695832147219347353521407425915851509032059744844 0 201998141425037148144597186151519507221158848735141524822340878) :: (Ell_certif 1062078311260015776058972792943502281326069730826612251 3558 ((298504303333337767301566271389814635870826599308377,1)::nil) 1062078311260015776058972792943502281326069730826518171 9834496 0 3136) :: (Ell_certif 298504303333337767301566271389814635870826599308377 1032336 ((289154212711111273172267847483560408011708003,1)::nil) 298504303333337767301566271389814635870826599307897 3584 8 16) :: (Ell_certif 289154212711111273172267847483560408011708003 898492 ((321821688686277978181489769409229248421,1)::nil) 0 1080 6 36) :: (Ell_certif 321821688686277978181489769409229248421 7525 ((42767001818774482145611811235813937,1)::nil) 0 2058 7 49) :: (Ell_certif 42767001818774482145611811235813937 22723 ((1882101915186132224744370320173,1)::nil) 0 37922302393991435340054223363466179 32075251364080861609208858426861234 40094064205101077011511073033599980) :: (SPock_certif 1882101915186132224744370320173 2 ((3200853597255326912830561769, 1)::nil)) :: (SPock_certif 3200853597255326912830561769 2 ((215923745092777044848257, 1)::nil)) :: (Ell_certif 215923745092777044848257 3809424 ((56681468141079247,1)::nil) 0 5832 9 81) :: (Ell_certif 56681468141079247 1826644 ((31030386103,1)::nil) 0 3584 8 64) :: (Proof_certif 31030386103 prime31030386103) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t200/prime6.v000066400000000000000000000325121451023060700215340ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime11061860569 : prime 11061860569. Proof. apply (Pocklington_refl (Pock_certif 11061860569 13 ((41900987, 1)::(2,3)::nil) 1) ((Pock_certif 41900987 2 ((107, 1)::(23, 1)::(2,1)::nil) 1) :: (Proof_certif 107 prime107) :: (Proof_certif 23 prime23) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime67890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789013031: prime 67890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789013031. apply (Pocklington_refl (Ell_certif 67890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789013031 2450580 ((27703696046156017083987831955932020225194357667305568029296969652132742774776724562716269033408467974079360685969313592093245327133948020868752361391564387034342161550920219326312851246438523967,1)::nil) 62027740770058673352341054329336155957272260546603933857567570382303111275288726564439102678370589169168183030710448247919321383403799483633448212692384171431440225936415186001857022403516068291063688 44911161115707322502210220928032995154062223276801400978664460010542424896570253080035382595359686413344747029162261066427532663009109842483791165871141055255550869224506977885470552905639988787980610 0 50129934506090915303628306893961049190424725568366857220737792557791351088933104888037169411817363220560526476531614261495178537259779863550158008923778395015937715538968778098317759352559976850463332) ( (Ell_certif 27703696046156017083987831955932020225194357667305568029296969652132742774776724562716269033408467974079360685969313592093245327133948020868752361391564387034342161550920219326312851246438523967 21803804 ((1270590033104132521278756310409505617698377662324682795226785640346645143882999707881994767216237012990032432590728038982820972542263080040328051196178423736878915905622747249903118857589,1)::nil) 7647679714732898132300316619174434269020444264154340224662840993180703523664290663365077686835436939466500054975335421891626327708932429043654918290853202463425436675004231767947111155903888166 305989419264286303448328701348833715252198341312052380686134606623932685398391411350511684321320699076168741350225930231595695755405163379292764865290653778440469337039989552964681566333530840 6719799156429117456509675623223301804220173451937851350364579052119369584857055428724293971087394254032582228822712632374671740172185731378769183818190865450062358436219528471652228768998472785 25415593858893172350109913848556192699063900634911700406209200801947859003174234707810078828309998522948485591880749154709849126910065866798409264047076766574466420235777019350832253147538709013) :: (Ell_certif 1270590033104132521278756310409505617698377662324682795226785640346645143882999707881994767216237012990032432590728038982820972542263080040328051196178423736878915905622747249903118857589 485759096053699501930 ((2615679342757323978888700541973045346101978227812129528101662580241091203198250457363631734462721903783099497028717242462518987550932393892067524045501157316609700829,1)::nil) 2178 0 99 1089) :: (Ell_certif 2615679342757323978888700541973045346101978227812129528101662580241091203198250457363631734462721903783099497028717242462518987550932393892067524045501157316609700829 944907692402 ((2768185044729759265106434668964742229210418843399087445522910852905704825535653611194648215238366414042335662432956269992238621595610480254778667241361413,1)::nil) 18 0 3 9) :: (Ell_certif 2768185044729759265106434668964742229210418843399087445522910852905704825535653611194648215238366414042335662432956269992238621595610480254778667241361413 3314 ((835300254897332306912020117370169652749070260530804902088989394358993610602212528284546170777657428469879608049449982600357708428675261670764233665469,1)::nil) 1191502075136597319265982768906455381822662762908958115213937057457757042275259486598129779573963604949890282308848657354426821905373733235631919289817773 1866195219991245699580416512845963896762249830680420680338505045069990810427574567523151306107107526364183340911524913589415627355825231886841065380824248 2670697324709542454172420453605987103233152913545518646746425967420857741617010962495336176084170238870272187654013083352158843547138162878599946835446183 1131501470397077047217199591489514682388073437306162096296846595152243106566917143525338480764384950512705736642636697485929126237973239275600211579684590) :: (Ell_certif 835300254897332306912020117370169652749070260530804902088989394358993610602212528284546170777657428469879608049449982600357708428675261670764233665469 648 ((1289043603236623930419784131744088970291775093411735960013872522158940757099787107409036651441509047209082894449517173713262129770198259179934637847,1)::nil) 504629418724000706793858617975711951939863361463912172892118844633893509605045353494204476006983812755941683967363733107356878082819658571791861534550 650078819660831121910651489084610654710261120874612372650562834082233222153895413348608703979022944452007408584528781711711166639378738947587943785642 644067818451102831938072875378587801478617718971734658170211643130907113666539180739242501258571379463253879737252250393828735973635836084598049306078 178306165800466109748387318905812356468845789424503078241340642204937642975623259140312577820822971229925640032136407841160139261333932382762108047518) :: (Ell_certif 1289043603236623930419784131744088970291775093411735960013872522158940757099787107409036651441509047209082894449517173713262129770198259179934637847 7807 ((165113821344514401232199837548877798167256960857145633407694699905077591527484974141218377270549212801147642530615807389062280331578783473325151,1)::nil) 0 1253796317210622494822368159391711537510359368201258804857243195381157220772839803690820805503655284199459534054413188494540118409294400530483299977 644521801618311965209892065872044485145887546705867980006936261079470378549893553704518325720754523604541447224758586856631064885099129589967318939 725087026820600960861128574106050045789123490044101477507803293714404175868630247917583116435848839055109128127853410213709947995736520788713233849) :: (Ell_certif 165113821344514401232199837548877798167256960857145633407694699905077591527484974141218377270549212801147642530615807389062280331578783473325151 103207172 ((1599828947396353435904627224442093987104471391359755825958439205223815173500932129825310325838734337943430432271093620034884845714918307,1)::nil) 62232875981322440915305835342618389153575253725181477496904590019820680781292925610089407276431696383578478875784549455709956689233235004079896 113282254069709888138619966261217665640716076750966390410562715599167482022490268637072900211565195838800674406095689500232789879562315950553986 13112797760211647046533577276208611645260871158203521552767088615001541984077304745222170555366096127466863932360510613398663739930350523995019 132703739731148931201664283492544176550952694419496129038140392234553280302857770959229385290234338725758566309429119349195331605230517548846960) :: (Ell_certif 1599828947396353435904627224442093987104471391359755825958439205223815173500932129825310325838734337943430432271093620034884845714918307 66 ((24239832536308385392494351885486272531885930172117512514521806139755984566988803455477941575089755515598007040680541365112334276901267,1)::nil) 1599828947396353435904627224442093987104471391359755825958439205223815173500932129825310325838734337943430432271093620034884845714896437 1102248 27 729) :: (Ell_certif 24239832536308385392494351885486272531885930172117512514521806139755984566988803455477941575089755515598007040680541365112334276901267 378027080048 ((64121947383321141750201961937426753551331417848831370646192596437087158948048699506685264417312583825130543608809968347813,1)::nil) 24239832536308385392494351885486272531885930172117512514521806139755984566988803455477941575089755515598007040680541365112334276757907 25690112 64 4096) :: (Ell_certif 64121947383321141750201961937426753551331417848831370646192596437087158948048699506685264417312583825130543608809968347813 8790 ((7294874560104794283299426841573009505270923532290258321523618734035836531735071206758819105131402022300145998142122241,1)::nil) 51564685611553177114501818919118989446393693694595556326592951250393907069338710978417671023951941747621342340556950733535 62655274558283130970449909896574621717903279565354167520644059597126230752982822716746486336899106191769608969262856943512 0 45587647700472768267247455412847273733743925128442578794310617844209022762398849880172535812748291067217195406282550610677) :: (Ell_certif 7294874560104794283299426841573009505270923532290258321523618734035836531735071206758819105131402022300145998142122241 2786587700 ((2617852135105883903563999382317308550981877775564091638502342499983954217131453636440120975587902588967489477,1)::nil) 2277711287442748045691517307799455787850315242881349962872755131373815775272319804435527497993104418718573386360945557 6004224782128660257244468109972985156083398017010983879445865256770038947285709116178936507037793225866213587194176486 0 1410124401579304259842173665123712766413426200332602434131670013845213263477639213702179244098972818260228123343774366) :: (Ell_certif 2617852135105883903563999382317308550981877775564091638502342499983954217131453636440120975587902588967489477 11816123 ((221549160846233904603396510201976447857040568684338478587337412377646293572002232629873843530668219823,1)::nil) 2613885259168404648592050321552027912281833605617260132156956133875912303734241696065755997153021649324523796 1200011123522593424180321736802183265462101094302427997393201549893684579078853629008701610227019556860513451 2590460348770667857637446334859571483223330387183505138328446958532889423847497222158600065601520081265453931 1745513370146977030107969811591757802837605089456844835080953047204669881603396647019539990242186880569471272) :: (Ell_certif 221549160846233904603396510201976447857040568684338478587337412377646293572002232629873843530668219823 15542408 ((14254493952689564229905463181894108548497798325995405897570499658003636935870196936752151130011,1)::nil) 211276823968399757764866581837115929136183227658024618275047538624441646409610849798654215681201562401 126262716031432094649298901946654182089438180413619219854882874044689973668544405940529489884838843136 42784408240398836910191079381476184674932826205618403151998654779472339407743784277939276037964079600 62790691440856294364509679742124801640541877965397239404093070900426179095626337899799804235254943957) :: (Ell_certif 14254493952689564229905463181894108548497798325995405897570499658003636935870196936752151130011 16309350 ((874007483602324079739870882769338357966307567508691178693852573945237066592922273065977,1)::nil) 14254493952689564229905463181894108548497798325995405897570499658003636935870196936752151129531 3584 8 16) :: (Ell_certif 874007483602324079739870882769338357966307567508691178693852573945237066592922273065977 19868692 ((43989180747395152118713747375485933244438416744491926492288276338640097230453451,1)::nil) 604609028184393961915471798395950726159850958297427151948816387090184159628823368819383 177710748573160035339274326005518652824901389756296354806660069410995784141668866332680 0 773235315419686942757803310225166810401207123693575448730093380966685758328731607895927) :: (Ell_certif 43989180747395152118713747375485933244438416744491926492288276338640097230453451 14765127356387 ((2979261857051751513523126534944090683089404862959231713158059585719,1)::nil) 43989180747395152118713747375485933244438416744491926492288276226746264782652971 14406462054002124060149776 0 3795584547076) :: (Ell_certif 2979261857051751513523126534944090683089404862959231713158059585719 26241 ((113534615946486472067494628060824276016851888863841769026877281,1)::nil) 1415780866826379676469462262879728399503977141896525489195009880016 2939923227044454869561943566899156235473118776243948955436141295863 0 330656488059295264885921485638069882433509993129451829361154429282) :: (Ell_certif 113534615946486472067494628060824276016851888863841769026877281 9554824530432 ((11882438613590453720914490938685003360566275131477,1)::nil) 100 0 20 100) :: (Ell_certif 11882438613590453720914490938685003360566275131477 19022 ((624668205950502245868704499529273411840807201,1)::nil) 2628058238932618893407632372506494586320108064218 4567744685726314786048239621672519295731188017471 1124368042214448808426679963059239990438078552198 1249267978141654706829257681464061999229093048421) :: (SPock_certif 624668205950502245868704499529273411840807201 2 ((959695784861101581061557566997899, 1)::nil)) :: (Ell_certif 959695784861101581061557566997899 3234 ((296751943370779704612847254977,1)::nil) 959695784861101581061557566903819 9834496 0 3136) :: (Ell_certif 296751943370779704612847254977 2290 ((129586001471955769139077673,1)::nil) 48 0 4 16) :: (SPock_certif 129586001471955769139077673 2 ((776537434993054807, 1)::nil)) :: (SPock_certif 776537434993054807 2 ((707228993618447, 1)::nil)) :: (SPock_certif 707228993618447 2 ((11061860569, 1)::nil)) :: (Proof_certif 11061860569 prime11061860569) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t200/prime7.v000066400000000000000000000360601451023060700215370ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime3051683430797 : prime 3051683430797. Proof. apply (Pocklington_refl (Pock_certif 3051683430797 2 ((762158699, 1)::(2,2)::nil) 1) ((Pock_certif 762158699 2 ((157, 1)::(7, 1)::(2,1)::nil) 3862) :: (Proof_certif 157 prime157) :: (Proof_certif 7 prime7) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime78901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123703: prime 78901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123703. apply (Pocklington_refl (SPock_certif 78901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123703 2 ((13150205761315020576131502057613150205761315020576131502057613150205761315020576131502057613150205761315020576131502057613150205761315020576131502057613150205761315020576131502057613150205761315020617, 1)::nil)) ( (Ell_certif 13150205761315020576131502057613150205761315020576131502057613150205761315020576131502057613150205761315020576131502057613150205761315020576131502057613150205761315020576131502057613150205761315020617 210582796 ((62446724096658971970965292234096607805327625247107705332479359568412992840215570751098098313549819932037201887236272497895214604823710061681092711442295140668497291619167034204323663746522827,1)::nil) 13150205761315020576131502057613150205761315020576131502057613150205761315020576131502057613150205761315020576131502057613150205761315020576131502057613150205761315020576131502057613150205761315006617 784000 60 400) :: (Ell_certif 62446724096658971970965292234096607805327625247107705332479359568412992840215570751098098313549819932037201887236272497895214604823710061681092711442295140668497291619167034204323663746522827 7737346244210743 ((8070819390224784062308166051157733088932770668799185567819163606799819832933891942298622447941461846445641514874043146000795503625960020435432968305761506782239066106950321473,1)::nil) 703092603074645806763560144016687037130034493134718604327160987766285229453611250253626691763163069811391083629548366767290939750612326842662362885166592174569807256394643910827102566161412 30284909960067258094348193654431594304229402776593941377978820423713414868536883342074227365805065848497435103175771823169987570776694362633102503406829334544323377919451317281905567190456598 33522029641721680144520027834992177905559507705146180553042078115996896981686367949556861275274942305121052430888425410026002010978827458639758423582459031239167409462483500500220052502420777 8118683479780496549333867808418691670928603118765007741779546833490837947827640031413050511823563163299228737858097475417454845130426090576676643702939917936999225315017397695192878555222591) :: (Ell_certif 8070819390224784062308166051157733088932770668799185567819163606799819832933891942298622447941461846445641514874043146000795503625960020435432968305761506782239066106950321473 3268 ((2469650976200974315271776637441166795879060792166213454045031703427117451938155429099946905047328575104372061798074097382609952144415878714420835508392525391047958268095987,1)::nil) 6107494343868143024592055621343595077079671341499163601270540060592889482197787399575923604427720870303988431326834544112523130315706095647463961594212256711442903378385567925 1062119645895688949200582600801260557924370240299527503413449998507155137031821218948756213798943325483291543206581013304463752107007140369474197473815440165348302887833508431 4693820211891152847426762580666485024615073734664234160852862460448173004398932181354060644697446460505277370196586470166444012765155221955877857380966615449159581689087999192 340630880860780886332718254554188800860130682573241288247103055406989323319375878336340516140525980957149304472112218568626318324548512442641543913093586857719527589539094892) :: (Ell_certif 2469650976200974315271776637441166795879060792166213454045031703427117451938155429099946905047328575104372061798074097382609952144415878714420835508392525391047958268095987 4755858983437 ((519285997503691402946432462451668073310423856217512711074002559147742151123952303498878710492842823058827485683378365380976115402309534291796662460778721443497,1)::nil) 0 2209179974804777805457956445211043735376191099242433128813719765956288658179053098687061879905618139448832820905308469924287808754184516506259263013366751228710868919507622 1234825488100487157635888318720583397939530396083106727022515851713558725969077714549973452523664287552186030899037048691304976072207939357210417754196262695523979134048009 771765930062804473522430199200364623712206497551941704389072407320974203730673571593733407827290179720116269311898155432065610045129962098256511096372664184702486958780056) :: (Ell_certif 519285997503691402946432462451668073310423856217512711074002559147742151123952303498878710492842823058827485683378365380976115402309534291796662460778721443497 80879 ((6420529401991758094764184305588200562697657688862531820052208350100052561529596889402973813278977475034023979031247338583493895080833257739352644792337101,1)::nil) 478210302584949727954004671322735221980657885354810766981707938508206314117920457446990772765517243630650637606839232540176828135948998265877792443382035564011 445858719734253901533118214418872182037115153525264671449733691979270067934454252780386576420396150736176022259866960779665411127035364691482483807869849882780 0 241008292658777285465555206484533171181857337072552890775112403977998686473889224128130473775918088256035937740864314957573893080447813154140843791830918983066) :: (Ell_certif 6420529401991758094764184305588200562697657688862531820052208350100052561529596889402973813278977475034023979031247338583493895080833257739352644792337101 19066 ((336752827126390333303481816090852856535070685453819984267922393270746489118301489396338892012078514072616455431635116221691000974368758702627238273969,1)::nil) 103968 0 1368 51984) :: (Ell_certif 336752827126390333303481816090852856535070685453819984267922393270746489118301489396338892012078514072616455431635116221691000974368758702627238273969 40148361 ((8387710450406439587994185269253030193064934467781137672542159149927602003906668329941099679281501747829021263200867916576405633004826743812763,1)::nil) 336752827126390333303481816090852856535070685453819984267922393270746489118301489396338892012078514072616455431635116221691000974368758687016369579969 23740460778072323250 202095 4538043225) :: (Ell_certif 8387710450406439587994185269253030193064934467781137672542159149927602003906668329941099679281501747829021263200867916576405633004826743812763 131 ((64028324048904118992322024956130001473778125708252959332382894274256504224779513676160350341036817857817143015471305633749803209440031159071,1)::nil) 7162674947405557906952564445665038525720208586281788380418123672074883870454519779285902361231098408166456612154619991137027856540614344174857 6745746983004155019430308651534543064168572235664318750205052457980357503292700793470130878431805651322066931334737998576357865647697288888585 0 7197443410403997469356309452235292038275280891934365439251397431717229301495357713508441814826247928367767441415568444133101000466802165612125) :: (Ell_certif 64028324048904118992322024956130001473778125708252959332382894274256504224779513676160350341036817857817143015471305633749803209440031159071 5852512 ((10940314868026604472117618034124492435688833394660781444340976024356120659458717421629165740605139330873299593697598390613241511273833,1)::nil) 64028324048904118992322024956130001473778125708252959332382894274256504224779513676160350341036817857817143015471305633749803209440031142131 1043504 88 484) :: (Ell_certif 10940314868026604472117618034124492435688833394660781444340976024356120659458717421629165740605139330873299593697598390613241511273833 2641 ((4142489537306552242376985245787388275535340172154782826331304818007900977114121212612772890509733672593753880202210962593132138561,1)::nil) 0 19008 12 144) :: (Ell_certif 4142489537306552242376985245787388275535340172154782826331304818007900977114121212612772890509733672593753880202210962593132138561 1940525 ((2134726188689427985919782144413181111057749924455898700780100652085337844452279367588088993525474223148456272073465649049011,1)::nil) 4142489537306552242376985245787388275535340172154782826331304818007900977114121212612772890509733672593753880202210943644029872721 31749105730618655022 74219 5508459961) :: (Ell_certif 2134726188689427985919782144413181111057749924455898700780100652085337844452279367588088993525474223148456272073465649049011 920 ((2320354552923291289043241461318675120714945570060759457369674713250866810112327106062656449078691593283446602053575919163,1)::nil) 1632074358799289760669837192721751720873282080428283903704997593399969004240511194341711020443110534966346636502292150133550 2008136420944272164278158305627271957873327424314965298152035741802404334582008327118102662847199044272541274335042932628971 1222663957274203146169952750045707739663548315743171137996605168239598252558349691854580518934271393076570748591124090519608 1694611433523701628456504065952568388322069234036122379511426215395426501653750165549685439660023095911054243609972140241345) :: (Ell_certif 2320354552923291289043241461318675120714945570060759457369674713250866810112327106062656449078691593283446602053575919163 157 ((14779328362568734325116187651711306501369080064081270429106223446026080003313444782835934267658154554466322911712221479,1)::nil) 360919338944395125675580118925697333919911595453059986469639366157743684847768706951650421836939326402037143040160098508 1017359749703613438691808869181561385671314882088215429079221445252739647763803288184173035224933768925445850560483055423 815777614476277861425720218158868175004711203759041987598186830092182336670868377491591358297272209522540462897751463822 1569137569450449949427381261805199212962846404635067723753734614207919944188849722177714165565632006045262240689285142632) :: (Ell_certif 14779328362568734325116187651711306501369080064081270429106223446026080003313444782835934267658154554466322911712221479 72 ((205268449480121310071058161829323701407903889778906533737584988885249808755122945511269846924093599145290277029638923,1)::nil) 12018957655627221707636655733883409920425435417656233363945641315178318496843736925564064007625174231542853465073770011 13189945880149608772478909342820819912194895046013554015679007258546568698183896698294223253906371951279908516695927848 4723718154632092445193770597888548170927707538654164142455796843909480318734483363612135482292090175769895644610103987 8902381836232399581670956949734154472224245390320172602139813771039944149510685521699214785758943856348330535575086456) :: (Ell_certif 205268449480121310071058161829323701407903889778906533737584988885249808755122945511269846924093599145290277029638923 15343 ((13378638433169608946819928425296467536199171594792839323313704727393076258184684893896162178624891870573847881073,1)::nil) 170668734752342157728016552554008302451859695201868220387158543021314969802685501705662787124905722605279739016344493 40709564126789631846951624226712471842301811521652979111333593203876665315229022598783756884318236609459974895874837 170507930847899378531160462857831152171621509237002041265475228604852037971627199607802925579379705773860031878569816 136543059445003486457975776092209162406699887290538869638751271921353726461419117447569014229137030181932895764829481) :: (Ell_certif 13378638433169608946819928425296467536199171594792839323313704727393076258184684893896162178624891870573847881073 7771788 ((1721436358424806356892381576195396417941298912784656416657161286200103344698931356253565931475192456745827,1)::nil) 13378638433169608946819928425296467536199171594792839323313704727393076258184684893896162178624891870573847786993 9834496 0 3136) :: (Ell_certif 1721436358424806356892381576195396417941298912784656416657161286200103344698931356253565931475192456745827 48742 ((35317310705855450266554133523355554099981513125941825985839828592446218456024550770849912923460204513,1)::nil) 89450538684894501459619731814309607167796567275015709440693630025879599941024169154066430698783482038559 391738640474998873531549439432108841807154771116505245311171161388274164665456412072300127195803474397018 0 747512751982657613531186859154298607818943243086059094446882214950306786034575668073672039027461849809814) :: (Ell_certif 35317310705855450266554133523355554099981513125941825985839828592446218456024550770849912923460204513 2993842 ((11796651495254408972335258014068729779320856987757394676493970597939389457072845040895946177369,1)::nil) 11772436901951816755518044507785184699993837708647275328613276197482072818674850256949970974486750679 0 1308 47524) :: (Ell_certif 11796651495254408972335258014068729779320856987757394676493970597939389457072845040895946177369 836914258 ((14095412262954192581500096768656950972056276029935656502909928066765621722764459898437,1)::nil) 48 0 4 16) :: (Ell_certif 14095412262954192581500096768656950972056276029935656502909928066765621722764459898437 14612 ((964646336090486763037236296787363192722164769505258931204787088221018683786613533,1)::nil) 100 0 20 100) :: (Ell_certif 964646336090486763037236296787363192722164769505258931204787088221018683786613533 8676646704 ((111177321031842575647325365247159565887764429885138305096638718446173723,1)::nil) 0 78608 17 289) :: (Ell_certif 111177321031842575647325365247159565887764429885138305096638718446173723 6064042968 ((18333861026138193361054259147056816436807405015216694130463873,1)::nil) 111177321031842575647325365247159565887764429885138305096638718445837583 92236816 0 9604) :: (Ell_certif 18333861026138193361054259147056816436807405015216694130463873 869632356 ((21082312427365792908761388297590516552572762146075011,1)::nil) 18333861026138193361054259147056816436807405015216694130369793 9834496 0 3136) :: (Ell_certif 21082312427365792908761388297590516552572762146075011 914722 ((23047781104385586996662798681759200915353275197,1)::nil) 17450524287644722387772233289807011872118464591769092 9038208780082230374518578657610700108941721577803809 0 19258362161866507852935702045370850083024125773511032) :: (Ell_certif 23047781104385586996662798681759200915353275197 327 ((70482511022585892956156059579676628950328877,1)::nil) 0 9000 10 100) :: (SPock_certif 70482511022585892956156059579676628950328877 2 ((22677770599287610346253558423319378684147, 1)::nil)) :: (SPock_certif 22677770599287610346253558423319378684147 2 ((28606604132698327338176592701561, 1)::nil)) :: (Ell_certif 28606604132698327338176592701561 621136 ((46055298892188406370132437,1)::nil) 100 0 20 100) :: (SPock_certif 46055298892188406370132437 2 ((538054335391705294291, 1)::nil)) :: (Ell_certif 538054335391705294291 1359 ((395919304944741187,1)::nil) 0 78608 17 289) :: (SPock_certif 395919304944741187 2 ((3051683430797, 1)::nil)) :: (Proof_certif 3051683430797 prime3051683430797) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t200/prime8.v000066400000000000000000000524521451023060700215430ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime95025071361361 : prime 95025071361361. Proof. apply (Pocklington_refl (Pock_certif 95025071361361 13 ((17, 1)::(7, 2)::(3, 1)::(2,4)::nil) 8408) ((Proof_certif 17 prime17) :: (Proof_certif 7 prime7) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime89012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234623: prime 89012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234623. apply (Pocklington_refl (Ell_certif 89012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234623 47 ((1893879695295770948252981350144447071184657473075912555818229553454163380877331231704754399766220120433299871866449109312625464366179289491243399649826174047059336263555831057361528510425489477847177,1)::nil) 66272312166166368510158323470455710099572723709643920851466817605176189890017238156296254124869106858914274649068806605967269568336864561811073087867071346849300022048911975259997841918444314213911955 43332861846484230836153271144902348798204840040401790148685871921895227561648847113392166343288270923825647754238606934101190199609408814963776704899361401298965929283784066882180546929000283958587128 36856746828962413660928597495794462757956833452993077553282644142312002397635632055483976565373605551495647105614916929400049420550827660131483051729663453177662891337680879267269471888948650472298338 76070176934756921550353490860050766406196810671380051698190012596898598789797142767274319527493041448514063678585191597752409716530967598975610158140776606782858539785642374791168355626312671678121014) ( (SPock_certif 1893879695295770948252981350144447071184657473075912555818229553454163380877331231704754399766220120433299871866449109312625464366179289491243399649826174047059336263555831057361528510425489477847177 2 ((28159267504695059894328853189967394302138953745032600151930378753630358345386749609027512783487274301672711310016193489244460930863852882883956816489624331614418583673662291206160469109454762071, 1)::nil)) :: (Ell_certif 28159267504695059894328853189967394302138953745032600151930378753630358345386749609027512783487274301672711310016193489244460930863852882883956816489624331614418583673662291206160469109454762071 242 ((116360609523533305348466335495733034306359312996002479966654457659629579939614667805898813154906053127144562403292502681875314812070019974007226629871743243047760898092060409597636410904115687,1)::nil) 27368881059975439340410794070222451231910421295519150272274370950673764449060834949714844678592751275657205383043411817889428081816708273062994973552201355510424280209350178321399293810074891936 16328157490676249493661496949447530627736864190007152491870155259874699378855031115945357506073938048222905435312280975746759827072298667173418047351881386254077198715841539830620278377325495350 0 16468440784394116646027607196930067491513476131956015537892458688647927838037957725904828376124533933225176843668856327324201650629316649558075847894299011460756064975975278823399435378647699629) :: (Ell_certif 116360609523533305348466335495733034306359312996002479966654457659629579939614667805898813154906053127144562403292502681875314812070019974007226629871743243047760898092060409597636410904115687 5908 ((19695431537497174229598228756894555569796769295193378464227227092015839529386368958344416580045051826177705875026671619842118415743342334969176257609885309226355571575464377524820350639127,1)::nil) 43814687432633135945401685537004182558623699986245632729523075487932353420223347007593742892175835172657911415163844064972345517734420498147626901593851471428918644043693015478833784374244197 108624217943752089294625858484529425143170854858610227017355543082156692562213436528428485133034732302653485978044602716560458040539978634972253417679020838924740593261377798424887468175952905 0 64454995982928989454564802642148586919542297705996133639043831553840320663776175238232463732173685064476263628284459575772818184903899874966646362528763530972894729695881242059750457627155358) :: (Ell_certif 19695431537497174229598228756894555569796769295193378464227227092015839529386368958344416580045051826177705875026671619842118415743342334969176257609885309226355571575464377524820350639127 3963 ((4969828800781522641836545232625424065050913271560277179971543550849316055863328023806312535971175223891970378559364234080431366409534784842321458921475136997297048179361146290496536813,1)::nil) 0 898425 66 1089) :: (Ell_certif 4969828800781522641836545232625424065050913271560277179971543550849316055863328023806312535971175223891970378559364234080431366409534784842321458921475136997297048179361146290496536813 288011957 ((17255633594342482947110925789186676249871505409618383239455379801642457697904979770705535450507251851219007489830713052803308685635403669894871532185274183074884830057905107233,1)::nil) 4969828800781522641836545232625424065050913271560277179971543550849316055863328023806312535971175223891970378559364234080431366409534784842321458921475136997297048179249252458048736333 14406462054002124060149776 0 3795584547076) :: (Ell_certif 17255633594342482947110925789186676249871505409618383239455379801642457697904979770705535450507251851219007489830713052803308685635403669894871532185274183074884830057905107233 290 ((59502184808077527403830778583402331896108639343511666342949585522905026544499930243812203976687869918031917828754989771295986437954842591104316937915456821660342005398995133,1)::nil) 77122437516089534090679967721327660246177028809308460742470233863110120169745943202520011145888401362499188947269986407601795385285183386389289354477141187099670264956566147 0 2073650247527647522847013098575613532582414126848756546061469938313098057190791158275481081305700371275781904549222382260892135853034104457858165841465026420575695356821763393 14589907137857271889771641786859604293022735830305059755600898621091764736390377752698788250260656327167998476082977073938622290390880332966846710371058296233767761244581102813) :: (Ell_certif 59502184808077527403830778583402331896108639343511666342949585522905026544499930243812203976687869918031917828754989771295986437954842591104316937915456821660342005398995133 9421 ((6315909649514651035328604031780313331505003645421045148386539170247853364239457620614866831480649169114082534214837031904110891145586189062876543009431217804497802452777,1)::nil) 28425081934986550951067407105094313309219600110537947621570058753824885140620286462282660876196855694405076867491051961078884266381886678874707092373745084567394823916727856 45252966663500430543084761020881796269450309326117536607340088095931352945718462786128903737301872142086188778680760034648801090699162985382053723435182529511788145029742675 0 7556806835294874971306727514327195096541949890209581062487840331359121202187357708044296909092292992989771212925223758811782505177578524289435441610583880635326042336389888) :: (Ell_certif 6315909649514651035328604031780313331505003645421045148386539170247853364239457620614866831480649169114082534214837031904110891145586189062876543009431217804497802452777 130 ((48583920380881931040989261782925487165423104964777270372204147463445025878765058620126608846902045663151445537455278306070326170206939705042951293453191711404349009153,1)::nil) 4583241783648159125277726166753482876120406697237415193667655082786470250992589706845764614868636110228615881899944123513125939778769386609465314210382337987189869135566 0 3148640251818669205469227660915505021964117214417894170094951446039113362593243749179228233392333629005105144758255870472361068083070654823093296168552513425510508335251 6241393066005400537768009191983100181197926779080017915599994057569346808027577131589225372696721524698593555421535868066555871227806671396116740320126453990590659323615) :: (Ell_certif 48583920380881931040989261782925487165423104964777270372204147463445025878765058620126608846902045663151445537455278306070326170206939705042951293453191711404349009153 17346632084672 ((2800769633190763755146296589861263114862310706951971898243231475446883890182630603491079460601171218405319087900279173429027837426250426737266389121976909,1)::nil) 30216094267032364522896493384666150936827181924463307326902248451933711304430551985608965120359164309902199208719254409581033127909507229103713405444430268120301622863 12361931576846630391078479185161176275450164575849200869869439067521497367280638750383252117845091740182895591291738855985704870172355872110427174490933935798935252420 17572756753245631078652257790868229517930363927110361352442097427652542303438315025684045894016115679223589843466205472587704661915359581192862780173414332749144943070 6342847910848802674374559852911208934986192039758723357212003730801201430964171426139798406194179117111017883289751052957430109511162057770135083993286939763241425070) :: (Ell_certif 2800769633190763755146296589861263114862310706951971898243231475446883890182630603491079460601171218405319087900279173429027837426250426737266389121976909 4696 ((596416020696499947859092118794987886469827663320266588211931745197377319033757418150603607836650262734695843828436389875781880078438111204182885840049,1)::nil) 479020528112386265566265074212162845954979318811641607080118162332021903294513163100052864581462323045080023564773765145490081012892353719493088974951415 1233847185518573839101403480548950000442700235660137364777623406728921088355515759567597019243770448892458656632018816406003117740275858484527439853557163 0 189298750688528896534827909491710057607246876913022188960529907827464840578400808315052910087408969725253246135738223174341574387021902592585786230994999) :: (Ell_certif 596416020696499947859092118794987886469827663320266588211931745197377319033757418150603607836650262734695843828436389875781880078438111204182885840049 170 ((3508329533508823222700541875264634626293103901883921107129010265866925406075763184819101468952287401807632475161282235394648249040168544536538084601,1)::nil) 583381179953946660016948407845187694687163456036378443068355129938297258249189988193563206549608603322355355646579596261187886119679536940484116975754 0 190115446403797790724934898965129167634833082917496765974926171559739065821540852745507601754188981303338289154907600882197964053640320892261782703820 82022882459345607520323738532764392034752334174860237843886470520789472126202996415713399590052831239328656395597006826504988068061586182432122487615) :: (Ell_certif 3508329533508823222700541875264634626293103901883921107129010265866925406075763184819101468952287401807632475161282235394648249040168544536538084601 26959 ((130135744408502660436238060583279595915764824432802444717126386953037034237667966513660014150945190295638856493278601427361216260205328366431231,1)::nil) 0 19008 12 144) :: (Ell_certif 130135744408502660436238060583279595915764824432802444717126386953037034237667966513660014150945190295638856493278601427361216260205328366431231 148 ((879295570327720678623230139076213485917329894816232734575178290223223205285227195662519174756856291108692275442368861722247857446986869286253,1)::nil) 87880006453956025864003493936747383441491623416836350814674343284773920455504882402703276644888139720488458359982735863444601118334482133489796 115617887841937312533481502286588226418321655177677796401053469709249246032145287611960080706228954097035084575129511524238131391071069533333061 30427904797091082824403976396648993670826229193461263764466985153916152521693717282714968389620659703286630559052329617651752885444937396671743 47295223257637602253182305720602374551226682646301922669785937417572552172122140920185436963701677146627992699218696785666467107706059672422429) :: (Ell_certif 879295570327720678623230139076213485917329894816232734575178290223223205285227195662519174756856291108692275442368861722247857446986869286253 51906896 ((16939860367064150370756712924545006234187648107801181842489257886336012826258545234072867361462187128575269517234835083118719662187349,1)::nil) 415631174942309019581458115628684331878004211090908036550149230553705127642407938766142766992205434676913080190826424808248830446992445788562 478235444707027423172205726613743898685694147822338514481168728692211188405817625688697066776666207450111297046988677292278181393993644201464 0 147649175136166931793159971646814748422044413155282377028059329211849007901118422537271743962995039524553621183493887632882911796045281700832) :: (Ell_certif 16939860367064150370756712924545006234187648107801181842489257886336012826258545234072867361462187128575269517234835083118719662187349 2296 ((7377987964749194412350484723233887732660125482491803938366401518438780661150893369921648539999482241124444749303052726306282897781,1)::nil) 14968079700974594337563398271325054512307171638346402455300064256849993403227953833904769737719160978440538469258380759248917015316242 13625768431390350021535785510466491349844010300127258039133773819358090666814680766936350875632683984359018663766429368510782698615378 0 9216133704229836830864899055601604194671780983211656290153816356587748144301256954576011331157147297453930458512142676230779091204089) :: (Ell_certif 7377987964749194412350484723233887732660125482491803938366401518438780661150893369921648539999482241124444749303052726306282897781 1100208 ((6705993743682280452742103968734900793904539398451750885620175019958455570404770334144782948954905337786827978948696999282281,1)::nil) 0 61440 16 256) :: (Ell_certif 6705993743682280452742103968734900793904539398451750885620175019958455570404770334144782948954905337786827978948696999282281 2918 ((2298147273366100223695032203130534884819924399743574669506571233498643220073074900633014879660680428326482279959146141093,1)::nil) 5834462277945294369989586029593130992909943014159130302436000481212376947314363858045710699374471411627310977706990180679083 2323291145112891423711166718575082781865136349820020191430126096208343390565909003364962422599803029284892823131562760602812 0 6259829173654633139999321157652220619524779525823124770537477958710446324171654602093609553326744198712098814424754235160408) :: (Ell_certif 2298147273366100223695032203130534884819924399743574669506571233498643220073074900633014879660680428326482279959146141093 3796 ((605412874964726086326404689971163036043183456202206182694039072475960395285001299629485396393580785729833166237945961,1)::nil) 1740223885855579283694794042328958785991750470110022127419055592760814039251683014972265788111104862019601490872370313663 1223858230476813411390862067936745555655585355784227119290543266087471012709077820547943000451779786946230736221566734590 639841943186736629202136014416336489987242789086105865531468083661423972035497446630118518773324065791710263846493111139 367315631771493726070206096553461677149405421024607791255965168358052187964462660025841554202154175275300510444874366418) :: (Ell_certif 605412874964726086326404689971163036043183456202206182694039072475960395285001299629485396393580785729833166237945961 180 ((3363404860915144924035581610950905755795463645567812126077868176604599937688320576195368605244020714910263452641767,1)::nil) 449322038910497847737077226553370392471841621777051407347876150315622203793780233597005103609291147472649617071521495 223888080129340761067553671887914153147911570361535772443448676774169005281024768712033087958118596897176702793685545 0 41523551943019861960537655244817315669801495901847795653257151673947212048377805596722570598415960240750304802218424) :: (Ell_certif 3363404860915144924035581610950905755795463645567812126077868176604599937688320576195368605244020714910263452641767 6754 ((497987098151487255557533552109994929789082565230650299981381103072483572858854143073779817125656433787515983871,1)::nil) 573264579731502774802061081883567378475372604639942974197721614399399498714015436572602140931943252088719268998895 485612982297619904180776481689506496951028052820070519870950687163224578964280075945927421787098785928166546832388 3059124554828651627691405091899728865125988126359637339812774794858527436482880168945626218599481745520510259533785 2693726259584105026121307029714422600554318909078298139452496650951260799136528369296548686643501396621902681438378) :: (SPock_certif 497987098151487255557533552109994929789082565230650299981381103072483572858854143073779817125656433787515983871 2 ((49798709815148725555753355210999492978908256523065029998138110307248357285885414307377981712565643378751598387, 1)::nil)) :: (Ell_certif 49798709815148725555753355210999492978908256523065029998138110307248357285885414307377981712565643378751598387 456054 ((109194766003913408402850002874658468029900530470218504794793861623105376878888081739412242011519831230451,1)::nil) 47353717587010582000699411824134777819478762604878804284553960030814749274891235985117766355060874631481349990 42758763013199340047958000650441045874150996434737863058235962611258786127517229442501611967943935191929638700 26494287437430662640294930273642812697256777635370209638757582344761929557150765460563495622473460039820815409 22201571273382680810077916373398685894370286202807600845905290355831176001640273238001792835288209873892713748) :: (Ell_certif 109194766003913408402850002874658468029900530470218504794793861623105376878888081739412242011519831230451 5846546313310 ((18676798258713049716099795729552366132730110637040662822271348992891177163109645549034706411,1)::nil) 72281826113328178534595401367830891116644609899906022029322203208715516526597421993487482669823652429731 38717275309467276786854321018373002530252680234090348670222863915489454031606296611747721591199032981991 0 100258190565240356208223469543139200503761441274769793581224846164874062295167076428904439490034773641195) :: (Ell_certif 18676798258713049716099795729552366132730110637040662822271348992891177163109645549034706411 11012 ((1696040524765078978941136553718885409801136090482953665593039193013436080090503120894977,1)::nil) 15107295908871604197427944617707137787651635660008027135674213032013523049130428694079396335 17511690544156562825276852772897782563188792674552963147538983180120688270467837148116656549 9729134176648440227055830637119410007996827254450057086722731069847276087433341354666460839 1471816980992185610747856401615161063517410608015084557371068968676352312335070844638647598) :: (Ell_certif 1696040524765078978941136553718885409801136090482953665593039193013436080090503120894977 321 ((5283615341947286538757434746787805014956810278059406753339419912468311098305686114027,1)::nil) 39680407711222665270444563658130241019066481331655709486804410946464904637613263469929 282669900450380468591523585848415751076038125163548918024260821126379349550873488512173 812685009471730113864843024680234468474754707749507452832077299007044166816059870171028 594636217696337726553227604612225791073825196505021868628123365122342303494589454599279) :: (Ell_certif 5283615341947286538757434746787805014956810278059406753339419912468311098305686114027 3871778558 ((1364648123026070681276146151638408090733792112852565324967649717007489678129,1)::nil) 2682957349114547982127516842591531661819484615549675145516015392248426156146152989866 3659051484241649384173202882835188684391467301085162057413584889398087346648175245235 0 2904243737559551660118620261879019025098228643792771383031115085265723917760409276471) :: (Ell_certif 1364648123026070681276146151638408090733792112852565324967649717007489678129 409 ((3336547978058852521457570052905643253478808898372869984650778275597731483,1)::nil) 0 591702897093335334459578995436966008091605173932166996372691869483786883449 682324061513035340638073075819204045366896056426282662483824858503744839252 1279357615336941263696387017161007585062930105799279992157171609694521582035) :: (SPock_certif 3336547978058852521457570052905643253478808898372869984650778275597731483 2 ((124210705757533040036392303361836172045224067395311964286009168178011, 1)::nil)) :: (SPock_certif 124210705757533040036392303361836172045224067395311964286009168178011 2 ((28038534031045832965325576379646991432330489254020759432507712907, 1)::nil)) :: (Ell_certif 28038534031045832965325576379646991432330489254020759432507712907 16202 ((1730560056230455065135512676191007759398365806866014123298857,1)::nil) 11377077409767103395470525563936988555274196729293122361519899599 2579600005805778068481573691676365886635869137978425985992659881 0 10389359939282148424729243775896211503431559115943993841269271636) :: (Ell_certif 1730560056230455065135512676191007759398365806866014123298857 1209436601988 ((1430881166805984956570038133894031959781062185381,1)::nil) 0 192 4 16) :: (Ell_certif 1430881166805984956570038133894031959781062185381 65768498056 ((21756330296422923630859796436675131777,1)::nil) 1430881166805984956570038133894031959781062181781 0 240 3600) :: (Ell_certif 21756330296422923630859796436675131777 5410 ((4021502827434921187232549718784241,1)::nil) 48 0 4 16) :: (Ell_certif 4021502827434921187232549718784241 1088 ((3696234216392390870117793460409,1)::nil) 100 0 20 100) :: (SPock_certif 3696234216392390870117793460409 2 ((196902047885524848684707, 1)::nil)) :: (SPock_certif 196902047885524848684707 2 ((567869826455493337, 1)::nil)) :: (SPock_certif 567869826455493337 2 ((95025071361361, 1)::nil)) :: (Proof_certif 95025071361361 prime95025071361361) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t200/prime9.v000066400000000000000000000403771451023060700215470ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime127822998254869 : prime 127822998254869. Proof. apply (Pocklington_refl (Pock_certif 127822998254869 2 ((148517, 1)::(2,2)::nil) 112984) ((Pock_certif 148517 2 ((107, 1)::(2,2)::nil) 1) :: (Proof_certif 107 prime107) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime90123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012346519: prime 90123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012346519. apply (Pocklington_refl (Ell_certif 90123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012346519 15219166 ((5921707982488156425844966443489092862039155913384406296282456615786751324766789382626785718095423677762720072283021637287836465173892207764165252419891523023168079862983750334662323400513582147,1)::nil) 88180565001867873066989991257726641230390273472469795647821582691449205498060745814218285849552888174939607674181296505510148435443046999100423103434394362307173493622430090703812139604769622277054353 50820579353794608743976748002482450005761534335655405408630363467619570172548276610204466951835292759144267784354353920585241852138450915013631968091656858266080139210865140626314287471124763785137757 82578651236542214887849892722876300472124122692390684896028648865281852799976779823006630929584302906476824423729306266721221210808905826963333679850034908957037747757364680321088710189966718265956253 20906757777453113229041134991485683853631587643205382586290708558811132597867086195989083407930345881725334900138879240032327197083672145853283801902956025674832006885932950730114902230238541137116714) ( (Ell_certif 5921707982488156425844966443489092862039155913384406296282456615786751324766789382626785718095423677762720072283021637287836465173892207764165252419891523023168079862983750334662323400513582147 124415 ((47596415082491310741027741377559722397131824244539696148233385168884389541187070551193873070734460687322970510348725887609950592165213975626832877803097526570068292902747489214873012446087,1)::nil) 562322598025964085305684952093013981739505269879586299428897515451501921123419685303016334692476148642990184571200352656655373311625917890873651990289837095451624391189612603812112064501721665 5295097789875345621603702678390364787089408192090586873879658904542964219180029470161615530239367575636687832190797238821758695463463512909314291561964261997099980749212592235242773912784775836 1649125441602905164821525228859205198213502853269268288319876554233483339432069126510475149885958084782093300994452936503018834451468992443189862413677424633788510052531809255416416722424223640 811839156769686237789339652432636923643651311865319415635736230855782047351387586708650232966803773304757710011244523981805937885437937971135255782126987933546629988495068104536533114934772663) :: (Ell_certif 47596415082491310741027741377559722397131824244539696148233385168884389541187070551193873070734460687322970510348725887609950592165213975626832877803097526570068292902747489214873012446087 9593 ((4961577721514782731265270653347203418860817705049483597230624952453287766203176331824650585920395017765151047186638302273647195513628808518830246096630923351905324216162614001346934979,1)::nil) 47596415082491310741027741377559722397131824244539696148233385168884389541187070551193873070734460687322970510348725887609950592165213975626832877803097526570068292902747489195923910180247 31749105730618655022 74219 5508459961) :: (Ell_certif 4961577721514782731265270653347203418860817705049483597230624952453287766203176331824650585920395017765151047186638302273647195513628808518830246096630923351905324216162614001346934979 98 ((50628344097089619706788476054563300192457323520913097930924744412788650675542615630863781487606744575134209052016334163008313695164718221869767377562571127554590605733562571141842973,1)::nil) 610454595285083820837719598245085834786349513967318559523556932216173048507386076473195293309065131862173115629601195179077273806022766646008917574784195570077474762735261206737874607 4898844012692732650102389748200122870098685321818914210491237036798586660552751341298287488610925839330159835302463244070337055026714273314999193853418072573565194620500801159967841286 0 3538616058476694094486123646898510815113860279855495026306000043300073475043037721377232610346462278604826344606932557616111313121630770162190337130741757119404861829145654530989766747) :: (Ell_certif 50628344097089619706788476054563300192457323520913097930924744412788650675542615630863781487606744575134209052016334163008313695164718221869767377562571127554590605733562571141842973 1588 ((31881828776504798304022969807659508937315694912413789629045808824174213271752276845632104203983518774184024814384375361036668427385484511690226311132920766759565093421021323760161,1)::nil) 100 0 20 100) :: (Ell_certif 31881828776504798304022969807659508937315694912413789629045808824174213271752276845632104203983518774184024814384375361036668427385484511690226311132920766759565093421021323760161 59 ((540369979262793191593609657756940829446028727329047281848234047867359546978852149925967863894065329109438841324542826583843034892017226265195260055864632058880493601899340674027,1)::nil) 31881828776504798304022969807659508937315694912413789629045808824174213271752276845632104203983518774184024814384375361036668427385484511690226311132920766759564991452519760074041 12532772959217148221216122 5579439 3458904394969) :: (Ell_certif 540369979262793191593609657756940829446028727329047281848234047867359546978852149925967863894065329109438841324542826583843034892017226265195260055864632058880493601899340674027 187297211 ((2885093570682123993792997044451136164787999578536421889636328049045853368200192526764148264249066829129521886011459707198088890914478489678694693850655458407130864251427,1)::nil) 540369979262793191593609657756940829446028727329047281848234047867359546978852149925967863894065329109438841324542826583843034892017226265195260055864632058880493581153509197867 36370126051009921296 0 6030764964) :: (Ell_certif 2885093570682123993792997044451136164787999578536421889636328049045853368200192526764148264249066829129521886011459707198088890914478489678694693850655458407130864251427 15078 ((191344579565069902758522154427055058017508925489880746096055713559215636569849617108814119220461619530786721421825635364547984951197149233344222649871518702807833501,1)::nil) 2852845675312007659454558738314025371360099223960607592025157579695528560783365447078802420427659325967527169654140303066341722958119906709457352903357499168219512576401 1797614568472618795911498579139262236414117735734958492319761706953717055941854217765525948955343526852434567090125208387173985354963212527034455621933035421619028102427 0 1230933943864134702442428479314663266268498473701720318451755627480874750560235461919557754376150082043020653842292643858556054821494995920428788434272335326792154973707) :: (Ell_certif 191344579565069902758522154427055058017508925489880746096055713559215636569849617108814119220461619530786721421825635364547984951197149233344222649871518702807833501 21000 ((9111646645955709655167721639383574191309948832851464099812176836153125550945219862732228634717370966002397150175458946541638534292023060548507728648902064131287,1)::nil) 150267229713067956089457762921329761213185089296209588271581298266037695592172386265888127730818175671626071182934473873502897741386455637338868179065217866350339028 147391780943617109049149114687803236061612003713304547504592813966249200087362368826927693335518724118357103163383952040268498257422730267170765777001611299421652980 190944893229336355018935508335988399219330713064293060781534514876236341148395031358408697772334257483644451621790549410716367947022250012512996753504845241666812555 178246327100016350135522998994108743817220957219308289818785514511576316011895190574592879966049088968406882751429774351747384660799645340960123229761043869973939181) :: (Ell_certif 9111646645955709655167721639383574191309948832851464099812176836153125550945219862732228634717370966002397150175458946541638534292023060548507728648902064131287 2586 ((3523451912589214870521160726753122270421480600483938166980733501992701295802482493073236728242856225939177586326570656722816031932749383913542544719519348647,1)::nil) 305277970503492520725953018292113189216819167603734775135775206052211987533515982538603257423820262046605564525029378439482694072340489666641712758432565965032 2579788207953149358548112548866602192250278506466975214597056355412261597657557208045484530777308443975156018660682378192204786539287005607202015478109841035526 0 5775482695241566157470412010532588330904891821974458535120716904738716778106599113947816034729386373312610795009998726918634464738093216987010271734798590676251) :: (Ell_certif 3523451912589214870521160726753122270421480600483938166980733501992701295802482493073236728242856225939177586326570656722816031932749383913542544719519348647 12127140 ((290542692884654986296947237910432490300390743446842220587931985776753735489363988126970895253325069840265760188340106878261498268920819587549568964057,1)::nil) 3523451912589214870521160726753122270421480600483938166980733501992701295802482493073236728242856225939177586326570656722816031932749383913542544718761764743 8234810772496 0 2869636) :: (Ell_certif 290542692884654986296947237910432490300390743446842220587931985776753735489363988126970895253325069840265760188340106878261498268920819587549568964057 258297904 ((1124835658305051466065892806898009092247185805452150399903872180769820476317835035964451496172811786920878011284883694592217438675261649431801,1)::nil) 290542692884654986296947237910432490300390743446842220587931985776753735489363988126970895253325069840265760188340106878261498268920819587549568869977 9834496 0 3136) :: (Ell_certif 1124835658305051466065892806898009092247185805452150399903872180769820476317835035964451496172811786920878011284883694592217438675261649431801 14928398924 ((75348713819315367731922274754587010542510191929015628970598922398533059169492444057105654656241660472349463097317775057303727051449,1)::nil) 1124835658305051466065892806898009092247185805452150399903872180769820476317835035964451496172811786920878011284883694592217438675261649409931 1102248 27 729) :: (Ell_certif 75348713819315367731922274754587010542510191929015628970598922398533059169492444057105654656241660472349463097317775057303727051449 32515143092 ((2317342218243354601071065609523814010792426868186074319201981828347091688569917488905730779250741145191332122401115865133,1)::nil) 900 0 10 100) :: (Ell_certif 2317342218243354601071065609523814010792426868186074319201981828347091688569917488905730779250741145191332122401115865133 8681220 ((266937391085971165466497290648527973118113222356543702290919843861098658185124719362357671724055319497242244031333,1)::nil) 100 0 20 100) :: (SPock_certif 266937391085971165466497290648527973118113222356543702290919843861098658185124719362357671724055319497242244031333 2 ((3955565631645592517730088475024123838511546771924362845873389897769821856812351362728315922649151198761813823, 1)::nil)) :: (Ell_certif 3955565631645592517730088475024123838511546771924362845873389897769821856812351362728315922649151198761813823 1687 ((2344733628717008012880906031431015909016921619397962566117558001438235664181860783994465001967074569288113,1)::nil) 478511094200580474924851669789406950364609323576319822181862878081449977995596587166921600638728732483280563 895773751147006877585035874342688661817870874246074071080876072083937344510655528935886522104207673310310945 0 5327641067499341157637477440085519458828910696503656061567566959658593061590896130103034877212695211849565) :: (Ell_certif 2344733628717008012880906031431015909016921619397962566117558001438235664181860783994465001967074569288113 88469472986 ((26503307294348349006236116242246876913219296515794016336406410542775543604789894568946317785193,1)::nil) 237474909743420827877495805734477269372413832020174111147275617967997068276190918029275710727273226641632 0 1019854042693442280621567625750012650529898700365624415558787514093306999744857580022048382910144068927953 1944237367462904961021875043483116346419725270795501517235269243611876346134410952435615878613071255685652) :: (Ell_certif 26503307294348349006236116242246876913219296515794016336406410542775543604789894568946317785193 140680 ((188394279885899552219477653129420506917964860079676893957107857664123350503648193139502839,1)::nil) 25723405632691038139262290774501306516623150563606738932696327588991592622744587499737850651857 20442578845848203842006775782637607993390464008018728651042475034785931193609326056836259052562 0 14795659973152110411444022384521407909243973910210524222122517154555760280062120389372283561185) :: (Ell_certif 188394279885899552219477653129420506917964860079676893957107857664123350503648193139502839 529 ((356132854226653217806195941643517026309952476985854339169011976069671315494918338313577,1)::nil) 64493289679164055341222834205780205099242453396276640606877272591007062221919358385969144 140293496304966840514169473287625796835332304000698028666091291233677242619970362324263006 173977352953592726547223830407202023128115394250015447742136679748767824966163611449241947 72171610976283018694420868601935812066493211505799119562878734146258792884282484685096986) :: (SPock_certif 356132854226653217806195941643517026309952476985854339169011976069671315494918338313577 2 ((511685135383122439376718306959076187226943214060135544783063184008148441803043589531, 1)::nil)) :: (SPock_certif 511685135383122439376718306959076187226943214060135544783063184008148441803043589531 2 ((18399321660666035216710474899643156678422985043514402904820682632439713836858813, 1)::nil)) :: (SPock_certif 18399321660666035216710474899643156678422985043514402904820682632439713836858813 2 ((97085848480687832250102761242550268465053003669950837421751633806326187957, 1)::nil)) :: (Ell_certif 97085848480687832250102761242550268465053003669950837421751633806326187957 38485 ((2522693217635126211513648466741594607007620559090409416020757224328143,1)::nil) 22906757450800153378166503631313312456462815216746475556944563052717019914 5141471945967009078575584241545675914602807826792006837408324000279813156 83247334473091857174678384304150550015951542908325030581941875915214420141 66701158570409756966406457175210979810521792756609001701495376209339141385) :: (Ell_certif 2522693217635126211513648466741594607007620559090409416020757224328143 113926 ((22143261570099241714039362978965245073560653005996349676463298367,1)::nil) 885327216187070118831630652200553759452271888335268364471280315429609 1024965782412656295240364338389460701016030157889939146415841826114752 66330663875510311914643321301885847061742552849118674118538272651428 3268154282092516743090242893022571877436776599901862272405744378194) :: (Ell_certif 22143261570099241714039362978965245073560653005996349676463298367 1891 ((11709815743045606406155136424624557057107627485302946304997677,1)::nil) 0 192 4 16) :: (Ell_certif 11709815743045606406155136424624557057107627485302946304997677 532410188 ((21993973832532307601437439857232347402933503235419691,1)::nil) 8570230869144659118591314091536924957245543374035735171018675 7587918199641087650705046806280496464125363231786528415326853 0 1580364434584336985770341455885018010726910779633970737485886) :: (Ell_certif 21993973832532307601437439857232347402933503235419691 76427343 ((287776245636752118956136419232026858806419127,1)::nil) 0 221184 48 576) :: (SPock_certif 287776245636752118956136419232026858806419127 2 ((107354120133413657465135538949494207251, 1)::nil)) :: (Ell_certif 107354120133413657465135538949494207251 144253736 ((744203395421340473876621920973,1)::nil) 107354120133413657465135538949493871111 92236816 0 9604) :: (SPock_certif 744203395421340473876621920973 2 ((328089767728908127294291, 1)::nil)) :: (SPock_certif 328089767728908127294291 2 ((179284026081370561363, 1)::nil)) :: (Ell_certif 179284026081370561363 1402596 ((127822998254869,1)::nil) 0 78608 17 289) :: (Proof_certif 127822998254869 prime127822998254869) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t225/000077500000000000000000000000001451023060700201475ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/examples/t225/.depend000066400000000000000000000022221451023060700214050ustar00rootroot00000000000000prime1.vo: prime1.v ../PocklingtonRefl.vo prime1.vi: prime1.v ../PocklingtonRefl.vo prime2.vo: prime2.v ../PocklingtonRefl.vo prime2.vi: prime2.v ../PocklingtonRefl.vo prime3.vo: prime3.v ../PocklingtonRefl.vo prime3.vi: prime3.v ../PocklingtonRefl.vo prime4.vo: prime4.v ../PocklingtonRefl.vo prime4.vi: prime4.v ../PocklingtonRefl.vo prime5.vo: prime5.v ../PocklingtonRefl.vo prime5.vi: prime5.v ../PocklingtonRefl.vo prime6.vo: prime6.v ../PocklingtonRefl.vo prime6.vi: prime6.v ../PocklingtonRefl.vo prime7.vo: prime7.v ../PocklingtonRefl.vo prime7.vi: prime7.v ../PocklingtonRefl.vo prime8.vo: prime8.v ../PocklingtonRefl.vo prime8.vi: prime8.v ../PocklingtonRefl.vo prime9.vo: prime9.v ../PocklingtonRefl.vo prime9.vi: prime9.v ../PocklingtonRefl.vo prime1.html: prime1.v ../PocklingtonRefl.html prime2.html: prime2.v ../PocklingtonRefl.html prime3.html: prime3.v ../PocklingtonRefl.html prime4.html: prime4.v ../PocklingtonRefl.html prime5.html: prime5.v ../PocklingtonRefl.html prime6.html: prime6.v ../PocklingtonRefl.html prime7.html: prime7.v ../PocklingtonRefl.html prime8.html: prime8.v ../PocklingtonRefl.html prime9.html: prime9.v ../PocklingtonRefl.html coqprime-8.18/src/Coqprime/examples/t225/Makefile000066400000000000000000000003741451023060700216130ustar00rootroot00000000000000ifeq "$(COQBIN)" "" COQBIN=$(dir $(shell which coqtop))/ endif %: Makefile.coq Makefile.coq: _CoqProject $(COQBIN)coq_makefile -f _CoqProject -o Makefile.coq tests: all @$(MAKE) -C tests -s clean @$(MAKE) -C tests -s all -include Makefile.coq coqprime-8.18/src/Coqprime/examples/t225/Makefile.coq.local000066400000000000000000000000461451023060700234610ustar00rootroot00000000000000 res : make clean; make -s all > res coqprime-8.18/src/Coqprime/examples/t225/_CoqProject000066400000000000000000000001611451023060700223000ustar00rootroot00000000000000-R ../../../Coqprime Coqprime prime1.v prime2.v prime3.v prime4.v prime5.v prime6.v prime7.v prime8.v prime9.v coqprime-8.18/src/Coqprime/examples/t225/prime1.v000066400000000000000000000452451451023060700215450ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime637434979 : prime 637434979. Proof. apply (Pocklington_refl (Pock_certif 637434979 2 ((293, 1)::(3, 1)::(2,1)::nil) 442) ((Proof_certif 293 prime293) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012607: prime 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012607. apply (Pocklington_refl (Ell_certif 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012607 131840219 ((936412196132241549911522582423224409154025644321034043245105072654566906822863372477922614217265438646955515912953186575723388443298850853009138456968877662341236124531502368705514874437195574654854811140417905502153,1)::nil) 37282075705862897480847408162627139098669180666534652776499574546812880595977978032128742391502333625155728432284243302018721673738042905505635325590753643382425942328094408658252786449276207333173967928149624013395124360161 38526323361950520420833600366552601828537364893804737137563079125208349789084064575912356699928447625334264138834981495678079283438941044958156367130225513002237642314520470462360578481317319493929558502741593895438364795640 0 27514220885564134379914772693021645144503461695700456992670251072152709075743078094547515911612340117048783426870221295717612126710543501698185787358851529334335644122634121910392183047540831160490022933855634901446545462235) ( (Ell_certif 936412196132241549911522582423224409154025644321034043245105072654566906822863372477922614217265438646955515912953186575723388443298850853009138456968877662341236124531502368705514874437195574654854811140417905502153 179208 ((5225281215862246941607085523097319367182411746802788063284591495103828550192309341535660317716092131193671680703309883666921271183182920386286673855652382005654139089882396228590212543432684566388307661321511751,1)::nil) 599231918242522541373433936302670719612163690782112670567208249196371750606664945381009855690110284602267818228372707109589335664309931287675133036958626543367526187695908157509371031212092533922812449506187261055364 285205213208141002321021199081040364303845981522483265222528986969719082455649270207101263521204624169064871190880272827692167064228455770187517363474469256309125194585211021631358879585321561983170511880183593834213 0 594834834802386398115182010887491155625875267474578131632472421481482466786409537132825893158098145470286573592836995406105287175217725438744471120674724071614831086078395849263404689036672409625925285530952481375461) :: (Ell_certif 5225281215862246941607085523097319367182411746802788063284591495103828550192309341535660317716092131193671680703309883666921271183182920386286673855652382005654139089882396228590212543432684566388307661321511751 11653 ((448406523286900106548278170694011788138883699202161508906255169922237067724389371109213105442040000960582596822839082269663272596251897843366423835066208894556999074232817362718468918063483103618067908975093,1)::nil) 3087512069833262365015256957446464170458897825795193018420219727888827616066091671451338878900828937696431914181451094173079672624773158671516091151627714309111384107507993030645858260072281045654910234603898310 1217191218421096308647980067084902291721597147570021391393779807405837157749306213776840379121393257608438601964175948040890911906504258792643371196845083867462833017725802556255306984129439530639299093272118509 0 1175336138631807299609400726122287273339738357436339014112255844438454407673525928463624130301054194075948463942368598554644983084737463002178491145668078850782085821650259407018310151078166031330822964264327641) :: (Ell_certif 448406523286900106548278170694011788138883699202161508906255169922237067724389371109213105442040000960582596822839082269663272596251897843366423835066208894556999074232817362718468918063483103618067908975093 53683612 ((8352763656940596816553218712146488729910418456980158281940029853472547035851264462406387734156934167555799573413007785505922766721318499257693584725831650628315084582979997713187965327386641085141627,1)::nil) 158798374015684606774131117237463810193296321165376540411416334812739138754324648660724222764993640659341064224822926929673798654639664802070197173386623733503485051582252428539386839768682014525513955633388 262100225805115534744105817818856040051840711122347934533867152230203172899708445784825026042345395534271447676335006866973802623437976924987185698577076528161864628638222945577200395226606292443496826530942 145969913971534486536064692262289455664951779530709758492104390642063825858869545778841115853113387417355472052908523024995346942486511532610641209267601812990972369689684960107918304127849298608729911422864 193383972559819526593884097625666703962462152992155082808870709947140423476636833401750890723859729959118588682692924667634447042836437129684058630734936115315737549576547375133740035532235795470271875792929) :: (Ell_certif 8352763656940596816553218712146488729910418456980158281940029853472547035851264462406387734156934167555799573413007785505922766721318499257693584725831650628315084582979997713187965327386641085141627 18413895793421304 ((453611976012418410051946294639159824650896560345025569216895871952173371214555238817094719605288519804835765616713536240979465555868268178507265567220350344663839500187701963055185497,1)::nil) 3821157730270113507168533721008297537921680941149907274118031706117349600099199995043272999035329647379028291028149634560411867587364835701866385778335050464442996799222732753586925049647938755053126 6654911338583027320006765114835640674849064849023610465174995504218025768502156238493684227241405315098976678631450144379894017244738621235729972410149489637247747134304840382121441486784728263270562 0 8037040352152173671168304102263581806156412920659856100438780654765811620629711583757054597760420097473577846523251879065709303676715113252064417030874856938305318119008194989663993732145459708900915) :: (Ell_certif 453611976012418410051946294639159824650896560345025569216895871952173371214555238817094719605288519804835765616713536240979465555868268178507265567220350344663839500187701963055185497 63850 ((7104337917187445732998375797011117065793211595066962712872292434646411452068210474817458411325711562771606707902356412982496780916058914376339671523411571156020619228498685455157,1)::nil) 387330863320905838007176995147140841224214374839471383697116238005345731873532878742585124411075751352477993031056349461555113011943521911703198126080121198950654555776115720102479849 0 408357486514834156286934855763356265838591892101201778953555057293077147204685225586782496902128183552738103737275506474864704896612077358230600973767577334802691367175996557750004670 91576060031744379931854783632731354152459214394435247110169354679403579135595132974596937980005829788054470581209298112061380281818741616293948819598166265774654436094058720613738819) :: (Ell_certif 7104337917187445732998375797011117065793211595066962712872292434646411452068210474817458411325711562771606707902356412982496780916058914376339671523411571156020619228498685455157 899828 ((7895217660694539104138097277492050776140786455930425273354788286924180456785308386511042589848311967247598089224125376978365055715632901288251676984199091197701412984637499,1)::nil) 4757603327293220798182819569474623623543196210570856124605753077389787624397833861288771104874308116021697537959322262532414220310933466780502429325314267069768904690531371478885 3637456066216794217807476859468942995133894094604973149727391409412307204444142425781858650918298345547603357866619644554046807117542474084363196794818347603638901717365629949362 4933144906230575681523736455554021517811890915402271318534544748145147784199008001890458687231118928668349694252091294480936455791646886377892149416904313250777958104833920163276 1752820770553908995441225820306116129701513952344441996835727151432283848876469745268289811036940312670632124329546552200982660873884393966962463928067197060324472131749122394502) :: (Ell_certif 7895217660694539104138097277492050776140786455930425273354788286924180456785308386511042589848311967247598089224125376978365055715632901288251676984199091197701412984637499 466634 ((16919507924185848232529342648611225877541684609202126877498828389967684431021546622215943784897510781814007417878658601254959949916586344101294109784041059753338961859,1)::nil) 6860267107470759761471736439442056909686185851612264854381942683297553923712688238496130168105858690168523806780448690533579794527007395137530994023033260052906898432988590 470553896898932117572245439730622030427222939799123815863278071830108551616555149107451018844659166992237112864645256247411034947088639660593189491351858917763827606078822 0 6872337549078460004964168842993218882861279525655299558483733385360793325448081551885389606505482262686766980360769931781073249605516085393902220219715691817368466995225685) :: (Ell_certif 16919507924185848232529342648611225877541684609202126877498828389967684431021546622215943784897510781814007417878658601254959949916586344101294109784041059753338961859 390217 ((43359228132515621391506117490040735994438183393348129060237837895242094606389641205913017599541772601233244440450948235260970599219385579986073865381724349524037,1)::nil) 0 2505377 284 5041) :: (Ell_certif 43359228132515621391506117490040735994438183393348129060237837895242094606389641205913017599541772601233244440450948235260970599219385579986073865381724349524037 549789652 ((78865122278648528276603717325041134085292284463273472197395664870102165193879714565790699364725039145255498374710781688679887600594581713113886277444773,1)::nil) 100 0 20 100) :: (SPock_certif 78865122278648528276603717325041134085292284463273472197395664870102165193879714565790699364725039145255498374710781688679887600594581713113886277444773 2 ((19716280569662132069150929331260283521323071115818368049348916217525541298469928641447674841181259786313874593677695422169971900148645428278471569361193, 1)::nil)) :: (Ell_certif 19716280569662132069150929331260283521323071115818368049348916217525541298469928641447674841181259786313874593677695422169971900148645428278471569361193 604170 ((32633663653710267092293442791367137595913519565384524304995144110971318169491751197490007050778579591526113909528883087244919612019379232488601073,1)::nil) 3615592651006818794798239394969366101879652543587534072508883610741124484991524432866809784441887083296920175136250524823100976539799121868892312501826 0 903898162751704698699559848742341525469913135896883518127220902685281121247881108216702446110471770824230043784062631205775244134949780467223078125456 1807796325503409397399119697484683050939826271793767036254441805370562242495762216433404892220943541648460087568125262411550488269899560934446156250914) :: (Ell_certif 32633663653710267092293442791367137595913519565384524304995144110971318169491751197490007050778579591526113909528883087244919612019379232488601073 265052 ((123121740842213101928276122388690285664373479790322368082471153249065534932643156193400937565224989355905992819193466647614541426615539563199,1)::nil) 537090323615526747628433995432255408486528178460758877936518611592159233944072652717054447334706635699266729843747608091970260934437944107171934 25970790260501496751954112736590570672957651685219385768006287121479786229833275518589917253465322143331624164714345816129580895613595032533386806 0 6632309037735844526675012920643569505773466600485413246506895199369428541667630495731423192789138217196001530662138706955114898188396508243932304) :: (Ell_certif 123121740842213101928276122388690285664373479790322368082471153249065534932643156193400937565224989355905992819193466647614541426615539563199 2423 ((50813760149489517923349617164131360158635361036038946794251404560076571767019898340406520404780996171277965262901518068561166368875612401,1)::nil) 102134866953480881284413116667561272891096871814725071408956313686382905578408584943875079044149457127927024427002218697180150541063998083157 88918649893206711515730695724259080173816358009724256856219441237084577530954050518890825446379395360816918703897207323832322895314746961936 0 27038019720000384914513075770981834176128030216524366006321187359232672264274190462824217466845408399440424468900912947587165339394343657470) :: (Ell_certif 50813760149489517923349617164131360158635361036038946794251404560076571767019898340406520404780996171277965262901518068561166368875612401 106987154 ((474951975538011955373162063588787118859478784116819733276122146029578289915810532951857821127091012629618679723348305055866762253,1)::nil) 45992223482032884410713204605950776017135537638204456923157792094116314208629785677732361306958468149588889091402916463391463311149292856 0 44021315591515525987572723171798522256388508086710478064036235130837986863458344190922835060800110798919571358523020473870292475919491322 30177278404936698926064759630402998235462730020204403238881163953935187036951720330513225022687051811382805509891597501247769033416657070) :: (Ell_certif 474951975538011955373162063588787118859478784116819733276122146029578289915810532951857821127091012629618679723348305055866762253 1197898491 ((396487664945236128002737473678633358308052818239020332212875411362242537353263099814924685053887565121774941497161852629,1)::nil) 74983566159757055210941191988147051052613769557564072679897851671428051027056740366209213160495690203118276232800513387758905924 355307025187231674521936894187777995266214176489607464752926592123151387817313471974598241665114687474504092139713403207938262663 321443074404807760404974038596503619022401695342201932792139305379322073824243076567544687388852569517954152578000527708418748782 9372737389724236351491171738219948634077109288063880003750346172708194805134500915381187477589266162255350203813442138440343081) :: (Ell_certif 396487664945236128002737473678633358308052818239020332212875411362242537353263099814924685053887565121774941497161852629 561783 ((705766577032833190044443270228243571464520674778375871489304717464597742704697005387890162771071884859093358851491,1)::nil) 0 192 4 16) :: (Ell_certif 705766577032833190044443270228243571464520674778375871489304717464597742704697005387890162771071884859093358851491 4246 ((166219165575325763081592856860160991866349664337818151551493383175708520984670163612896806515187695983510676393,1)::nil) 705766577032833190044443270228243571464520674778375871489304717464597742704697005387890162771071884859093358829621 1102248 27 729) :: (Ell_certif 166219165575325763081592856860160991866349664337818151551493383175708520984670163612896806515187695983510676393 290901 ((571394273568415932161088675735597305840645664118783199641419588069397152753725157522469821057677550945439,1)::nil) 0 6912 24 144) :: (SPock_certif 571394273568415932161088675735597305840645664118783199641419588069397152753725157522469821057677550945439 2 ((20180627024384259806494620178554683401873478283491671951734816277085440162242182578317080633526790667, 1)::nil)) :: (SPock_certif 20180627024384259806494620178554683401873478283491671951734816277085440162242182578317080633526790667 2 ((10090313512192129903247310089277341700936739141745835975867408138542720081121091289158540316763395333, 1)::nil)) :: (Ell_certif 10090313512192129903247310089277341700936739141745835975867408138542720081121091289158540316763395333 402750817445540 ((25053489838183985709314692951570780806867720049973694363267569417666960022161439135617,1)::nil) 100 0 20 100) :: (Ell_certif 25053489838183985709314692951570780806867720049973694363267569417666960022161439135617 1048756 ((23888769016038035262076872934763453850912633692070749269226397567171778951501247,1)::nil) 5701718489907877402234400559955202671537833671800668724761025134697564866527214920302 5130041464344765883150742711907675571716236905518938129537132350374014983438753532308 19354565709168847994374738325020427593537400674740303792330968054612769647329283403219 736022254635894909739495016330656486679348172588334335101523572554349706753533126670) :: (Ell_certif 23888769016038035262076872934763453850912633692070749269226397567171778951501247 694 ((34421857371812730925182814027036677018601290329912194499853179608524472541231,1)::nil) 20935849855335071574162962547357051865744512413240873263294155016802403936249223 21552895228881696322150816111019810209392088149664279248803157120945946932260168 22959560605547927514357182939866876426718265462043955435793883396095022736388193 23634123470660024934707722182144266914893055360077905086069652786332068734249678) :: (SPock_certif 34421857371812730925182814027036677018601290329912194499853179608524472541231 2 ((5472473350049718748041782834187071068140109750383496740835163689749518687, 1)::nil)) :: (Ell_certif 5472473350049718748041782834187071068140109750383496740835163689749518687 3031277631118 ((1805335576613400988080395832800438186160583316659080443006743,1)::nil) 5300608915998240683258948851467210855543724780809899618367139607369102150 3759169563649182926161246877818235143448107470619296517372743812771060459 0 2400344850598719310634998021424840674566886707101376284229919151329178519) :: (Ell_certif 1805335576613400988080395832800438186160583316659080443006743 414837 ((4351915515282872521208078914856381932723264797050601367,1)::nil) 0 78608 17 289) :: (Ell_certif 4351915515282872521208078914856381932723264797050601367 7582690098 ((573927650878245416223006363493986517516632659,1)::nil) 1044909516751372629093712696167464308724872452688978364 1778356479302364158028977554657936546813351208405060704 0 3812596193296591244642148278242076912235666036458093847) :: (SPock_certif 573927650878245416223006363493986517516632659 2 ((286963825439122708111503181746993258758316329, 1)::nil)) :: (Ell_certif 286963825439122708111503181746993258758316329 27304722627 ((10509677368242569846467830374473363,1)::nil) 201735835373619924896336443012874753097645575 265886930093035439829694363203315087105679168 0 239405603978598531559333614118501277340849036) :: (Ell_certif 10509677368242569846467830374473363 2572265353 ((4085767184161334018380153,1)::nil) 0 8087525162280415077164697590345769 5254838684121284923233915187237976 3284274177575803077021196992069474) :: (Ell_certif 4085767184161334018380153 101907 ((40093096491503342857,1)::nil) 0 78608 17 289) :: (SPock_certif 40093096491503342857 2 ((662126709134353, 1)::nil)) :: (Ell_certif 662126709134353 1038736 ((637434979,1)::nil) 0 13310 11 121) :: (Proof_certif 637434979 prime637434979) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t225/prime2.v000066400000000000000000000415341451023060700215430ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime6797379587 : prime 6797379587. Proof. apply (Pocklington_refl (Pock_certif 6797379587 5 ((41, 1)::(17, 1)::(2,1)::nil) 2742) ((Proof_certif 41 prime41) :: (Proof_certif 17 prime17) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123543: prime 234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123543. apply (Pocklington_refl (Ell_certif 234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123543 484 ((484644401081522291347821650622385470847362514026885011733267013570020916233035149474543184368941921742679316141246205049746097782857376713117472291797579574712653383718708009485716999029140111033210747838870515549639976481,1)::nil) 39059873415545803796675798285809161671412755023586314308813687797270975570830240435875755640580805790840236337772399480574153902467356354443789083434019065815481317387973185574307408795549685237467980995283720220168754236569 33220440826812872184855073584488503472696625357722275810186143141397958802023259181222574061118828929981387644225831318568993418637503787680492595268250940188664294391322793568087434551276337311688643830708246646611367862921 0 135630751302944517125483407131637590476202431893240511312157471068192193124047555902335917151655840597867651073536920402286589014263866498582882290266848533980467100333266528429210027171357268504641703501461174233057243137873) ( (Ell_certif 484644401081522291347821650622385470847362514026885011733267013570020916233035149474543184368941921742679316141246205049746097782857376713117472291797579574712653383718708009485716999029140111033210747838870515549639976481 35245 ((13750727793489070544696315807132514423247624174404454865463668990495699141240889472961928908183910391337191548891140113463311424229453307096687949442208878214353819831317037228673656262229908344213310775358152600628667,1)::nil) 273781387538442968987539799970750555791357978061331409983468146042717669896002304215781413486599729335394092190330382867041216316821049036179348590369409595404148913933016817969135482957678313201510686616920428198097624776 383388929473574451523266940120120940810440801305293499997545103690066839999063638006597815828955730273437090542646398998434914840754580299855688268487550061275792742422782253601198050265681152924970490486964302808838398866 0 453181265366824067724997962162334823668733984106174146680615874156413185840167477853994638559406096104061298655035416498972734656886075808053661299405530176327292370392621100843129855306988070254768585762126337272697060185) :: (Ell_certif 13750727793489070544696315807132514423247624174404454865463668990495699141240889472961928908183910391337191548891140113463311424229453307096687949442208878214353819831317037228673656262229908344213310775358152600628667 1598557890 ((8601957976941998981779956562681952308431960618207236064165101327982372375166775769979733988979223261872106206044860423297413916600099000683358760923807617508300849299216761687677671227282713148553122752582387,1)::nil) 6881930366594424407661608075191833902810677416111433423724780845459939188612593731519562287648978207931068706919458046250995297580106556178790377973943769507731525911485109587138395111475364049214637901977461346336812 8988587730023045487827054713480540335877854802345210256108883133612891969142149655731452491980402698917828373367215857016113237261083507878229972448112654839329492933934026872036261404415128224242969096361092909400381 0 1908480013828915105771660403808357874225612396916924411212799703328842809996723721325665053847873386129653512762831588373568740072270396623712233988195907021229648640542739981903933016702491001692284780992373264590708) :: (Ell_certif 8601957976941998981779956562681952308431960618207236064165101327982372375166775769979733988979223261872106206044860423297413916600099000683358760923807617508300849299216761687677671227282713148553122752582387 112 ((76803196222696419480178183595374574182428219805421750572902690428414039063989069374819053473028779123857437427940448806158955907926541823595968051113376377022480280736828458126637579754475694084676993286817,1)::nil) 8601957976941998981779956562681952308431960618207236064165101327982372375166775769979733988979223261872106206044860423297413916600099000683358760923807617508300849299216761687677671227282713148553122752246247 92236816 0 9604) :: (Ell_certif 76803196222696419480178183595374574182428219805421750572902690428414039063989069374819053473028779123857437427940448806158955907926541823595968051113376377022480280736828458126637579754475694084676993286817 205773076 ((373242203089273056695610574414383416139574157920552009306128516193314032317760897809677751393621481966255124963077285101751852965283554632647478044956048999771030734584593140310399469637811248715961,1)::nil) 10368 0 288 5184) :: (Ell_certif 373242203089273056695610574414383416139574157920552009306128516193314032317760897809677751393621481966255124963077285101751852965283554632647478044956048999771030734584593140310399469637811248715961 48900044995893764 ((7632757865981819890435444355807964868527005084564500187199220597527020907798098386903958548943430337652798945567202327677609889961666353823015182145165342913010265586873410312591037,1)::nil) 373242203089273056695610574414383416139574157920552009306128516193314032317760897809677751393621481966255124963077285101751852965283554632647478044956048999771030734584593140310399469637811248379821 92236816 0 9604) :: (Ell_certif 7632757865981819890435444355807964868527005084564500187199220597527020907798098386903958548943430337652798945567202327677609889961666353823015182145165342913010265586873410312591037 32 ((238523683311931871576107636118998902141468908892640630849975643672719403368690574590748704741110704360892763628577193811671723337489715340152831116626700714971974005430014541925933,1)::nil) 7244361948612242362020274793178632219075811551497394476040529214483614891892100020171037326752351008595372009784258030052780805249875579546809906999556482739162052367017523076849763 6478878337427644430725122821258502293816264214021002880896466622541315834621178474949980554905378489964717828983417205704725120474947295073997585926081746083185606829802597343634032 0 1796343231271854769425143743286510657873972466202883160346840096985087781981126651763564139106363406900328634263879813183279809290485442360742158308725233130294838612599796939799422) :: (Ell_certif 238523683311931871576107636118998902141468908892640630849975643672719403368690574590748704741110704360892763628577193811671723337489715340152831116626700714971974005430014541925933 139111072 ((1714627598527397384847322836524463718757547270519492732037717628059967817433615741173705465505138599550375221440248456595066270918979504899967355746848373037768552719607081,1)::nil) 238523683311931871576107636118998902141468908892640630849975643672719403368690574590748704741110704360892763628577193811671723337489715340152831116626700714971974005430014541782573 25690112 64 4096) :: (Ell_certif 1714627598527397384847322836524463718757547270519492732037717628059967817433615741173705465505138599550375221440248456595066270918979504899967355746848373037768552719607081 1277140 ((1342552577264354248435819750790409601733206438228771107347446347354219441434467435969144768474992695096093810385511177492707795386692783164297990338649304077147785347,1)::nil) 1290671141409433664631642017409030914921322389539744146596091757232973555139249602623414476425315724712173150713425775307726734859169752158926144141720794998301572101257993 225497223612306562007460903242212867734711758863138035961325019374559933766671149901221921763427997574190359587018775773367220830244729183507439531960477661333646273703375 0 67993759995444059104363765138355248579894200341100710388132688503971375793945278253909325205160659693462161871520297798537337859632337687981542939206856586716763676537855) :: (Ell_certif 1342552577264354248435819750790409601733206438228771107347446347354219441434467435969144768474992695096093810385511177492707795386692783164297990338649304077147785347 8280926802 ((162125883897452454312350018860897256574156883632935547755545339664532327722713691956626467760427010823416257341820161369377964847498609915866986513226455179,1)::nil) 1342552577264354248435819750790409601733206438228771107347446347354219441434467435969144768474992695096093810385511177492707795386692783164297990338649304077147763477 1102248 27 729) :: (Ell_certif 162125883897452454312350018860897256574156883632935547755545339664532327722713691956626467760427010823416257341820161369377964847498609915866986513226455179 11297 ((14351233415725631080140747000167943398615285795603748584185654568870702639878984532214741810314553393881952312911041693250499674031394664522891442666857,1)::nil) 15458292282748579995221661919024886071657340720327312669723644920662003104201629897500260380257300434303117773570537373445873274566635101768788457501176089 50058186768341317184274971808358681161181620527178558063705132345792786943903301727408342721274435263916730049370980561037760792933052154079578034864485094 70597795377925692259429848996053606375108324269460582890894467518491730645273312286901622051842351284295150842869020692805407711631276774637824435046786718 107932479121232787712423360511571618804066514451623150838812823921372473336540245056058575572641694194781716341525960340169548300585822172787801672380972824) :: (Ell_certif 14351233415725631080140747000167943398615285795603748584185654568870702639878984532214741810314553393881952312911041693250499674031394664522891442666857 1055257744668572 ((13599742326679598527834081882100697103754643028283997492729857471826633067790525032940794208202103843125489330340487791214592563890167007,1)::nil) 2121333995386272412399574566246114340902875176937283771780324056938395388485445987254477343585529991825146932512578787719401969526673489387112492385628 13442835747782188232641106116873408303319159598233438770177415230907270580130690827765068197149021699377534025688230298350798681319993251086101930226683 0 1805571075863030938251420412179104178402946067710147586619325842360818629470592965730856435135042974629670647482088000092184908207584101372049164010693) :: (Ell_certif 13599742326679598527834081882100697103754643028283997492729857471826633067790525032940794208202103843125489330340487791214592563890167007 687 ((19795840359067829007036509289811786177226554626323140455210855126384987601077040663958621124992981821567842692954014132345972935416389,1)::nil) 0 419904 108 1296) :: (Ell_certif 19795840359067829007036509289811786177226554626323140455210855126384987601077040663958621124992981821567842692954014132345972935416389 849004881264 ((23316521254384010303327255629444833181180637601648196093675616168396074046319014252319092468617498607506846615838715308491,1)::nil) 0 8192000 320 6400) :: (Ell_certif 23316521254384010303327255629444833181180637601648196093675616168396074046319014252319092468617498607506846615838715308491 25469325 ((915474644670952618623668103863955294503511090366477953132861418874489489666152257643471254110628086562771974315427,1)::nil) 16642538077954624224801027854696520514191588712340262869302321187631275989439285403345704294757399404264424413576559936635 11591195686578286984673790279849057605875639714148151182117455483949691741311767249321070678263925584358616111468473239884 18051410640656118933040614903202434892598959511171277500036378330448748406465281636755475148859739425818977788346531193087 21570127617360742744800294124394457356831567674178265415413740862523372730660941792579093440644667265811420666979603571581) :: (Ell_certif 915474644670952618623668103863955294503511090366477953132861418874489489666152257643471254110628086562771974315427 1232 ((743080068726422580051678655733729946837265495427336000919739142902072025961693112942349878750208557786260029879,1)::nil) 915474644670952618623668103863955294503511090366477953132861418874489489666152257643471254110628086562771973979287 92236816 0 9604) :: (Ell_certif 743080068726422580051678655733729946837265495427336000919739142902072025961693112942349878750208557786260029879 98 ((7582449680881863061751823017691121906502709137013632662820970364626669505039693593496711886981362173799739219,1)::nil) 685336838050573718544292439160456655202359339655801170413822037850420035365422156617545777179871583172417012880 310806080968477229009962112520313455945428349548359697648414962343442231608965782778351289495177420332518383906 0 587093184311072360261237844303479767514549786841447023990411839041952246184259998455993687950060113993844524810) :: (SPock_certif 7582449680881863061751823017691121906502709137013632662820970364626669505039693593496711886981362173799739219 2 ((464553956676991977806140363784531424243518511028895519104335888042315249665463398694811413244783860666569, 1)::nil)) :: (Ell_certif 464553956676991977806140363784531424243518511028895519104335888042315249665463398694811413244783860666569 1060019077864 ((438250562068274448780652690119507632201098506085797971437435242214345078041976137317560446313,1)::nil) 330351861061096086632347897229515599751063565210624865227952439944013064258018089542052011406141736569843 72548295345364091850174410333893933110750945564012131153665165620421875590446918747747320100137480898780 0 22068314296375092353102928072464800302194726002218909067061667410314176004237140050143014270520385099164) :: (Ell_certif 438250562068274448780652690119507632201098506085797971437435242214345078041976137317560446313 9388 ((46681994255248663057163686633948405645621911594010504019008667483600563010644675714779223,1)::nil) 93694223130612951975842997846216345085179504749471087245181955690804391128188024019491979663 241194070781385495532217768414243073854886596874480534726867418606082299852244281272994220572 152593036721217118692698846181358036524341921619247905714075999315383138099616510318919896603 357105120387492076556889468414102032070988620101697932546225348491643741477767573580957994066) :: (Ell_certif 46681994255248663057163686633948405645621911594010504019008667483600563010644675714779223 5923273394366 ((7881114233162166825998498487613951117778712070131427819441314880320204591433,1)::nil) 9986180574630962246735900896725760021678352734213622970958280228727520841878910291207293 37178564463327272352679885753995008390685951444104003708039374830714548855832848168088143 26261630370538503920407482740327217719759948078585046953822709871536898033873352565729689 27889479271365112445555792711719033082135273173285836229548210885122866410848614615387797) :: (Ell_certif 7881114233162166825998498487613951117778712070131427819441314880320204591433 49526393290 ((159129581413582616768791129704610701279433322932038938200592407183,1)::nil) 5059988224065824237234295892505922873842442713187401919691939645483958494284 7219105420623793321781815769119405197787745955744510598969881659258789443759 1082356739690553477457758865163293761422435015388257123245844517922482956372 5771000394485675524932015322519058212136938619929969360973041572242975936763) :: (Ell_certif 159129581413582616768791129704610701279433322932038938200592407183 54268441 ((2932267418803916198160015868239334763892085619691546297031,1)::nil) 0 30458396442443547740901427170023142041766534467460578014957140321 79564790706791308384395564852305350639716661466019469100296203607 9945598838348913548049445606538168829964582683252433637537025509) :: (Ell_certif 2932267418803916198160015868239334763892085619691546297031 364061655 ((8054315466988458859145756144365666051024781661433,1)::nil) 870120617840431225931208328571984831682534866453118508837 307302808859425164422208856764665437778088986120305287604 1444029172498848340845991007110570472551035833794087411456 963025927947057201736785358145175459374485681899232585917) :: (SPock_certif 8054315466988458859145756144365666051024781661433 2 ((2398572038398638078487917451409051278061, 1)::nil)) :: (Ell_certif 2398572038398638078487917451409051278061 8890980 ((269775889541832067825613457680281,1)::nil) 1902380263755427426540831204965656208610 1971405870463887373226816689699113623657 0 172188715994779887852914720630042890155) :: (Ell_certif 269775889541832067825613457680281 592988347 ((454942986496549307538643,1)::nil) 0 35672 14 196) :: (Ell_certif 454942986496549307538643 91353 ((4980055241729536963,1)::nil) 0 4052240 296 5476) :: (Ell_certif 4980055241729536963 11323 ((439817648797249,1)::nil) 0 1031027061764318083 2490027620864768497 1556267263040480361) :: (SPock_certif 439817648797249 2 ((6797379587, 1)::nil)) :: (Proof_certif 6797379587 prime6797379587) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t225/prime3.v000066400000000000000000000467061451023060700215520ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime17635995829 : prime 17635995829. Proof. apply (Pocklington_refl (Pock_certif 17635995829 2 ((44535343, 1)::(2,2)::nil) 1) ((Pock_certif 44535343 3 ((436621, 1)::(2,1)::nil) 1) :: (Pock_certif 436621 2 ((5, 1)::(3, 1)::(2,2)::nil) 73) :: (Proof_certif 5 prime5) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901235183: prime 345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901235183. apply (Pocklington_refl (Ell_certif 345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901235183 769491819050 ((449230118731264099621172949768926693959807041421103275846467682701351566198811718811591974059829871344709379627898125644776565084149816777607767004775588369487041261498479543842378411521905114854881257303056907123,1)::nil) 124445881663102992980141441993329828700792757755916489208972584684292694348231503332980696475063802670700132391809730763418228849307092893686051170798262020108386760862425820796098568749112960545080790762088761896659523951 131026675338615181436173443900925845023207361354440191835230056836934720949448339671111246934816511447755548628516382255015582144458761328052350204691850163534164437816372329660748654485505374133034640087279245732934158156915 0 302187293806124070012643261585911019718365803504328515941198123221522205791743513588444918574504433249949432003969933036584506101026612491918234852772437959902654539579210190257846502548023275021628096017067985539769480672418) ( (Ell_certif 449230118731264099621172949768926693959807041421103275846467682701351566198811718811591974059829871344709379627898125644776565084149816777607767004775588369487041261498479543842378411521905114854881257303056907123 42907 ((10469856171050506901465330826413561748894283949497827297328353944609307716661890106779592468823965118621889680958014564588784414462590283105180747927628640324939249513720119226824808592328980007352378096979167,1)::nil) 383267087166575790028778592434105405792513705314661720567716922792799599356466458893308742189643174226272362819934913854150405162994668313046687258428280644156737399962592515299495725804871755899486507387527581145 53372674622861711757032286419974895815219591744977297024497643838484399715363188822922875497250438206572026622897004377602788119811577676641037144155685897959262361441723383294451579955134489305281776227565730481 0 441749539732546044054194446488203084744193784796499728709878948571652709156070700640552462430682621672460655266787585794396153675039028273767003239294299784334404795931357576771791386017605896392668612253927134052) :: (Ell_certif 10469856171050506901465330826413561748894283949497827297328353944609307716661890106779592468823965118621889680958014564588784414462590283105180747927628640324939249513720119226824808592328980007352378096979167 4140175048 ((2528843841061308406171847163505141183802014921350211300855208174427244100588543546717107906405595321732333668269530040131077430179935360426292414212419543890675101071096407849913369770215109010717521,1)::nil) 80466900773225537429743089008610457336051370047735088329713065606358686762676186025114353418660834932573528202827698483060300135753800393270154402946512104291631576933186403199463972758592175290150729224324 8726850887121024085879889316956067399109975327605857395784316392421016913255198315638739679268554244565450015566679903140629864979444489297544288390677618150925355502517397948593337622645496618846721581117752 3922162952967870323458992535790145558085788103834404894897964752504898837986294412852819136723213907527097231889874237520251550827855998706632092730924329041531560138557868146146634588671057982053472480747170 5621982012118676031712137907935413748403627723474042844551437854718346301419681502380648593335166667282259118336980690475545880265414288800351230301421283437380336574045184318854992626746938485229359506635716) :: (Ell_certif 2528843841061308406171847163505141183802014921350211300855208174427244100588543546717107906405595321732333668269530040131077430179935360426292414212419543890675101071096407849913369770215109010717521 1282376258282820 ((1971998331010576022529135168075960414082129550030630262585183734400440246473598574849351864300268123522943778726280721024523022416890104495793969993668385765482613804754715274628617177,1)::nil) 1643844500198762331838959387205386522834229148223734866553821085822380086658973693208946482582063294799039248721476062273890335103629520102837338401438628787229097965374577875365352379915304706188191 2151006956536226111866023169972710311676957186432861905241044536811248525724981615949947664638469356998189707158380634350449995651391232827062841564911466745195336203311556524688592953143566071799694 1214336070996724237616579679273612714085949274473119132748379329383327276525253954642199137240864186539755219605724316166350207436146763399168213352267855136641889376291929008025688953665953258241482 1936378938707695704012786731646372802443459919571945009863686696999919100219560724738349619611615923804189214971654125744599372559040905589309257086330966483060838524058062633946162686798469677746135) :: (Ell_certif 1971998331010576022529135168075960414082129550030630262585183734400440246473598574849351864300268123522943778726280721024523022416890104495793969993668385765482613804754715274628617177 130 ((15169217930850584788685655139045849339093304231004848173732182572311078819027681344995014340732331851328231572749685315404278152084112514162700437274507695753018690208815595512553753,1)::nil) 279112764381425310037602882797430341704686017458244112688558424137134968482089563067218621468372052849119862183323747078445586960123577803804976938794956335421661957651806180671859507 0 947080339555753253848759195555336030563285134584697231331419927187169381361379558063704801585016305156367205306849961558709735720476535621346868793765177928702375464332339900505373447 285460298413662377780016591350385030441031247264192931991496946965306769479244158927195581978014442869587576349913179348329552425011752969994893341591923710040541017567038374753475317) :: (Ell_certif 15169217930850584788685655139045849339093304231004848173732182572311078819027681344995014340732331851328231572749685315404278152084112514162700437274507695753018690208815595512553753 1265391344 ((11987768055137403238539661718316487345193428343069848100472056471022516192451274856353857236716653506030806104669528593592818700419651974800639878510968577578061798188982799,1)::nil) 4246986556907132668801270405233312987396105059534596106897289145637182298631296365157823594223382781779737185282214189720660959349502995613175918237035788882432527464748665175127378 9063510675812246076067819995192997647544230640176684012720630270999750870571021888954673857871828172970820168349308145050391399514237793966440486378321496717470828136475178187904191 0 12970374098180014491772575810180874152253782116107513086539748651084513923611625374635168616519921720112527492946662976033579770458501526378775220904455926725708751198996614732245438) :: (Ell_certif 11987768055137403238539661718316487345193428343069848100472056471022516192451274856353857236716653506030806104669528593592818700419651974800639878510968577578061798188982799 379 ((31629994868436420154458210338565929670695061591213319526311494646497404201718403314917399530584197727145480144205934468255473163683258109556075988660608278078552372921523,1)::nil) 6575443628797878804595807807727244672346302596908267578509264584788121169848231446072432859476437784503696454431074285487237030619684737147145257809738992778218516218798074 1504877936793656416907349723629076610575709556764394690411989170274424078976551601564992000946557726899749867266568584720312169380991945997770472913909834500846085337894028 6764261568801727784664791795017156955518773771201862634071428169557955833306022824734871444983519734284808331027698515236235936862694177761097075627426755200724761373229789 8822118492239469085006208840403935991127959969725162315156962888878908813995987372151521845272326032424325939306676715653121536485547993654547243731656534809504510655867911) :: (SPock_certif 31629994868436420154458210338565929670695061591213319526311494646497404201718403314917399530584197727145480144205934468255473163683258109556075988660608278078552372921523 2 ((405512754723543848134079619725204226547372584502734865721942239057659028227159016857915378597233304194172822361614544464813758508759719353283025495648824077930158627199, 1)::nil)) :: (Ell_certif 405512754723543848134079619725204226547372584502734865721942239057659028227159016857915378597233304194172822361614544464813758508759719353283025495648824077930158627199 662750 ((611863832098896790847347596718527689999807747269309491847517524040224863413291613514492918782706357888441333789299764246779654493593104232976557364920945220158013,1)::nil) 404727180602277411437641911707902572422006807823395915397943342474987673557927103099251386670575187570413152581262617130822369590427108776605461745245976222115154746544 202392708672416856108076851538340863271792428423057986884442320581670803528534111123756735824918170515248187793520542687068392553329901276629417309429692929750016801841 9483106952429223520863480326285369522611346825026215180642268814767942095298534377168015930619172144126026037041882610350349401695283082464925170661402924038306102144 9528000630193138904837593279029978658911890681452880840180418210288983148884804912136040169939359183220611614781481890693113803635402054786731532955221216795986464907) :: (Ell_certif 611863832098896790847347596718527689999807747269309491847517524040224863413291613514492918782706357888441333789299764246779654493593104232976557364920945220158013 5480 ((111653983959652699059734962904840819343030610815567425519619986138727164856440075174263047780257620491421479838330815741758955859585292232603801300620996727977,1)::nil) 611863832098896790847347596718527689999807747269309491847517524040224863413291613514492918782706357888441333789299764246779654493593104232976557364920945220157977 0 12 36) :: (Ell_certif 111653983959652699059734962904840819343030610815567425519619986138727164856440075174263047780257620491421479838330815741758955859585292232603801300620996727977 668 ((167146682574330387813974495366528172669207501220909319640149679848393959365928230030298484471789165746336131460391303820769301157381916842613294835817083893,1)::nil) 45888141940099206252906489264842993912950930964559650087201304044338995517694802696601084481297933763474207781994317069724717176693608175090692515274183602304 51531882839843249402638021905161988694142820076191654845210654707319088657835199247850595323452216795495608391332112402955628491538296534194620860169512762669 102998828914448544603769224331479480084938025419779004897653784105430956012641654034828232777765238609000712226359539548630786218389085780979836262932445630681 104392591252030365115004548444986629221317339108487953196128646915181040899322704762602367725702847126042238723491523568794906461141976913902380914372311285817) :: (Ell_certif 167146682574330387813974495366528172669207501220909319640149679848393959365928230030298484471789165746336131460391303820769301157381916842613294835817083893 108175642 ((1545141581635636493971299891767946916083081820035875725518224147432320848772305342544526608622508707634314764247947084049957011024978118368518294997,1)::nil) 27703586279407379826310193786492823150073816306007051196414163235319584162902108051493218515538216616809963748498082317083776411869020051524251216154259641 14915165343020793875897710919361594803586927065595134100002213365575102324773985239650562795352441900995890998221750967151639515161699663743812681866833752 80371859407540301784689565862549661424792195286126016731637473086988635791542811426392524697245628988741522743418660596189722641731810088385063616052504008 83707879986804877257187816424707390021349647080197241023342461904742335292217388525414050373170051376980871693283107781858929551568014931090288045311406997) :: (Ell_certif 1545141581635636493971299891767946916083081820035875725518224147432320848772305342544526608622508707634314764247947084049957011024978118368518294997 468 ((3301584576144522423015598059333219906160431239392896849397914844940856514432200080849831620741218816263724247745301198980124940140258532354250203,1)::nil) 0 78608 17 289) :: (Ell_certif 3301584576144522423015598059333219906160431239392896849397914844940856514432200080849831620741218816263724247745301198980124940140258532354250203 63 ((52406104383246387666914254910051109621594146657030108720601822935569150973100951226138593879158926754443301086952882081059215297036892994743879,1)::nil) 0 78608 17 289) :: (Ell_certif 52406104383246387666914254910051109621594146657030108720601822935569150973100951226138593879158926754443301086952882081059215297036892994743879 93336 ((561477933308116778808972474822695526073478043381225986978248724346116723631183356652472559096466785707141053213975652254240757039051385269,1)::nil) 19815182144583986386229440813140995733007963363391089103185144442517649067155715756709652163006824664855287859603990478330944833998471338754113 36115130047030536014740385111922189899640636436520706619654885013180680565113169005397847113296610698741260918693072760592510207724820990593943 0 43263764928469982709432810305104625607779496411239126628067691372234454456135089458878473727181961901328747988572938861155904608940387951402386) :: (Ell_certif 561477933308116778808972474822695526073478043381225986978248724346116723631183356652472559096466785707141053213975652254240757039051385269 10269428 ((54674703723334617936750953882017141176069206910182922259959242554319017186642657163226860538648296290973589814897887977901819702757,1)::nil) 16900 0 650 16900) :: (Ell_certif 54674703723334617936750953882017141176069206910182922259959242554319017186642657163226860538648296290973589814897887977901819702757 17452 ((3132861776491784204489511453244163487054160377617632492548661617838372925898607602552471810086875373725594522373269833946900189,1)::nil) 0 2058 7 49) :: (SPock_certif 3132861776491784204489511453244163487054160377617632492548661617838372925898607602552471810086875373725594522373269833946900189 2 ((9002476369229264955429630612770584732914253958671357737208797752409117603156918398139286810594469464728719891877212166514081, 1)::nil)) :: (Ell_certif 9002476369229264955429630612770584732914253958671357737208797752409117603156918398139286810594469464728719891877212166514081 130000 ((69249818224840499657151004713619882560878876605164290286221519872300666320719737173496606734338308459787247859233805729,1)::nil) 100 0 20 100) :: (Ell_certif 69249818224840499657151004713619882560878876605164290286221519872300666320719737173496606734338308459787247859233805729 92 ((752715415487396735403815268626303071313900832664829242241533450508678278650272795247652758240257497952229036097027093,1)::nil) 51348241047762311716992418656534726416224924915424702704984217678960981392493763901139155866080542758844246364459746935 43499492681395654153446540479559529888909456170118151178558219112603012537097329053523738206381853438328685211579341817 31272396086192433102547034120724425891829143895070368089567032258090799993308489242444248961642990652701159650226346039 28775241267287205817641596427654049127982340483429664211956562790315014803540708390710320342337164637397577474180201120) :: (Ell_certif 752715415487396735403815268626303071313900832664829242241533450508678278650272795247652758240257497952229036097027093 63 ((11947863737895186276251036009941318592284140201029035591134586468629092899982820795747136599822714875178404563431043,1)::nil) 0 44851536 705 19881) :: (Ell_certif 11947863737895186276251036009941318592284140201029035591134586468629092899982820795747136599822714875178404563431043 6672018646 ((1790741958591220980867000414246342109560726218784166687883707832333651202751408380258183056000783792829781,1)::nil) 7206623654802118701452606067573241362968504354070564786859943917929411463104043014908804995538689358983122116245398 1461397753074821423538112658713926962594311269749693707272352366601783723178932320758984604114158627407902626972317 0 7394965319342455083597424898594620769821301185041672334329312639583670280714214884934510033333964069157399283627597) :: (Ell_certif 1790741958591220980867000414246342109560726218784166687883707832333651202751408380258183056000783792829781 187972 ((9526642045577112446891028526835603757797577398677285719536837511494924142627984429398474990937688337,1)::nil) 16900 0 650 16900) :: (Ell_certif 9526642045577112446891028526835603757797577398677285719536837511494924142627984429398474990937688337 17865397 ((533245471431567540698425482894984296055529994585477257834253270308230444281572038477920052349,1)::nil) 9526642045577112446891028526835603757797577398677285719536837511494924142627984429398457754274870097 27544082901737469648 141572 5010657796) :: (Ell_certif 533245471431567540698425482894984296055529994585477257834253270308230444281572038477920052349 3402650 ((156714758036109367903964698953752015651192451337178727682679643413926989938709126660553,1)::nil) 18 0 3 9) :: (Ell_certif 156714758036109367903964698953752015651192451337178727682679643413926989938709126660553 956566 ((163830575241132726757970384640215119135733908429509309148023140677606278022896727,1)::nil) 36174062834845159614555764645019780681194640792986943019820008528921823880629744721396 41612532293862791104224131835787714236639281519113040181987353910918348506060478724527 0 89806173503847097370147551349939235028268053553333635507546213975245734927639634626182) :: (Ell_certif 163830575241132726757970384640215119135733908429509309148023140677606278022896727 16041 ((10213239526284690901936935642429718791579850817865893771518194227645392175803,1)::nil) 0 8586756 645 16641) :: (Ell_certif 10213239526284690901936935642429718791579850817865893771518194227645392175803 3770523001 ((2708706331608634815469445704736524107321718666005186905095404963961,1)::nil) 0 265625 50 625) :: (Ell_certif 2708706331608634815469445704736524107321718666005186905095404963961 644241 ((4204492312051910411584245188891309745792345482063732794864051,1)::nil) 0 99144 18 324) :: (SPock_certif 4204492312051910411584245188891309745792345482063732794864051 2 ((227885762170835252660392693164840636628311408241936736849, 1)::nil)) :: (SPock_certif 227885762170835252660392693164840636628311408241936736849 2 ((795789784037148505245070143264382634396205013459, 1)::nil)) :: (Ell_certif 795789784037148505245070143264382634396205013459 2144988 ((370999643838169959573232661161584240526957,1)::nil) 0 78608 17 289) :: (Ell_certif 370999643838169959573232661161584240526957 2821 ((131513521388929443308907555300744597853,1)::nil) 0 16464 28 196) :: (Ell_certif 131513521388929443308907555300744597853 6578726640393 ((19990725953172160992863227,1)::nil) 0 6912 24 144) :: (Ell_certif 19990725953172160992863227 11116 ((1798374051203765434969,1)::nil) 0 1080 6 36) :: (Ell_certif 1798374051203765434969 14668 ((122605266643249711,1)::nil) 0 611166181463850315363 899187025601882717672 786788647401647386588) :: (SPock_certif 122605266643249711 2 ((17635995829, 1)::nil)) :: (Proof_certif 17635995829 prime17635995829) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t225/prime4.v000066400000000000000000000447521451023060700215520ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime231291475057 : prime 231291475057. Proof. apply (Pocklington_refl (Pock_certif 231291475057 5 ((67, 1)::(3, 2)::(2,4)::nil) 7364) ((Proof_certif 67 prime67) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012346397: prime 456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012346397. apply (Pocklington_refl (Ell_certif 456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012346397 28 ((16313893298059960758377424647266313893298059960758377424647266313893298059960758377424647266313893298059960758378429768431634185249765682895522743065952619137653242776887708250735335406034413263579598860156092423026862455919,1)::nil) 154444310156991002472867736599571146047891941494621291400313093347763525322032442181386491114270608329849247057345387433751996882437296787627745390030091077624255909492577496553951128161503593154798271699113356176619627161444 424768997153251975590568087977689515098782308993479865185086794271981609657844527721896482612698872397377549390616922230555165273480935552415339309214225397045067647707475999527510753665864823663263608771106656607540439130188 0 78843790182414788414975174983354138367737713460569083529652647613828974754013239674798017126458443860458615771048036600112899712432529265317708251663646172721573839234560989640861251159423348458830936086615872196293103401565) ( (Ell_certif 16313893298059960758377424647266313893298059960758377424647266313893298059960758377424647266313893298059960758378429768431634185249765682895522743065952619137653242776887708250735335406034413263579598860156092423026862455919 2340842991 ((6969238586604530093568084441963460971525731842968522028758000674421695145618913651190989795997767241134867194677720023692996212881843426111572360291350512824982406265303922959376023290623480440763635018650859156451,1)::nil) 6535389916443148563785311493704450035661084056489488468959887606007993478108668001519487947242969641323834893879579427059760520258619903416603953793554781478595085909771092248161379173902718350084999088826979992200986076142 8996531073578367745095882458059870390395731267169477825166017790827860274130348444794500638631924593585418684497263068371149782676948437867566826580172402592435649461769304669789595831617821176296562572768270844503835610970 0 8597382590395559224742114367690683886642344186745426340602369212139358202436240866234119887773970639800271938744381136251936302520788175604785271040516608155608820819388884299178039055921297285475357335367145701058304806222) :: (Ell_certif 6969238586604530093568084441963460971525731842968522028758000674421695145618913651190989795997767241134867194677720023692996212881843426111572360291350512824982406265303922959376023290623480440763635018650859156451 1875 ((3716927246189082716569645035713845851480390316249878415337600359691570744330087280635194557865475861938595920383667735279778031041539134521792520033651149903585877961213727257992865998234752890455614700793248953,1)::nil) 1657861531634981625641182484723193332333028197834567164403337745764790375919660172032426703921516277568033727868395718843450302538974974245524145831734203271850903830093318852740396762700070862618761039861382152374 524517437862302200487038287944443918952117059613895817207174922689101896218593647449209452636802331400671819238227640739224599338144127865724786351636981948886015687097578946354343876602707058213076064912666427448 1783485906652819894213147170508933469163822113287512011426445345872535963592528970787692279284031937019364247882692299740616511422071314707604287442114564544984210130011753182262154560430105438697445695399085153273 2792972382625915104118966093857839327939983220589937982968044815249405913436764978306188992717007501802436990357468434027334120058842321116444539193556306945436902573381193697296619414482973415541041823905602188000) :: (Ell_certif 3716927246189082716569645035713845851480390316249878415337600359691570744330087280635194557865475861938595920383667735279778031041539134521792520033651149903585877961213727257992865998234752890455614700793248953 102993754209987 ((36088860676064794470787296860512859310205126888353195043584662348304716146152172016694705706093640346705946360171281494372114955307998421457587622062939187739098321129968111585048327440343430140069,1)::nil) 3716927246189082716569645035713845851480390316249878415337600359691570744330087280635194557865475861938595920383667735279778031041539134521792520033651149903585877961213727257992865998234752890455614700035665049 8234810772496 0 2869636) :: (SPock_certif 36088860676064794470787296860512859310205126888353195043584662348304716146152172016694705706093640346705946360171281494372114955307998421457587622062939187739098321129968111585048327440343430140069 2 ((8150149204170007784730645180784295237173696225915355700899878579111272842401122858332137693336413809102517244844462848774190369310749417673348604801928452515604860237120169734654093821215770131, 1)::nil)) :: (SPock_certif 8150149204170007784730645180784295237173696225915355700899878579111272842401122858332137693336413809102517244844462848774190369310749417673348604801928452515604860237120169734654093821215770131 2 ((886849750181720107152409704111457588375810253091986474526646200120921963264540028110134678273820871501906120222466033598932575550680023685892122394116262515299767163995665912367148402743827, 1)::nil)) :: (Ell_certif 886849750181720107152409704111457588375810253091986474526646200120921963264540028110134678273820871501906120222466033598932575550680023685892122394116262515299767163995665912367148402743827 3348 ((264889411643285575613025598599599040733515607255670990001985125484146345061093198360255280249066087978598028130784405938209854870619802016857560293980732562194690590017218200193737715269,1)::nil) 870490330157362983232823215720519634210915435085787156374499154791791378741274598492011965048560838857684830806485075719877861479531711991233813860982404839577922887855607689100138579508994 268166921909851177404203657390489847597552746985306601493340155910346738277569089951019735104594961250865284719425997322872200829631314899250601780165889341801995855881793081161379356429201 298963501363740862540218713856976905738131913364827021656297251100433074963107854823365544063244085611602505140533232927767835869812267866534605296967513833462691221770932894182208625017339 779743416386951454298002903058211506760811831568006963214078334494946580947885630557062796545740410125199964226809284589839666531566927556800144716385352309575192324704575357591297323958545) :: (Ell_certif 264889411643285575613025598599599040733515607255670990001985125484146345061093198360255280249066087978598028130784405938209854870619802016857560293980732562194690590017218200193737715269 4431472 ((59774587686277962630255950753970473182165115170686171547960841337629199746967418131098488323984901156172765529824657942193704723490837879713751697201135940340613059457042315864789,1)::nil) 0 5832 9 81) :: (SPock_certif 59774587686277962630255950753970473182165115170686171547960841337629199746967418131098488323984901156172765529824657942193704723490837879713751697201135940340613059457042315864789 2 ((1191963541642298050376006037209270024371163658983133356224791444078112781107270840932808652867211078331593792969304018947788640095135157527992177099807289230689420504447681181, 1)::nil)) :: (Ell_certif 1191963541642298050376006037209270024371163658983133356224791444078112781107270840932808652867211078331593792969304018947788640095135157527992177099807289230689420504447681181 13025 ((91513515673113094078772056599560078646538476697361486082517577280469311409387396616722245338557834787635692993040779680071061832153646753524043566183399810068772392289319,1)::nil) 424992441885504201197363983255870196414140408927176810602883154014263884294644375883402977280349704994218923865197425280129205409347306127658141805403270025864572752570370045 981857597125749793025528044068076279681895795847925417731175856180619761332562494191915908846621744251909522610921611055927153612828443854932760550503141652074926497882838004 0 678779141706148830434888146194490389663756916288080464083466814737364403805305578871402314139108185112215425800892437256932284522307631147981872096639141133652085283965965046) :: (Ell_certif 91513515673113094078772056599560078646538476697361486082517577280469311409387396616722245338557834787635692993040779680071061832153646753524043566183399810068772392289319 586338593896804 ((156076227329527512620583146863352776450954599478393190897970876207368184858871773024375183277366634782929625444397091693041210788051939720736469710771447527,1)::nil) 0 2058 7 49) :: (Ell_certif 156076227329527512620583146863352776450954599478393190897970876207368184858871773024375183277366634782929625444397091693041210788051939720736469710771447527 1049674453150 ((148690126601779831665881433158467620129061535290155299801744895126171514617157736977939957804785176826325828019566249982947508302836093120648617,1)::nil) 262564570125723226555799809248722817972409293949289722741617792698592950527979466094228046314654827066651457122129311639823775062869983517321199678136626 79284834672628029899513369557652125647183731835919666335321990173104081423578994165530704137829197869605747802171655741261610654516582322327527682505368042 0 89215160049924084172503094755708446938280045103021239899541021591948248016453049684624962262577266062446190057939246186000109653266248380676207822495526114) :: (Ell_certif 148690126601779831665881433158467620129061535290155299801744895126171514617157736977939957804785176826325828019566249982947508302836093120648617 554 ((268393730328122439830110890177739386514551507743962635021200171707890819627978088041477944286729356959001641822133757774341027249860086627149,1)::nil) 61573848046732684559041814132925143187504167837308591786152652128704284604968469329099250628518536830139649756785589725709170807499461485422493 0 48789362488220111690209029086379590535321929956853641866356189561185567132773160861745396342572389149198108476037384220633134080101813762949444 92934646702201230189909366374101484024452369074518535327359726237141507827869812938083255131008759540933211769166573799170056035142323862298256) :: (Ell_certif 268393730328122439830110890177739386514551507743962635021200171707890819627978088041477944286729356959001641822133757774341027249860086627149 8548 ((31398424231179508637121068106895108389629329403832783694571849755251612961748071620185059138893548465032004592867942609049789401970343497,1)::nil) 212227909624504231951850757503484653852951863639173283658598214846749843196285214930201639879366554050768376282574440501369464255699328677047 204265940512543172687554096475431881987721774193677769254924689282365821762117022705315824483887230481608042404532037769362216236621777621296 0 246841366632513856938561273991154780212317145822052027500707033454928924085023574687625892970471853234312092697722627999756638052815479869884) :: (Ell_certif 31398424231179508637121068106895108389629329403832783694571849755251612961748071620185059138893548465032004592867942609049789401970343497 23552 ((1333153202750488647975588829266945838554234434605671862031753131591852363136979480042914228089648677493917263888122249557411349258951,1)::nil) 31398424231179508637121068106895108389629329403832783694571849755251612961748071620185059138893548465032004592867942609049789401970329497 784000 60 400) :: (Ell_certif 1333153202750488647975588829266945838554234434605671862031753131591852363136979480042914228089648677493917263888122249557411349258951 11626026160 ((114669723291805206808135104804111832357534832401037007646966547991183528484315898295432317549481381046519439767191525489619,1)::nil) 808858290942118875098675670761692727788324735471983426137131534021338370622204426457611353223114243071720348155285993835412154651389 813980453528553573163281588356834081590389481550503837561855741987463040986921843175962473680884218292218880602770731495196267924158 0 798815325624010180275040908903232599467554278790202978924985684687524586910425720108540327847044758277262343960466526643946376462507) :: (Ell_certif 114669723291805206808135104804111832357534832401037007646966547991183528484315898295432317549481381046519439767191525489619 4997043 ((22947515819216526015112358409585795510972155412918601590373858374714035318295723943596942757494023370744386459746499,1)::nil) 114669723291805206808135104804111832357534832401037007646966547991183528484315898295432317549480534707410800315255687873539 9476865744830856719995764701724677178102 9864395859 97306305663056347881) :: (Ell_certif 22947515819216526015112358409585795510972155412918601590373858374714035318295723943596942757494023370744386459746499 164 ((139923876946442231799465600058449972627878996420235375551015157699587628292159229054207150821134121515220045065631,1)::nil) 5115351247697583520490764457028663331671746344412983892551568775296722746974641611997668305038865473609219786760512 2192632089633007520669103663977657488861488788448378603735499174590170562175697691751269001762612893057024004763928 0 15410793966106885994489848881228173108193892480883761130729267958024333464686313321662261509516027570342769023367204) :: (Ell_certif 139923876946442231799465600058449972627878996420235375551015157699587628292159229054207150821134121515220045065631 87104610 ((1606388880524718861601763673110412555981583482438362051683395459260718981100731022703619263672108227145183,1)::nil) 28809982224841431167300785380278037606668948334657259783310229819156577399859129037239051478688390763212394304572 130442950984000732341899342272017004913487929155874683121628094421710519834886155220069988532652355860573737399840 109747588192611678798535833842594480444205651056553978243679337985393384219229159808085705537688549527694509913095 39359594087702296632415581486744577657597032178421690633244877252631087004602732119890554934213042182265908796949) :: (Ell_certif 1606388880524718861601763673110412555981583482438362051683395459260718981100731022703619263672108227145183 245962226 ((6531038959310438431313284963970087650701223863693452367423279275258532729854869159942835635711711,1)::nil) 1088527349033501297656237832671220309049989092653736462539027921993415056833410736356740663629935073777979 886068446687920127154061498390807138284812977319486603840180310596650541268372695547764213433473925637359 575391918570524993823909995833090802511452280682729191520899424641926832702172121131762748886046777568357 1535768007918502579586912769484146887594190037296413943812096570824765218275097748695983544983463003781162) :: (Ell_certif 6531038959310438431313284963970087650701223863693452367423279275258532729854869159942835635711711 2144441 ((3045567100848397522390816517670613297685142125006544064763802366886593558635221281512057819,1)::nil) 5775889936997321113315461128818996777006057255220410126533327385389807098818746054219385215055172 112760911374687438194963403349958660019488882517203742848897853690976134016518010728927181430442 0 2301945161690687702011626802317497272898469062019734605674238085639163758175098500299695772259919) :: (Ell_certif 3045567100848397522390816517670613297685142125006544064763802366886593558635221281512057819 8340 ((365175911372709535058850901399354112432271237758836162472277188957062193491514438716693,1)::nil) 2645083844143692144434809127685545312495226714020627460289695269184859387348200664732885802 2986403391661206052376619778854576482249413486455166270619898202939315446024966238658434996 0 968489781494219951125888247412409450407939286145010474894869524045282275147689777509428404) :: (Ell_certif 365175911372709535058850901399354112432271237758836162472277188957062193491514438716693 4927 ((74117294778305162382555490440299190670239750203831496450731340607514393025326067061,1)::nil) 0 210720960 2436 121104) :: (Ell_certif 74117294778305162382555490440299190670239750203831496450731340607514393025326067061 484281 ((153046051317943843311126165264173466789403732113056945655650153412979250868061,1)::nil) 0 1272112 129 1849) :: (Ell_certif 153046051317943843311126165264173466789403732113056945655650153412979250868061 3674736 ((41648175901056250928264279465021015602254362114458300185199143203257651,1)::nil) 0 1272112 129 1849) :: (Ell_certif 41648175901056250928264279465021015602254362114458300185199143203257651 3189 ((13059948542193869842666754300727819358813944161056218495265983031147,1)::nil) 0 16464 28 196) :: (SPock_certif 13059948542193869842666754300727819358813944161056218495265983031147 2 ((47125031725424775894212742935647807049347767365448550142768419, 1)::nil)) :: (Ell_certif 47125031725424775894212742935647807049347767365448550142768419 1417 ((33256903123094407829366791062568351724420738864677148410231,1)::nil) 0 96000 40 400) :: (SPock_certif 33256903123094407829366791062568351724420738864677148410231 2 ((1108563437436480260978893035418945057480691295489238280341, 1)::nil)) :: (Ell_certif 1108563437436480260978893035418945057480691295489238280341 52978 ((20924977111942320604380932374809430645091228183616953,1)::nil) 18 0 3 9) :: (Ell_certif 20924977111942320604380932374809430645091228183616953 86832 ((240982323474552245766318087684142717594003668347,1)::nil) 20924977111942320604380932374809430645091228183522873 9834496 0 3136) :: (Ell_certif 240982323474552245766318087684142717594003668347 1846 ((130542970462921043210357022419243284550985817,1)::nil) 156793760800005714818406040545543334913293693338 234793350331994228038874130591951562117960597767 0 52914290847278100200486124961658097524368071457) :: (Ell_certif 130542970462921043210357022419243284550985817 623489826690 ((209374659977936075937820083968261,1)::nil) 22736494384844083491759131829494700164481988 0 82323856020093584223997860081742667398854400 121133388552546820711210046023737573280713527) :: (SPock_certif 209374659977936075937820083968261 2 ((805287153761292599760846476801, 1)::nil)) :: (SPock_certif 805287153761292599760846476801 2 ((1066323031993237022988409, 1)::nil)) :: (Ell_certif 1066323031993237022988409 1055964 ((1009810023818506783,1)::nil) 0 5832 9 81) :: (Ell_certif 1009810023818506783 4365963 ((231291475057,1)::nil) 0 78608 17 289) :: (Proof_certif 231291475057 prime231291475057) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t225/prime5.v000066400000000000000000000541741451023060700215520ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime1730253812149 : prime 1730253812149. Proof. apply (Pocklington_refl (Pock_certif 1730253812149 2 ((367, 1)::(3, 2)::(2,2)::nil) 3429) ((Proof_certif 367 prime367) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456899: prime 567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456899. apply (Pocklington_refl (Ell_certif 567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456899 201 ((2825323997297457772864074135495362637430133278668386462195196855174743566114489281984583256556667280879547325102994768247602876860441559735527308697368377683841369745949471035408649029400187973928022286618887365133863206071,1)::nil) 103879320231280887373323617731496896898249055859977914165900256480337007451185928829780673903483069021488520956277971383460693358863525775366818221696887171650279877134569577768754537872960183327353430919112903578819857510078 159080939668328586102671658539689558803603359040136234418951881714859253745582323437847458039055252242684319057338457221088933638431068767640495152764623429886994805138341833616519973265176691783557525993031478277056484725922 41728460026348918833889605338623916879586076704757708872838782292298423943623811613994770691801548029644594778339206254990158711684630979407063917172837051639458297656632824296473255462223755755505402455820075389271707845881 247168040223040968637121918933898595349386396692423246298805233290873445494903896240339253260310024223834146780518285574991808770818845520988170719714097608634277315212140595726711701170518069963591318248069949188695156466007) ( (Ell_certif 2825323997297457772864074135495362637430133278668386462195196855174743566114489281984583256556667280879547325102994768247602876860441559735527308697368377683841369745949471035408649029400187973928022286618887365133863206071 39325 ((71845492620405792062659227857479024473747826539564817856203352960578348788671056121667724260817985527769798476849265128229358126829092968646126558756508941787270655467135550358418599179402836325518941752597288243289037,1)::nil) 482541863142742190976435495201757145538570669183993329947494401411166116899464677313472895811001076337403174550228700381765185148033589242511247504742837152413924429684409994963044439618881063799570669295380558759102412500 1393114017330119409339548161364408035182354802939875080086480621675950522906477777209449543167985721984645524865443324669463913495382867956011349131007176239824631143479583378961092360322766376029976939527974799207499898729 2673587927150359462184352402843246442810746810265035434409389862639269172348645008813855895465459222225237696623796185426338364766713580627727596924693077077747345541443211504019350344967251038616947429495964214335193249787 1044425029392891566590815242370606124894999070413577946568682362211205855887091228168710311888182066210667243762685537451488042396234601242585390961236675048826574118961545153181577576075489857474892189202166579700247236254) :: (Ell_certif 71845492620405792062659227857479024473747826539564817856203352960578348788671056121667724260817985527769798476849265128229358126829092968646126558756508941787270655467135550358418599179402836325518941752597288243289037 144 ((498927032086151333768466860121382114401026573191422346223634395559571866587993445289359196255680455053956933982846436933265821560955366426073639830138809501724099970831071584614677324681198035528757607311780279150407,1)::nil) 1436367629799096532344053031998625301982403178247896336238637041820058414248656503113872474765329147058673491004481635145648483466062882960575704512516794650628296302452671486786363739281484441901633897502472268003789 5635987504865342279017769891304425178940163946241763759742529126818359753767157000915385742189371232005770636852956895269956814307723863457006398963710718594527947557355010696770427846387310075840891820985429973781467 0 10498352669656503141600699252412487800468936435399796544541747190846178930511058355117839129546787316007423892312663655907650901352989796917203638787617778467450391017226682997519716986871777127709071402441653668035302) :: (Ell_certif 498927032086151333768466860121382114401026573191422346223634395559571866587993445289359196255680455053956933982846436933265821560955366426073639830138809501724099970831071584614677324681198035528757607311780279150407 124421 ((4009990532837313104447535867107498849880860732444059654106898317483156915536713619801795486740023428954573057354600987320904823066976178574038877484008441180771980141260048512107534350971676571270800276168940171,1)::nil) 498927032086151333768466860121382114401026573191422346223634395559571866587993445289359196255680455053956933982846436933265821560955366426073639830138809501724099970831071584614677324681198035528757607311780199915239 271737008656 0 521284) :: (Ell_certif 4009990532837313104447535867107498849880860732444059654106898317483156915536713619801795486740023428954573057354600987320904823066976178574038877484008441180771980141260048512107534350971676571270800276168940171 15057664013203 ((266308939376070297349262125333995433096137556879722876710751227831296305620852510501607672384461316872426794197369060131816781218510230810679966436668754932519202111253644141000214755994778049845773,1)::nil) 0 506530 111 1369) :: (Ell_certif 266308939376070297349262125333995433096137556879722876710751227831296305620852510501607672384461316872426794197369060131816781218510230810679966436668754932519202111253644141000214755994778049845773 6282397038 ((42389702173431830996807834247867132827993281770632796594469428984105589669809167273074165164608833461344138876860645133008652485134348222095368684562162853104981546894827366060340888189959,1)::nil) 31706864849646950463423002008305324477311955849668977640807072719543218790317945024294637117516423780917996745206234615091767737856445935572032915055362043458305390500654998269810011216684979292637 244392501703589200622516777286643627780992324172591439884903196002256850976261843563348154264536943118879831556097481278907116121150302730584344979171269111007679311374862076401260203559140012846393 0 116136383749427132612025248643896365835171645505419515111951986417849796025280110211662711996283477229025960421505996482750650943147587530647669751117305787715864603413963385085577939804612130197849) :: (Ell_certif 42389702173431830996807834247867132827993281770632796594469428984105589669809167273074165164608833461344138876860645133008652485134348222095368684562162853104981546894827366060340888189959 74095 ((572099361271770443306671627611406070962862295305119057891482947352798295024079455740254607795690530496641739332144579487740922332251547995337613697444942354208524772566238033895286871,1)::nil) 14511436565182682693641802166470482416346791572795953823062737078790153998653234078022266372307003530069649812422265530806016192632944624253351121117631360196269538770964357899803439147400 26862099260598879346383342866239440555093925303576151208555770602181819809085686425388800595382471302835914078200436346807572030921937476166806890625630187084619074513249214632312609296229 14059694918915076266889878168010404107652670799252301402158346613113382417531155039552733268990112487884136019835296188404313194794275197657070046441570319824369946652641996003191483689392 11528832748690453431894070516638141081143983560262863065106108459711179304687464395791560291923552016476379666956082087329793261083891526566488944149868250105801973568763895263596391832913) :: (Ell_certif 572099361271770443306671627611406070962862295305119057891482947352798295024079455740254607795690530496641739332144579487740922332251547995337613697444942354208524772566238033895286871 608952 ((939481866012050938837004603994085036198029229405797267915177136051442962703266358826729541643597820100857702573484914487809660519527244107695951375166613347161069770655968903049,1)::nil) 189808268570826434571225092170516047130094467489434817438987387549282130695421462427612497793830410745694671591428323380236767581736101033852693632505367336255080541033586764438756749 142277911064422334186070835122179538334024913735780470492874560585915770845580744234307392772639320455012223002035272610662636387518766381385062430409309702742665361453961762153423312 391443032741831311349601365051719296363294433529269966576606334506088148466019871795112347159072117704194292791917270124426289099659264151149650554343292096976987774739963495755845732 469333978709062094185842291338039134004276470500791011668655043156081249338789520332436608133415631705593129366548887739741635723216794154464696257357670593267636156166889207116630118) :: (Ell_certif 939481866012050938837004603994085036198029229405797267915177136051442962703266358826729541643597820100857702573484914487809660519527244107695951375166613347161069770655968903049 554736 ((1693565706952588147942452993845874499217698561848874541971635401436796895646336922115618058628560104322487219505834470840207535895625475551499286200404157577397696934553343,1)::nil) 0 5832 9 81) :: (Ell_certif 1693565706952588147942452993845874499217698561848874541971635401436796895646336922115618058628560104322487219505834470840207535895625475551499286200404157577397696934553343 173 ((9789397150014960392730942160958812134206350068490604288853383823334086102001947526679444247680481225394248771620373660560710564582090652702062877648072144846311797694337,1)::nil) 1412294603469752359380378554210466870628034646476130630374831225002877880457061020950478455774095395194154913443106472466675078434013307305055325677215521484889451162068693 1498128888847328146468881881550884299570910848563681120257923122489824074978789324553317874885356437726262106536375877843316719786298812736170543140304651661985191444435354 0 1021567852366142067395040402450087547000759186300543074420424196606538183241784784787330760627739129578627916735599402750476333790084986510393544164824144697556506104510780) :: (SPock_certif 9789397150014960392730942160958812134206350068490604288853383823334086102001947526679444247680481225394248771620373660560710564582090652702062877648072144846311797694337 2 ((76479665234491878068210485632490719798487109910082846006667061119797547671890215052183158185003759573392568528284169223130551285797583224234866231625563631611810919487, 1)::nil)) :: (Ell_certif 76479665234491878068210485632490719798487109910082846006667061119797547671890215052183158185003759573392568528284169223130551285797583224234866231625563631611810919487 23332 ((3277887246463735559240977440103322466933272325993607320704057136970578933305769546198908853056097328900357034096447759012094296129534976138411038524894253162239999,1)::nil) 61542759714764743215793710842264417183400504920418029266303308986663858236981015592932502668162087141577300532388023510748384231893240008186262639833963744453353252228 24387928018416853968363652790625932075748292706026181495052506241998098295978289205730389976909739949849124294848479851739898599112270306129163567560406093029930312336 0 28337906229743061386981476768707675460687729395087945781734234595962370285683509247246961338573718995395865864032085548102562629444375870943746293737313667169140321567) :: (Ell_certif 3277887246463735559240977440103322466933272325993607320704057136970578933305769546198908853056097328900357034096447759012094296129534976138411038524894253162239999 1983 ((1652994072851102147877447019719275071575023865856584629704516962667967187748749140691836228593505082007310054473651216687816785090964974699842599475012114666687,1)::nil) 134007365181883926431929795866445464614374515086697084013205133342409034747019443501510923859004327269984521941051147142227222316148790328459108536510914898003522 1642371873987559769628597733434134225413059344527681701172362739286625014910837039345832280692064986917672996326771051703982420852130507003235048114002685746800709 0 1863635377564840818895746299385642593051198991737817530005070243241309609194265294262638965958931413803441725697593874684143507603052934808490193848341789322926312) :: (Ell_certif 1652994072851102147877447019719275071575023865856584629704516962667967187748749140691836228593505082007310054473651216687816785090964974699842599475012114666687 437129 ((3781478860590585726129922791027991900731875180682555103194976683468649272294332285794708833429417006441588991832234441883313712186089194042857954253759803,1)::nil) 1349858328086643957456418495284154629424289793541139962852305155363155877635274602684801477999994147509076250583277229175532673303791629950805872208296850438488 92518578726831400812308413591440196544830010100391818353269031770679269338332647516795467533716201491057544779052418753400483108759934308409672512505661499457 935012798485952864085041767052365447792785888801602096111503581852279681697757342812084728476731890717219236200265012791590651864128000878305987387353635695037 1489902538945474574895638695459145117088279491569910280388842985158622818540145872164802580204213627754907877473449999733059141856872293450187846152666717523353) :: (Ell_certif 3781478860590585726129922791027991900731875180682555103194976683468649272294332285794708833429417006441588991832234441883313712186089194042857954253759803 216160 ((17493888141148157504302011431476646468966854092720924792722875108570731274492180565039834739706246360933038720860815212245265058940260410273657955637,1)::nil) 3240906637187714158940360591027036405117071611522654201597092864492575642166650593961289424457207061079675341964349113912798715167014091206756031896632433 39255240874848051557160211269924235579638456549457372128696680641565959382253189013961820872805104959948744832147904904918083043969171066243967052894464 883547692145162306090188483023026748174379589314075804426720987976500341875534632703489258317360776255161373693756265394905229064534528825156317183951669 2914169038883270199085894006395213662916152169697946207041457492497537488382169897501563194598049061275597742147356376801956622559173515617305300633477313) :: (Ell_certif 17493888141148157504302011431476646468966854092720924792722875108570731274492180565039834739706246360933038720860815212245265058940260410273657955637 1919232115 ((9115045545779728422427951832953069602509675643230326412458388394866314163482452042583254494443440035142382845610625735808091113009385293899,1)::nil) 7457370172112937812002271766498131743672077550532086705534456460682286987161138479313083790557337878503734031494394753783955133857906314337132474066 5858384585408878511114085486201394151105148817893655488640185902229718493157622662467802685902513539802024886678424053503064497489396878520464835496 0 6553785470574133945615326271120156533744115032531530508482628586942916452819685082977469632336499945880004218959992750491448012876202065534297451251) :: (Ell_certif 9115045545779728422427951832953069602509675643230326412458388394866314163482452042583254494443440035142382845610625735808091113009385293899 129377 ((70453369190657755415784504455607021360131056085937426377628082231511938448308806202796774414150236945091695363145318309494619129305097,1)::nil) 7664907150464292965200087851176695451207667660417105922733597805272196548091678975821426704582840488895560254288570718683423086301080009596 176781660378805613808248810033038841727197011593792143741019199686920518315543970322229564227884143355671138681130663609550892547798582583 3407115111687235652645583942362308216167795893425189949714703610733936581818202073792677615311234349188625147450229584261711765400478497077 6892757973091257100112351784695254848237328712916743762858911353496529614275925053365317037841893248597991943056984349979963413348412041452) :: (Ell_certif 70453369190657755415784504455607021360131056085937426377628082231511938448308806202796774414150236945091695363145318309494619129305097 5570149464 ((12648380379377510257736327137021151459739547140801359720502480619165980467703896809072031772004936695902153919279701399210011,1)::nil) 70453369190657755415784504455607021360131056085937426377628082231511938448308806202796774414150236945091695363145318309494619129211017 9834496 0 3136) :: (Ell_certif 12648380379377510257736327137021151459739547140801359720502480619165980467703896809072031772004936695902153919279701399210011 1110 ((11394937278718477709672366790109145459224817243965188937389622094891718968727726798922456359791791750886453876701211552687,1)::nil) 3973311207515112850468688853006926243083621852274051643745075340696223889423740319192894371021636569682219869375295741320535 5625521075311855375608636759883129559501129960989157744159617441371985650151522396947208190113425606947392994257955317216245 11525861692278362346904480737205279583463042582599367101394285696578796958059448682079520788602112477544055863792743428132518 10429842676843235750062195098704086608617044992698109230712648698161374014031389014998873280388676543258095954287574772442250) :: (Ell_certif 11394937278718477709672366790109145459224817243965188937389622094891718968727726798922456359791791750886453876701211552687 456995 ((24934490046321026947061492554861968860107478733826822913575910522207498290968471985094657928786135132348762739052837,1)::nil) 11394937278718477709672366790109145459224817243965188937389622094891718968727726798922456359791791750886453876701198503639 18161012554 879 85849) :: (Ell_certif 24934490046321026947061492554861968860107478733826822913575910522207498290968471985094657928786135132348762739052837 4255 ((5860044664235258976982724454726667182163919796434035937383533096152024689642362253409206296642344829950360065471,1)::nil) 16011650928131787427169841451071810679614564562222402721645206790641693993183345517861690531156963491999245175095800 23363999502898383498789717113827438736757359548635730805040093391446503783150768661279062653524802633976834724732512 11240673505948051406903890261402403884584589780051866809690706643642804284348472156399898385657506527735636623653056 4924030452239779105855166483721242900264184991680257534145382083028066224916747772927560016466812203041892841167075) :: (Ell_certif 5860044664235258976982724454726667182163919796434035937383533096152024689642362253409206296642344829950360065471 369761548305002300 ((15848172129032546204160474489363217653493848085896182031616943618967418133930910996304206859771,1)::nil) 15376890243381170546339588134680451714710403090829610609001372918225385435150624687180831807223367277172362906 4819365108777247553104840639303145129806282962404730102067818691708921036058808751312829815525134197487813441096 0 4633562451502649516264485669559205101849336226559174102173603602768971546829966186817155034807988792845533901369) :: (SPock_certif 15848172129032546204160474489363217653493848085896182031616943618967418133930910996304206859771 2 ((165966825102445766092370661738016731107904996186995308740359656707167432547187255171266173, 1)::nil)) :: (Ell_certif 165966825102445766092370661738016731107904996186995308740359656707167432547187255171266173 267880 ((619556611551611789205504934067555364745053740318953568336572443922241208366716354113,1)::nil) 165966825102445766092370661738016731107904996186995308740359656707167432547187255171266137 0 12 36) :: (Ell_certif 619556611551611789205504934067555364745053740318953568336572443922241208366716354113 2432 ((254751896197208794903579331442251383530038620062413855172860626447077051554106851,1)::nil) 619556611551611789205504934067555364745053740318953568336572443922241208366716260033 9834496 0 3136) :: (Ell_certif 254751896197208794903579331442251383530038620062413855172860626447077051554106851 198 ((1286625738369741388401915815364905977424382432180738347521201875459985378592041,1)::nil) 254751896197208794903579331442251383530038620062413855172860626447077051554012771 9834496 0 3136) :: (Ell_certif 1286625738369741388401915815364905977424382432180738347521201875459985378592041 1531803 ((839942041091277003897965871175931877287184693064724334661452091980764803,1)::nil) 0 192 4 16) :: (Ell_certif 839942041091277003897965871175931877287184693064724334661452091980764803 299106873 ((2808166969440642054045899076267404520621918055434442269818348407,1)::nil) 312548139556109605899216319796813073585441109298064688087821984336239238 331823458690443655535518345221724153581224781435687201368394315050275327 0 10983064648734404121300675254301717979937037091594215386287554913644679) :: (Ell_certif 2808166969440642054045899076267404520621918055434442269818348407 4110699 ((683136120995636521683027406352892299930083702138517318057,1)::nil) 356713491491882314077333296382779407414341309951310244937477855 1383593056788086072204651447379084238917317168921367001929054057 0 2694986312424075138446602235733924466109438654989471411004058564) :: (Ell_certif 683136120995636521683027406352892299930083702138517318057 91468012396 ((7468579485887143204464952156381011781480285447,1)::nil) 532663639216006574621393392309897448805696282239176002304 438965040119401799083292989960345900863056290810279687921 0 390894754826599304802366168409483422081082528317237688894) :: (Ell_certif 7468579485887143204464952156381011781480285447 343 ((21774284215414411674824650865270998056457399,1)::nil) 0 192 4 16) :: (Ell_certif 21774284215414411674824650865270998056457399 6316 ((3447480084771122811085492315792396203421,1)::nil) 15634424905222065138688120169479665590273850 5995924045067825682595851327304789923636724 11330090444758399639838942565055130302967114 2184424924097548626503929602609390224375151) :: (Ell_certif 3447480084771122811085492315792396203421 3381755916 ((1019434923869036209650032495041,1)::nil) 0 192 4 16) :: (Ell_certif 1019434923869036209650032495041 4684153600 ((217634819632950997597,1)::nil) 0 744665354544960043780167521257 254858730967259052412508124094 955720241127221446546905575490) :: (Ell_certif 217634819632950997597 637 ((341655917746941571,1)::nil) 0 54 3 9) :: (SPock_certif 341655917746941571 2 ((11388530591564719, 1)::nil)) :: (SPock_certif 11388530591564719 2 ((1730253812149, 1)::nil)) :: (Proof_certif 1730253812149 prime1730253812149) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t225/prime6.v000066400000000000000000000536741451023060700215570ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime204485466347647 : prime 204485466347647. Proof. apply (Pocklington_refl (Pock_certif 204485466347647 3 ((4673, 1)::(11, 1)::(2,1)::nil) 157264) ((Proof_certif 4673 prime4673) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234568147: prime 678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234568147. apply (Pocklington_refl (Ell_certif 678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234568147 262948 ((2581884002038007984304079180467921038511674894364881227513978729259148454790009647493087400090136584297618249451592839406293402657783912335104762108411457752430920466303967571729173604679945961360288563931375934702097473,1)::nil) 156081237349471778473010761748268510687962500297630202471559880688958053873318475077865213685895057047496813633084067101114616333746218321497023306067335366451294313317796653914549309458561855805455985274994766694627028511578 653795294107587020016852523530181468953484263347193327847843093239974999731266594381156869107085690669987558582137009603590805338488209785650601400108321608410105578374064432135486219894033345080379916117336987613704709435229 0 416966496884235351024636827282767084599028977593766783728784611275948904474906869529582344371494360899752177628398739124730044588009602099355911014565644286480595538469060215901853095604369500652992220850162430586061317742904) ( (Ell_certif 2581884002038007984304079180467921038511674894364881227513978729259148454790009647493087400090136584297618249451592839406293402657783912335104762108411457752430920466303967571729173604679945961360288563931375934702097473 30803868 ((83816876570111519251545915612543237703514211084298933741502162301797568240131714870778156824011081475145207392479049396324280697392155551676981453379141207590076940792690799675355231890752826580039242161165737911,1)::nil) 432807535302833604066012206540363917091334476653463427913640092017035987068003165205563886688710304966885959054096495524254928249447062679586842507595323752219751585615642057674744582995593972120561191713565851011274199 582241989581136263300451759574718622713608367728276545639165114431759627886832196225355592105977139919239389515460395916638132402414096469227738177828004875203237324957626447308442189225914626964488519756998879681001362 1339426727597101328597918097840087320756637973790376280199207376212486283425643375461843093590830553319253245450742921369592858676317375199229270774328955524476831139711857609559794350504494101336097339209299826585042529 982871270601873922280196630371093592350220725051894782755515660446045237767494269643116557580395623421116711614849221349337919191892523847540892110546268156122462616235223355530382529205784388154211015358808681555951741) :: (Ell_certif 83816876570111519251545915612543237703514211084298933741502162301797568240131714870778156824011081475145207392479049396324280697392155551676981453379141207590076940792690799675355231890752826580039242161165737911 61 ((1374047156887074086090916649385954716451052640726212028549215775439304397379208440504559947934607893035167623399332326782582766341504259977018207169973607550611050478629460125376206448971043363183747252789833551,1)::nil) 79296272456131052588869360744574282547179120857497924000964780577489749914247331803441650995350435335147719691635881846156398265469414101823025366475186451449462437220207588146456364698544263891983514876611437079 44698493038048425821457922873417699308861073227148106740138925875203485796036743467203940663940330776989545937455301726054083796774072435316859662338334983088482089999490697219640172119195795639691230012463678243 0 46424558081673335750527506782057011526943429824231155800045077816933922468973220128010195527570316158029695683886287159648728168954923565702109537232637694517215661002863702483764667370976876179710673148651398955) :: (Ell_certif 1374047156887074086090916649385954716451052640726212028549215775439304397379208440504559947934607893035167623399332326782582766341504259977018207169973607550611050478629460125376206448971043363183747252789833551 35134186383432900 ((39108552049322234447621734018669313660604619182894037785777204985741577613377941519179554500143697376026332334031980247458395629516421780973118234945592134642028540027502887573977123442435475231,1)::nil) 770199484993034733001335627837234546093522176464043680459144846427075770632367149306539523854508049726520525496462295355328573538621765521620584700745142921352391970911398126307364607004363209990186209680204029 872809600817838824580865722526534858347021944058854112017907561662242191606932063806739064907137311942854424737569421496380043892691626334976133114999955517815696106621220753474687053703644623912475833657087225 0 1307038754332097766614495409425560666844286443484312299948700896675117472660087576845662922731446659171291749951484398488493333574201966949708487642488189718724867933672296103310247827818565490791284966767486115) :: (Ell_certif 39108552049322234447621734018669313660604619182894037785777204985741577613377941519179554500143697376026332334031980247458395629516421780973118234945592134642028540027502887573977123442435475231 24994827126 ((1564665834741498281632153346491175634170882210041416942816154326289441111191062114937051895501223915618012356399575329958654535667655821001927316956524434326664660146979074218044624019,1)::nil) 5023957014538597175291785682801149470507381316985022185868413853332657337587810975442543310697489560117475378232130340969749463035664016434855772611622656761275605901598143060104535064605839508 14062182484023375126214129141533170902310808743856119925370590841836811466024190561028852412944997568017729878594438235388396520998923491669150768032378436645813030188811262264574593272689427764 0 6629456947623628109962090796274238655524304131819881761732040793041210690271901871098126985803867770444729100995161175315823820721069434512178952703124118831566619693126877824482137585340040152) :: (Ell_certif 1564665834741498281632153346491175634170882210041416942816154326289441111191062114937051895501223915618012356399575329958654535667655821001927316956524434326664660146979074218044624019 1038 ((1507385197246144779992440603556045890338036811215237902520379890452255405771736141557853463916761091009136198989767582783284061982006642768740633892741783544689124890092642978886521,1)::nil) 1532351094128557941123497329271642779258873100653559535484993095843878725004789111400546343239227121750340512947955449136369836100147893288282932703483231373290407268635242462823275572 534761744076528322083554100308338693182174401961116557699867416965503732486651840581063174340670131507514300289375932256009030579979154860438175410246511199156704610878748586933213733 926186241661054790159011227160254230177000990641245085883779078894851409962574828985195955856611508948582596977043085806848461567995492862823995645666080733059073089484686186547540558 454621291678534854233401967793236896145088245600757006367521874635443473680764421016047995881664372945242723078732589883278270435276592141745050927728226323526942240151151708915722932) :: (Ell_certif 1507385197246144779992440603556045890338036811215237902520379890452255405771736141557853463916761091009136198989767582783284061982006642768740633892741783544689124890092642978886521 36 ((41871811034615132777567794543223496953834355867089941736677219179229316826992670598829262828586994003950195635363379506505472460852873433350629474750936928689165197489017462384679,1)::nil) 1428224230185090716329920446541969085509467377330020348734973491747173009543929019901147330688274046982109435495231000408783366981637575512515122875523976429639989079030316225608934 1385382167018373777481474275472527656168185972743277706492573365708797100264326761834958398847573200390685880708018022978709177847850908538527269852430255037616461388440864778023158 993019877011122486759816496185849328784130171466428376959555296308306714699731933828150690422557665458902670128118246354949709882367805301348760968053915294536992380849570315512405 642598266142245286918540194385299175388066045648709864650745268453837846783378196233147428570519162574451064990760738742182624964840923399037853347851393557987696291018975580865006) :: (Ell_certif 41871811034615132777567794543223496953834355867089941736677219179229316826992670598829262828586994003950195635363379506505472460852873433350629474750936928689165197489017462384679 507 ((82587398490365153407431547422531552177188078633313494549659209426487804392490474553903872129492027687124798840594540730226787840593557579367938786596280929020763684092767209281,1)::nil) 0 9000 10 100) :: (Ell_certif 82587398490365153407431547422531552177188078633313494549659209426487804392490474553903872129492027687124798840594540730226787840593557579367938786596280929020763684092767209281 100 ((825873984903651534074315474225315521771880786333134945496592094264878043924904745539038712056171392348319141431393068287507096575032742679051863235958346945723048707172392189,1)::nil) 82587398490365153407431547422531552177188078633313494549659209426487804392490474553903872129492027687124798840594540730226787840593557579367938786596280929020763684092766873141 92236816 0 9604) :: (Ell_certif 825873984903651534074315474225315521771880786333134945496592094264878043924904745539038712056171392348319141431393068287507096575032742679051863235958346945723048707172392189 16908 ((48845161160613409869547875220328573561147432359423642388017038932155077118813860038977970792909206777550451580952841220760077221149447093759420631610515808705159758434897,1)::nil) 35592242172741355830062639692091237804088191807936694522652923109306319815519457549422133696648070196197251127998302562487914628686600496044576805178252963580283304458350573 256685833787835534503778557312857736866888202794977301696908048879846107531895844230751617292867187482250388969646660898529609330833355033649139748449399419289827230762877965 356892481738251748015404007451763985727012773641734601660224784413903305986191562822642782042636363311949496312016191487077472881202258948076225555663685513364834923677948622 687024118835443369089180690315490223994164008263330193257387310727255330272821419079199339832677239388687182311154913010276256523650762844228497966952898049760982128385025629) :: (Ell_certif 48845161160613409869547875220328573561147432359423642388017038932155077118813860038977970792909206777550451580952841220760077221149447093759420631610515808705159758434897 452 ((108064515842065066083070520398957021152981045042972660150480174628661675041623584157060235692945912802470417382464491777411427462929715240193596075996582308978545475269,1)::nil) 8905169147981475379122311784597351404749845047211971618303264299135778237431019515926176181221389139470644442241026683163284004433946025463175715207304906092131827198629 20181111450370836959070006309889295778900518013277116216185970639112923937907108350962251709692321971414901333116764118250281262404753430250483237056060937037445479666283 0 38262170249204979998479151805565570274001122921734106835632008122902257956592167699358753671323216581315778759482640541139684803198414993071472264091442817621344052968773) :: (Ell_certif 108064515842065066083070520398957021152981045042972660150480174628661675041623584157060235692945912802470417382464491777411427462929715240193596075996582308978545475269 30571532191 ((3534808630686764981941317459922040750456053746533421830564350029657356372492831468530568841644067129844728003670524372875638529428719460699762198965861537689,1)::nil) 89112146561096855896847722530554797262563401776114478879981049002159994977404511364184626737522388790133104308439625142222583900269383713695804135598782891454321139370 101942865919996764653454783496272714125102472654535789068693003524632421108232058449776260739218458537144032539101538097528119973658367232328899154048608111404924321380 0 41305005663925635676838046036004859056528812677281622077977876939234374048144491797216176327404269487484827349015397548868589733280081705889131996142995807260501764671) :: (Ell_certif 3534808630686764981941317459922040750456053746533421830564350029657356372492831468530568841644067129844728003670524372875638529428719460699762198965861537689 68650 ((51490293236515149045030115949337811368624235200778176701592862777237529096763704825259332053386513450632099409369810739103417742153433654259110189108589,1)::nil) 838711375534724882712989627201525362165854414918545550613402232095380394024948799692041182472407873469361427450937712307737031366763673814672646011385494986 0 279570458511574960904329875733841787388618138306181850204467410698460131341649599897347060824135957823120475816979237435912343788921224604890882003795164995 559140917023149921808659751467683574777236276612363700408934821396920262683299199794694121648271915646240951633958474871824687577842449209781764007590329991) :: (Ell_certif 51490293236515149045030115949337811368624235200778176701592862777237529096763704825259332053386513450632099409369810739103417742153433654259110189108589 510868 ((100789818967943087147815318143508325768347665543307031760832275220286902089686961777656536912323896125328711965053009919246542556741817021241888257,1)::nil) 31629946767679941412541151050317630823238205106616007523066452568432233361011828744099152262398121316577643320745862628175272314380774782222974445723202 36364801827037168358977392195191639900667767660727817524553421941243273401165164397760871473579383682742488293559459662382582259596296106994029872703123 49365027504701041004768635072249020541829598634384134792771975074847038838173611838628840786654964701180262983658531629332995866463033301165798757923655 50689797257783856694611358163735889325618187412179874887428877528242530880353449127413686873559555169747049485617683458936475748010607167867490026747989) :: (Ell_certif 100789818967943087147815318143508325768347665543307031760832275220286902089686961777656536912323896125328711965053009919246542556741817021241888257 69944428 ((1440998544843959366539037507655482231813342808998409877064578685528558502090373388290098847773206702057020784243801404827413146181434012991,1)::nil) 53011139539660918479065457207573421466659218689432102362217404223663461344892424602416389167483904222866833767839816531301221557637170940329709139 56880485244761598022593136214674316312294583602363984528656574421722707228641389712983486831922535358684126516663822251491982480788127969769917027 97757343552886948346415472916394843104409396042831264114968875382112625411032665085700320795274420717905296361176861429331215934990509419680540668 98485938826625444341527525464455993136959294446431025697632288699175776124107216741414814100677889399028877564842006118066727972759818208567905341) :: (Ell_certif 1440998544843959366539037507655482231813342808998409877064578685528558502090373388290098847773206702057020784243801404827413146181434012991 5052 ((285233282827387048008518904919929182860915045328267988334239644799794265717895415107130566780662526695278590036127641132693567512468637,1)::nil) 1409431783263855416443602161667072502853105601116874617080502890186025350476117927949858441282282389309876156952433595116667910800760106308 460192470586395145639618855408194295871168111279896632028557535443077722228753029198139980160304845934741021107540471851726068237401942770 804244986262143101550889333189423507422219007032237914710301764760854539682314164452158620871426896093819224902128359929404479247633148443 1273612106557483015683063026457927694673133720124550334025431707608080747396569511120768225633648712396020444316226765090656557501589538519) :: (Ell_certif 285233282827387048008518904919929182860915045328267988334239644799794265717895415107130566780662526695278590036127641132693567512468637 7007714 ((40702757393835856886927592210516750949156179223105849972507388971607201290818785360592814840263124542080277176881054810993298969,1)::nil) 116470842726564904130810005660748067786217639456965415621715405321183247970247904294030112277991164160623909221590436678148721976739022 83883142320998639618029345444376852171438439361550519566756016465508735646587492541119095151971719977048165303990295413577394377966431 0 126995981264306817365588862086185097762142078674955306023443371431866696991565417568757416484214363593342350657555807243711527193539998) :: (Ell_certif 40702757393835856886927592210516750949156179223105849972507388971607201290818785360592814840263124542080277176881054810993298969 1925370820 ((21140217235574317516107152912246146406828882564609476096925260851739487170544898597947038697678683178167180970561818441,1)::nil) 900 0 10 100) :: (SPock_certif 21140217235574317516107152912246146406828882564609476096925260851739487170544898597947038697678683178167180970561818441 2 ((3953829345287360562666094738644007426260490578736716569189365070634657446054499015795950503727024378194752173, 1)::nil)) :: (Ell_certif 3953829345287360562666094738644007426260490578736716569189365070634657446054499015795950503727024378194752173 14948260 ((264500975049093376932572402315989113532979127921023354445258427837883945430186315215108561249279709637,1)::nil) 100 0 20 100) :: (Ell_certif 264500975049093376932572402315989113532979127921023354445258427837883945430186315215108561249279709637 2651 ((99774038117349444335183856022628862139939316454554224652270984109860420501620209437822430326312233,1)::nil) 39890653901813384623390300807492459480638492260783618270351378946176774035600520188019981364413204738 117532935538202766557398906603451486341973224066750188565813911741772323486099784297899424155597789377 46954230783584313117761719462201531072989009049748170074214885101681671393947473241005094317618014109 47870454399462066101877352478199455677284858286320422002878480355562148843853598572136299544271244555) :: (Ell_certif 99774038117349444335183856022628862139939316454554224652270984109860420501620209437822430326312233 13588 ((7342805277991569350543410069372156471882493115582536613186941982481284535230693162281942890837,1)::nil) 57215894871040129767643830448607741954868400886083586712697595281561385291725683983801709989570013 27676615802517902226655852919960145191978792398236363896522968345690404839398743718867490390126122 0 14124772996840147024751403115911885742765031191637062640703997651719035770439767430623395461064157) :: (SPock_certif 7342805277991569350543410069372156471882493115582536613186941982481284535230693162281942890837 2 ((540070997204440228783716539377181264480912997615661710296185788649697303267923886605026691, 1)::nil)) :: (Ell_certif 540070997204440228783716539377181264480912997615661710296185788649697303267923886605026691 21756 ((24824002445506537450988993352508791344039023651167894298331738064057434696443800970123,1)::nil) 0 1080 6 36) :: (Ell_certif 24824002445506537450988993352508791344039023651167894298331738064057434696443800970123 15399 ((1612052889506236603090395048542684027796546159655021190885834979217857232889403661,1)::nil) 22403336844491437917183923978594844968181851039280606180926242359870114982577462051249 9884458302752513107082701002667877075693126516211659767026578150492167989423948700847 4896484736169113975894024235617790635398467245853521020370403741093879900603454532081 23435530738984649982909515427176033591310167214853908870256378077601418095320421566505) :: (Ell_certif 1612052889506236603090395048542684027796546159655021190885834979217857232889403661 1153294275 ((1397781055928883894867504695228530487413219141670446451488996870891081981,1)::nil) 0 192 4 16) :: (Ell_certif 1397781055928883894867504695228530487413219141670446451488996870891081981 37330 ((37443907204095469993771891112470680082604200053611799775339567007347,1)::nil) 1079498376236574277144092748798914989982789904487775530105712076504809681 1083887624464189619532849091228284770790808299877495681034103377184244209 0 627484597531302238181744995099351293076667518088197239003020911029080226) :: (Ell_certif 37443907204095469993771891112470680082604200053611799775339567007347 543332004 ((68915335243339484919743271946981944970480355194133369241649,1)::nil) 25633840135599947509720587831763175405578517753663824230741970714098 35689101305809654595115000859402840984094400155546261663659133657058 20711473608635535897034083312411438864857725540693678920722073262873 26270723035349685461605498134070786276617360808339903520369704379889) :: (Ell_certif 68915335243339484919743271946981944970480355194133369241649 17129611 ((4023169892377560991883777859722159900326902124425907,1)::nil) 0 42802883998792883211871797810820817384009283108877053418614 1587 30150459168961024652387681476804600924585155397433349200632) :: (Ell_certif 4023169892377560991883777859722159900326902124425907 8893 ((452397379104639715718405236829802788367864663757,1)::nil) 1040391782178704053336554693901330172615352948039407 3397378200703519438700936536997476427416689527282218 1263758872535393471791304235268417699483621190593727 601026612708225838889734442793158011870451597043524) :: (Ell_certif 452397379104639715718405236829802788367864663757 533700 ((847662317977589873933682380745336265929541,1)::nil) 100 0 20 100) :: (Ell_certif 847662317977589873933682380745336265929541 8471664 ((100058538437972737579704205317285289,1)::nil) 0 78608 17 289) :: (Ell_certif 100058538437972737579704205317285289 816481 ((122548520342754745472043585751,1)::nil) 0 63709147521052954005827287035346491 25014634609493184394926051329321409 93804879785599441480972692484962484) :: (Ell_certif 122548520342754745472043585751 41751 ((2935223595668464543881103,1)::nil) 0 8192000 320 6400) :: (Ell_certif 2935223595668464543881103 141732 ((20709674566543690993,1)::nil) 0 1272112 129 1849) :: (Ell_certif 20709674566543690993 101277 ((204485466347647,1)::nil) 0 221184 48 576) :: (Proof_certif 204485466347647 prime204485466347647) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t225/prime7.v000066400000000000000000000457101451023060700215500ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime11673815955883 : prime 11673815955883. Proof. apply (Pocklington_refl (Pock_certif 11673815955883 2 ((173531, 1)::(2,1)::nil) 318158) ((Pock_certif 173531 2 ((7, 1)::(5, 1)::(2,1)::nil) 98) :: (Proof_certif 7 prime7) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345680059: prime 789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345680059. apply (Pocklington_refl (Ell_certif 789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345680059 6359812272 ((124062206859885318729403232211755607044383353652953215679988987733496055447913788341160560719930059230984363018936551305875971802225110615332989748249802449439584178604657163531656108072281385315329832515857844334713,1)::nil) 324348720163497693721211468605833809735210886599741272055989327045304824898072373341288402607391286285197909195460781746611805946019720324744426550378043527426617808246901944418132592149084897718981546828430116836025937156597 187577614282060590023284675620143038670578862923280418902789480749522540993290968194347029191077725449564565533296307659361295112435213576054103973952513585734618575859885415009317143047265073374306637592399511991891567126806 0 566626422610698119030316931333181891424667049244741106187878253077332011069591482837599957264427041504988909941209253276961904158640327666188872618813510926817993050289156459988587219638889422644960254052540367169213533596856) ( (Ell_certif 124062206859885318729403232211755607044383353652953215679988987733496055447913788341160560719930059230984363018936551305875971802225110615332989748249802449439584178604657163531656108072281385315329832515857844334713 767899992 ((161560370038244926468762396095656694634245228189757834611344790499094126111038933753707554042961963243495337498396808452949006134290442359324941767742114327467112293498035314509684943481926854028302077212627,1)::nil) 124062206859885318729403232211755607044383353652953215679988987733496055447913788341160560719930059230984363018936551305875971802225110615332989748249802449439584178604657163531656108072281385315329832515857844240633 9834496 0 3136) :: (SPock_certif 161560370038244926468762396095656694634245228189757834611344790499094126111038933753707554042961963243495337498396808452949006134290442359324941767742114327467112293498035314509684943481926854028302077212627 2 ((41790059502908672133668493558110888420653188874743361254874493145135573230998172207373914651568019462880325271183861472568289222527274278149234808003650886566764690506475766815748821386944349205458374861, 1)::nil)) :: (Ell_certif 41790059502908672133668493558110888420653188874743361254874493145135573230998172207373914651568019462880325271183861472568289222527274278149234808003650886566764690506475766815748821386944349205458374861 4023792 ((10385740491285004824719690669425976397550665858161495737074504135684839880142455725190048255866113224363650189911088475513474445183837564809895694006536974089633854068709348911733014930018752981917,1)::nil) 17616559446794042780398319285043763229786395824446338658264203532044082502193488803129331652357499697904131629390923235819846415425916908110725330604504691798814441391319871444381440383311790828558139818 3443575513267847529344825228173586015910411235590620664371045543489549977667209856677222976818624306868406195609349033625216385515786693069907614659361939359511647211479123492537538033930943139593116318 0 21309895294179328548509368721942775234248168522810286404307923132752399760009785509507542685964055776836031663473340233750267523597288263199851418582669807375321704483952742328057590961423201950047564850) :: (Ell_certif 10385740491285004824719690669425976397550665858161495737074504135684839880142455725190048255866113224363650189911088475513474445183837564809895694006536974089633854068709348911733014930018752981917 451668 ((22994191510766768566114249115336876638483722243243921945044820832303461569432538336100959678051385991487314494891000200759778182596521381128513884748728801260846809074510417012642120362758679,1)::nil) 0 19008 12 144) :: (Ell_certif 22994191510766768566114249115336876638483722243243921945044820832303461569432538336100959678051385991487314494891000200759778182596521381128513884748728801260846809074510417012642120362758679 81 ((283878907540330476124867273028850328870169410410418789444997788053129155178179485630876045408041933656144966017463764663426202905202070728861523131352338220718176984768910814117287170149389,1)::nil) 22994191510766768566114249115336876638483722243243921945044820832303461569432538336100959678051385991487314494891000200759778182596521381128513884748728801260846809074510417012642119605174775 8234810772496 0 2869636) :: (Ell_certif 283878907540330476124867273028850328870169410410418789444997788053129155178179485630876045408041933656144966017463764663426202905202070728861523131352338220718176984768910814117287170149389 1018 ((278859437662407147470400071737573996925510226336364233246559713215254572866581027142314386451880233339009726018472311307896956991384239197189984568900907754578200050005832304436264774517,1)::nil) 141939453770165238062433636514425164435084705205209394722498894026564577589089742815438022704020966828072483008731882331713101452601035364430761565676169110359088492384455407058643585074735 0 18 81) :: (SPock_certif 278859437662407147470400071737573996925510226336364233246559713215254572866581027142314386451880233339009726018472311307896956991384239197189984568900907754578200050005832304436264774517 2 ((6337714492327435169781819812217590839216141507644641664694538936710331201513205162325326964815459848613857409510734347906749022531459981754317831111384267149504546591041643282642381239, 1)::nil)) :: (Ell_certif 6337714492327435169781819812217590839216141507644641664694538936710331201513205162325326964815459848613857409510734347906749022531459981754317831111384267149504546591041643282642381239 4759 ((1331732400152854626976637909690605345496142363447077466840625958543881319922926068990402808354170853629671827898849460899698338568372624448202508217506265532458129482297965215977909,1)::nil) 6337714492327435169781819812217590839216141507644641664694538936710331201513205162325326964815459848613857409510734347906749022531459981754317831111384267149504546591041643282563146071 271737008656 0 521284) :: (Ell_certif 1331732400152854626976637909690605345496142363447077466840625958543881319922926068990402808354170853629671827898849460899698338568372624448202508217506265532458129482297965215977909 99703326 ((13356950601155016904617985459086945058343814562887074267117487720960094349539814438992765503311731160558606442410753794971086392894431374969032759204180258780994111257140101,1)::nil) 109369222780331832252516049060336507878209814610050844610397266549260893636054277022088850790138413834344718720912997470359453686995971714210943918931699148640686128969890504855257 74587207687564652883071032876172499968021738357670638008258691190794066030397476069981570829485569500031224650517550205954315631606769827071096309958821043815446465323309864438282 0 474270507804219801907240151933962563778708221649865229483038432841114453568428759375783534831392359864886145744840952921417180391829350912408582882931659905857695153811555844048172) :: (Ell_certif 13356950601155016904617985459086945058343814562887074267117487720960094349539814438992765503311731160558606442410753794971086392894431374969032759204180258780994111257140101 2681424 ((4981290016481920391783614027131458903308023857057695562923837379302972729989667594156184381246798924853166130323236789141492635127685712457356636556854836751290887863,1)::nil) 1990994829852747918312494821556210751998174280841442005696514310301250941032025427395323410335246338672029803028577574998531792923696535234802980409874082031844483723126072 9033539087810932430027733948237594215885473321954485975882467472123364891842157303920859688421158385958642258556331390127866619901392525237696163571114897840858380706771155 11263383488743210972150956082118465193812999091212430220940111615352587160787535974697326823346928661259930755910825962098785881250620409099943711962845400787250572283732631 3612015024214625906044266676089150447242487583300899715672947418935381877188816442466092693540501182349652561080964186439417637072275803029151323322617279309131705738529317) :: (Ell_certif 4981290016481920391783614027131458903308023857057695562923837379302972729989667594156184381246798924853166130323236789141492635127685712457356636556854836751290887863 557163071 ((8940452581578078766429252499994671942835967061172465184656571360062326761763554846328573576236045348989671184709111902432883190807232086441417723776222048793,1)::nil) 1388098429461037352428669525950003138650223176487397038681912017185221330801467328402499161034911728397884691638632333441923554752324964909878015153098990350901560281 3274350841863402720339678703117207339603752168656370100392531202586451677272118001263448922065342903505244409741173847608544109234998628016749189499252517055204604049 3962433114660420034781165467646940579546270641970493111380555568180440868388620484115270062990517136763391171886252498257908944638848399203845219678617237142564313892 1388745510512388685828146478256480825038691598112194591625897030415081237023072561579197957401328292728880977390801482498514596178745418526223665743911877234419098557) :: (Ell_certif 8940452581578078766429252499994671942835967061172465184656571360062326761763554846328573576236045348989671184709111902432883190807232086441417723776222048793 6376723 ((1402044997340809498300185298937192652532651498453432144481824184626229924330029033167457518354783090803029123586664708716317707452392963987192337785867,1)::nil) 8940452581578078766429252499994671942835967061172465184656571360062326761763554846328573576236045348989671184709111902432883190807232086441305829943774248313 14406462054002124060149776 0 3795584547076) :: (Ell_certif 1402044997340809498300185298937192652532651498453432144481824184626229924330029033167457518354783090803029123586664708716317707452392963987192337785867 8191926 ((171149616993709354588919052605845396129390267740874630029839647553729113804460961720552756529782874430110552711214934756920766998033764660469899,1)::nil) 1402044997340809498300185298937192652532651498453432144481824184626229924330029033167457518354783090803029123586664708716317707452392963987192337691787 9834496 0 3136) :: (Ell_certif 171149616993709354588919052605845396129390267740874630029839647553729113804460961720552756529782874430110552711214934756920766998033764660469899 85 ((2013524905808345348104930030657004660345767855774995647409878206514460167077647666778618411174433903228190136458181113081395852041164946162609,1)::nil) 118686589886324671390177681804456798269223593714569733673186175420972278842781357211903335482574079323038688807943389958257054572118800732786239 55577992380748373056820686956034541779384689000054220794923925740986198913709743758109246175946880008926763694712572931550442059107055644018777 0 138523847951049618585015635842941901520674458696894797058507443282215540144137066683227224652266877089709863321493874041851119977538742781299931) :: (Ell_certif 2013524905808345348104930030657004660345767855774995647409878206514460167077647666778618411174433903228190136458181113081395852041164946162609 206002602 ((9774269287182816011736249965701912155195825418627458149338706928150646630479980983464787519016694071205719466354612844066260558841577,1)::nil) 377764082280857344114729083044250595996751482652703114016441062555255797165772834400803850640054161503640953243060869982062465415207684841113 0 1594192658726135128146439409134170170895012892285132507617546179379810642828947000786281507876325376487887393134161322042305544970915087335815 168097958739752234135483772282833351271374000907771544120275048987931035041422501404635398990999898133489581581050974462517311880082755427716) :: (Ell_certif 9774269287182816011736249965701912155195825418627458149338706928150646630479980983464787519016694071205719466354612844066260558841577 15784019 ((619250983363794481730936206152685963897776948863749983406552344377580280148372422535046039705430812944674068688396302062473943,1)::nil) 9144229357960309068610309776944164880142091766188482794651394806583700444512441951547011823392805136110552985395440247264953724612208 9272158122137782606827648131441488469125644335122989860601359264264418563758588855061677993322407962895442529099254647705392624387891 4579349956235755906022707934685357492886943037342286961135330263555211330936915538589492106916560405785123398894594955340207189836060 440452816280829124131776717971250661081247525492335817813920742673714694037061889525380733183994381101962983167341311336953957930873) :: (Ell_certif 619250983363794481730936206152685963897776948863749983406552344377580280148372422535046039705430812944674068688396302062473943 1877 ((329915281493763708966934579729720811879476264711640907515478073205511767659065444020221114305777970187020601993802589932719,1)::nil) 2255923640431170510732295404768925290341611228849213166953928964646023903514926718229536246082911553094941643419247580396100 14431626620669700420993238641162094511484991995112348039012683666593013994703984675759314272320050298787171807051736258400218 320887634428007695267997543933743053048467319201201698625184468258324089560809335343683878539948693706959227250413438863814252 221145659845761389166040480134187058328232835407343924226536692371055840797717375283139310047057560498226952341322396728730198) :: (Ell_certif 329915281493763708966934579729720811879476264711640907515478073205511767659065444020221114305777970187020601993802589932719 11907605686 ((27706265238666025220188382019767261873326720159890328729472685448808369003244245984119857187712509249772435929561,1)::nil) 185894806489656192752120072851904340053104504729993227728947970294017098893785069623372401477857138872934612132582607064904 171071055992875178376263063346659804275938817823407980604343203802576912701327176052528866061417133593474110672120204049225 39933261903504929296025590094610927348018653356845649186585357479993969861564109406132157021231429528334287335494489016364 315436294570811935886364241680696527123887018264515968390358402262022509199448451562474176305691476337386328580255911348158) :: (Ell_certif 27706265238666025220188382019767261873326720159890328729472685448808369003244245984119857187712509249772435929561 1305730769208 ((21218972465105843689777035906162090605406423806166577803496492553954066555727989740553219368760993513,1)::nil) 22809195212317764608905460302433449102838441071427569625250703705528233237660307752749745978957739633109136358125 14857769192186058533054841146722173359008615708051539781840739330903588483782423523408492839459709151339185049286 14239141351138703298643643362022431423827875935581629271424996779618367229309705999820174977448453874005122324257 8109113390669721233977337489902816494559705607113426953784292592173473863004299379476494982905217605812814291349) :: (Ell_certif 21218972465105843689777035906162090605406423806166577803496492553954066555727989740553219368760993513 490576 ((43253180883503970210073537853792461525648266132397106534392671284514409487379277868134364002069,1)::nil) 18650442370563749340447311162280275976531464195664860480689767928658244122900419153283161258545504791 13970224280649078695745465504158027019298238646489460368351621214186367406561568769231770942178727695 0 13502103180185639971975659447766137586054608734759524915275021861943719152422793546540385562985686383) :: (Ell_certif 43253180883503970210073537853792461525648266132397106534392671284514409487379277868134364002069 73685769645184 ((586995034343526576647109254248319298027555743545800085360478856596896890447489469,1)::nil) 43253180883503970210073537853792461525648266132397106534392671284514409487379277868134363665929 92236816 0 9604) :: (Ell_certif 586995034343526576647109254248319298027555743545800085360478856596896890447489469 93 ((6311774562833619103732357572562573097070769973278408417142079757955801824480129,1)::nil) 0 500 5 25) :: (Ell_certif 6311774562833619103732357572562573097070769973278408417142079757955801824480129 1120 ((5635513002530017056903890689788011693809874838026611306280057162790238186033,1)::nil) 5780013605087753021831709631340184101512664623665728996221128279678638627031646 1472273613811343772714354504311066422327383334049208822698118561672653413269901 1917445131988826759251151212967295361249166502613534812623003925487026802109689 5682389356486005101499586915541970757563184246918459395768725667265126684814824) :: (Ell_certif 5635513002530017056903890689788011693809874838026611306280057162790238186033 474924 ((11866136481900297851664457239027742741666186116697673738552842897507051,1)::nil) 0 2058 7 49) :: (Ell_certif 11866136481900297851664457239027742741666186116697673738552842897507051 23906150 ((496363340893464562535768295565272651245294349842367206647168253,1)::nil) 3891320506620204421402321996030929989393956950669228147206145136097660 11482363006236086577421561112410594052755382765258233052638801895058117 0 262639711982038827528325726820258911991892964005934746309998924023199) :: (Ell_certif 496363340893464562535768295565272651245294349842367206647168253 1480 ((335380635738827407118762361868428446743344023812998857454613,1)::nil) 496363340893464562535768295565272651245294349842367206647168217 0 12 36) :: (SPock_certif 335380635738827407118762361868428446743344023812998857454613 2 ((27948386311568950593230196822369037228612001984416571454551, 1)::nil)) :: (Ell_certif 27948386311568950593230196822369037228612001984416571454551 1334884127663 ((20936938070047004651205229844107382197920326783,1)::nil) 27173970548243557497914632365117794103583569338622568758423 5659806030161831674011478252494410546035474983809278201724 4580489960219747105993307477888599838650683047687301077868 13426752730803604437797302542716354786554067098961326583702) :: (Ell_certif 20936938070047004651205229844107382197920326783 8145 ((2570526466549662940602223647853727189880923,1)::nil) 20936938070047004651205229844107382197379717879 4964006108754 1431 2047761) :: (Ell_certif 2570526466549662940602223647853727189880923 818889008 ((3139041361451102712324937549707383,1)::nil) 2570526466549662940602223647853727189544783 92236816 0 9604) :: (SPock_certif 3139041361451102712324937549707383 2 ((3726457812223074901319542277, 1)::nil)) :: (SPock_certif 3726457812223074901319542277 2 ((411385274285316928811, 1)::nil)) :: (SPock_certif 411385274285316928811 2 ((46695263823532001, 1)::nil)) :: (SPock_certif 46695263823532001 2 ((11673815955883, 1)::nil)) :: (Proof_certif 11673815955883 prime11673815955883) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t225/prime8.v000066400000000000000000000533541451023060700215540ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime71648973667753 : prime 71648973667753. Proof. apply (Pocklington_refl (Pock_certif 71648973667753 5 ((15383, 1)::(2,3)::nil) 116322) ((Proof_certif 15383 prime15383) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789269: prime 890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789269. apply (Pocklington_refl (Ell_certif 890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789269 180207 ((4939449948054250643309645211162108705304394459403235730213409524177511356453110472408033915941797248658555692502749059579812608781754734519275585298163953490991698169574990409979061722368677111037489830709543774460453999,1)::nil) 251395310115800450441118454232322245057370934532387186016838641948241760762873510321302729977169161289668663896139125305556297867735804339480398770708602165429140662897347003782087118341418581516498959892718357790372640776551 217308329207453472954184363073255505493715284307211091888132207780588962898010373944142912095488131636467087232286408125892012277279396010879951868638555791366343379261525015398853299917565489680163094982997383173399243513985 293615216925586481487161724365486338663404311995573329563307761299863327968495067021252712729557074047791187657552114822064858327349486207016492293478186867729874441180172293700572017627142348867408125481324058566510087496567 755915372500698013067865249943344143176352999544260096279057758708825314968162712631280019269410986154360440823323339947437376034531110504571363734965319897994603864159777056924100018686165474811818899027951212874420572922396) ( (Ell_certif 4939449948054250643309645211162108705304394459403235730213409524177511356453110472408033915941797248658555692502749059579812608781754734519275585298163953490991698169574990409979061722368677111037489830709543774460453999 62099593061276 ((79540778039886830307205713848362442303480756223557679546445483987141717332302235880255803128101703600231255985759443300559574837777310916301542768236885786300742553792448433883722840088821292801360869342511,1)::nil) 2300602503107450495508913855979510114768900933180498567722716591593322727041062811264390129919338120877440931993072197821617713526562339196606588889822363273564875273084536948068709546067605315926932919215957043230705585 1559018708405652233844730079793667864740098336852454843756245448204829651304609289405416212516976053442389977781063307000270228578131352757206334989005194298187544766272389939516527745842449113060721643305167456337887632 4931158931949496152331517569801122059181587628881435895155656131928058727522696397348810355801941806488123847346312564393782132772326858807233632915559246071983417666099515207194971701105431163541129942441463423371961952 579039212149593472594123196295872300956256952728674109786875721366461321621680926621822908128554769569171600048922369299026276589817072506369396852124209423453139631312375749105601038806033572021895757326854725188109471) :: (Ell_certif 79540778039886830307205713848362442303480756223557679546445483987141717332302235880255803128101703600231255985759443300559574837777310916301542768236885786300742553792448433883722840088821292801360869342511 430186 ((184898574197874478265693708880257475379209821387859389999780290356129017058440385973173936688087719266198973227311394793530274530730027670078977151994489933578944508924623727733084288713042379339475671,1)::nil) 76048884305867489884332224641742174848195545307096394391808983630106514352882045489437007746206240508483113687502496144402284885628578337153108408113530800962878308116310817344312461937874484917278752257702 10781977703868102549058782200974353571110454576344841676195153237875986796544174929002639436410955422062903954201014322886824425912089696823846026293361227074561978945409158544526328176804744058406604430824 52206531715949958018988209022481442604235936722283073265079601120576528431240911123959180416489513712394417444463010460436735293118507323469825104711449691148334513558584742346661933462994507158069128487741 5067584517940332570457069715861055930513712134584692134150028104776795199168587643240566915213387049281934479536802015085785891994044493224200045827935539308340622517808640975674299325942355949089954354748) :: (Ell_certif 184898574197874478265693708880257475379209821387859389999780290356129017058440385973173936688087719266198973227311394793530274530730027670078977151994489933578944508924623727733084288713042379339475671 1363 ((135655593688829404450252170858589490373594879961745700660146948170307422640088324264984546359565457991829815743407206458229320387328238299885732691800315812759000916427883393674632363724983029752053,1)::nil) 25961130168188853817311402081473044621708189130329182358084407448237518916673732219321345260239710606639693910681761176924714697629368465479390225892954771389324635136960145454022055914206570499915909 111065071126784314775802880380739859748562227951983701500801669025538684629359473100578537916417467118500093675251620036736099167747753574034638796070563404135215787738995900837877605597599015249863931 12210128731536645660592051632593011545340482296855321710971726046875708893004512529156747297074175776151872938428440599397541762019515727131571282235710333965646223367343671992806458500820418669899595 113690290606773943022121009753429383853193915612311763235756220994102452724851184629422122806220960542448573082963268320514350463418334549106176255555737879249870551516690081526160986477246407319058135) :: (Ell_certif 135655593688829404450252170858589490373594879961745700660146948170307422640088324264984546359565457991829815743407206458229320387328238299885732691800315812759000916427883393674632363724983029752053 1101040 ((123206780579115567509129705422681728523573058164776666297452361558442402310622978515752875789767362931996799497618409459049228498732808152512766644808613811425045207021003884026087050936387491,1)::nil) 11715153754260248701205871476379997951033799150595310089306557097066838393189738248844490077645294337266223159493477459801247038196298114832073626046828333472076742565265826596332817756406071253585 2870825632594800508184869873310466786361216336467466181128407696963422711114073354986848491527849764703221871897218490310845792536624148810490357161052821491340691829829294260711171812114619747731 0 129188326015242412816082300453926561495639105389930940068786780168237483513855726353672352274009603872182974469527444518907378995949355329654645600861468689660842281519440850711584484775535317869685) :: (Ell_certif 123206780579115567509129705422681728523573058164776666297452361558442402310622978515752875789767362931996799497618409459049228498732808152512766644808613811425045207021003884026087050936387491 13525 ((9109558638012241590323822951769443883443479346748736879663760558849715512800220222976183052847835127961989513025546444446128285574445112477865125421343565352618963436641979211149989729847,1)::nil) 37762470318420397332560924852277589071004148354216265091254018820450708734497002267720483349562665424468524826937115432388191113083503493491870105717449611022228912684112548007818366126612748 40412218358859514572047984306399496964799178566723441616800888938375622881753473264289991592205577896585657911941879459975277582167909229211397622511131535491722275134027681028140145035414834 102634623058374079322526843660330527503289740887588425071042332260959098703957648595424163234952352578786006593329083245191280046196018538323075205526348798250341741598125355032654264891459634 120437983247346069692682121968233773425707164673334107797709553650645777994052688538758776145593076101495312837637340604130382694826999758367638764808411085073891479703596822761541437065644128) :: (Ell_certif 9109558638012241590323822951769443883443479346748736879663760558849715512800220222976183052847835127961989513025546444446128285574445112477865125421343565352618963436641979211149989729847 1452 ((6273800714884463905181696247775099093280633158917862864782204241632035477135137894611696317389806921597745692950473128851323869735598561380484493392530220241098261729226347034020561043,1)::nil) 9109558638012241590323822951769443883443479346748736879663760558849715512800220222976183052847835127961989513025546444446128285574445112477865125421343565352618963436641979211149859629591 586036603152 2808 492804) :: (Ell_certif 6273800714884463905181696247775099093280633158917862864782204241632035477135137894611696317389806921597745692950473128851323869735598561380484493392530220241098261729226347034020561043 82552 ((75998167396119584082538233450129604289182977504092727793175262157573838031000313676370000939345114264319218221633387956663938974419095428074853935489315256672203298984426541670417,1)::nil) 4440191634980850690455135558254012227898317645774766984101999316286243779260876866109734620659992547934937551805126300919497918681067769429224463550740900954499053970389090600646914113 839369637528425382502560584220766577931687922376478544950124698963747784399481055643947500242607241451435367768875639482783071931726469504351851158033898408761616793629010729356347810 718206009652521124344405015557462626921576374562650864253240546190212044484110996210847452156927385864774781873679328392200394576963334501265592395701653721872868557898795527755698410 3511241683533551023275449821279464264658678838048150958419359619898128336985956474213620115171434188596917276500816832975833658488838476048735388317125487922523890703037066886030277410) :: (Ell_certif 75998167396119584082538233450129604289182977504092727793175262157573838031000313676370000939345114264319218221633387956663938974419095428074853935489315256672203298984426541670417 6699975924 ((11343050819613599567098718047591838523923474550099402386027926591930517216437733825559639637385759043067385121032106806761321209082878346998925514368560466590402706854299,1)::nil) 35445938309874510313244175386268701472050417084748971124973986564007269679002037872041277139274698921576149564660241238906430031157985022412249326716096883881993417300660889967313 18543794965795175940779278084193546543591388490264023659895868921912629057898582843223440363193868670069063823225651834174407897559712108908025404534477623088857942001574478996444 34938399682555795089207029838902016367868750357723035747421871651141504564139335674973206874700295162339734958778868633337239700481456454370644427565990706375181501334111755423327 66538648338185718762493019039821311712992308891249267453379287256634133637422167550970262338190038796134584643523625236132997850487120176909717520075522576864828581171368539323238) :: (Ell_certif 11343050819613599567098718047591838523923474550099402386027926591930517216437733825559639637385759043067385121032106806761321209082878346998925514368560466590402706854299 491257 ((23089850769787706978422125379570852983109603629260045935280162098312120166099890333497585358027259150575229122504915264461371647609799184720751158934053764794708523,1)::nil) 11343050819613599567098718047591838523923474550099402386027926591930517216437733825559639637385759043067385121032106806761321209082878346998925514368560466571453604588459 31749105730618655022 74219 5508459961) :: (Ell_certif 23089850769787706978422125379570852983109603629260045935280162098312120166099890333497585358027259150575229122504915264461371647609799184720751158934053764794708523 637 ((36247803406260136543833791804663819439732501772778722033406847878041004970329498171254772348415106179322031150632346980429599325187412106414105835619055356225233,1)::nil) 6281471953926649497924929026730983367123270774311157493401856197024437943840981042339464876144516302430973908773499085399838089277517778215684178030980264011296856 7914993425250518547911398754304535665240045581638592703709765898827336304060252246836547133482495493104711021551432608642778739192223623753308500889300718194920558 17254340774555153773015432893078980361440291005164819172564316182197959295479864015666901397096229376284521866159514365241339298363033421213030715266957340410018128 9221556379482003051295444308824458611992627677564442625397240621389260167351696187781315331606404373109150782526921334327132433798787158007293804321314244058538980) :: (Ell_certif 36247803406260136543833791804663819439732501772778722033406847878041004970329498171254772348415106179322031150632346980429599325187412106414105835619055356225233 13978 ((2593203849353279191861052497114309589335563154441173417756964363860423878260802540686191311730737893537482202710389969181572925031095890764349718089881705081,1)::nil) 33768412707536867656792459343381096781826871471591644089822347866845083028423129991087683801433476879787076149375746949645218372352522712730116648667165273649835 0 15972390919519879081312722332001546269997465771169038795759460167396228767818312066103949457796623340835627455766787545147356313814689303201603194333364042623705 19035717137378623019000403242020911840782220851016144265855137705046815231558002015067278617127668188718926194237259419890052534955278106370508047809746272313885) :: (Ell_certif 2593203849353279191861052497114309589335563154441173417756964363860423878260802540686191311730737893537482202710389969181572925031095890764349718089881705081 2021850 ((1282589632936805001291417512235976748688361230774376644042319837703303350031309340186238960727437139389539755321687225182946392194389468255220263972977,1)::nil) 1390422703162715122952891908293771803247622756875638542949872634945113623896897791151837455553963891296273023094603084995067033507801563755457082129894671296 0 2339418952048675938145195179777483647103498644877315616090886658139047157053074613706973747530841865240945868676147298337086737646399118198767670642361856013 1221232771626312953808987030069221175092913083833066675172487497797529143091745839832359079420699872431915467071774637765409575251337048711735717164881438584) :: (Ell_certif 1282589632936805001291417512235976748688361230774376644042319837703303350031309340186238960727437139389539755321687225182946392194389468255220263972977 10108220944 ((126885793260991169851443001089586862980659559945445593343009918848416433074105125495506551043129545997707455551874667260583910424335301114707,1)::nil) 23501978524865576880902052741726717377097417348399738142476029960267204023376485545749435626564961807396711937723530234972385812853667012570365124642 263874510559467864364217506364534090689808282130327513951445963352573418397982405816225126888977291431880507497025172142267612896258119448193103457962 0 44756602609836204800560453289824261715823052108956633610012810457447963837637577942650969182698793112972599757259691849991329108452792294224960281013) :: (Ell_certif 126885793260991169851443001089586862980659559945445593343009918848416433074105125495506551043129545997707455551874667260583910424335301114707 673258 ((188465333142704832102170343448702968224157098683484776033868025108378145837292600170013544909098191851570649506721937102866503305800681,1)::nil) 89351620956695564779829298975249295443002678674227558820295435848553797093736705135375301732972646029053913795171553818124457006082823722212 76479504206467984475158644966071241260951426116486728520782932886653518990670544307340200248857041926316010786185313539069841498006358431493 0 116608812106537536668280214842483838038552318280212912299107292222979818325811649387591660314943671199118428251698577817242911637530129981194) :: (Ell_certif 188465333142704832102170343448702968224157098683484776033868025108378145837292600170013544909098191851570649506721937102866503305800681 120265425 ((1567078261625939725421253393888584089934052939017882953757225113605164073141619069713605326991353185862085528894725278031471453,1)::nil) 0 78608 17 289) :: (Ell_certif 1567078261625939725421253393888584089934052939017882953757225113605164073141619069713605326991353185862085528894725278031471453 24391 ((64248217031935538740570431466056499935798160756749741862048506249397820074533341009776501471606285745588237674800565783099,1)::nil) 1433683432336299735315959074659084980935758702912459446116207052769852724276538312631096914403113786535892615978068180543682259 598744069424677128898347059888133917411015925770847207378716582115679931953578074751368265184047853524239828593291065945688851 1188047689163589842606157402019356309009265771822173529296453498987636933590331862497108692254309616582259548721812140793879133 765829166316777675437032542039234886566031352441048363897167386872556414769906859549681910533199105489323808753502765654053783) :: (Ell_certif 64248217031935538740570431466056499935798160756749741862048506249397820074533341009776501471606285745588237674800565783099 3176391 ((20226797340735299508332076078183227422505025595636601999580181137538084006197095263936596392708612228416523638422883,1)::nil) 0 500 5 25) :: (Ell_certif 20226797340735299508332076078183227422505025595636601999580181137538084006197095263936596392708612228416523638422883 669 ((30234375696166366978074852134803030526913341697513605380540604619100594022754074659501760123376223566456452188033,1)::nil) 0 1257728 272 4624) :: (Ell_certif 30234375696166366978074852134803030526913341697513605380540604619100594022754074659501760123376223566456452188033 657 ((46018836676052308946841479657234445246443442461968957961706746208028896663172228452197391260985418431904985851,1)::nil) 0 221184 48 576) :: (Ell_certif 46018836676052308946841479657234445246443442461968957961706746208028896663172228452197391260985418431904985851 130 ((353991051354248530360319074286418809588026480476684291946678355558275872482427058813517132022431454263350247,1)::nil) 3568679714088551038454006753868433809681719035678295281793035730972499862736256926571333953717482594537090892 24899220185045348926523113357598908289744985060125674311984565081565495957273992002646556557115125721577132916 22646026183319491295026045952658829414650464566191251575382840338601207205361872144693629625849176639128630332 27883057445988644441952441330198126662087111586365473611028935221273527250548358809996387451593345196983648184) :: (Ell_certif 353991051354248530360319074286418809588026480476684291946678355558275872482427058813517132022431454263350247 450650226 ((785511758190593984879792502947549414050502396678448112984987539624533534237688981324464912910833219,1)::nil) 221765406314042604899972874938767316282793434770485187040963750857088776500040080107297618685183824953849532 240430507172031932268975155804058702272244231369401481399853672075765520063851897372036724591964093634781826 0 255247305704510405571621367777326493485199657656290218770278735869740718369312615877571130324657069346190870) :: (Ell_certif 785511758190593984879792502947549414050502396678448112984987539624533534237688981324464912910833219 5835 ((134620695491104367588653385252364938140617377322775906239804310304650103377291861881476616609617,1)::nil) 785511758190593984879792502947549414050502396678448112984987539624533534237688981324464912153249315 8234810772496 0 2869636) :: (Ell_certif 134620695491104367588653385252364938140617377322775906239804310304650103377291861881476616609617 224940 ((598473795194738008307341447729905477641226003927199972026121349139470632920036322371372091,1)::nil) 134620695491104367588653385252364938140617377322775906239804310304650103377291861881476550873353 210482039306 2495 249001) :: (Ell_certif 598473795194738008307341447729905477641226003927199972026121349139470632920036322371372091 141782279 ((4221076141643470185066932431872571872266392363413453034168395820910037962188806589,1)::nil) 212881158425568317830136101472937578771958146728886796824778849549416728191590280036602813 463112956877729431088447690541123860446705812904261352829021629289741778232358083859360553 0 351644337772101062236944011202418857151033708570740573924112955494556339285370109164312820) :: (Ell_certif 4221076141643470185066932431872571872266392363413453034168395820910037962188806589 91312 ((46226959672808285713454227613813867534020874280206509218094203058690093703599,1)::nil) 0 5832 9 81) :: (Ell_certif 46226959672808285713454227613813867534020874280206509218094203058690093703599 8127 ((5688071818974810595970742908061260924585501635886212915184017595616080143,1)::nil) 0 1272112 129 1849) :: (Ell_certif 5688071818974810595970742908061260924585501635886212915184017595616080143 2424181679604 ((2346388419165010936787579072468340010709589459362322419101447,1)::nil) 5688071818974810595970742908061260924585501635886212915184017595566521911 134414314742 571 326041) :: (SPock_certif 2346388419165010936787579072468340010709589459362322419101447 2 ((34295774497753281505116884541330485745530432861207549, 1)::nil)) :: (Ell_certif 34295774497753281505116884541330485745530432861207549 4586 ((7478363388084012539275378146376894573478960944501,1)::nil) 12860915436657480564418831702998932154573912322952832 0 17147887248876640752558442270665242872765216430603776 25721830873314961128837663405997864309147824645905664) :: (SPock_certif 7478363388084012539275378146376894573478960944501 2 ((14141029756711628227503662527197458167483, 1)::nil)) :: (Ell_certif 14141029756711628227503662527197458167483 26388 ((535888652293149470489913845512843609,1)::nil) 0 221184 48 576) :: (Ell_certif 535888652293149470489913845512843609 10323 ((51912104261663224789235545386673,1)::nil) 0 78608 17 289) :: (Ell_certif 51912104261663224789235545386673 27723 ((1872528379384021901247615979,1)::nil) 0 6912 24 144) :: (Ell_certif 1872528379384021901247615979 5100459636 ((367129339906403587,1)::nil) 0 2058 7 49) :: (Ell_certif 367129339906403587 5124 ((71648973667753,1)::nil) 0 75449 38 361) :: (Proof_certif 71648973667753 prime71648973667753) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t225/prime9.v000066400000000000000000000464431451023060700215560ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime891445070617 : prime 891445070617. Proof. apply (Pocklington_refl (Pock_certif 891445070617 5 ((863803363, 1)::(2,3)::nil) 1) ((Pock_certif 863803363 3 ((149, 1)::(3, 1)::(2,1)::nil) 699) :: (Proof_certif 149 prime149) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890473: prime 901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890473. apply (Pocklington_refl (Ell_certif 901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890473 13451246 ((67000080727846584382518344075998701872517246614684543896207005747613856004377348314969905308492207182154237368714683851496743408374492545733877407066080900941474775056743419366504176969149966922494999787935912600348451,1)::nil) 810141108169858094641706636831496670815929451545024255187996237364160092635468438700916789919111089009997874582422627643739816732941368387427228127027192376406007363277666193471999388874679105046640106414719602192192396062205 408302300030532455068000663129975153828646907328174107611497656512126223225931480672423928040759734270100710120659531524325762453839392576262373171332239323645702396528715649704319607572917228580091006512402110965546501874216 0 428781674017721263644785734209196007111623255920119510876721331543639820578505558505716736370961208052527036578516913122211962390741697334905032546698485717812204835135772732879448906540292854602278362238259217900134556647662) ( (Ell_certif 67000080727846584382518344075998701872517246614684543896207005747613856004377348314969905308492207182154237368714683851496743408374492545733877407066080900941474775056743419366504176969149966922494999787935912600348451 194 ((345361240865188579291331670494838669445965188735487339671170132719659051568955403685411883033464985475021842076808992680562230792627127867838725419917813970450433580174817971184157060095931559238112961595896698780053,1)::nil) 52348087637670968555979917744173899129623402129273694249998183678982236359035588342222770169069202103479841634229024582101443430787476272633253493838771752042015080446161574356663532628467876052344556960346823689484177 7668254353549890538612779958308065731877749647342389500828569069756208430676453915698931023604136735974869942583405037998492535567102302240110886737013557225906495181551234880313486322173341783039837528010565044847863 22714165794572886216158851675107728579900649096660562969205767192269604102790892212878207363356394757280328678229755923133525129364968838101323498761787354444324811618793218469440650531105374937614335137294159077687133 12211142029356490089919968007820312307440804226278213234656976191300968525963184325135113257212871200086334590409587731329947023795189416305116292265566796099907613032854579959603636944298057764498947563012440766859462) :: (Ell_certif 345361240865188579291331670494838669445965188735487339671170132719659051568955403685411883033464985475021842076808992680562230792627127867838725419917813970450433580174817971184157060095931559238112961595896698780053 182949430 ((1887741551669161140820890617122112211259500446300856688491295833606363526625665921371888849467664291028519972934972612077125137352864701671259858304665654156816805499043307774642392541328960187313600387905077,1)::nil) 332659334432309548274036093105736344046463784544030436725708934110198153317527995904501960676893070360612972009054137142610732382039890646037799519409850040778776327243568518440230498825727306361443479892973519536569 109091083884721942703695788123290492816160580271489125887934694805753387147102865216160521459369233045840815754704742688228421885264242270946832965290709360188004198989742276435021211266055238520582704279447359343556 0 246832259531112369159629851447954041669285421098496208868606620087232121924730880429390090512959679365222124976649842807344992299935959394853078363125598359042446640731233738887021241214537561102704584589745052180218) :: (Ell_certif 1887741551669161140820890617122112211259500446300856688491295833606363526625665921371888849467664291028519972934972612077125137352864701671259858304665654156816805499043307774642392541328960187313600387905077 2270860910361 ((831288936744728163318485124729254809900373625228689946397350581439582738128147422691611539465000753957111850380919301801277495717163620313401040678362785948646659359919398546199679617942475638053,1)::nil) 0 78608 17 289) :: (Ell_certif 831288936744728163318485124729254809900373625228689946397350581439582738128147422691611539465000753957111850380919301801277495717163620313401040678362785948646659359919398546199679617942475638053 116644 ((7126718363093928220212656670975402162994870076717961887429705612286810621447716322242134524407605760685111868132184420749305136871144887126751854513683879948463443215829622089853081889368783,1)::nil) 0 54 3 9) :: (Ell_certif 7126718363093928220212656670975402162994870076717961887429705612286810621447716322242134524407605760685111868132184420749305136871144887126751854513683879948463443215829622089853081889368783 2829356 ((2518848233694850778838950160734599026419747135644281556449490842540426380224940347641701689150276401374288489939229527793530185183251904290518219460496320075592853958733600697104768919,1)::nil) 2310905306072005747312507238060884285116061719307207527436434202411313779975323300376535548817014821522137604403731618793520903815658124168240307743619658144785877216921310203481896493277629 5552502172928545706057119089519559207490943872566180553160557889967278908304497209729191684889899225493105351953863626504124952682566303851682804214360409680350484868834527360067013658118981 0 2571752742366881013071689564447843401880698676493776059737023871758551546497360171366714330779393042879944371341318696614540504192664083911913828955608036903605307406258138445361682660019176) :: (SPock_certif 2518848233694850778838950160734599026419747135644281556449490842540426380224940347641701689150276401374288489939229527793530185183251904290518219460496320075592853958733600697104768919 2 ((2277439632635488950125633056722060602549500122644015873824132769023893653006275178699549447694644124208217441174710242127965809388112029195766925371153996451711441192345027755067603, 1)::nil)) :: (Ell_certif 2277439632635488950125633056722060602549500122644015873824132769023893653006275178699549447694644124208217441174710242127965809388112029195766925371153996451711441192345027755067603 58804295 ((38729137601862057016849416470719708527234279785924070237116740690860993282995318262034251915592857558021510890990006357272361323346664536035907488964126571436094746066179553,1)::nil) 303705254088008585278595830855008035858200146221790330624635867801283775173468330441235891376690781916431896475975007412382037854362824968158808825706874379823710782127790390012512 1064788279126819771602456962320005546355838225267232441786409163692448292614611124417036275129155471260729399386129559632479804740359801414423056852863339288750007983649933332009711 750794074306996821129641205989081831535825292122532241733509769715595161722936322843107899484949065079802599138210085010326297621257809010795500975476793951386597286762342466327328 334338904260690494424301013400025603522275145553812642572968737267651431426062365519411831684763409164770218089751689550656999807173494145313294371763384911346403884482088390795775) :: (Ell_certif 38729137601862057016849416470719708527234279785924070237116740690860993282995318262034251915592857558021510890990006357272361323346664536035907488964126571436094746066179553 504 ((76843526987821541700098048553015294696893412273658869518088771212025780323403409250067210994652598796024002605444764929132876624747736035952852051963707166728243309656221,1)::nil) 2886679139350815215294467799080955875870198468701743045826610103613675010397031018210977900763768168340549311964986377905040017498655282073345626188630733293149370199484243 3212788881735250356110495384761928056074774887248986670968578031670205407760681627881506244060001189114155262055652948749726568075293004135103240854314373769865782011905477 0 19635514996215212345207595951730422692415761314745169285250125093125771571834423284229909643412855612855810652693952779701659712720465460726178639865476755127537855453730843) :: (Ell_certif 76843526987821541700098048553015294696893412273658869518088771212025780323403409250067210994652598796024002605444764929132876624747736035952852051963707166728243309656221 2376 ((32341551762551153914182680367430679586234601125277301985727597311458661752274162142289523919721101850371952715774917680716510698390226362775273775254068924169686800229,1)::nil) 55353829443182964241074190941685563979642378249403905402898238747548765704969463163452741047037886670014181398239203965330397250433369417000182425819909243571035708201638 7389844080123134631107092527841075018475237469299892876206136189100709968100845540699311118356138713994056963414300533361878134640413382399564727535859820190861850193150 64112883980108394988493557781031615739000590596299863574924118659700095513208498489287070669451753599796415299067040212142046484978662541015529950134675011462428184211678 38524156601433364466084693624905007557309444045711058621470282616816943616304167443306879123293120851796851728432822201978084186848750969703571175651086579535189010669283) :: (Ell_certif 32341551762551153914182680367430679586234601125277301985727597311458661752274162142289523919721101850371952715774917680716510698390226362775273775254068924169686800229 72654 ((445144820141370797398390733716391108352390799202759682684058652124572105490050955799018895280247048721678005166969685133457845638445563354866131961503823967970481,1)::nil) 13323870172331468721295543420143245594173445137133292446573517440187165826347453343415101732932394792087490447787642810890946764176347006223177265249984842473126813614 23099326500298258804306430885008831689145948953839095746287480674074236685573898275795483441671771913139702196601050580346809581824507276200092660515586474790671397881 0 11119192240178252422890863564814176374497871435449841769118412590102549244324071835393896304898496063066392662200167424227644110582785879281607932578174214059359915720) :: (Ell_certif 445144820141370797398390733716391108352390799202759682684058652124572105490050955799018895280247048721678005166969685133457845638445563354866131961503823967970481 42490 ((10476460817636403798502959136653120930863516102677328375713312594129727123795033113719479845258288166712816845537718779486472067932860265155321495000066767529,1)::nil) 303066500977306189896918832968291253653940191396605613783526049483078388159119011167251033853858326044892710708737593439863406779567119355268494727507182646415325 80799066802832347825158341267785221745097704904286374419329115311253426439893745605430560517538216369366899372735719471960361265607441183383728359978762064016730 74421769917043963071312563152467412451737608957952941370210683934585259085695661916993617182196368061805032575470885037518511198497031468651434892638514281773725 66169154540642274082517100378842039284328120918413087766602781254358715874832805501475468188648532755892645289883608561050375338337728865728042379153681091330128) :: (Ell_certif 10476460817636403798502959136653120930863516102677328375713312594129727123795033113719479845258288166712816845537718779486472067932860265155321495000066767529 23820784 ((439803359017755410506344339323723389241240594880392197658704793013098440580084781978065980610392403581356484992504381627726270656320608352620097509373,1)::nil) 7917382845029026067737412707526123595874627649217485729008992025149192199920736132536062314398442275976475759599199478761077426684974275991799230296772359569 5412875194476498240815920469638108113299720950493746540553630965165174420937075120519181055645255874807651755741581473637870825212285835699664705031452148253 10475474442873629187672722020238808374058872977664823546628119756887066021173100913642278253215714884397617888606657189662337926429817229973502337884947464230 4058935099438908150786407409580862119954283079611036355657592911284180474910711540180653529076193151983874087645561542057525501267450293972489888570334560408) :: (Ell_certif 439803359017755410506344339323723389241240594880392197658704793013098440580084781978065980610392403581356484992504381627726270656320608352620097509373 29777715420 ((14769546716883608746179102927424087433274308418398881913241979428289480260582955982465505974587561739257141577625031772975003399917700524997,1)::nil) 122434961673355061743247694043416901725687948345106901938375973812713639692243622745056334640919937247600525330515295134065686351301995131694917680423 362394730639829330299484115717674717443226318355360124279981874983392520148147090801093322677070109687516998501925044809754919384825349507265691514315 426750318039048956970233823774235664939684026761333717096889233018825002764537581835482353529775883375150272484029587413711887705689865744701401357828 188271274187629999481052413507805527335703773671447360610055762488906258473668964261236421210805644448146609177513247240899049083267779245267354898543) :: (Ell_certif 14769546716883608746179102927424087433274308418398881913241979428289480260582955982465505974587561739257141577625031772975003399917700524997 96579 ((152927103375305281129221703759865886303174690340538646219592037899434393903263934311827148253642863379574758383712104332459878665888293,1)::nil) 10709453415227261842899557513903242112529534843332034470516986074655698012122044419168604535863000407623849668553075579753587346551531310206 3723043677608501721050236803468569786387552509541358201280578919897320008296977318430673891749364553850691835716298104067714072200060842754 0 7428825537769521846298263357048659846384059174252423779648787740446595259924935578217878860324360073200257942366458006879395528266535251475) :: (Ell_certif 152927103375305281129221703759865886303174690340538646219592037899434393903263934311827148253642863379574758383712104332459878665888293 5042091313 ((30330093979260958523069434097705299987924810186899256225269404973082111110183458887714761835603375486768668768624640271697679,1)::nil) 0 54 3 9) :: (Ell_certif 30330093979260958523069434097705299987924810186899256225269404973082111110183458887714761835603375486768668768624640271697679 129 ((235117007591170221109065380602366666573060544084490358335421744123518039433465495318028392787194902735377674086893555580937,1)::nil) 0 35672 14 196) :: (Ell_certif 235117007591170221109065380602366666573060544084490358335421744123518039433465495318028392787194902735377674086893555580937 1073904691317 ((218936568107203965104089226540468088671131579939938680735738776646504305723031974088229255317661447463465454233,1)::nil) 1497782693449659638192538905256013751731081943917938477938576599965955011815140625791482478872950716689824401270533507412 123127034595184806855598248670326327713492333634477468505903801161052718151462942688180840396163667166974467785426368178453 0 37810160697139431669970958643140301935105470887748153899131948698239647479854415701270983076710567161221319919857580701196) :: (Ell_certif 218936568107203965104089226540468088671131579939938680735738776646504305723031974088229255317661447463465454233 3152 ((69459571100001257964495312988727185492110272823584606840025090640375347603030245169045772469127131950835543,1)::nil) 58610880175913295200561261559504896466564937652322137158530407681601783534592014053628814414223404037829269924 208580644218223478142422294583029851158442318415191007016985992077895808020371394361108924929795106870636944174 0 168245070773139817967158905049695381377928720567138058742466809426803287989243731851308416121725832557084991329) :: (Ell_certif 69459571100001257964495312988727185492110272823584606840025090640375347603030245169045772469127131950835543 52619636 ((1320031387142268676364376845722140409563271642996249665700536563228584120452594112078445104055923969,1)::nil) 4873299745396626875435490272419207256746728921906866398135882182361223884265666973024622582014645822604287 45616689073447878367790319072640734738128365225531430804768212091455395150866971139520745801575577096232588 26322518054753246339759733695218041668543077021718706150465333201612273874809752412730267670618017458156884 14019276926082175452455416067852885801151359398308829838680452156939214344233090250761772191662704938320253) :: (Ell_certif 1320031387142268676364376845722140409563271642996249665700536563228584120452594112078445104055923969 1547487 ((853016139807487026620822563111767924100991893952051581175166025136447989672538835928334970433,1)::nil) 0 78608 17 289) :: (Ell_certif 853016139807487026620822563111767924100991893952051581175166025136447989672538835928334970433 98640819560533 ((8647699234534602065595567119908928368458503459416121068043021371590102565452943,1)::nil) 0 3584 8 64) :: (Ell_certif 8647699234534602065595567119908928368458503459416121068043021371590102565452943 32236980336 ((268254009662234328993746702638089432759021647863656957668885043992837,1)::nil) 8647699234534602065595567119908928368458503459416121068043021371590102565116803 92236816 0 9604) :: (Ell_certif 268254009662234328993746702638089432759021647863656957668885043992837 416885 ((643472443628900845541928115998631379321899409957550930551288783,1)::nil) 268254009662234328993746702638089432759021647863656957668885016408485 55816936272 852 181476) :: (Ell_certif 643472443628900845541928115998631379321899409957550930551288783 2844782 ((226193938104536954164476615782386221462508111822976652797,1)::nil) 468768513161699788222035781001132770612325795596688733951861228 407074190365367496160403300778397927323419238690121870499989947 198184674973918711864477271090568949640981331038937440820023723 515595241441593481010822166417884336358362338739759204374012996) :: (Ell_certif 226193938104536954164476615782386221462508111822976652797 200 ((1130969690522684770822383078838884595278579219303350009,1)::nil) 226193938104536954164476615782386221462508111822976652761 0 12 36) :: (SPock_certif 1130969690522684770822383078838884595278579219303350009 2 ((20195887330762228050399697836408653487117486058988393, 1)::nil)) :: (SPock_certif 20195887330762228050399697836408653487117486058988393 2 ((2524485916345278506299962229551081685889685757373549, 1)::nil)) :: (Ell_certif 2524485916345278506299962229551081685889685757373549 44690740 ((56487896963560650512834697959233540684119401,1)::nil) 900 0 90 900) :: (Ell_certif 56487896963560650512834697959233540684119401 485472078800 ((116356633945228346081428314119953,1)::nil) 100 0 20 100) :: (SPock_certif 116356633945228346081428314119953 2 ((372193542227174964434682923, 1)::nil)) :: (SPock_certif 372193542227174964434682923 2 ((26585253016226783173905923, 1)::nil)) :: (Ell_certif 26585253016226783173905923 66236 ((401371656142144080221,1)::nil) 6876326989629778975071185 17924262367927954731620448 0 4777715744119420285183966) :: (Ell_certif 401371656142144080221 450248332 ((891445070617,1)::nil) 54173768213920602285 196860903724996508671 0 311498573108150449556) :: (Proof_certif 891445070617 prime891445070617) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t25/000077500000000000000000000000001451023060700200655ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/examples/t25/.depend000066400000000000000000000034761451023060700213370ustar00rootroot00000000000000prime1234567890123456789012353.vo: prime1234567890123456789012353.v prime1234567890123456789012353.vi: prime1234567890123456789012353.v prime2345678901234567890123567.vo: prime2345678901234567890123567.v prime2345678901234567890123567.vi: prime2345678901234567890123567.v prime3456789012345678901234573.vo: prime3456789012345678901234573.v prime3456789012345678901234573.vi: prime3456789012345678901234573.v prime4567890123456789012345689.vo: prime4567890123456789012345689.v prime4567890123456789012345689.vi: prime4567890123456789012345689.v prime5678901234567890123456797.vo: prime5678901234567890123456797.v prime5678901234567890123456797.vi: prime5678901234567890123456797.v prime6789012345678901234567903.vo: prime6789012345678901234567903.v prime6789012345678901234567903.vi: prime6789012345678901234567903.v prime7890123456789012345678973.vo: prime7890123456789012345678973.v prime7890123456789012345678973.vi: prime7890123456789012345678973.v prime8901234567890123456789017.vo: prime8901234567890123456789017.v prime8901234567890123456789017.vi: prime8901234567890123456789017.v prime9012345678901234567890149.vo: prime9012345678901234567890149.v prime9012345678901234567890149.vi: prime9012345678901234567890149.v prime1234567890123456789012353.html: prime1234567890123456789012353.v prime2345678901234567890123567.html: prime2345678901234567890123567.v prime3456789012345678901234573.html: prime3456789012345678901234573.v prime4567890123456789012345689.html: prime4567890123456789012345689.v prime5678901234567890123456797.html: prime5678901234567890123456797.v prime6789012345678901234567903.html: prime6789012345678901234567903.v prime7890123456789012345678973.html: prime7890123456789012345678973.v prime8901234567890123456789017.html: prime8901234567890123456789017.v prime9012345678901234567890149.html: prime9012345678901234567890149.v coqprime-8.18/src/Coqprime/examples/t25/Makefile000066400000000000000000000003741451023060700215310ustar00rootroot00000000000000ifeq "$(COQBIN)" "" COQBIN=$(dir $(shell which coqtop))/ endif %: Makefile.coq Makefile.coq: _CoqProject $(COQBIN)coq_makefile -f _CoqProject -o Makefile.coq tests: all @$(MAKE) -C tests -s clean @$(MAKE) -C tests -s all -include Makefile.coq coqprime-8.18/src/Coqprime/examples/t25/Makefile.bak000066400000000000000000000134471451023060700222720ustar00rootroot00000000000000############################################################################# ## v # The Coq Proof Assistant ## ## $@ -include Makefile-localvars.gen .SECONDARY: Makefile-localvars.gen ########################## # # # Libraries definitions. # # # ########################## OCAMLLIBS?=-I .\ -I ..\ -I ../../Tactic\ -I ../../N\ -I ../../Z\ -I ../../PrimalityTest\ -I ../../List\ -I ../../elliptic\ -I ../../num COQSRCLIBS?=-I $(COQLIB)kernel -I $(COQLIB)lib \ -I $(COQLIB)library -I $(COQLIB)parsing \ -I $(COQLIB)pretyping -I $(COQLIB)interp \ -I $(COQLIB)proofs -I $(COQLIB)tactics \ -I $(COQLIB)toplevel \ -I $(COQLIB)plugins/cc \ -I $(COQLIB)plugins/decl_mode \ -I $(COQLIB)plugins/dp \ -I $(COQLIB)plugins/extraction \ -I $(COQLIB)plugins/field \ -I $(COQLIB)plugins/firstorder \ -I $(COQLIB)plugins/fourier \ -I $(COQLIB)plugins/funind \ -I $(COQLIB)plugins/micromega \ -I $(COQLIB)plugins/nsatz \ -I $(COQLIB)plugins/omega \ -I $(COQLIB)plugins/quote \ -I $(COQLIB)plugins/ring \ -I $(COQLIB)plugins/romega \ -I $(COQLIB)plugins/rtauto \ -I $(COQLIB)plugins/setoid_ring \ -I $(COQLIB)plugins/subtac \ -I $(COQLIB)plugins/subtac/test \ -I $(COQLIB)plugins/syntax \ -I $(COQLIB)plugins/xml COQLIBS?=-I .\ -I ..\ -I ../../Tactic\ -I ../../N\ -I ../../Z\ -I ../../PrimalityTest\ -I ../../List\ -I ../../elliptic\ -I ../../num COQDOCLIBS?= ########################## # # # Variables definitions. # # # ########################## ZFLAGS=$(OCAMLLIBS) $(COQSRCLIBS) -I $(CAMLP4LIB) OPT?= COQFLAGS?=-q $(OPT) $(COQLIBS) $(OTHERFLAGS) $(COQ_XML) COQC?=$(COQBIN)coqc COQDEP?=$(COQBIN)coqdep -c GALLINA?=$(COQBIN)gallina COQDOC?=$(COQBIN)coqdoc CAMLC?=$(OCAMLC) -c -rectypes CAMLOPTC?=$(OCAMLOPT) -c -rectypes CAMLLINK?=$(OCAMLC) -rectypes CAMLOPTLINK?=$(OCAMLOPT) -rectypes GRAMMARS?=grammar.cma CAMLP4EXTEND?=pa_extend.cmo pa_macro.cmo q_MLast.cmo CAMLP4OPTIONS?= PP?=-pp "$(CAMLP4BIN)$(CAMLP4)o -I $(CAMLLIB) -I . $(COQSRCLIBS) $(CAMLP4EXTEND) $(GRAMMARS) $(CAMLP4OPTIONS) -impl" ################################### # # # Definition of the "all" target. # # # ################################### VFILES:=prime1.v\ prime2.v\ prime3.v\ prime4.v\ prime5.v\ prime6.v\ prime7.v\ prime8.v\ prime9.v VOFILES:=$(VFILES:.v=.vo) VOFILES0:=$(filter-out ,$(VOFILES)) GLOBFILES:=$(VFILES:.v=.glob) VIFILES:=$(VFILES:.v=.vi) GFILES:=$(VFILES:.v=.g) HTMLFILES:=$(VFILES:.v=.html) GHTMLFILES:=$(VFILES:.v=.g.html) all: $(VOFILES) res spec: $(VIFILES) gallina: $(GFILES) html: $(GLOBFILES) $(VFILES) - mkdir -p html $(COQDOC) -toc -html $(COQDOCLIBS) -d html $(VFILES) gallinahtml: $(GLOBFILES) $(VFILES) - mkdir -p html $(COQDOC) -toc -html -g $(COQDOCLIBS) -d html $(VFILES) all.ps: $(VFILES) $(COQDOC) -toc -ps $(COQDOCLIBS) -o $@ `$(COQDEP) -sort -suffix .v $(VFILES)` all-gal.ps: $(VFILES) $(COQDOC) -toc -ps -g $(COQDOCLIBS) -o $@ `$(COQDEP) -sort -suffix .v $(VFILES)` all.pdf: $(VFILES) $(COQDOC) -toc -pdf $(COQDOCLIBS) -o $@ `$(COQDEP) -sort -suffix .v $(VFILES)` all-gal.pdf: $(VFILES) $(COQDOC) -toc -pdf -g $(COQDOCLIBS) -o $@ `$(COQDEP) -sort -suffix .v $(VFILES)` ################### # # # Custom targets. # # # ################### res: make clean; make -s all > res #################### # # # Special targets. # # # #################### .PHONY: NOARG all opt byte archclean clean install depend html %.vo %.glob: %.v $(COQC) $(COQDEBUG) $(COQFLAGS) $* %.vi: %.v $(COQC) -i $(COQDEBUG) $(COQFLAGS) $* %.g: %.v $(GALLINA) $< %.tex: %.v $(COQDOC) -latex $< -o $@ %.html: %.v %.glob $(COQDOC) -html $< -o $@ %.g.tex: %.v $(COQDOC) -latex -g $< -o $@ %.g.html: %.v %.glob $(COQDOC) -html -g $< -o $@ %.v.d: %.v $(COQDEP) -slash $(COQLIBS) "$<" > "$@" || ( RV=$$?; rm -f "$@"; exit $${RV} ) byte: $(MAKE) all "OPT:=-byte" opt: $(MAKE) all "OPT:=-opt" install: for i in $(VOFILES0); do \ install -d `dirname $(DSTROOT)$(COQLIB)user-contrib/$(INSTALLDEFAULTROOT)/$$i`; \ install $$i $(DSTROOT)$(COQLIB)user-contrib/$(INSTALLDEFAULTROOT)/$$i; \ done install-doc: install -d $(DSTROOT)$(DOCDIR)user-contrib/$(INSTALLDEFAULTROOT)/html for i in html/*; do \ install $$i $(DSTROOT)$(DOCDIR)user-contrib/$(INSTALLDEFAULTROOT)/$$i;\ done clean: rm -f *~ Makefile-localvars.gen rm -f $(VOFILES) $(VIFILES) $(GFILES) $(VFILES:.v=.v.d) rm -f all.ps all-gal.ps all.pdf all-gal.pdf all.glob $(VFILES:.v=.glob) $(VFILES:.v=.tex) $(VFILES:.v=.g.tex) all-mli.tex - rm -rf html mlihtml - rm -rf res archclean: rm -f *.cmx *.o printenv: Makefile-localvars.gen @cat $^ @echo CAMLC = $(CAMLC) @echo CAMLOPTC = $(CAMLOPTC) @echo PP = $(PP) @echo COQFLAGS = $(COQFLAGS) Makefile: Make mv -f $@ $@.bak $(COQBIN)coq_makefile -f $< -o $@ -include $(VFILES:.v=.v.d) .SECONDARY: $(VFILES:.v=.v.d) # WARNING # # This Makefile has been automagically generated # Edit at your own risks ! # # END OF WARNING coqprime-8.18/src/Coqprime/examples/t25/Makefile.coq.local000066400000000000000000000000461451023060700233770ustar00rootroot00000000000000 res : make clean; make -s all > res coqprime-8.18/src/Coqprime/examples/t25/_CoqProject000066400000000000000000000001611451023060700222160ustar00rootroot00000000000000-R ../../../Coqprime Coqprime prime1.v prime2.v prime3.v prime4.v prime5.v prime6.v prime7.v prime8.v prime9.v coqprime-8.18/src/Coqprime/examples/t25/prime1.v000066400000000000000000000013141451023060700214500ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime2166990353233 : prime 2166990353233. Proof. apply (Pocklington_refl (Pock_certif 2166990353233 5 ((2383, 1)::(2,4)::nil) 23898) ((Proof_certif 2383 prime2383) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime1234567890123456789012353: prime 1234567890123456789012353. apply (Pocklington_refl (SPock_certif 1234567890123456789012353 2 ((14246767565124824467, 1)::nil)) ( (Ell_certif 14246767565124824467 6574449 ((2166990353233,1)::nil) 0 2058 7 49) :: (Proof_certif 2166990353233 prime2166990353233) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t25/prime2.v000066400000000000000000000014661451023060700214610ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime5846725286581 : prime 5846725286581. Proof. apply (Pocklington_refl (Pock_certif 5846725286581 2 ((10267, 1)::(2,2)::nil) 25246) ((Proof_certif 10267 prime10267) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime2345678901234567890123567: prime 2345678901234567890123567. apply (Pocklington_refl (Ell_certif 2345678901234567890123567 77361229 ((30321117329139797,1)::nil) 2345678901215618787857727 31749105730618655022 74219 5508459961) ( (Ell_certif 30321117329139797 5186 ((5846725286581,1)::nil) 11370418998427425 0 15160558664569900 22740837996854850) :: (Proof_certif 5846725286581 prime5846725286581) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t25/prime3.v000066400000000000000000000014141451023060700214530ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime793415879 : prime 793415879. Proof. apply (Pocklington_refl (Pock_certif 793415879 7 ((396707939, 1)::(2,1)::nil) 1) ((Pock_certif 396707939 2 ((43, 1)::(11, 1)::(2,1)::nil) 1220) :: (Proof_certif 43 prime43) :: (Proof_certif 11 prime11) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime3456789012345678901234573: prime 3456789012345678901234573. apply (Pocklington_refl (SPock_certif 3456789012345678901234573 2 ((52460968938504569, 1)::nil)) ( (SPock_certif 52460968938504569 2 ((793415879, 1)::nil)) :: (Proof_certif 793415879 prime793415879) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t25/prime4.v000066400000000000000000000016211451023060700214540ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime174550993 : prime 174550993. Proof. apply (Pocklington_refl (Pock_certif 174550993 5 ((11, 1)::(3, 1)::(2,4)::nil) 34) ((Proof_certif 11 prime11) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime4567890123456789012345689: prime 4567890123456789012345689. apply (Pocklington_refl (SPock_certif 4567890123456789012345689 2 ((570986265432098626543211, 1)::nil)) ( (Ell_certif 570986265432098626543211 4566 ((125051744509636077691,1)::nil) 570986265432098626449131 9834496 0 3136) :: (Ell_certif 125051744509636077691 138775 ((901111472016823,1)::nil) 0 192 4 16) :: (SPock_certif 901111472016823 2 ((174550993, 1)::nil)) :: (Proof_certif 174550993 prime174550993) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t25/prime5.v000066400000000000000000000013131451023060700214530ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime7376765261 : prime 7376765261. Proof. apply (Pocklington_refl (Pock_certif 7376765261 2 ((461, 1)::(2,2)::nil) 2621) ((Proof_certif 461 prime461) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime5678901234567890123456797: prime 5678901234567890123456797. apply (Pocklington_refl (Ell_certif 5678901234567890123456797 4116859400 ((1379425596745957,1)::nil) 5678901234567890123442397 0 600 14400) ( (SPock_certif 1379425596745957 2 ((7376765261, 1)::nil)) :: (Proof_certif 7376765261 prime7376765261) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t25/prime6.v000066400000000000000000000011731451023060700214600ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime14139308836963 : prime 14139308836963. Proof. apply (Pocklington_refl (Pock_certif 14139308836963 2 ((10607, 1)::(2,1)::nil) 6921) ((Proof_certif 10607 prime10607) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime6789012345678901234567903: prime 6789012345678901234567903. apply (Pocklington_refl (SPock_certif 6789012345678901234567903 2 ((14139308836963, 1)::nil)) ( (Proof_certif 14139308836963 prime14139308836963) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t25/prime7.v000066400000000000000000000012751451023060700214640ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime439901929 : prime 439901929. Proof. apply (Pocklington_refl (Pock_certif 439901929 7 ((3, 4)::(2,3)::nil) 1051) ((Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime7890123456789012345678973: prime 7890123456789012345678973. apply (Pocklington_refl (Ell_certif 7890123456789012345678973 6605516421 ((1194474883403587,1)::nil) 0 1272112 129 1849) ( (Ell_certif 1194474883403587 2715321 ((439901929,1)::nil) 0 9000 10 100) :: (Proof_certif 439901929 prime439901929) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t25/prime8.v000066400000000000000000000017101451023060700214570ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime142948719999101 : prime 142948719999101. Proof. apply (Pocklington_refl (Pock_certif 142948719999101 2 ((7256280203, 1)::(2,2)::nil) 1) ((Pock_certif 7256280203 2 ((33285689, 1)::(2,1)::nil) 1) :: (Pock_certif 33285689 3 ((4160711, 1)::(2,3)::nil) 1) :: (Pock_certif 4160711 7 ((416071, 1)::(2,1)::nil) 1) :: (Pock_certif 416071 13 ((3, 3)::(2,1)::nil) 28) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime8901234567890123456789017: prime 8901234567890123456789017. apply (Pocklington_refl (SPock_certif 8901234567890123456789017 2 ((11521380934487542399, 1)::nil)) ( (SPock_certif 11521380934487542399 2 ((142948719999101, 1)::nil)) :: (Proof_certif 142948719999101 prime142948719999101) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t25/prime9.v000066400000000000000000000016211451023060700214610ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime621072748687 : prime 621072748687. Proof. apply (Pocklington_refl (Pock_certif 621072748687 3 ((7962471137, 1)::(2,1)::nil) 1) ((Pock_certif 7962471137 3 ((248827223, 1)::(2,5)::nil) 1) :: (Pock_certif 248827223 5 ((601, 1)::(2,1)::nil) 265) :: (Proof_certif 601 prime601) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime9012345678901234567890149: prime 9012345678901234567890149. apply (Pocklington_refl (SPock_certif 9012345678901234567890149 2 ((28519720253228549537, 1)::nil)) ( (Ell_certif 28519720253228549537 5204 ((5480345934414089,1)::nil) 10368 0 288 5184) :: (SPock_certif 5480345934414089 2 ((621072748687, 1)::nil)) :: (Proof_certif 621072748687 prime621072748687) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t25/res000066400000000000000000000006621451023060700206050ustar00rootroot00000000000000Finished transaction in 0. secs (0.043994u,0.s) Finished transaction in 0. secs (0.099984u,0.001s) Finished transaction in 0. secs (0.007998u,0.s) Finished transaction in 0. secs (0.118982u,0.s) Finished transaction in 1. secs (0.077988u,0.s) Finished transaction in 0. secs (0.006999u,0.s) Finished transaction in 0. secs (0.06499u,0.s) Finished transaction in 0. secs (0.009998u,0.s) Finished transaction in 0. secs (0.051992u,0.s) coqprime-8.18/src/Coqprime/examples/t250/000077500000000000000000000000001451023060700201455ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/examples/t250/.depend000066400000000000000000000022221451023060700214030ustar00rootroot00000000000000prime1.vo: prime1.v ../PocklingtonRefl.vo prime1.vi: prime1.v ../PocklingtonRefl.vo prime2.vo: prime2.v ../PocklingtonRefl.vo prime2.vi: prime2.v ../PocklingtonRefl.vo prime3.vo: prime3.v ../PocklingtonRefl.vo prime3.vi: prime3.v ../PocklingtonRefl.vo prime4.vo: prime4.v ../PocklingtonRefl.vo prime4.vi: prime4.v ../PocklingtonRefl.vo prime5.vo: prime5.v ../PocklingtonRefl.vo prime5.vi: prime5.v ../PocklingtonRefl.vo prime6.vo: prime6.v ../PocklingtonRefl.vo prime6.vi: prime6.v ../PocklingtonRefl.vo prime7.vo: prime7.v ../PocklingtonRefl.vo prime7.vi: prime7.v ../PocklingtonRefl.vo prime8.vo: prime8.v ../PocklingtonRefl.vo prime8.vi: prime8.v ../PocklingtonRefl.vo prime9.vo: prime9.v ../PocklingtonRefl.vo prime9.vi: prime9.v ../PocklingtonRefl.vo prime1.html: prime1.v ../PocklingtonRefl.html prime2.html: prime2.v ../PocklingtonRefl.html prime3.html: prime3.v ../PocklingtonRefl.html prime4.html: prime4.v ../PocklingtonRefl.html prime5.html: prime5.v ../PocklingtonRefl.html prime6.html: prime6.v ../PocklingtonRefl.html prime7.html: prime7.v ../PocklingtonRefl.html prime8.html: prime8.v ../PocklingtonRefl.html prime9.html: prime9.v ../PocklingtonRefl.html coqprime-8.18/src/Coqprime/examples/t250/Makefile000066400000000000000000000003741451023060700216110ustar00rootroot00000000000000ifeq "$(COQBIN)" "" COQBIN=$(dir $(shell which coqtop))/ endif %: Makefile.coq Makefile.coq: _CoqProject $(COQBIN)coq_makefile -f _CoqProject -o Makefile.coq tests: all @$(MAKE) -C tests -s clean @$(MAKE) -C tests -s all -include Makefile.coq coqprime-8.18/src/Coqprime/examples/t250/Makefile.coq.local000066400000000000000000000000461451023060700234570ustar00rootroot00000000000000 res : make clean; make -s all > res coqprime-8.18/src/Coqprime/examples/t250/_CoqProject000066400000000000000000000001611451023060700222760ustar00rootroot00000000000000-R ../../../Coqprime Coqprime prime1.v prime2.v prime3.v prime4.v prime5.v prime6.v prime7.v prime8.v prime9.v coqprime-8.18/src/Coqprime/examples/t250/prime1.v000066400000000000000000000470541451023060700215430ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime35087649527771 : prime 35087649527771. Proof. apply (Pocklington_refl (Pock_certif 35087649527771 2 ((193, 1)::(71, 1)::(2,1)::nil) 46909) ((Proof_certif 193 prime193) :: (Proof_certif 71 prime71) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234568219: prime 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234568219. apply (Pocklington_refl (Ell_certif 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234568219 3260527 ((378640597094720205970490561464829019324214599906399286274550474376654486669421542083742567147754915117542896903582052502934190672644115621752325410285014656310775236917165506022811597373721904786441029945415339613261465934659447598019366683133,1)::nil) 259394229653949899065296741347828506062619349712027606821620659930091806397006392734595572226683450403604647986583961943938222066975978773726992417626513159926922111078561266198094092533154772638146918956254564067274742873233629350396260115880262607 1071953316887806904293115250343911139441695215127401244387212739796941734109205378337400226017122657170526180104367456164547294065932655760870453675713535129662838240856036601272620151292407405377322637515628742529744708753707787852241400231054819363 828568683120363139692162910784859200061680724646484662611228855724055432131896368036995703652569428396606891541403573344794218082308386532606057742451344237922319018355839578618176186946571435560007566336913007494667562045991915219680046562098406400 390854027486094192057350961063755320019514773184232881111327430538331923145508496931598884352842804981724201380054349045502182398433392726726261565845973976472461569467632231105220913933372707204847997149330490988126955452150109127370447478938346609) ( (Ell_certif 378640597094720205970490561464829019324214599906399286274550474376654486669421542083742567147754915117542896903582052502934190672644115621752325410285014656310775236917165506022811597373721904786441029945415339613261465934659447598019366683133 191953987 ((1972559169061282410198078154348672212389183663616214891512258478781451341614600284826293121735236034026961351438780234884673336027360745307622967345366208032764220649377451298455401015555941743995058609625784444136680275753983494403317,1)::nil) 352139517293448052725441370800650236419676832827032125375830681282313600509328920523617297581292418176998593862215003997629003088451054328320238776684157180604174228907529549939881148872461846080490122153600741723344340671840829718164122641539 24942569988502887602869994055293131678920759405637786916791181951739706504728091201368605606089535622470887131808218631389034487940291541632879785811710897911689023557472240526063780405483752185212850735234351868498115162963285334739152004429 0 88123787745434494356975227713522659996169252109352302702840893582689994878340718361109580822083857271501300933620824082522773204663369163182331015806130298469036304366919672800696113858903416325030956692679438260453296757455392927372881744012) :: (Ell_certif 1972559169061282410198078154348672212389183663616214891512258478781451341614600284826293121735236034026961351438780234884673336027360745307622967345366208032764220649377451298455401015555941743995058609625784444136680275753983494403317 74160 ((26598694296942858821441183311066238031137859541750470489647498365445676127489216354184103583269094309964419517782904975017872279610714981960931501734205373504211215880788016020855051285766507323603689020447912415994199314422101703,1)::nil) 1972559169061282410198078154348672212389183663616214891512258478781451341614600284826293121735236034026961351438780234884673336027360745307622967345366208032764220649377451298455401015555941743995058609625784444136680275753982736819413 8234810772496 0 2869636) :: (Ell_certif 26598694296942858821441183311066238031137859541750470489647498365445676127489216354184103583269094309964419517782904975017872279610714981960931501734205373504211215880788016020855051285766507323603689020447912415994199314422101703 717102196398 ((37091915811369620082039289304330342460720038350550379887734226336307934058590804536965834891344680839896962947668787214012126865744511003094904938250437939293087805310494990432107651260273065184072730896764122981167487,1)::nil) 5190645735625295048658305108002627878776256957882764551006461156940026888638276726953045055402224439073604575588878425837052046768770320003051230300825488523673893195261769917509366076437665057400175099909666840170620047568700901 15816807672193736926178471484908371972108941163677442522296341777480059430705976534183655026262271724066865004602351880342408977818242874705241000574503430216914417555975694299723645769158239415928716928892694139610004914146644401 16059185815519927716188105672941923173143409660165015998695671659323680628900023300952588340245525547633707697344136262825148870297377297016369082018115437201967489435559304121851471228048261044493116637258856513100424182314408505 22327435904689951430881121617339177813556413579569198497305040621702717614324056581561906970432787312154084071904357933555720794908971628604810219421631064858791111875336167400491673763947311224340192033887233446913185706866908391) :: (Ell_certif 37091915811369620082039289304330342460720038350550379887734226336307934058590804536965834891344680839896962947668787214012126865744511003094904938250437939293087805310494990432107651260273065184072730896764122981167487 189664054436 ((195566397236783048446290619632899085352124958464843833808710609948842009466357227657034493383114344507573948278488776543625579823889219332327480116196240612692644015605431124551946463701686943583185587589771,1)::nil) 31006894169746587043633329210431684178946675398666690133774094055309255947284113845395765993984571278764077992584441518697812294291938898471119954031490009944704836532912458762553393772249312261939940253023287927116556 8976336761002910036628289670846088798942243887607297982487337291149294730141281078110100979097293636405293214183948003942925187479855452095411510843916623275741012683715821265104418573987921200193621222324707049617620 0 1995581507759949514310454707145643582350436763017994423241436292941291017508842697126442224977765892339134511708944914238928908356987265295463371346246700735467728901049763571620755752384598783379022157597689326020847) :: (Ell_certif 195566397236783048446290619632899085352124958464843833808710609948842009466357227657034493383114344507573948278488776543625579823889219332327480116196240612692644015605431124551946463701686943583185587589771 100 ((1955663972367830484462906196328990853521249584648438338087106099488420094663572276570344933831143445075604996898021386378848454570854658654988756358150807250199635985095436620451996191024504233314713939301,1)::nil) 157159603667014467418664266761420764261749306291111117141228995177768054579125912306328790406256524210756592325617245149596476165388057648918851103883326546097342804024822371113077082805629831289153200939818 184096355958850381063114930508141150418594583210055037521280397560632920284958020781091263501024530127666774709114051107427455233298866655524456958835833946666423759656983245382089075258868931137941526578840 0 57682103045997925197431783583640898842690069524912732772111623888391436877757687421287424267847657645728552470148596722203036836250868233646982210517614288232228952639981044429788389909804162052849549944404) :: (Ell_certif 1955663972367830484462906196328990853521249584648438338087106099488420094663572276570344933831143445075604996898021386378848454570854658654988756358150807250199635985095436620451996191024504233314713939301 34407 ((56839130768966503457520452126863453760027017311838821695791731318871743966738520550188767803968478654719117593690454179334818008477141472883872223945636084205033452332851657816702157314860796169865273,1)::nil) 1025458367208507503661518572525112969772987453552192216457709249295067131334144963121022962340445218367997150737809430687799726581662976624611216128523432921278020137005530431362206654256680278278379391391 1304150506841873321179925589034993460763507187030581356019162511037053391278900909534831398946866724839764224945400191794886935973846599631250736410941161276710273150828312603760956362165837184092771251686 1623325288196777085885045117176395864339982221587042338221735274382169051983378703064940431131474955526550601699018555506659681757725491691856378423189184762952844670951535564220159054672165539357477340501 1525611742019643229402843790724503631888092877002502780528119154087019880353551423252046618495178979813475299844814529164859871872693559073273841302014851973940097672239253925373596531423022265497913952661) :: (Ell_certif 56839130768966503457520452126863453760027017311838821695791731318871743966738520550188767803968478654719117593690454179334818008477141472883872223945636084205033452332851657816702157314860796169865273 2314887513760 ((24553733359010808273633915376734626704821963855042026470147446512905218914164385220139996943627766236652686370165731231081996603924610685694819186425091256742523550319976856304247254679057,1)::nil) 49284 0 1332 49284) :: (Ell_certif 24553733359010808273633915376734626704821963855042026470147446512905218914164385220139996943627766236652686370165731231081996603924610685694819186425091256742523550319976856304247254679057 4111807221775 ((5971518613270824193717477453353492634102508927816434235278490450553248059239598765768427522333821849124521062922603802175722443004612534419175255303130989502886698829389191473,1)::nil) 24553733359010808273633915376734626704821963855042026470147446512905218914164385220139996943627766236652686370165731231081996603924610685694819186425091256742523550319976856304247175443889 271737008656 0 521284) :: (Ell_certif 5971518613270824193717477453353492634102508927816434235278490450553248059239598765768427522333821849124521062922603802175722443004612534419175255303130989502886698829389191473 16259840 ((367255681068868094256614914621145880531574045489773222570362958710125564534435687298794498993152561554294281667087549213408375118380703225856744042126923567568593227681,1)::nil) 5971518613270824193717477453353492634102508927816434235278490450553248059239598765768427522333821849124521062922603802175722443004612534419175255303130989502886698828631607569 8234810772496 0 2869636) :: (Ell_certif 367255681068868094256614914621145880531574045489773222570362958710125564534435687298794498993152561554294281667087549213408375118380703225856744042126923567568593227681 8788878915300 ((41786408096888904724152550599099943949090583449578227297205799600091978813478521299587526243066169846300626914022670521503870964913081472409584712969414243,1)::nil) 367255681068868094256614914621145880531574045489773222570362958710125564534435687298794498993152561554294281667087549213408375118380703225856744042126923567568593227201 3584 8 16) :: (Ell_certif 41786408096888904724152550599099943949090583449578227297205799600091978813478521299587526243066169846300626914022670521503870964913081472409584712969414243 58561169550 ((713551461113004781581459221370689717536397519738029673575837926551314561535735821245022715380081541932940238641357475024228362422172943950727161,1)::nil) 20028341012552079369475833041530867901743335812634955171499500990276663228795168995080315517029916228882218102364289341610050676781402100032757747961328635 9656296848231551710247328353772228912534216921192733234354291264199619604337969025746228752139638002978688481276104332637096578550101524883335822338563720 18202161966291482551778199110358881229128546934221844806515005893909884298301985887462430584981190088718745457824964574420487264176195530678600733123980944 13334626642779136391474426915258573810220266105620658429963931848937187626416098826818443870056590302623572940582999523301408428343574941255402590518557017) :: (Ell_certif 713551461113004781581459221370689717536397519738029673575837926551314561535735821245022715380081541932940238641357475024228362422172943950727161 1648 ((432980255529735911153798071220078712097328592074047132024173499120943302509563067344060061959764197664855511286282923916431218790915764791343,1)::nil) 246445739462411771063629845431149823238888703253237643673429417056650826080177998673708991754788386794790786399486605548299761573382626556374270 620616926876572900432868846477742112311626437065174261270907143082901496827568187757387169470478106671390201223666330778955448384403105355664045 0 291437529951121177173279010184394735015013438973808950421596487611002694161873436592990964448844679004137883379195578055102252760036968948361217) :: (Ell_certif 432980255529735911153798071220078712097328592074047132024173499120943302509563067344060061959764197664855511286282923916431218790915764791343 5349 ((80946018981068594345447386655464332042873171073854389983954664258916309714056917088217518160095346824477449783045167893415448173254113639,1)::nil) 0 119164 93 961) :: (SPock_certif 80946018981068594345447386655464332042873171073854389983954664258916309714056917088217518160095346824477449783045167893415448173254113639 2 ((9629552579237282220491004836481600290610655611926527478462367863301964039264444098051096616713698170887157956584007600929746392250073, 1)::nil)) :: (Ell_certif 9629552579237282220491004836481600290610655611926527478462367863301964039264444098051096616713698170887157956584007600929746392250073 10853983335416 ((887190654496081452498437519688917993204203286788405494742579792019441524887063119603385988183117041293429508878581605379,1)::nil) 7262918535951941144065596837748368460206107753989557608783566341700456640530032603599617091609669086031515155471954645248257760686718 2834487676653628525956273325839860630680812538538960544386048409396265638832736342548206771842456909389224296683810766928848566392239 9077632018736043017579523565186924767807677171522129428111347035349801761887531523077859223614947292376257850364790911974943518606421 8222896019232828181636060700647462935856890857392034940698846443555453855567295782788333576881722607497118414234405470133756824599235) :: (Ell_certif 887190654496081452498437519688917993204203286788405494742579792019441524887063119603385988183117041293429508878581605379 84 ((10561793505905731577362351424868071347669086747481017794554529950336614620363188294345359343266584781019663948222753039,1)::nil) 0 419904 108 1296) :: (Ell_certif 10561793505905731577362351424868071347669086747481017794554529950336614620363188294345359343266584781019663948222753039 22508654 ((469232567434095862745162435073553103071782379678545762645540177508081655449152898969361533556416395307642891981,1)::nil) 4380863581593322910451803104462526735355066248986056352846548120789168004806663670639474534013713820711762615067800169 3089492184435443197281203031313797618548354287819117512663471038353727066336679707719867957002085098916624481684507147 1693683856734442983295718984008136777464835288548540918851519299364072592726805656368167000274663339297670962998344068 8012051816464541302631243436430812202661675607877808217780019994049706860142357426735688779511693828479506266809242467) :: (Ell_certif 469232567434095862745162435073553103071782379678545762645540177508081655449152898969361533556416395307642891981 20749737 ((22613904332093262808350893077514818769596085949356647877368750344578961490221413868057099346071390151063,1)::nil) 0 192 4 16) :: (Ell_certif 22613904332093262808350893077514818769596085949356647877368750344578961490221413868057099346071390151063 2682 ((8431731667447152426678185338372415648618973135479731767689921862083362381840378291280332291299013157,1)::nil) 14427438311009015868499063797050834550393393449166479974792354873729708349798500612235594748977680190773 2347282633532488527517832151879991018429149599601825609766420863395652235356314703909097717447274252443 20550659661472864468361895663856765208131993193785580960310032965942670712064343999038734795406541917854 5735148417575507856556023027719698358182256949831256278325322737724432443758458737044798417896054357858) :: (SPock_certif 8431731667447152426678185338372415648618973135479731767689921862083362381840378291280332291299013157 2 ((4801669514491544662117417618663106861400326386947455448570570536493942130888598115763287181833151, 1)::nil)) :: (Ell_certif 4801669514491544662117417618663106861400326386947455448570570536493942130888598115763287181833151 5628 ((853175109184709428236925660743267032942488697041359184094768094722388507717282606810742367257,1)::nil) 0 163840 96 1024) :: (Ell_certif 853175109184709428236925660743267032942488697041359184094768094722388507717282606810742367257 14603419 ((58422969934965875336243222271665767649513356911956602639640301960114059049786748302967,1)::nil) 0 1080 6 36) :: (Ell_certif 58422969934965875336243222271665767649513356911956602639640301960114059049786748302967 8558331 ((6826444307303126665262563725528466665932103914206180091242161093869717315332129,1)::nil) 57070249790538610831354132784453618487388662406760474657933571355968379266211594417498 14022031313097879687400133006568555132607884554437547985860671229852443912336018712605 0 36985880963793107319810100334313780712887137641915844869923942976904590085823692923183) :: (Ell_certif 6826444307303126665262563725528466665932103914206180091242161093869717315332129 335852 ((20325751543248593622377010485358034687681057387794746380220226879410442017,1)::nil) 6826444307303126665262563725528466665932103914206180091242161093869717312104609 1976102912 2624 107584) :: (SPock_certif 20325751543248593622377010485358034687681057387794746380220226879410442017 2 ((2510591840816278856518899516472089264782739301852117882932340276607021, 1)::nil)) :: (Ell_certif 2510591840816278856518899516472089264782739301852117882932340276607021 12196 ((205853709479852316867735283410305783780541207269483450973860455477,1)::nil) 900 0 90 900) :: (Ell_certif 205853709479852316867735283410305783780541207269483450973860455477 452830 ((454593797848756303398041833381854056270701730220141071304121,1)::nil) 139381254995514100497934680895608113108593321484860453283053153260 163363540970635552477618266911256321942222435826953283425719267977 104322967126425051317697156854416553690693403071643230507171619271 51468935277081013911518483308329014312345244558712470966491266712) :: (Ell_certif 454593797848756303398041833381854056270701730220141071304121 900446597008 ((504853701884463309025050518246773986561672025981,1)::nil) 0 324963535180946888757193966831559735537259439962054039595878 227296898924378151699020916690927028135350865110070535652248 198884786558830882736643302104561149618432006971311718704342) :: (SPock_certif 504853701884463309025050518246773986561672025981 2 ((210360968142729947009112943759749821479567, 1)::nil)) :: (SPock_certif 210360968142729947009112943759749821479567 2 ((11686720452373885944950719097763878971087, 1)::nil)) :: (Ell_certif 11686720452373885944950719097763878971087 5836 ((2002522353045559620460789908969918949,1)::nil) 0 192 4 16) :: (Ell_certif 2002522353045559620460789908969918949 950943141 ((2105827642796531425461981271,1)::nil) 0 78608 17 289) :: (SPock_certif 2105827642796531425461981271 2 ((13398148796880300809, 1)::nil)) :: (SPock_certif 13398148796880300809 2 ((35087649527771, 1)::nil)) :: (Proof_certif 35087649527771 prime35087649527771) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t250/prime2.v000066400000000000000000000563201451023060700215400ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime79503377116957 : prime 79503377116957. Proof. apply (Pocklington_refl (Pock_certif 79503377116957 2 ((281, 1)::(13, 1)::(3, 1)::(2,2)::nil) 71927) ((Proof_certif 281 prime281) :: (Proof_certif 13 prime13) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime2345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345679191: prime 2345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345679191. apply (Pocklington_refl (Ell_certif 2345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345679191 793876800256 ((2954714006604250312432317847088707353642939918835681855883781703373436682498204170643667562348339194788653675554647078829304503328512540509350248131043513698466124825626598935300400950688400625967798866028415500441011608174819232701529371,1)::nil) 2345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345343051 92236816 0 9604) ( (Ell_certif 2954714006604250312432317847088707353642939918835681855883781703373436682498204170643667562348339194788653675554647078829304503328512540509350248131043513698466124825626598935300400950688400625967798866028415500441011608174819232701529371 2257197625 ((1309018746909345304858859155980508066343078807215952947799057560754538133318390395986557695562141659965929512066825375465164067459980983601459443559396172510392975508106680988085792752595106721213821782149206094373002103868403307,1)::nil) 2515576262062771403598085785729861652113526566989606498633062562634994039916593758488866431667676365661141266732464318743835901287814513070303750534146499529086879754510202579888151159561653998607230483236489517858035665173656529638011946 997744984743504351610111472230265411402033815233431040012435236491965353131027454525984523574201184909818777390168807281431323144330754475703031953576200326409414039571607973303239172929022380911908078011857074916891602022585838688671273 1658054620069039633921493488175974721073219139856813197128836854524154069343061841565512286435040135512684060138851207158508494844427637564148812800641140754981676788331208020953496091690970288490222235932396442779483419694173679067133531 2778936256218477000860509248260941257487898944745314211164461717558739147532344132140295642342309933038348739093573982341491848048147080585748720116258277422083925198501262070874618686933361966421114434699807016936713236030984278440563772) :: (Ell_certif 1309018746909345304858859155980508066343078807215952947799057560754538133318390395986557695562141659965929512066825375465164067459980983601459443559396172510392975508106680988085792752595106721213821782149206094373002103868403307 175828533 ((7444859628723315941325968726478017457741507785974378503169662234254881335547458591300182749987123307034186038888372553145183202864159012089578106013440108382489324952472136056822153556459521111256250403357816754927620903,1)::nil) 914540511183684398549334537922957791189992247027711222745541586775575038518791522451350473468087502944432550262483769721857648625435686980156467624672238517213944412049953531632992416727213726477787493337854184850594665235579409 312425008250143974810856689710010864826555879607574558767500365963807081348424543107621658566934209814143094194715822633036385075813464392788650987907088653531894936792224468812818209564531302605624830449218931398589331704634433 244355019135043052656737805861224927996088935679465965345219823139538708674145934279034684543978633198281184692537801608650336807326291917633464125358809574611571306860366895407643889374297283949701353245253650819281604864571307 1036320765740756169178808718465107937571319491211348244888202540560120525896679803046862504849096704624197507177363676496562004733508848243087028963075947491886771456313757015832524247724731867876358149892569785829824951416484392) :: (Ell_certif 7444859628723315941325968726478017457741507785974378503169662234254881335547458591300182749987123307034186038888372553145183202864159012089578106013440108382489324952472136056822153556459521111256250403357816754927620903 27 ((275735541804567257086146989869556202138574362443495500117394897564995605020276244122228990740263826186451334774299418946822686218499770686125624043384094631261968201502426321913820708104786501443783531124288811749143431,1)::nil) 6648710323174191624864589614304198292069188530782793962837825527528821653814113882756191327394910115723644757672882712539111717606549782320859276683041820980538887234705641212323889448385568658918572268809891702398631785 4680330096582615501787204914423528918747491218099433017963633312168691526476051752016484168331925903504068148758761020851546439584043718729303103440411521299748160192210804361376579176059874935766429396156064413732852298 7212522314768964710696557946809740030351852420497324347626576435281793157394236984713032897153418923409011735575564356421139844789392783337158060208989652656741917306901506067031994753251766964561883338400039248160123612 3303276406352540313854752536604032474017432755186212407760836686113302447332890689515705319083360195851673578853286825885009387628318307172385794083016238021305069417963407034015717883228615041994948564719781377926467154) :: (Ell_certif 275735541804567257086146989869556202138574362443495500117394897564995605020276244122228990740263826186451334774299418946822686218499770686125624043384094631261968201502426321913820708104786501443783531124288811749143431 11372 ((24246881973669298020238039911146342080423352307729115381410033201283468608888167791261782513213491574608805376478431293414485992471224468826304545074926137525476263694267056522450053692166318207807731684919814670187,1)::nil) 51866305525043406601101608779946573295529401466068202467497620102157148548942572330818453516608581497427540076968311991543540880123887270085621348001933666944521984941270850739275765527295803957740072089893843622348186 1858067733421623720201397317755278211939041796307408918328115070143621185311439786897400948817455447539039816863990768588366756969502627037406768216065433934390448227471374840183322672511942211056421377846169129384136 9240116045221604805721339679620798354669034772606908383830286539907934672801557106883614276514424403688406121610690470808140777824768372250936317078895567825998901169580453863786116272008479741512247912464636877317038 249174279169605814889062361296691630825792556670977932972762658796990147511814376578420168485357183641922127799549132639590732845035175271471818060737877021325195015079663578306690925258277485162706205834565929221827300) :: (Ell_certif 24246881973669298020238039911146342080423352307729115381410033201283468608888167791261782513213491574608805376478431293414485992471224468826304545074926137525476263694267056522450053692166318207807731684919814670187 102529 ((236488037274032693386632464094513182420811207636172354957231936342727117292553012233239205621955657176104375651301558973820556329107226738067765769918748381173216937127631424568934857149048364875389791785193877,1)::nil) 0 17901018332123036429003865403151010364062553070940635965181626074385060808905717627142487871083398076566657094353216853341163486629146189875670152418597812469980522805533100323215078702419664614358051908007206859703 255 19700591603606304641443407427806402940343973750029906247395651976042818244721636330400198291985961904369654368388725425899269868882869880921372442873377486739449464251591983424490668624885133543843781993997349423591) :: (Ell_certif 236488037274032693386632464094513182420811207636172354957231936342727117292553012233239205621955657176104375651301558973820556329107226738067765769918748381173216937127631424568934857149048364875389791785193877 1080549 ((218859151481360580026109379671364447536216504421523091462980333462644560582216088519113159719694023293811161770057206130395363928950805777817662547564265398798651640711319336381182808354501000696466776061,1)::nil) 236488037274032693386632464094513182420811207636172354957231936342727117292553012233239205621955657176104375651301558973820556329107226738067765769918748381173216937127631424568934857149048364779773637395452397 11380072403995090823437326 9004755 3243424504401) :: (Ell_certif 218859151481360580026109379671364447536216504421523091462980333462644560582216088519113159719694023293811161770057206130395363928950805777817662547564265398798651640711319336381182808354501000696466776061 25 ((8754366059254423201044375186854577901448660176860923658519213338505782423288643540764526388787760931773646962469007811684831143262403190483352197374243464598852433705427666450112834228465190259769854433,1)::nil) 0 54 3 9) :: (SPock_certif 8754366059254423201044375186854577901448660176860923658519213338505782423288643540764526388787760931773646962469007811684831143262403190483352197374243464598852433705427666450112834228465190259769854433 2 ((14246165177404863030988346588538876464154001058196382635786694013385156650505941214123827614021578701387631993433875958506537494700796549110795584452532357456905726305962446247812740775941996109, 1)::nil)) :: (Ell_certif 14246165177404863030988346588538876464154001058196382635786694013385156650505941214123827614021578701387631993433875958506537494700796549110795584452532357456905726305962446247812740775941996109 10226 ((1393131740407281735868213044058172938016233234715077511811724429237742680471928536487759398985094425231984411205601791903352563973042570748599065671394217406085291615365385459389619049761841,1)::nil) 7123082588702431515494173294269438232077000529098191317893347006692578325252970607061913807010789350693815996716937979253268747350398274555397792226266178728452863152981223123906370387970998095 0 18 81) :: (Ell_certif 1393131740407281735868213044058172938016233234715077511811724429237742680471928536487759398985094425231984411205601791903352563973042570748599065671394217406085291615365385459389619049761841 64 ((21767683443863777122940828813408952156503644292423086122058194206839729382373883382621240609141230494942834255648290895500345402625453903987898623823498016365073324986441911591908844680597,1)::nil) 636433189183685563637079694368468936147752213553378099589171932484998288051275781359136877245089337642519307798216443072083929007555359574006537884345772198670028145260583658410782473677038 286897546691740901937155043597061490983493935614358159631783281890762647609543353959921382617771465555667285656320591449648100503266840100241284856220970320592250314925510651907441368970868 0 345796219001132498501114960412629863732275050478043561299586726349559334671322936416055623298082778775594105823031605386076169531576234581996470657673346825183928336843087073022559800061237) :: (Ell_certif 21767683443863777122940828813408952156503644292423086122058194206839729382373883382621240609141230494942834255648290895500345402625453903987898623823498016365073324986441911591908844680597 188957357956 ((115198919371705702909414513201561543516989437411432379194046621309013966632463700696162588385569446739669879976640330081879430839966032049559229693720306334532437771679135615239,1)::nil) 12556536525339497610801846692240528344028810985602255560181308059658159542141775130441354673382969534501690865144377438664504249226683244338954570891595028295366424526777720220107326169128 17108498801292439240397506333496930548399120464317241568969526420022196920903729207165772189115675331923093890383094704876364868938311583701346868883116527398408127811231797840418364134638 0 9635790352842126592595214971216801156768178529331941952078456480612905016484445141587432765488393155071929510977325023222171141996145306437560089107797229559565141316547499414363803643805) :: (Ell_certif 115198919371705702909414513201561543516989437411432379194046621309013966632463700696162588385569446739669879976640330081879430839966032049559229693720306334532437771679135615239 45 ((2559975986037904509098100293368034300377543053587386204312147140200310369610304459914724629561350994037147340828461837896051208645264568592791071800057907817044015879332874443,1)::nil) 115198919371705702909414513201561543516989437411432379194046621309013966632463700696162588385569446739669879976640330081879430839966032049559229693720306334532437771678378031335 8234810772496 0 2869636) :: (Ell_certif 2559975986037904509098100293368034300377543053587386204312147140200310369610304459914724629561350994037147340828461837896051208645264568592791071800057907817044015879332874443 66020818320 ((38775284087358832802454428792182143015544843576658445216195968232589916337927397866805580560763183436596512846661231264661534105958025489561586956989396418387105759,1)::nil) 1679662851842094136098660565452741032586671323181280192178022723345405739770100652328413752160268404757471347572402592619390223164932229335693599164756089531986247692932449094 80756047510604194863754460507724444794008911111838897891238519026327076631955785721659109217222806459007532800522867100136467204080742595464995169146125799671456138646451677 134920809831627206699899537657477508227653590468785221417549761689654446417852055258548694140234063489057296349441032626670883321513541808712958844254584550792882008492911617 1190125816660165056969017136867348261407385424105843875704327180518843351722809130017684161202814525466354309377349689451248511878368217212632723999747265743501061295402614776) :: (Ell_certif 38775284087358832802454428792182143015544843576658445216195968232589916337927397866805580560763183436596512846661231264661534105958025489561586956989396418387105759 156 ((248559513380505338477271979437065019330415663952938751385871591234550745755944858042033485910928392274850546128312080507298652577542970171866017992576154495939029,1)::nil) 12163440622191211673981545353477010356828814843564832844728840201168122543911313523165223288992966279832488157637295183829960514441750724956579281070696506544214045 23917088586183633331727235160594609703773123330202560256697052266902978167799839097578730036309777984328744147870724293815366832562284927376365449196410133221186179 21593415752929538496779212199873095096846560848080287377348436094365569604539947524123854083909290844237913070330198754138445467623475577265049402521089502182492210 14205560539235429250011690602907933464601493225533835241738823537446364412970195184426176109662815411155822954026908942113684080386197559147636662945124385591288487) :: (Ell_certif 248559513380505338477271979437065019330415663952938751385871591234550745755944858042033485910928392274850546128312080507298652577542970171866017992576154495939029 4131 ((60169332699226661456613889962978702331255304757428891645091162245110323349296746193906110815040468907870797562516607461899956086050454635564374855896301954721,1)::nil) 163545004126885313807901343898976887083907233283876271103282888456735357598457798060305024117756553122363408952181513996562629011981923256827611865041284082524567 92295036905785883774083699185515287538302628145614270336654809875155743454313730627697094635380240903382290179032277278687913213965527438569534543909347550801006 0 69211178480779853347190014387017367533118909244784994370744537792914840401998443602070962677888075275996437190496471675101471812795212683295673910798795742715538) :: (Ell_certif 60169332699226661456613889962978702331255304757428891645091162245110323349296746193906110815040468907870797562516607461899956086050454635564374855896301954721 260 ((231420510381641005602361115242225778197135787528572660173427547096578166728064419987875707998812114751437626124293038940811515376255012703665448271986457809,1)::nil) 58856037574939873446867782768768581740329733315298795338094960145978377028820852288804878739099783099644676974917931230381316430801115428351185916394291900472 46725806848284788095813625699085401841035936832023313979446792638773981814677338826813261017142473864976642663376077256975268365270785370757553507848559888122 0 16675376475445339676158318186798075868570115695734690031965752429145345796550170259058856114818044954090184752172977860092762745997661832590748495539521001407) :: (SPock_certif 231420510381641005602361115242225778197135787528572660173427547096578166728064419987875707998812114751437626124293038940811515376255012703665448271986457809 2 ((18472262961497525989971353387789413968481464521757076961480487475780505007029407725724433907951158584884867985655574628097981750978209826282363367815011, 1)::nil)) :: (Ell_certif 18472262961497525989971353387789413968481464521757076961480487475780505007029407725724433907951158584884867985655574628097981750978209826282363367815011 571610 ((32316199789187603418364537687915561254144372074941090886234473637236061312841636448585691098822277838895283375669229968165464251081611461988681819,1)::nil) 4843913775223128302812205093724497544914315729585734643524905344788280183920053384182321765892148672785308029345773988906735789087676042946122998792054 6696478733816033315558128979326291321583168806856439648932279843401352562832423393195040160630692226344634696303386255949549063283025913224535779373209 13497800902509189770399380176510511003650492659550571093418834401196132222752411971608685579388472835998545715097245087449447067097365624186854060255796 14033376541503943544017268470908301064995048641387316966486225454457031430114689339034100448146852831949983257541399110091096559404033029676642431841461) :: (Ell_certif 32316199789187603418364537687915561254144372074941090886234473637236061312841636448585691098822277838895283375669229968165464251081611461988681819 124 ((260614514428932285631972078128351300436648161894686216824471561590613397755373632683829136272353307490884596553917438106714786354004166602965129,1)::nil) 32316199789187603418364537687915561254144372074941090886234473637236061312841636448585691098822277838895283375669229968165464251081592512886415979 31749105730618655022 74219 5508459961) :: (SPock_certif 260614514428932285631972078128351300436648161894686216824471561590613397755373632683829136272353307490884596553917438106714786354004166602965129 2 ((1551276871600787414476024274573519645456239058896941766812330723753651177115319242165649620668769687445741646154270464920921347345262896446221, 1)::nil)) :: (Ell_certif 1551276871600787414476024274573519645456239058896941766812330723753651177115319242165649620668769687445741646154270464920921347345262896446221 1043536119663 ((1486557908605748529026634486648622634602072889204678732609952645092155653728727426845437032972132209735038570494653365589469556579,1)::nil) 1551276871600787414476024274573519645456239058896941766812330723753651177115319242165649620668769687445741646154270464920921347345262532581357 2741054664656 2348 1378276) :: (Ell_certif 1486557908605748529026634486648622634602072889204678732609952645092155653728727426845437032972132209735038570494653365589469556579 3547549605382783 ((419037948433521037688606472150814303658699012781610124490526913100474153005085040395295800685736905286449152062749,1)::nil) 0 603592 114 1444) :: (SPock_certif 419037948433521037688606472150814303658699012781610124490526913100474153005085040395295800685736905286449152062749 2 ((35952733192231157764403098113015017935034546541776449848804487494938820066336014081847119111191063087757, 1)::nil)) :: (Ell_certif 35952733192231157764403098113015017935034546541776449848804487494938820066336014081847119111191063087757 11692724 ((3074795333596444914324762827978751395742732535359291901281707585466803685862894431219203524092221,1)::nil) 16672710812016773145318680527002154654257722056219861387700562167429821664724394264286580759362617574392 17825594839596254767527838463519128566017156991091912277156593201078999239409031766744323523115195565118 0 22400891024550692044736673235638755172402935330873013652104269694905736842161242792732897941333398924336) :: (Ell_certif 3074795333596444914324762827978751395742732535359291901281707585466803685862894431219203524092221 321831 ((9554068233316383177272428162541058492633501854574222544355780914941869824500597345233282023,1)::nil) 394291853967920697399663230195153776299543765525751577699617076226027228244010028339316815935956 844488436425019508281889628174440556327522404022562877775385319753398240908810997919189937465830 0 1471493663545018394154947323018415860522127475124254475949994404521492415221088630420438707163002) :: (Ell_certif 9554068233316383177272428162541058492633501854574222544355780914941869824500597345233282023 3709 ((2575914864738846906786850407802927606533702305610176261499995257563384010624570820335411,1)::nil) 0 10985 26 169) :: (Ell_certif 2575914864738846906786850407802927606533702305610176261499995257563384010624570820335411 508503900 ((5065673763247139120834373950333375233766549749030854640171564614440058456418339,1)::nil) 0 594000 60 900) :: (Ell_certif 5065673763247139120834373950333375233766549749030854640171564614440058456418339 3252 ((1557710259301088290539475384481357697961480857106710572650052584703285127949,1)::nil) 0 419904 108 1296) :: (Ell_certif 1557710259301088290539475384481357697961480857106710572650052584703285127949 2861805604 ((544310297360466099129029235237096732552224485603225704454187241871,1)::nil) 969249570253656406864416812372078705820657015758229601713336851361709113170 864591353913663035221435705079694009571709928503533417205134602734128523269 582000137691479335921920985616938920299714052742759905816682764270189341504 925979748207537311565545151401447208818915597232649444062470127034419300170) :: (Ell_certif 544310297360466099129029235237096732552224485603225704454187241871 507 ((1073590330099538657059229260822678474575155760836652898504904413,1)::nil) 0 500 5 25) :: (Ell_certif 1073590330099538657059229260822678474575155760836652898504904413 6320811679 ((169850073791375592897050977117494579446132467435474219,1)::nil) 0 16464 28 196) :: (Ell_certif 169850073791375592897050977117494579446132467435474219 17117197 ((9922773792424985989064154406131200987809757569,1)::nil) 0 80280698940454870080246750903190797316336049061293576 42462518447843898224262744279373644861533116858868635 53078148059804872780328430349217056076916396073586409) :: (SPock_certif 9922773792424985989064154406131200987809757569 2 ((25840556751106734346521235432633335905754577, 1)::nil)) :: (Ell_certif 25840556751106734346521235432633335905754577 4368 ((5915878377084875079332521846839149386051,1)::nil) 0 2058000 280 4900) :: (Ell_certif 5915878377084875079332521846839149386051 322756 ((18329259183670869261103421320481203,1)::nil) 0 16099776 660 17424) :: (Ell_certif 18329259183670869261103421320481203 951132 ((19270994124549346778709346273,1)::nil) 0 16464 28 196) :: (Ell_certif 19270994124549346778709346273 139881 ((137767060033522420536907,1)::nil) 0 192 4 16) :: (Ell_certif 137767060033522420536907 751 ((183444820283454229063,1)::nil) 0 1080 6 36) :: (SPock_certif 183444820283454229063 2 ((10191378904636346059, 1)::nil)) :: (Ell_certif 10191378904636346059 128188 ((79503377116957,1)::nil) 0 192 4 16) :: (Proof_certif 79503377116957 prime79503377116957) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t250/prime3.v000066400000000000000000000543651451023060700215500ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime2625644275921 : prime 2625644275921. Proof. apply (Pocklington_refl (Pock_certif 2625644275921 11 ((449, 1)::(3, 1)::(2,4)::nil) 16430) ((Proof_certif 449 prime449) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime3456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789683: prime 3456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789683. apply (Pocklington_refl (Ell_certif 3456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789683 256 ((13503082079475308207947530820794753082079475308207947530820794753082079475308207947530820794753082079475308207947530820794753456149193198512188644772719831977619595572613605443532247298734750414314181606326842178590311002383467550671947152327780771,1)::nil) 3456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456453543 92236816 0 9604) ( (SPock_certif 13503082079475308207947530820794753082079475308207947530820794753082079475308207947530820794753082079475308207947530820794753456149193198512188644772719831977619595572613605443532247298734750414314181606326842178590311002383467550671947152327780771 2 ((243195407203952557965857950121646548468488354377084542458814258103304910134741070372625775724391777971764941855300257436429334921412559931953042747645097011515638588438060389170301259315810638582883088185163138381187365629338224539730719003, 1)::nil)) :: (Ell_certif 243195407203952557965857950121646548468488354377084542458814258103304910134741070372625775724391777971764941855300257436429334921412559931953042747645097011515638588438060389170301259315810638582883088185163138381187365629338224539730719003 2146869 ((113279108880864439314116487834910536445627727810632387192145518940980986792739133301857624160762383718692170717123521480465110319364130065340698439174602578406943739868937207996127121954194137676254615019422796663847780088221052275319,1)::nil) 218557148367607097232047155208026752736385988186684631816980622375700502518883318111148651775750917365321452324476737743667593097670794195429020989748765792104751049938359046320398639560606860839586644191029361395112162315815717869127620190 102249601151434849352033579202037675844348701566405399685164121726240146288059923420094859876635182101053961043867863810360858722193570117594109691656338903497713762390487295077390149536057185808882436102699250969350045061210456408839503711 173984728277303468949948317315326531313500103232684230252339148848321108688382605277178520790650905274404693525668976927560864523795057489123355310701542711045838137760237141650722611990823939036357769712858904866623304341351150557134314751 199247239554461323666720039431606578488720052704654298508322837232150722111372876195259156184364463260391517139666433131436961944240710623048398953736349911361031591615253730331988561590900624283640710570749285075215680725254041984277524928) :: (Ell_certif 113279108880864439314116487834910536445627727810632387192145518940980986792739133301857624160762383718692170717123521480465110319364130065340698439174602578406943739868937207996127121954194137676254615019422796663847780088221052275319 197110586893839 ((574698247648539446451615934813590381633703400798293873095173699638151460225852457488213694478869558326988503660003547764255137803636545686156102847822375169587979667922394590402521446316913273026511039221220320126799839,1)::nil) 29548131542708127041633802134790366851797926127299739781922320932575788623604950815893472697432423185306207522099233019870983680625048271353300348599405109675592939258000862769510887996031261634665018209235181741366205689407185368505 30578278337468840061989585926306346417242591112190770990757122244041555318334955939909837340928561611217103268716221178333054716120675581352200804494352319995478444401700781076171708028745897658949302834022232222385497201804312102878 0 1543845843108540878633268326779169155652601488108693104288428650218779456523768960685226266606458940411836235401147975575565703782936580822469866634960478249640922557853213028968194433734509473505617224160464129180736072759819599391) :: (Ell_certif 574698247648539446451615934813590381633703400798293873095173699638151460225852457488213694478869558326988503660003547764255137803636545686156102847822375169587979667922394590402521446316913273026511039221220320126799839 62657408519 ((9172071766649431134472737461821587623737953285241166025492285483747672648073957242818437134458238131126696361562416602411718806988072528142704874344799287697519895104644270465832873884229002975893686887805009,1)::nil) 357670791559390480918403160633980348203635344525901583418176843340265223408298602828965303034320529061930124626792751797220549293715965639970355539965904589028548159579041296636707038995048352477107327928164015995444336 261300075612715590869491580508084209839768215496794447416643041375788080064313579245129521361741246539635261991179279868196438457457617917323963344454789452154680579743282691069060617904763620982951731675812179069394872 468662262558988336271502108301161110355930796294999349575762026869697264666926570377410810375955529362680402255559428810991270186958250166395417510981765539251214439086115459450309261611676217740711896291725477325013417 484878240054331581027206669751633497524122534232960426595066205925161021310374554915900876984381524986528058382161703895879042165130815270860466940424934798983205298725813686001536745793122740646720621603278659621243295) :: (Ell_certif 9172071766649431134472737461821587623737953285241166025492285483747672648073957242818437134458238131126696361562416602411718806988072528142704874344799287697519895104644270465832873884229002975893686887805009 49536 ((185159717511495299064775869303568871603237106048957647478445685637671040214671294469041447320297119895159609037480739800138790489848049251038647203909998563232998160915604397340654668850713397072743520867,1)::nil) 2440528456252556835403061291368859133328218666445389058630729815855176065906948812613834674701856273250199842734129532776053951757530750971394476734212427764281343071391927116122322520638043327691096717495904 7666007215608590928219500285412766683202984067969455676091396775952090584223535547183924123894926288316642525714192241305631837810983338192198078848526033191801637235513706389818754619011179803189110975313456 3361888007567851572281622120753493406940019069954137961701494945489356357762983089922215147198461830161780469374075176318754883280765649677757769893030935434485001036125119175783733138538321676749724332918394 3561572061058172336805332661933727968254898152705938619384638312038882030591902207099174190416497640098178010324341090119279267310017556215513133956942155292427845059377929445517476128548290695538005734378627) :: (Ell_certif 185159717511495299064775869303568871603237106048957647478445685637671040214671294469041447320297119895159609037480739800138790489848049251038647203909998563232998160915604397340654668850713397072743520867 4148009172 ((44638213136404149461407186421614033886045878311514410382901073690699891300691486144341979608404086695684052858441853409395032357675625521885943472405689011127181422664731051507161526665176639781,1)::nil) 88010553877203940265301422164136372966676068179064111351348520456325816515958494326352222141692975196976919384721742976527896513097458964141864904702231535622957340748430110596302632544828630820875705922 27078155146888722626720248345846376695274441505241378643423408869744256259369589427949192645613338829205921061177535981648678300280393258965059302779001649180928632914131326683574079625731827124301631394 59846734103149612631723597656978373479322101555701334171994858706271592796061272849378843997270017341357913883829883602324904893222171110237750384571691250948097741286477725601233285363194230306505535769 146051986966582443008181863483589516613450005874535473007895853342123942699523234018387299997219044871675003034997801993425382984800099730973309672875526741016867731332469879684063384387278322817233716013) :: (Ell_certif 44638213136404149461407186421614033886045878311514410382901073690699891300691486144341979608404086695684052858441853409395032357675625521885943472405689011127181422664731051507161526665176639781 5970584 ((7476356272083961880681552494967667130392249453573454520177770497944571469171438864999132347590133660448484844930297614162886271133373072312258631938502304826120236344069433771633616851951,1)::nil) 5171004974842269620357133107394149724628822846617967307061305883730805932597160199586889568037589200201476598045180918349462904839035088861935631079492823367564080426718971822807013605261697206 10141065216265194371489251373389492587008910519051704059060767858899712833049856741705463817557418761500852018837826673051727530811552895893272933500511199078599527151425613436128097742475301302 18914779372203408625411223663987345580668945214561948724503197531728326332201875691635672339421236066015598754531947726031097924510768694641553439723161787141789446468341699771144003295074039202 23052292529147627989247141765858425297968407592903739908882439666524877230026587480118526156161762437270592038357417782521963445772737855870824617978322866231978834530984833285844696180211667442) :: (Ell_certif 7476356272083961880681552494967667130392249453573454520177770497944571469171438864999132347590133660448484844930297614162886271133373072312258631938502304826120236344069433771633616851951 291 ((25691945952178563163854132285112258180042094342176819656968283498091310890623501254292551022627763027446277908864806547942674452421366443690071307360119957620545273007200043049288471079,1)::nil) 5714752461809054834125538930185761726388308660811459223306042763136149832210312409005605893464737713347518997867897721416464604314382302394892635519998121488318754289077709060513131175753 1860604109782766109700255742672271490591326897249047094731430089323613148718313694143890489939883275755628200848084925335733558509485639550076796405778390439073062053978666645483289329075 0 746625408852086531542113634868905939469761283060711010422450782995741055601598302893150983432704398898003999401484178972488778915248934518925864453314935854219233933275261917238499221697) :: (Ell_certif 25691945952178563163854132285112258180042094342176819656968283498091310890623501254292551022627763027446277908864806547942674452421366443690071307360119957620545273007200043049288471079 290555671 ((88423488220880614523796826134266910178607714533910507143287812469133706533724827054890114405330218084170677206695995970216844064243304366477800278920201789582535676366069253279,1)::nil) 0 903232474881277611229246838148477826642104879217153816065291216729772648498482465971222496889257293933658207733528355201109648717938664035979069399379217260097294754159376513451547695 12845972976089281581927066142556129090021047171088409828484141749045655445311750627146275511313881513723138954432403273971337226210683221845035653680059978810272636503600021524644235555 14451719598100441779667949410375645226273678067474461057044659467676362375975719455539559950228116702938531323736453683217754379487018624575665110390067476161556716066550024215224765042) :: (Ell_certif 88423488220880614523796826134266910178607714533910507143287812469133706533724827054890114405330218084170677206695995970216844064243304366477800278920201789582535676366069253279 267876 ((330091117609941221026881191798693836620704036695749179259387972304848909695996756166622247505902514077091608264360476283519488667692843367960371114497002244644378420737357,1)::nil) 0 78608 17 289) :: (Ell_certif 330091117609941221026881191798693836620704036695749179259387972304848909695996756166622247505902514077091608264360476283519488667692843367960371114497002244644378420737357 598008344 ((551984133535670567544591303894404919240899482659641918406723723414884173749918038211504605462772885562936096251042355852435367490614261953330007106989952680270147,1)::nil) 161178176830608597590752334891629512027431282034998805631150890220896694054714189628234690478874977036323002320968197061874081394604958388960753676836793873682911357889955 28242334897310159342204842505919494732921400422909634056158750807768563321552495676009603710718540711413758738234282783007366530529298023647774648222506284134920419648687 0 118823623890886140140844233060295580947516481201966973670252020532744127420723974549641878503572860224557382943814481291225656245976928589610691908430106630106981960816310) :: (SPock_certif 551984133535670567544591303894404919240899482659641918406723723414884173749918038211504605462772885562936096251042355852435367490614261953330007106989952680270147 2 ((312561797019066006537141168683128493341392685537736080638008903405936678227586658103909742617651690579239012599684233212024556902952583212531147852202691211931, 1)::nil)) :: (Ell_certif 312561797019066006537141168683128493341392685537736080638008903405936678227586658103909742617651690579239012599684233212024556902952583212531147852202691211931 8258235175424982 ((37848497939268371124574448533534841486845157752845619561311302364736964314656489391913334648752145609607541830220080021120254702919584928030993,1)::nil) 312561797019066006537141168683128493341392685537736080638008903405936678227586658103909742617651690579239012599684233212024556902952583212531147852202691117851 9834496 0 3136) :: (Ell_certif 37848497939268371124574448533534841486845157752845619561311302364736964314656489391913334648752145609607541830220080021120254702919584928030993 1409105 ((26859955744439464145379122587411755324723961488211041449225786839686868372370650526569219827729780860523630076724493954972196842287021813,1)::nil) 107302490875317801235141410910507796594768235609331929546856428988016189151252331030416290684732174639885103639133881346551256584549445402452 3850281952618410870636805283288178995549991810448973644739683624174338898854667886654392271140999646806616441187869508704804336756301858336685 0 37089021893441917160301063653270752372781491164770732927253689755441054937645358844998770339113779519487342900057586181968214337932732819537908) :: (Ell_certif 26859955744439464145379122587411755324723961488211041449225786839686868372370650526569219827729780860523630076724493954972196842287021813 2363822305736 ((11362933533227805406008916481811940933567920183029600524272910968162506681454689621874284768623677729379561559845323357691351,1)::nil) 13174649353064035600121461797340258416587163980000090707648746815074387667961191887706442152418305623104438818278931487417032853893227985 5140505164211531992787812080148001775697330660745115699843821360650879281223839669399884978720356709996824435604301547698465161861967064 0 10852583545482693317625127860931856842266509079116028517863913078559441122049636572416711104942730689844914080024732614430019858027140824) :: (Ell_certif 11362933533227805406008916481811940933567920183029600524272910968162506681454689621874284768623677729379561559845323357691351 921390 ((12332382089264920832664687571833795606168853778562390002358296871818294733941762017901635805322423435395260275408603383,1)::nil) 11084141204726229287085197564226694732381914212088299512674762138632904497290173312476081284773104424348833845103739177697658 2062235117683862121436247812013703512311121082219114338189128755998461461000959262079457273337021892824130657340154909887635 0 2042616546258996453710916319529941801706958914813243606238034196210590838049427542954913350544629947676247935241141547035062) :: (Ell_certif 12332382089264920832664687571833795606168853778562390002358296871818294733941762017901635805322423435395260275408603383 185 ((66661524806837409906295608496398895168480290694931837850585010393425204054624161826033798614151933253757423682621583,1)::nil) 1095389241807348181398344906592481933210736591941705903741981715776451231737673005084353217565886439335240135865218011 12103411679973668330997176371463866411351063259104396198286938957850506388369995377800289504260485981718478395374375653 8325647763704096692259494819771648408715306274840032965705616856408133627011826393529062497388592611947239925536005781 10787384910346778825242137201874331936145094353596476428437130278280259068222995356932504682215824348863227568533766830) :: (Ell_certif 66661524806837409906295608496398895168480290694931837850585010393425204054624161826033798614151933253757423682621583 13694011 ((4867932763223091459930593636619606568775232522811018470086715733437414907798308034009999878183333577170960991,1)::nil) 0 12759432482558722989876893813763851028341930640826797088588537145616542963580405974514281765990018474352006876751671 33330762403418704953147804248199447584240145347465918925292505196712602027312080913016899307075966626878711841310807 4166345300427338119143475531024930948030018168433239865661563149589075253414010114127112413384495828359838980163909) :: (Ell_certif 4867932763223091459930593636619606568775232522811018470086715733437414907798308034009999878183333577170960991 170 ((28634898607194655646650550803644744522207250134182461602365444482315015477816888278160581958442820668388779,1)::nil) 4757323904885776516960278496139716750561819996300325980592620724403674879431356591763964608667074443308966016 2832447068151151206074850270303170316774520297310930118221867303781608311272378492121655482867758666279072626 223338019043351867597937475293924319261599687561222925569708749350159247972704383490899150019353836608306343 3078990442420461003720314422342730706021572237055626283523814578083946132320006419101305051107019735364319318) :: (Ell_certif 28634898607194655646650550803644744522207250134182461602365444482315015477816888278160581958442820668388779 1665 ((17198137301618411799790120602789636349674024104614091169795493991025477085140050548741612430848109633563,1)::nil) 28634898607194655646650550803644744522207250134182461602365444482315015477816888278160581958442820127779875 4964006108754 1431 2047761) :: (SPock_certif 17198137301618411799790120602789636349674024104614091169795493991025477085140050548741612430848109633563 2 ((2866356216936401966631686767131606058279004017435681861632582331837579514190008424790268738474684938927, 1)::nil)) :: (Ell_certif 2866356216936401966631686767131606058279004017435681861632582331837579514190008424790268738474684938927 9144 ((313468527661461282440035735688058405323600614330236792988588560179342284734344820167365771747760821,1)::nil) 2866356216936401966631686767131606058279004017435681861632582331837579514190008424790268738474684602787 92236816 0 9604) :: (Ell_certif 313468527661461282440035735688058405323600614330236792988588560179342284734344820167365771747760821 5656917652 ((55413309322371815646864172469318173720447259275432176049167747045234016881136962234847843,1)::nil) 0 54 3 9) :: (Ell_certif 55413309322371815646864172469318173720447259275432176049167747045234016881136962234847843 286452 ((193447102210394117153534178394000299248904737079020431890912178401266276644409188573,1)::nil) 0 78608 17 289) :: (Ell_certif 193447102210394117153534178394000299248904737079020431890912178401266276644409188573 4038691 ((47898465668800637917962572128939871668544465408881741358142215239413697323169,1)::nil) 0 123462 19 361) :: (SPock_certif 47898465668800637917962572128939871668544465408881741358142215239413697323169 2 ((166314116905557770548481153225485665515779393780839379715771580692408671261, 1)::nil)) :: (Ell_certif 166314116905557770548481153225485665515779393780839379715771580692408671261 1322 ((125804929580603457298397241471623045004775667934555250013028321577927741,1)::nil) 83157058452778885274240576612742832757889696890419689857885790346204335671 0 18 81) :: (Ell_certif 125804929580603457298397241471623045004775667934555250013028321577927741 2466 ((51015786529036276276722320142588420607478697930307619790001709590097,1)::nil) 62902464790301728649198620735811522502387833967277625006514160788963911 0 18 81) :: (Ell_certif 51015786529036276276722320142588420607478697930307619790001709590097 2474 ((20620770626126223232304899006705095572071420596229870868186266189,1)::nil) 1889473575149491713952678523799571133610322145566948881111174434611 0 17005262176345425425574106714196140202492899310102539930000569863999 5668420725448475141858035571398713400830966436700846643333523303833) :: (SPock_certif 20620770626126223232304899006705095572071420596229870868186266189 2 ((475411594364988273595208911072975755377539255408535538667, 1)::nil)) :: (Ell_certif 475411594364988273595208911072975755377539255408535538667 721 ((659378078176127980021094190081517718687780878769213113,1)::nil) 0 1080 6 36) :: (SPock_certif 659378078176127980021094190081517718687780878769213113 2 ((27474086590671999167545591253396571611990869948717213, 1)::nil)) :: (Ell_certif 27474086590671999167545591253396571611990869948717213 386 ((71176390131274609242346092185866728022600654369933,1)::nil) 18 0 3 9) :: (Ell_certif 71176390131274609242346092185866728022600654369933 5296 ((13439650704545809902255684987276360743991250507,1)::nil) 0 10985 26 169) :: (Ell_certif 13439650704545809902255684987276360743991250507 3615741 ((3716983795173882726184180750008025924813,1)::nil) 0 78608 17 289) :: (Ell_certif 3716983795173882726184180750008025924813 1596 ((2328937215021229778237395845085560061,1)::nil) 0 594000 60 900) :: (Ell_certif 2328937215021229778237395845085560061 432481 ((5385062499904573323772750599379,1)::nil) 0 4052240 296 5476) :: (Ell_certif 5385062499904573323772750599379 1169053 ((4606345905535992807835501,1)::nil) 0 2713566650342538901432362601933 1346265624976143330943187649925 4375363281172465825565359862711) :: (SPock_certif 4606345905535992807835501 2 ((3070897270357328538557, 1)::nil)) :: (Ell_certif 3070897270357328538557 180602 ((17003672552071573,1)::nil) 1151586476383998201960 0 1535448635178664269280 2303172952767996403920) :: (Ell_certif 17003672552071573 6476 ((2625644275921,1)::nil) 17003672551735433 92236816 0 9604) :: (Proof_certif 2625644275921 prime2625644275921) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t250/prime4.v000066400000000000000000000713441451023060700215450ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime23143861789 : prime 23143861789. Proof. apply (Pocklington_refl (Pock_certif 23143861789 2 ((1928655149, 1)::(2,2)::nil) 1) ((Pock_certif 1928655149 2 ((347, 1)::(2,2)::nil) 1519) :: (Proof_certif 347 prime347) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime4567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890319: prime 4567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890319. apply (Pocklington_refl (Ell_certif 4567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890319 6868 ((665097571848687975006650975718486879750066509757184868797500665097571848687975006650975718486879750066509757184868797500665087796730731636390566444269437106421077695192918597370022792337818435579404939660808261268861120117033750792771982539361633,1)::nil) 4567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234518332087 134414314742 571 326041) ( (Ell_certif 665097571848687975006650975718486879750066509757184868797500665097571848687975006650975718486879750066509757184868797500665087796730731636390566444269437106421077695192918597370022792337818435579404939660808261268861120117033750792771982539361633 5004 ((132913183822679451440178052701536147032387392037806728376798694064262959370098922192441190744780125912571893921836290467759110714418076365233447514786673932224892370502934033965217125683179069133285919229883986973751530231788915218202524295211,1)::nil) 386430281033808976020033815133367878848722287164528146044095180585241534683930967162768949380196878007934914710744701062480221264182438808482936310939311547084789126427513468759410652832125218528000338698984150026155005008300978252156420624954822 96261767496378313753499593636062604944466403501546236199949501981747452260267174684533843471233693943898059704473344798433601321951094998823164488496391574505377725288228002699356883616212713779189252769827804244850193155614206274344693482381299 624630185047303447407925621961751313624136915491613414499891751140686724714326745588165476419080343893720636344755841166435269751853226941781581416948029721259483175488529363550399424150731285074557595083697473666291564211206651013669221112433212 586299434040483640427052568194835879455869226303529753704122712002489417705372996409323234963517694657262252817272265802761716512510926781113988388913693184207053264000782413252937657325710463999799402168332664232774340006998215788776456739075939) :: (Ell_certif 132913183822679451440178052701536147032387392037806728376798694064262959370098922192441190744780125912571893921836290467759110714418076365233447514786673932224892370502934033965217125683179069133285919229883986973751530231788915218202524295211 43 ((3091004274946033754422745411663631326334590512507133218065085908471231613258114469591655598715816881687718463298518382971238462298464209334951785815713199671350572226587105856253682300520593623855314862271465417638092224640399695079449111959,1)::nil) 40923660808160663710331570125072365515957035179844653131833803721457509614368330056184622351744004585669489693952355526212759713089343838995711488257211880711873696692587062392815423010104801109812282275700236507537031337896547877808126711561 29859750900260417470280498253041661162014150663512495308952598026294083721509395340833015546446786711604432439823537108245584105412491776935691026552506335521534192448823925835006954026491006007710290007623126168845557026152456096352956953731 0 84382738938157389333985304550996395640744877598527059554886461304855960064881376402351927511743048233331236140662162418308391625603334956919945757048456523163504589798092710832121126931038667789204657331531594609816935481211916870855271257146) :: (SPock_certif 3091004274946033754422745411663631326334590512507133218065085908471231613258114469591655598715816881687718463298518382971238462298464209334951785815713199671350572226587105856253682300520593623855314862271465417638092224640399695079449111959 2 ((17099946826740722414400862737116664650936964109552304859228829138725118979772414403884648901156595883427884475167942892802459564758571984225803748755211339457233347867366876468803363200944265524195488790607382398296656374960342368673, 1)::nil)) :: (Ell_certif 17099946826740722414400862737116664650936964109552304859228829138725118979772414403884648901156595883427884475167942892802459564758571984225803748755211339457233347867366876468803363200944265524195488790607382398296656374960342368673 14773 ((1157513492637969431693011760449242851887698105296981307739039405586212616243986624509892973746469632669592125849045079322643476408393312142173589302298077800649085052180935821745429038756828386469389350329234202606480988967165697,1)::nil) 17099946826740722414400862737116664650936964109552304859228829138725118979772414403884648901156595883427884475167942892802459564758571984225803748755211339457233347867366876468803363200944265524195488790607382398296656356011240102833 31749105730618655022 74219 5508459961) :: (Ell_certif 1157513492637969431693011760449242851887698105296981307739039405586212616243986624509892973746469632669592125849045079322643476408393312142173589302298077800649085052180935821745429038756828386469389350329234202606480988967165697 24096 ((48037578545732463134670142780928073202510711541209383621308076261048000342130919011864748246450432962715476670362052208432469378351776451035699429521459076903786502706468116484789496419014558892497450766191238495288908404307,1)::nil) 420493026503031983802009251709439884554393609531601035892366797698122598848744301903730727516884915578512280545146757864323164747305304591940738862343816417347562817175013897231587095005481484137986231198524771127516604675640319 169829289554180023981794873270716722115364924612517749652417666802817416554432541762068246816345041413949117231506289157863576350057002953020949310597631806074023670471522148783951977409661112239222875247589717965114336040287898 0 301459502762022557293572852228958601352117023938888281242926311171890485013873597396044089586891433806788671526720287139361092280415423000539597241573920265424929659387236593214263274443847092128300450253182750666531517187167677) :: (Ell_certif 48037578545732463134670142780928073202510711541209383621308076261048000342130919011864748246450432962715476670362052208432469378351776451035699429521459076903786502706468116484789496419014558892497450766191238495288908404307 38 ((1264146803835064819333424810024422979013439777400246937402844112132842114266603131891177585432906130597775701851554522627229320345146281047742196297259864084453971842037096141278877261865074022165494313873529932459318052729,1)::nil) 48037578545732463134670142780928073202510711541209383621308076261048000342130919011864748246450432962715476670362052208432469378351776451035699429521459076903786502706468116484789496419014558892497450766191238495288908382437 1102248 27 729) :: (Ell_certif 1264146803835064819333424810024422979013439777400246937402844112132842114266603131891177585432906130597775701851554522627229320345146281047742196297259864084453971842037096141278877261865074022165494313873529932459318052729 312598851 ((4043990564236158434675195943136793484290317424743979424936671031247143369271703215221279189643938040571287006588388346471213359102049354488747387570199079392293377098182834344648226896887462442169203414727561920901,1)::nil) 1264146803835064819333424810024422979013439777400246937402844112132842114266603131891177585432906130597775701851554522627229320345146281047742196297259864084453971842037096141278877261865074022165494313873529932458954187865 2741054664656 2348 1378276) :: (Ell_certif 4043990564236158434675195943136793484290317424743979424936671031247143369271703215221279189643938040571287006588388346471213359102049354488747387570199079392293377098182834344648226896887462442169203414727561920901 12126 ((333497490040916908681774364434833703141210409429653589389466520802172469839328980308533662348997034518496379183382999025054136527021754656831121649016081424134215313462723007866810395839199180639547424219784349,1)::nil) 1010490827154886562539510067090353725539332612962797969485179018850125802187054092163583155031183044784013372444608339875617223314889302286557802068388398679021532816518686619841647953836702535670062246384560811919 1843339950623395282399028599504278831761086351114683219284879785453498362891996760055706281358413884165473910333377436841992167595572253830784652803524007863895389090260490537770487243166303796880944235035644880220 1617006255823665078949940114592639471333099999599701523217679953463997685724995962389948021000916860081999692865193951711161805774449008048094936106970906050176193866969626849993597939210234164678763317280594430224 442971785858054118370427841458121718577794758899618608691597508772632834640768648549938279724016240328604008310831579045272210357192450776374230398793959629990797440871689684323237433547087351589453087979643933979) :: (Ell_certif 333497490040916908681774364434833703141210409429653589389466520802172469839328980308533662348997034518496379183382999025054136527021754656831121649016081424134215313462723007866810395839199180639547424219784349 21168 ((15754794503066747386705138153573020745522033703214927692246150831546318492031792342617803398951107072869230595405910939232032737029574140183984982253175450098806608068137427096534136667398484418071883608039,1)::nil) 0 8192000 320 6400) :: (Ell_certif 15754794503066747386705138153573020745522033703214927692246150831546318492031792342617803398951107072869230595405910939232032737029574140183984982253175450098806608068137427096534136667398484418071883608039 2404474 ((6552283161750448283784785426489544384976520313055964710887350344210966095716482000894084693347113369852310582755203900945149840926014548179930800673182343578918223785065665840109726272336520441734879,1)::nil) 2892848121453000351653489377591220257042785126727661930393700984383932480478590741911020015928879388718457939332645391502095119372440178883747559566842784863546553841715846305744424270661669756039981917180 303540417462153579039316124899340620152659105195843770897029048858051901616268469587747366476329240301068796560198285585095919185908045724782482527350064567711930756748579170064474105322194647562271016877 0 6478969550670159905413099168650298702835097879463925247061405507088657029834034173585728188589893048450702391015686926364712970029855124376467699721037307942572491061801924836380246781157552963855626362969) :: (Ell_certif 6552283161750448283784785426489544384976520313055964710887350344210966095716482000894084693347113369852310582755203900945149840926014548179930800673182343578918223785065665840109726272336520441734879 54899 ((119351594049990861104661021630440342901993120331080069052029187129291354955763893711981724500393693404522999853267912044902554822858037351366901819857311518212396922068710050818420177599378785817,1)::nil) 1456399285420939210722153538398733286559749351342336265956001757064012153936830852176105451607690375146770162147116646582497225467793856334241843177954164521283899392585559964128045341099254817463046 6325008926562190002173820709829160262214505496489431652753159502558763500194378176399299679156902894755874542791064213694582534553534500332172299593237678968849080746372889294925586951150564535675939 3858141540472664205539556741924478470355297717161007634445542945853916732366555858507576737910746030119121342507196454400971169892667738796922723925286994101776864182531981374183263912496170807225764 2596621615716017471360856304971719758335953091623855233897094972152983569600000627996780500189685511646513669308229634465637115536100080620786253806494163672543924353109896278873837773066261742070071) :: (Ell_certif 119351594049990861104661021630440342901993120331080069052029187129291354955763893711981724500393693404522999853267912044902554822858037351366901819857311518212396922068710050818420177599378785817 16 ((7459474628124428819041313851902521431374570020692504315751824195580709684735243356998857781274607201141964476880086410448340523911905460517854990772985437384467292122076977162941196374504742787,1)::nil) 75939874019719346957876732381420822839647993239094941008110847599707576433702767382264195850155687209318473233126745681693501766214176440951335064697258273940512086194734902994633622674010338702 19857683135113123710272050931679919458276562459696946482105044700927859012921689500001846262225882618155479264788157881533251150567458233117891490457220894804893982672910176459183385251350865751 0 86107640841775934970514676862378732182890686904262878497255448517034983667806572587029877554668430745414099596708754973328782533021702568138812900598133069891151131109613259832377856852362812791) :: (Ell_certif 7459474628124428819041313851902521431374570020692504315751824195580709684735243356998857781274607201141964476880086410448340523911905460517854990772985437384467292122076977162941196374504742787 1178 ((6332321416064880151987532981241529228671112071895164953948916974177172907245537654498181478161802141871906790628811938971975252877786012821836283770827388357947671282068007579034133321825191,1)::nil) 1405455785612732817544924391422945671523894155206122784189857756503705700656048473668902865297214885048491954606899504399102777677294963244715262996216476521900643797893022415145017380799812439 7097602970154951463507257119641543051614303725486150181700747798183990109862917587631110257268606197863332491388637710732156301725607168202404367447810060975772650625147973492856703740770358289 5901704442407709665648132461760257782521217941256839247528634384982916280706181136152779215938167375193981100945659281346636290094184467244061321676540714689752216618294388019467057910449117950 300009470911847153298254055193061699046192561804373816529494870461174439169066858237035626501864077549710484329801129314939773789169306832809450590500246566829644030719014381893547550447866900) :: (Ell_certif 6332321416064880151987532981241529228671112071895164953948916974177172907245537654498181478161802141871906790628811938971975252877786012821836283770827388357947671282068007579034133321825191 594760191700 ((10646848098500402968357461744428194266235576088733655161253652837870609804710535495810960607977674491401624420859790592374738978599707989610512016148584491064990770418988669712619,1)::nil) 3854401354211056621464126807528558468632014322742264105234580587868543054656449699676033616819701461256785580929656004677633613298202659614011224730100657811826159033033082096519798722307019 4158577321370929001508390169955958825236836894068188754093676930611794769214116619399545508568016957536104970765255545653827127776672049712103740989523783615100920692086434154559286692087978 5504773024445254184373536278995932061350149871667767480477570175894371417582441219511759277358998375123944480615989047630824131437806881192728579427304885945312461946099363147474973379970877 3788954515451318679119041493262616600864691101630222109041788024750805324380160784267064622338817975538844107891952968721751507160726408858849557388400988699396838494049243803948062791000905) :: (Ell_certif 10646848098500402968357461744428194266235576088733655161253652837870609804710535495810960607977674491401624420859790592374738978599707989610512016148584491064990770418988669712619 30686734 ((346952793949998164299839199063288855250466735519448083372236772993522536634577517953228936121887806448269878059327956948260193094439037679203206123404502128205267916466231,1)::nil) 7973768969772490794197476620210498003770806757585449832598930781243167096503097244493998244978031025327712547325759547558190697918860250590010989774278005694558127627838787674772 9487087669976434190579343272833452296897444826823170177624419856689997325065250886046398543997320919917115806184689505397278236697082793672964170906079773657898895843587865870398 8009690726408993628036641156887617954566316480392416154357869097393962248736598056719414477260910470369360467646763181558787753305671091499088020411731474464844722460786053435423 7206590658830589627771592076904387277981120000079182313035171845244008250811466737595114896217118085399581080580573297159555794701964469794693304430106468484679152275692320061075) :: (Ell_certif 346952793949998164299839199063288855250466735519448083372236772993522536634577517953228936121887806448269878059327956948260193094439037679203206123404502128205267916466231 234 ((1482704247649564804700167517364482287395156989399350783642037491425309985617852640825862627144429893955091145065009910902839771149661981476695823673322966076419048912289,1)::nil) 247620515772830435245019955096289983844133166492933677407847507399419552689418689409442421324676596795956347232080742168461117363544239308623981610392094013408755875826101 315371615501655919252370066297033390520675055843790596465464085199128195155394102594384052952790372100670643734112030726542277597033114547096995695728194001612701606897865 105865311521477224953643909692494968230806607333698408923669754999538130860391029694883808231178269496085150303427286328121376113539569095985967149711269661423754343566074 290045227602745154541614471760695814996841071777226504026375787447479068291731122523072630076747628374976078002891582771036174438875016653755972250300500596074219816217740) :: (Ell_certif 1482704247649564804700167517364482287395156989399350783642037491425309985617852640825862627144429893955091145065009910902839771149661981476695823673322966076419048912289 29819712 ((49722285971426042099272035805190951790384729047663196198609748190234365295608912682561878435924547082667914622489918612038624543690215654525341936201240350008491,1)::nil) 0 192 4 16) :: (Ell_certif 49722285971426042099272035805190951790384729047663196198609748190234365295608912682561878435924547082667914622489918612038624543690215654525341936201240350008491 1351 ((36804060674630675128994845155581755581335846815442780309851775122305229678466996973112164793012081613778022501721282089989572976004196753623693032783153203323,1)::nil) 0 317952 24 576) :: (Ell_certif 36804060674630675128994845155581755581335846815442780309851775122305229678466996973112164793012081613778022501721282089989572976004196753623693032783153203323 4212 ((8737906143074709194918054405408773879709365340798380890278199221819855099351137710930657226614940395469196380888581875591897904514022919955833700882880851,1)::nil) 0 78608 17 289) :: (Ell_certif 8737906143074709194918054405408773879709365340798380890278199221819855099351137710930657226614940395469196380888581875591897904514022919955833700882880851 10440602 ((836915931004237992686442257391745598549716322947506368912271459233850222367544895813061053900606534088153098854459726337990572316915973279619567227,1)::nil) 8442427167365424251975148795339396354651625031469347157895170004426577920467869513953700218045559699785561118113145762539107191052593288966662051550624166 7633112063100082141191731991702542084385484167170189814486710961754535170600764221328854000632164383123468336111396514589578138240231848332980947827256190 0 658834126520452173760550926264158455104985365592757012102220918389033545681223082239538078812651515391098745378318744674339615561816007145358084491209727) :: (Ell_certif 836915931004237992686442257391745598549716322947506368912271459233850222367544895813061053900606534088153098854459726337990572316915973279619567227 398698 ((2099122471154201908929671724944056901588962881548205330631885435176123838892229110837637273126907782842758950161393818401580292369502085664203,1)::nil) 277699214481548799996542076244343850258132070824580832130422163411105300248262000665447711012755528057998803115732138097479156356041563549302301863 206018033456635847309726745591630400335643215300228077340288450132583503497568620868801451220326895133991662652453978560514446059230954579325678193 360224604289173376482301151075336074025626971911141322599007608508301687417153198957635339365727538059260919404232495566537765780972332702896074288 68988706468092995613239138307134555779701413397761205672530249185793723445497200878100462721185709483473794359797165555284860364662715584594137509) :: (Ell_certif 2099122471154201908929671724944056901588962881548205330631885435176123838892229110837637273126907782842758950161393818401580292369502085664203 103089 ((20362235264229955755994060713985555215289341069834854646294807740652483996211746267335193755881512723489048576485260021671749602358712229,1)::nil) 0 2058 7 49) :: (Ell_certif 20362235264229955755994060713985555215289341069834854646294807740652483996211746267335193755881512723489048576485260021671749602358712229 977 ((20841591877410394837250829799371090292005466806381632186586292467402906618397291013154110730103740672340912575231281106296466431585999,1)::nil) 3630640689131337469772714852019709699773973290016691272609218614524253728020031488512262253610015493153920402020379485475316813640616976 11268446099430381753009387773078668175847585854794932847794250821844668644304395258423445608352034543447628047916083031926444182502626547 0 1827544427053998731855046286713840085414486707149575058281979687281877661127599357640513402921247302646410869316199442318674952740372923) :: (Ell_certif 20841591877410394837250829799371090292005466806381632186586292467402906618397291013154110730103740672340912575231281106296466431585999 129669697591 ((160728314051817065884151359294358781057685568597337442267331465171932424125610930046348539066898444400702815462200108275397,1)::nil) 6486114687128924569258220615714216885769242367291311469427512272326277876259983883128646261958235440156007651887822698942483031715399 19290930146715502238346000367601648040606594167430835903960798679663530447386868977487209906955968273930070594062608239920223576668572 7477692274005930665551820738337252330409911080314565090519584881686681170146537626350144312818796851871550371135909878866130725870196 19407416910715103114512415979814408030901257485908459112882178409029374820102043068729042258807908795531661212009216250978208300087611) :: (Ell_certif 160728314051817065884151359294358781057685568597337442267331465171932424125610930046348539066898444400702815462200108275397 6514 ((24674288310073237010155259332876693438392012372940964425442352058056124882743264003639882898004680064074043752873160437,1)::nil) 72481131207382062244298411967640431757844880966739240214752500153236043323223595558356995636999054865301802205827925707130 79592023719536944828082567883022454182644104056847836447386788165270400931185847429741357713599249342310279523556812610297 157186121569581975347864972452198042354440531629395564293070896672404545943390621656225744561044009597059552119801309756163 59013369630719973258274105757779349719550049875609813332282260511797188726728463938325378604885439023720416825821505733830) :: (Ell_certif 24674288310073237010155259332876693438392012372940964425442352058056124882743264003639882898004680064074043752873160437 359516 ((68631961609700922935711510288489784706082656607608463671831128462692038354109106147614241855594014164407661842527,1)::nil) 5348948717474306936882866921491255216781878366026348770712927679511077369373195680624817209277537266305219776675080257 8139117515326359465314749982267993371933561537733329207428631643813084298782478039543793946135753774406756910083145332 0 23837522030797365175059904556775792867666325660463782500690877171687897049947564832645137184107340010896987101621296629) :: (Ell_certif 68631961609700922935711510288489784706082656607608463671831128462692038354109106147614241855594014164407661842527 70769946 ((969789656328138542534870809262589866976621073126274021338891628118940703178363178781221192625810733838687,1)::nil) 19292488570877065509918129328638831295031156190121916231439726458593967365613597949392024837980784926561079142409 31948935389069552189427413846080503783555499523751349032885577615251931239451982238381706868148713202953099076539 0 66826190800682993413867174237765602969937778381075037997318055008269511210543831085381440539635060906514129107218) :: (Ell_certif 969789656328138542534870809262589866976621073126274021338891628118940703178363178781221192625810733838687 214 ((4531727366019338983807807519918644238208509687505953570646263295576281885667171157967139353608391771657,1)::nil) 322211992958709612184055972310186213385632067522145954531284546893349833409202965303374036644824703965490 943102364880373087505215080244579383636003098999447670352031247916970540564422196694099993639646217054188 0 98451201486501744076627969516837349552888632610867925041759342780065297193814655640625203622644095365009) :: (Ell_certif 4531727366019338983807807519918644238208509687505953570646263295576281885667171157967139353608391771657 167232 ((27098446266380471344047834863654349874476832708488550480700568549919516432240917860181037477587007,1)::nil) 0 5832 9 81) :: (Ell_certif 27098446266380471344047834863654349874476832708488550480700568549919516432240917860181037477587007 108 ((250911539503522882815257730219021758097007710263859154195033649710559421531214142835345997407497,1)::nil) 27098446266380471344047834863654349874476832708488550480700568549919516432240917860181036720003103 8234810772496 0 2869636) :: (Ell_certif 250911539503522882815257730219021758097007710263859154195033649710559421531214142835345997407497 295076 ((850328523849865400152020937721203208993641333971162179827216549154038087825316421367949047,1)::nil) 79548161682375880723531863072681583882069885588167160961680791065280091704347154319298638918442 132304950167377191474226919118362663025517907005620492070549364684174288985135209686508583821250 207057089926965342937332904945880878942393098048003296874533401666964597709411257840774616682618 32609748939582442445172049473302256082655129831335645203361346941683960351705674436085458249965) :: (Ell_certif 850328523849865400152020937721203208993641333971162179827216549154038087825316421367949047 297787 ((2855492428648212984959118221148684156775283460143406016361065052390048807219193042127,1)::nil) 0 192 4 16) :: (Ell_certif 2855492428648212984959118221148684156775283460143406016361065052390048807219193042127 15414 ((185253174299222329373239796363609975137880123359913367595970292553938032493631879,1)::nil) 1523359351426408988577968312883831788243009120046117351487865524692300914842485297738 569425321363943940561444302768276845176523972422040824455150195507632048070085852057 0 2511548156633336235624207676459322545309295407029157881337208601430221178515176868811) :: (Ell_certif 185253174299222329373239796363609975137880123359913367595970292553938032493631879 408079 ((453963997900461257190984579857355990232014844996433434082199873590686393021,1)::nil) 0 125190621694396339771759706136345803511145552114316455445714299264965935924331657 138939880724416747029929847272707481353410092519935025696977719415453524370230468 11578323393701395585827487272725623446117507709994585474748143284621127031383069) :: (Ell_certif 453963997900461257190984579857355990232014844996433434082199873590686393021 164829177 ((2754148301671501139576669607816800482285834602393748332592315268299,1)::nil) 0 78608 17 289) :: (Ell_certif 2754148301671501139576669607816800482285834602393748332592315268299 1361349 ((2023102306367802187078162622381771711801618715082199760049739,1)::nil) 2754148301671501139576669607816800482285834602393748332591557684395 8234810772496 0 2869636) :: (Ell_certif 2023102306367802187078162622381771711801618715082199760049739 1087193988 ((1860847584421890849416804006814216256797754708008887,1)::nil) 2023102306367802187078162622381771711801618715082199002465835 8234810772496 0 2869636) :: (Ell_certif 1860847584421890849416804006814216256797754708008887 26772 ((69507230853947812991812493830146888074210347663,1)::nil) 1860847584421890849416804006814216256797754167399983 4964006108754 1431 2047761) :: (Ell_certif 69507230853947812991812493830146888074210347663 4580678767 ((15174002454546669806198397853867093231,1)::nil) 0 68692692992378112058314691168074854229590690366 17376807713486953247953123457536722018552586996 39097817355345644807894527779457624541743321276) :: (SPock_certif 15174002454546669806198397853867093231 2 ((505800081818222326873279928462236441, 1)::nil)) :: (SPock_certif 505800081818222326873279928462236441 2 ((602142954545502770087238010074091, 1)::nil)) :: (Ell_certif 602142954545502770087238010074091 10386 ((57976406176150855205968422019,1)::nil) 602142954545502770087238009980011 9834496 0 3136) :: (SPock_certif 57976406176150855205968422019 2 ((4815635897884387, 1)::nil)) :: (SPock_certif 4815635897884387 2 ((23143861789, 1)::nil)) :: (Proof_certif 23143861789 prime23143861789) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t250/prime5.v000066400000000000000000000606641451023060700215510ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime330707491243 : prime 330707491243. Proof. apply (Pocklington_refl (Pock_certif 330707491243 2 ((55117915207, 1)::(2,1)::nil) 1) ((Pock_certif 55117915207 3 ((151, 1)::(149, 1)::(2,1)::nil) 54948) :: (Proof_certif 151 prime151) :: (Proof_certif 149 prime149) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime5678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678902111: prime 5678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678902111. apply (Pocklington_refl (Ell_certif 5678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678902111 3708 ((1531526762289075006325994879273376186956463832287879392937525803371422483249763607548277331628614140929851705355121092865609235636976545042087102468671837655040372512005812941961838587457332460593492843253211899563032101727222603679540277901924403,1)::nil) 5678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345650845247 58690283344 1956 106276) ( (Ell_certif 1531526762289075006325994879273376186956463832287879392937525803371422483249763607548277331628614140929851705355121092865609235636976545042087102468671837655040372512005812941961838587457332460593492843253211899563032101727222603679540277901924403 4056052 ((377590514689918917786555714589797218318814411720530060496642006407073302622787776771174859599584556837499052121403052245289401038425854965423881454031457259141983173536779364558446201073757113933318880703659048181614576742952722059657850971,1)::nil) 714297136044156365467443519897348070887735596479096572532015726361431567904726795737888774714486687463454213690669998360505100060935156524276194881360803386379341418421399025242231461110731021092293520349759801443770705759317768544163904230706001 1194759262273247766683635189592537622667171821822450386317613722841982659792322762760789440970394872951356840288476255767376030893385105934004558813178851603848534689936524123528942617834987800568000890559591493748971322561449565910155353054355471 899753742305838700038227103664062914372649183961188752113399728648216453796359396853878694483477338902384275597558881808004770222100567590741977781676803937728067615074905416018651898272880140659366299607182242082746710591495807609446634378068077 1361672641752096326608928521473740729162136169073717211372252571386026402946115131642525514579578996661022331244207882109754535698645163923875301810118228662710951041124279545875001233898040072023601765693913674980677924307920316857002571451804016) :: (Ell_certif 377590514689918917786555714589797218318814411720530060496642006407073302622787776771174859599584556837499052121403052245289401038425854965423881454031457259141983173536779364558446201073757113933318880703659048181614576742952722059657850971 3956416 ((95437515845128246824033598739312857474748462173980203420631704655696797966338164836856098954100012950483228285752320344094705861978146693859671936137569707401446428419820146431356518101152324830869463966730147651668094652262955634409,1)::nil) 377590514689918917786555714589797218318814411720530060496642006407073302622787776771174859599584556837499052121403052245289401038425854965423881454031457259141983173536779364558446201073757113933318880703659048181614576742952722059657707611 25690112 64 4096) :: (Ell_certif 95437515845128246824033598739312857474748462173980203420631704655696797966338164836856098954100012950483228285752320344094705861978146693859671936137569707401446428419820146431356518101152324830869463966730147651668094652262955634409 33408995287 ((2856641303495426687359082171351047054752708288889052918517109450352708476118806692352121883613710390071546490255647532312834045236195585150904776450295222512141483227864806475437083431235109653865186470670374320847700183493,1)::nil) 0 56293222236774864337613568006391568276121163235433635611388232043008658175457276915489339617457429513761591684174220202962111660776172463956290868581144632100071916763253289496620446223726566599458160386625985528913602705140770772682 47718757922564123412016799369656428737374231086990101710315852327848398983169082418428049477050006475241614142876160172047352930989073346929835968068784853700723214209910073215678259050576162415434731983365073825834047326131477818319 89472671104807731397531498818105803882576683288106440706842223114715748093442029534552592769468762141078026517892800322588786745604512525493442440128971600688856026643581387279396735719830304528940122468809513423438838736496521217786) :: (Ell_certif 2856641303495426687359082171351047054752708288889052918517109450352708476118806692352121883613710390071546490255647532312834045236195585150904776450295222512141483227864806475437083431235109653865186470670374320847700183493 42769 ((66792333313741885182236717513877973643356362993968830660457561559837931121111241608457571690095872947030477454596321269938689064664069780583875898486197601717074472310890922023362632322737385777634134039862885993688239,1)::nil) 0 16464 28 196) :: (Ell_certif 66792333313741885182236717513877973643356362993968830660457561559837931121111241608457571690095872947030477454596321269938689064664069780583875898486197601717074472310890922023362632322737385777634134039862885993688239 52 ((1284467948341190099658398413728422570064545442191708281931876183843037136944446954008799455578766787442893797499180988890950808441583721315657574605359563399319728783322001210489409968817884519306374159585076203817687,1)::nil) 11001630940329779750551907888617507573648717515092099893286916138804580850063408795011509648775148300661508756030402199899153614317914816716037696142139681918197258747379170318359807101869392619700498691132646642820998 20198825648408672998826028342197208437430071695076114576083442135185105146328065088483710634640318445529797389598350539533084360881400560443698846486282949158903499253139424255093531435293078492464579077517207586964027 37618600937699251147292732956675920943530765899289151070228003554765433253155832440839042618409169661794181216272890744337336168799762066296739165862540068727320934392433221134355785588925160481875049309481433854936204 22079925227703191807838667712537248975898865007855422975394068825179898788204729456312517766461720924424064535347056769878971527262606860473570691645651155600344693503922440479504672485405158438616754956295159409566376) :: (Ell_certif 1284467948341190099658398413728422570064545442191708281931876183843037136944446954008799455578766787442893797499180988890950808441583721315657574605359563399319728783322001210489409968817884519306374159585076203817687 1276 ((1006636323151402899418807534269923644251211161592247869852567542196737568138281311919121830390883062259321159008244768182735007373582257884349200844408156345196144952773472256577663855257593022837899701898712762147,1)::nil) 48405216664595109999490167801892168655165978367747021362952771525888537143720943440604517056024263955924841886380727348060410469310222465040696371737033139836310533755012671378919641972358081231236305466272485088123 36592008672601861824122645406011840875975047179617291266151973149786702499506343995443789164706213075408683890126074409745896978759498677419816012741170094091310101296920992133632268467378633459595076499074836262077 71410404621633546582309957236704570525727617967150394783844935065817930890659055774393375560251020702789490576469097267278893521579194741972107866080111730486647186061947311369485084764677385167932219577197038708839 475994116120195476459651745735985084897188596858037783416172880164117709053693710525824292603582643199527566339381507882634480421111240001278886689759662376842195069156456516301155312437828341856253936161331249102428) :: (Ell_certif 1006636323151402899418807534269923644251211161592247869852567542196737568138281311919121830390883062259321159008244768182735007373582257884349200844408156345196144952773472256577663855257593022837899701898712762147 1461 ((689005012423958178931421994709051091205483341267794572109902492947801210224696312059631642978017154181602394207783877952619375814473802859537888516741106727080663622801004845257167453808337247929175494376976629,1)::nil) 0 119164 93 961) :: (Ell_certif 689005012423958178931421994709051091205483341267794572109902492947801210224696312059631642978017154181602394207783877952619375814473802859537888516741106727080663622801004845257167453808337247929175494376976629 26832 ((25678481381334159918434033792078529040156654042478927106063748246414773785953201850761465525418051363357213700798888846735745291652649456989523413823164501687432846736171334781559233040773505208771176167287,1)::nil) 0 267674 23 529) :: (Ell_certif 25678481381334159918434033792078529040156654042478927106063748246414773785953201850761465525418051363357213700798888846735745291652649456989523413823164501687432846736171334781559233040773505208771176167287 76436 ((335947477384140456308990970119819575071388534754290218039454553435747210554623500062293494235936618391239397686123536858935293047723017296073429923882430454631055154951252350613021271292628103756129953,1)::nil) 20558561941120369088441167056715615906404855907256925820899841852179936140053711309055099001233774650366194916803781201654644007887946220550599694384282645295301625105583941579803437176705666459999861211954 13218100801166189949893740648990331355332893376942385008189642680060165956330939470414647946115466261721142194119733802933127052899727291137170430591510607949682874868681453353950280767628085242580815847968 0 3822195866617631961988231859911630773527766430255573385279120195027287856409693117015756668371185333933508033694438526073654623085317416159859595336770374690329863003370614327356968108781212432979917658139) :: (Ell_certif 335947477384140456308990970119819575071388534754290218039454553435747210554623500062293494235936618391239397686123536858935293047723017296073429923882430454631055154951252350613021271292628103756129953 61272192689226180 ((5482870167354267257607637759390613336353903857104278797797973605619616980776342314286416366301216061477057700645438332359796418342416129348029537550994516104206465180044756152573396239,1)::nil) 67659953930451311472990864223085735210079086295301928454075386470891537533582780581417616270315433277042711596982141108932079854678454563953901902750355311301525926783273654670910411701941988050111129 236215445039934235077159642057899705975302965515217919089250374927793327266983829420881174002799930846361953186108919699164625868861829548830700056907998742012700052704187494879558273615557748035783926 97544128060357381624668416715833574700959006474408050851385990510914959378801261649207390059647389320374380912190573807465600265401807234270419386579685850910180387549334030816556072824860146631411132 315184825620623172576840575212214728251201089291259177446652694940783026271100760879415502963393099976742725854669077585777075502164196162722609892143679673177574488701679743432306168460298045841583800) :: (Ell_certif 5482870167354267257607637759390613336353903857104278797797973605619616980776342314286416366301216061477057700645438332359796418342416129348029537550994516104206465180044756152573396239 194732 ((28155979332386393903455198731541879795585234358524940933169554082634682439333762885845245601284398028077024827928428172220063365176245497050310689161273141061795002939279058593267,1)::nil) 762899260905468864489601983943557076501699663345025861700379649834355211003995852332151530920934449661479936580674356542119847740241527963492035752737141317720041570840210603645689087 1564189009573116864938960761925120993586657234999707619894691798857261264138273392702743277053790565724655025093954516336621592814356157980837374179490821301128126406780676836773417659 0 1327131524628896662145672309848656397437126529980855703952307243318501538707559214282255953870289759283339166419526721840471774284465025344065473482613372596979583073728162966634605579) :: (Ell_certif 28155979332386393903455198731541879795585234358524940933169554082634682439333762885845245601284398028077024827928428172220063365176245497050310689161273141061795002939279058593267 324 ((86901170778970351553874070159079875912300106044830064608548006427884822343622724956312485825059682876406740368415335735560994800106085065022404473372296229374133448022542193109,1)::nil) 16297102580403566367161964673125110700317760118369207348005010103496170928485853628516659100885795580416826227855534697094261830491971166199604480411964155700961097679710305132854 6536636445010385900061730650500363025114403821087527373109046721757192020214317664514771854975574478060784040175902073064752312598585856613192410604527752179866979355098166191036 18723958261677473113221969032359998509799591022477343605424412729325203642926816818727516202943773910402699510782172369207168611714543835021497392992740387633318822038726299252410 12392785215091289308093992545568392528410735229211222486655570420290528542907148716347884089489203303174407508098491687189750993730067710907481151135018661636173825681546629808074) :: (Ell_certif 86901170778970351553874070159079875912300106044830064608548006427884822343622724956312485825059682876406740368415335735560994800106085065022404473372296229374133448022542193109 5681705648094 ((15294908987078985354203735676485140709758659221923977896590807779489052195326038834941036407011105349895577195624850121454150806394691500878317725933700221468262349,1)::nil) 15649192227089152126604771745513099261128958400016390154942046736435147395678488876588930911382710596898425904413406964028489296060830461785937761885061571583923643880159907855 72021006382704849367014271927016948086864117220247759812230819730204915185347809597296399654854317598479856772061072101302973974328990589224755862886158086708612199392930998707 21605267511875000768037874338835233475417013849847279062274051189878089270202070492821577453431468222421866913976996425629703793029421258810120077799062807200200018816214116365 79750093274589995979684677177085564231756958454345990597399863981170744492452539253482002317384008707481776769795644694229622997871356558068121152661571743664629196552844099459) :: (Ell_certif 15294908987078985354203735676485140709758659221923977896590807779489052195326038834941036407011105349895577195624850121454150806394691500878317725933700221468262349 392 ((39017624967038227944397284888992705892241477606948923205588795355839418865627650072372795655007873836503332483784614153481610258887172677098575594115652290413713,1)::nil) 8110519805877672452408941351668309151665116435581876477459802197646643366650283957772631493061835411105086386898954863802419766131699586146693455340825354003856979 5051952626727052597573051429356284845755500457427446317591548244172334823215297462340067002243093862330626927893347495957778049624359658132178084949080579481552045 3501182966284904330352645429997992189097009849133506243085794520118023478479755462501825474095325351684697846896372872594197013986874250287310583553609412621850036 8180918503687328554475709095786626533881337424955604855327324267529995745531679448569164323664595782363243626686186985681547984788715628190441643584673254417551021) :: (Ell_certif 39017624967038227944397284888992705892241477606948923205588795355839418865627650072372795655007873836503332483784614153481610258887172677098575594115652290413713 7070268708 ((5518549093175176666057383584379705005724016904924248206605614536685784314271022799462679487365861619501662014572153133417978306240365261212816969584699,1)::nil) 39017624967038227944397284888992705892241477606948923205588795355839418865627650072372795655007873836503332483784614153481610258887172677098575594115652290319633 9834496 0 3136) :: (Ell_certif 5518549093175176666057383584379705005724016904924248206605614536685784314271022799462679487365861619501662014572153133417978306240365261212816969584699 334263 ((16509601999548788427248554534542276607713138770741147559274028345003139187613275305451313764616788752931011038092192249876626277023089986833781297,1)::nil) 0 500 5 25) :: (Ell_certif 16509601999548788427248554534542276607713138770741147559274028345003139187613275305451313764616788752931011038092192249876626277023089986833781297 1213690 ((13602816204754746621664967606672442392796462664058489036964981457376380443666769252122027096738169080265052049605013793420575426095548154573,1)::nil) 448 0 8 64) :: (Ell_certif 13602816204754746621664967606672442392796462664058489036964981457376380443666769252122027096738169080265052049605013793420575426095548154573 55755347 ((243973303668162026175982145832083914620717232090018003779350193217816180361146579494385725025508722466098810493939484168513002672357,1)::nil) 13602816204754746621664967606672442392796462664058489036964981457376380443666769252122027096738169080265052049605013793420463532263100354093 14406462054002124060149776 0 3795584547076) :: (Ell_certif 243973303668162026175982145832083914620717232090018003779350193217816180361146579494385725025508722466098810493939484168513002672357 260 ((938358860262161639138392868584938133156604738807761552997500743143205118073620192660435960539178911597691135126575280479053913361,1)::nil) 100 0 20 100) :: (Ell_certif 938358860262161639138392868584938133156604738807761552997500743143205118073620192660435960539178911597691135126575280479053913361 144 ((6516380974042789160683283809617625924698644019498344118038199605554866528881861084368276474613330180478085635203691765991371547,1)::nil) 0 78608 17 289) :: (Ell_certif 6516380974042789160683283809617625924698644019498344118038199605554866528881861084368276474613330180478085635203691765991371547 46 ((141660455957451938275723561078644041841274869989094437348656513150285639608662452706568118337596520136063783505875449325254677,1)::nil) 2174199106881120459816490674971635584521992164021939444662492154997427362212394105153390335578541228429460578998741812232774103 3365507249737308274864123182445826111892182721278256295310074573542643764676353332898894708904641833713147729354063455287990922 470851323200288803558706463548727975155661405543024749340630378299556029611505390542947393950524523266068502175782782362524979 3127521875946249672704339738286748819392024753481397756381025784981019359461229198495424014585180531383110066010970833484918005) :: (Ell_certif 141660455957451938275723561078644041841274869989094437348656513150285639608662452706568118337596520136063783505875449325254677 15652 ((9050629693167131246851748088336573079560111806101101287289580411858586342498361164969292056709072990725049773873655536479,1)::nil) 0 5832 9 81) :: (Ell_certif 9050629693167131246851748088336573079560111806101101287289580411858586342498361164969292056709072990725049773873655536479 6498 ((1392833132220241804686326267826496318799647861819190718265555361831229796569850625839178454417869251784841619104850289,1)::nil) 1039728455086613973433401323145200384698429834855898538075751269110026486218757301997212879452159032273818230263605379939 6989379613557521878304192711204706436494445474726618567707992677735818730365157283835400251436340859203195136299691924481 0 4242197251294288631623210645132405719736238227117727550095363290465439393554010512717998876810899601270575127201792622999) :: (Ell_certif 1392833132220241804686326267826496318799647861819190718265555361831229796569850625839178454417869251784841619104850289 97226 ((14325726988873776610025366340551872120622548102556833750905153357973331770916665978129081043537295548265452155253,1)::nil) 907648681988376276189852766435838309796896729603805418612201976370405629577284240098755619975549643219784196110386896 1248004401049069626656901437888776644838270123786462225171083949686603119545445939469611784372316534007504053825228395 15226812069270501913403396794233463213568302702045588855139234406743169521150629479421985577107458798708822126997528 172564451601818635016691709805777896906715790743782551190338386532751327440322828520281435205456210314739788450541862) :: (Ell_certif 14325726988873776610025366340551872120622548102556833750905153357973331770916665978129081043537295548265452155253 884 ((16205573516825539151612405362615239955455371156738499718318446941468393765787591459676576556363174208030165437,1)::nil) 100 0 20 100) :: (Ell_certif 16205573516825539151612405362615239955455371156738499718318446941468393765787591459676576556363174208030165437 11671885290 ((1388428100018239568529241891017182876670935065087372849256700841778774518171518421296644837192773387,1)::nil) 15697030794987221911989561532769504074466796428164003961270189181863198649965484259348139380327607673293902865 15553155482955817893944654840229875192427438356575345249573725535809827341521786882287585064112390018112632009 2535083458026674943542251354063331100554470984268029810276514199981655898535928014099240218224551814368916069 6048117110910210574753197773139501056400030399099387972108055725849462827249846886107859989817630098728432535) :: (Ell_certif 1388428100018239568529241891017182876670935065087372849256700841778774518171518421296644837192773387 29268 ((47438434468301201603431798927743025716514113198281688186192467944166995612897835401058411114443,1)::nil) 0 78608 17 289) :: (Ell_certif 47438434468301201603431798927743025716514113198281688186192467944166995612897835401058411114443 1593 ((29779306006466542123937099138570637612375463401267519671917532606855882859740097087731341711,1)::nil) 47438434468301201603431798927743025716514113198281688186192467944166995612897835401057870505539 4964006108754 1431 2047761) :: (Ell_certif 29779306006466542123937099138570637612375463401267519671917532606855882859740097087731341711 3494 ((8522983974375083607308843485566868234795496106349531875898626161343878134012752012048391,1)::nil) 28739290841078821007204482043129563700312783545027511872634824633825013796055195195511992224 12464868575776434745716972769003119621230050191635076021083279988667471378939177784784124852 23194925452662805499617422990227607865838139760072830534441155665012999552044310824949621353 24815782999099208202670498396842423583427818939926348036003782235351067699054664829677011299) :: (Ell_certif 8522983974375083607308843485566868234795496106349531875898626161343878134012752012048391 1397835 ((6097274695779604608060925277709363576384549104490062015458621043408646602626756861,1)::nil) 6089048696140007323824495695785015729858786800487096821992769459891332468568304669977694 5632288699038566233851870429619660770150906866484989116851712444354854955063290567497528 0 2958086091617326100224982165842348991338594659364025280392900036527013493360650530642936) :: (Ell_certif 6097274695779604608060925277709363576384549104490062015458621043408646602626756861 1573336561230 ((3875378508342098808661856648812177795160013387922165832279969875723789,1)::nil) 217826212521276822817671259733094735060529110888341866775779824805477537943966178 3197011743159270839815571144862884993862707314731879747028545701411994645609657274 1934200340812311815995791009775068134780855536014587659786716612096639633108612302 5047515779578290928095717620042258795299136643454719248463489951219833688653341673) :: (Ell_certif 3875378508342098808661856648812177795160013387922165832279969875723789 465948 ((8317190992003611580394929581867886211992808697835282334908634341,1)::nil) 0 8192000 320 6400) :: (Ell_certif 8317190992003611580394929581867886211992808697835282334908634341 4809 ((1729505300894907793802231146156764192366987457888690089864151,1)::nil) 0 500 5 25) :: (SPock_certif 1729505300894907793802231146156764192366987457888690089864151 2 ((405430406811047691269554988139940268027939908315737799, 1)::nil)) :: (Ell_certif 405430406811047691269554988139940268027939908315737799 324605 ((1248996185551817412761833574662425555862510374593,1)::nil) 405430406811047691269554988139940268027939908266179567 134414314742 571 326041) :: (SPock_certif 1248996185551817412761833574662425555862510374593 2 ((732565612428816637981867525933489409, 1)::nil)) :: (Ell_certif 732565612428816637981867525933489409 56862934930688 ((12883007416373489101957,1)::nil) 100 0 20 100) :: (SPock_certif 12883007416373489101957 2 ((6191836477731649, 1)::nil)) :: (Ell_certif 6191836477731649 18723 ((330707491243,1)::nil) 0 1080 6 36) :: (Proof_certif 330707491243 prime330707491243) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t250/prime6.v000066400000000000000000000522721451023060700215460ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime9163169557 : prime 9163169557. Proof. apply (Pocklington_refl (Pock_certif 9163169557 2 ((563, 1)::(2,2)::nil) 1788) ((Proof_certif 563 prime563) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime6789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789015413: prime 6789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789015413. apply (Pocklington_refl (Ell_certif 6789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789015413 28387 ((239159204765522994137030687408207595460798214014674600701851438651930308905528395670205497473808868343921556859403604588607079645995852423157319833570001900765636107157605351745884825384496357524542089728531302339475050590967567359908256935796293,1)::nil) 5172562320982348546557997443646746086007619808764045855030243066163981003424932763961718759581537798930737544409226560639845342126099574913079815164662619811687036619823408298705765946953957730267010344927108866513838056674339674088314324296038399513 28564565540010541952502464651311946677516892379994296200633266338063751798061969286050995634626504169665942102110224502023682800795747672398693128539902455296076154967863997935843926455142510368220669011884790291907010094693488136890869865037392853 0 386412708789106708757298598000015710858707799723018016354198470787084903244033168104901882099660018456348315373126572284864257223363327276203938148161817732358293564947782142649384414502954347600428575471767611871228621306007688880674326250901053393) ( (Ell_certif 239159204765522994137030687408207595460798214014674600701851438651930308905528395670205497473808868343921556859403604588607079645995852423157319833570001900765636107157605351745884825384496357524542089728531302339475050590967567359908256935796293 76543408 ((3124491200672995826590719443903093463787217496439074161707712813779212821377490739244397080853897547179001447902654198368154374797374801174098968221043708792000240993266099854625838103664869000714494098147824185857525129842269043299295123,1)::nil) 0 5832 9 81) :: (Ell_certif 3124491200672995826590719443903093463787217496439074161707712813779212821377490739244397080853897547179001447902654198368154374797374801174098968221043708792000240993266099854625838103664869000714494098147824185857525129842269043299295123 39 ((80115158991615277604890242151361370866338910165104465684813149071261867214807454852420437970612757619974396100068056367654314572380254212316677740992751468165367429431861629894555920506340545933732253573603731493091574783504219348905921,1)::nil) 0 1257728 272 4624) :: (Ell_certif 80115158991615277604890242151361370866338910165104465684813149071261867214807454852420437970612757619974396100068056367654314572380254212316677740992751468165367429431861629894555920506340545933732253573603731493091574783504219348905921 525 ((152600302841171957342648080288307373078740781266865648923453617278594032790109437814134167563071919276141706857272488349085903158172835152905245608438645823777115598184280161899836842982460583930346133662126384328066580103382053293857,1)::nil) 0 1080 6 36) :: (Ell_certif 152600302841171957342648080288307373078740781266865648923453617278594032790109437814134167563071919276141706857272488349085903158172835152905245608438645823777115598184280161899836842982460583930346133662126384328066580103382053293857 304639258 ((500921331817227434760388236923513558054755967357515192357294992093875283763031742330905255694497257724221829798681064921238433607306210734978993485865931760111234286508902631823992005474809876862184254055166669059032044700749,1)::nil) 82245117548158093318357894503919404646175062469458158841417309354058165679407110444328647985920839472589939987574870145552497934784937220938706195670714405654123037276458075056325763879113055071797258358892424714962209275260912672420 40955930570394507354037399849862554731594078234733478396977862741341538894163474469182535294034668171096100094068341380073295903200050962410175109775739794965791703392815509535965621674872812792824663395177938633193182403471971077603 131086428201695562427929201390844342954990627990994193453091836808572432945286887943408251508356461455954707093702619306808937410567125971152523565188081016174972644058136883459166389573855286750960097640426779027077245566189598515778 114389061093765505764553834664320450298652537858099643645697758014297248227491205030962766980808033530955046344808165113758006424801307195586100485528396729406368268405810255054872012154422262917861162249616722258904430795697319073796) :: (Ell_certif 500921331817227434760388236923513558054755967357515192357294992093875283763031742330905255694497257724221829798681064921238433607306210734978993485865931760111234286508902631823992005474809876862184254055166669059032044700749 1335400606664 ((375109408605551274885599528026180535854401200975786283947045699897665718919841275680932743745031605802282258022286515633221019967855292419126822023817091605522075032799942243464211380071296103586880833976115829119,1)::nil) 48149342474401599992346666667608179966551099367649228500001476487546968196727965938274550957082830728312346991906661542150391235064518776478606392566043119906731787517282233418841648430581447562810140411803236975060430550942 212042990550856044887092703160028723635886961729364683510608040792527190045118928046799676016788461523053824932900651967856921721610610288414383810601333064378359809425037786445193458299213512604085491698957397350005338190479 167511902282868283725482648197757968194784690055217125561067893388277922093133826229029061338206138198715512575604461223528324530176607057877853908858375806296424227647173048656284243025830924338295790072033065402830370695067 47568806234703974702487702354796537576367516383488869290144116336828469589198993335206763593217491763796922734528774995701751767738941534813906163609564321499793426851995609136873363752811726832356129418192643850266404826087) :: (Ell_certif 375109408605551274885599528026180535854401200975786283947045699897665718919841275680932743745031605802282258022286515633221019967855292419126822023817091605522075032799942243464211380071296103586880833976115829119 607 ((617972666565982330948269403667513238639870182826666036156582701643600854892654490413398259876493584517763217483737837204981878526676838046346630578793515755383482966977903689792217302081498840869704784904504319,1)::nil) 320838435812270946943417374647671357879111281968137576372675235567661202070076712146215611078577967240324040416589439997750950653993741253225383918096703192471704672287053159854225996580411267235833202074670346139 238667137827797160316493252088664008487773934263696415322946707057099395935212325460710683605703704603620232472696889907127941381813663565257020528387947952595219568527645938883541721595533969517874241977476135307 261245236290864901435659443264633450862162832903678646257152657257967500487164619179736979891085040669916169863288843965858317757409760645954225751798505198685625802048103524303667592013158929321448334086926916963 56885862465395853680020722714208538299960862577757326155599881278564354993511056877524273286353512974696003375903619869572594712581011979979237186013278680157037611772391794545391288523143849591913970685819904533) :: (Ell_certif 617972666565982330948269403667513238639870182826666036156582701643600854892654490413398259876493584517763217483737837204981878526676838046346630578793515755383482966977903689792217302081498840869704784904504319 1259004 ((490842496581410647581953197660621601392743933161980451338186933197671218592359111181059202255507992443044097215711200031186522716820393990768792901440375981571279287891103663733664265129482084565599479561,1)::nil) 216258006558031061381297879626101038659138829501809071936417466433005555525991631578863295635477717705223902947921259434344480079845582189025723340440543372246627625777252857814475388987323177453671305686100671 316093387018284193829731387206919921854826166568400998488978327935948352585099762971222759881131869680347000800745052704991396004077883278548599889900417493364729743025990977846402478952672357491596856586121427 0 67284981041438105396139250948791413354146278135642074085998212419510201327406899598332061756548777790433300738805296064802304031808296317391266085367290989510069135058027644225159615816634408564580202151216299) :: (Ell_certif 490842496581410647581953197660621601392743933161980451338186933197671218592359111181059202255507992443044097215711200031186522716820393990768792901440375981571279287891103663733664265129482084565599479561 197516 ((2485077140998251521810654314894092637521739672542884886987317144928366403695696101485749014031815105833412555158813578701026837583409369586827078057533474191481170050661510472180030434123227462774353,1)::nil) 490842496581410647581953197660621601392743933161980451338186933197671218592359111181059202255507992443044097215711200031186522716820393990768792901440375981571279287891103663733664265129482084565599457691 1102248 27 729) :: (Ell_certif 2485077140998251521810654314894092637521739672542884886987317144928366403695696101485749014031815105833412555158813578701026837583409369586827078057533474191481170050661510472180030434123227462774353 10260 ((242210247660648296472773325038410588452411274126986831090381788004714074434278372464497954583997573740411516084476325753384152850717744940567852905730681483557446124323300611618510477863800945499,1)::nil) 162739040014809122994626504334338050513103220929472383113374302408086958158903656882709792949832626218253933639174966929753901157956368632703241299798846683335348360158008508582525997733937975163893 2375559236819783556288407537857558711847667705433322306748486644700241993195010860484835421380560763814250661851120904675854987791927525960118713899973500571429853321240883305830192467679061077747170 0 2480027129070302124621307448150335743544740851755048038869499993591504734171607226214634446620981802252491179106857393329713697898169204941123549708021537319507002984386551166784676075435174095734095) :: (Ell_certif 242210247660648296472773325038410588452411274126986831090381788004714074434278372464497954583997573740411516084476325753384152850717744940567852905730681483557446124323300611618510477863800945499 1955003 ((123892519684444625646494314862130947345048204083056052134130632027016876411073728513203281316702618771977937128678358565390332672389373447713058673491888896854720500807772931900215163262709,1)::nil) 242210247660648296472773325038410588452411274126986831090381788004714074434278372464497954583997573740411516084476325753384152850717744940567852905730681483557446124322452779376126974279907415579 9501955807025115933281263315351902213136 0 97477976010097357444) :: (Ell_certif 123892519684444625646494314862130947345048204083056052134130632027016876411073728513203281316702618771977937128678358565390332672389373447713058673491888896854720500807772931900215163262709 3443538133488 ((35978262729140288406579365769933298092889379544944343706559962261412719725936695845193410478857047267737074500329394542390951018562522978435080335118527354619578735416671289607,1)::nil) 0 96000 40 400) :: (Ell_certif 35978262729140288406579365769933298092889379544944343706559962261412719725936695845193410478857047267737074500329394542390951018562522978435080335118527354619578735416671289607 8491401 ((4237023163685272713722902236030697183290411034050134213018553977301592484672045972766260660383653099883539569680558109039018482422207833958650649463944681656556925275101,1)::nil) 29647140051453827193500489233658541937058409596827455313429184149961501470032967817201061714609125944565324104389988261684718237985454491291164618427174389177274770456867537313 25343285150892447882545421987805884561914629272740457398921723341133942855351173508069667202657078209225539712801205880362642654959671564267244820148776577336444663464565639459 0 13397022888468552672989549568182036448926646813413225912001990496707355613451888152566483480363247227734324268859195130950346235513829296335660445449526089973085403323378258736) :: (Ell_certif 4237023163685272713722902236030697183290411034050134213018553977301592484672045972766260660383653099883539569680558109039018482422207833958650649463944681656556925275101 225658 ((18776303803478151511237812246987464141711842850907719704236295532627216782352258607105362960702524851623343527873112028447161938098897720051527441068980283569524829,1)::nil) 1588883686381977267646088338511511443733904137768800329881957741488097181752017239787347747643869912456327338630209290889631930908327937734493993548979255621208846978164 0 2118511581842636356861451118015348591645205517025067106509276988650796242336022986383130330191826549941769784840279054519509241211103916979325324731972340828278462637552 3177767372763954535292176677023022887467808275537600659763915482976194363504034479574695495287739824912654677260418581779263861816655875468987987097958511242417693956328) :: (Ell_certif 18776303803478151511237812246987464141711842850907719704236295532627216782352258607105362960702524851623343527873112028447161938098897720051527441068980283569524829 906076415286 ((20722649311594181389349899775984559542674178117419494648974303191658030376541764317693576591286603261639445921389780242204619162090791561252695060698881,1)::nil) 10480015953622457034393108263298594235505762151629829012531732461066123344191759281482415971003023078246046824533095482268742161924899652168190291756117687290647516 11766926094840972038235033450731091264171531428024422136913665583878834409863880783389462611270491421676911841044779206864027527733178521529353371909409029321241474 16671276651791523096369408425919589850927037683490817754424510997783244299271504576190054127081470844153614768066167734325295236598933018072555124390176427748562301 8716067110777354043088378635772611578734046114041862881487932430721917510058669031613233766874601838675894039897669960887327656393644232567200140772704068279222572) :: (Ell_certif 20722649311594181389349899775984559542674178117419494648974303191658030376541764317693576591286603261639445921389780242204619162090791561252695060698881 860399068 ((24084927660096188515803808118472484843131162152095095771273317083204965043670236857109113339029819357882468071002577253122161326291296341212417,1)::nil) 6712912318415166032735634585281712404910233434602126153465374710487978766001846900036624698428026901300915394971418204960765965732788465461777358867595 14053972059158077219688718509562639188423156179963306555582136733362561418924237456896488404329979658487582673485054611302257336749854206026834359997325 12969983445319475749755047270367620787975111069178153762531089365436726484956646681985905012630013444092490618312404087131477243246835302144761552128350 19008352640203231970828414003305459882844947745568914737661832078807804015309922506982886064391520338050184617141237224203407778663439077824214700488260) :: (Ell_certif 24084927660096188515803808118472484843131162152095095771273317083204965043670236857109113339029819357882468071002577253122161326291296341212417 7264 ((3315656340872272648100744509701608596246030031951417369393353122687908143312211522237797210716953380320114509279921265943105137011815921253,1)::nil) 4884120169282898001985396943786365305032158011623263500515101271926199085591613765302022697026954423988489367316653667952956287098029989563492 3023814630572968102841658547471454284655912782616892183332788218370870162185476755846693509178741260865197665377519973182645268889999340548822 6400442249533501250313653494048806653280251925084533729170234941586520991536529629773711544443698096986472862350347704510884342461004248562753 13595754321662887206020924901748141835526472201719256592965883672142813095692602762630124232475282612241976179931192000774865422080475965741438) :: (Ell_certif 3315656340872272648100744509701608596246030031951417369393353122687908143312211522237797210716953380320114509279921265943105137011815921253 1265311268 ((2620427419502181061822919378049519271526814563980803314393113523342072050685149551032878748682036545026120611288210337230002150401,1)::nil) 100 0 20 100) :: (Ell_certif 2620427419502181061822919378049519271526814563980803314393113523342072050685149551032878748682036545026120611288210337230002150401 28378 ((92340102174296323272356028544982707432758283317386824807707150726743154680909066306534481152546724424449621882923085086387983,1)::nil) 197520530565341930198184604243344844653756893020515289672281307518735469373805118754664369281026021198312812676114007894756064727 49883742907448117156858304401771141738391438535159684439174710058311510311202723134003918937627163826882427521737177390449283238 2430040613167136233662369615953359111004523365784397888770826825738691946181638833091858742825446811955611817791555502859394075306 1179723093672174859488091387409730370237423753738928704575496934893858554405728545933044730764322285975605959725609950987093241871) :: (Ell_certif 92340102174296323272356028544982707432758283317386824807707150726743154680909066306534481152546724424449621882923085086387983 30903969 ((2987969026706450659213256023683647476890695927030823283821801378755820603433932427736693953792657984727305774044496339,1)::nil) 0 42592000 1320 48400) :: (Ell_certif 2987969026706450659213256023683647476890695927030823283821801378755820603433932427736693953792657984727305774044496339 18695812732 ((159820226568284106153254553453004039048517354769940968181800098530388930121024434714222341338260374735469707,1)::nil) 0 2299335540082698358847700924475306847451043350097938230128495592245690073736268313531752769129506339809684521432678707 1493984513353225329606628011841823738445347963515411641910900689377910301716966213868346976896328992363652887022248185 933740320845765831004142507401139836528342477197132276194312930861193938573103883667716860560205620227283054388905166) :: (Ell_certif 159820226568284106153254553453004039048517354769940968181800098530388930121024434714222341338260374735469707 117623 ((1358749790162503134193606296838237751532585929367053788594842608017856929600703043663607894435085582731,1)::nil) 30839892518647999683606505903342619111473549922376276572285251980578662673678763962747524444377848791470266 52537218442677060114946720925135203022209356373903075659973811518557021702229980880970872570731361035192886 129790684630120191760174725039082490330352600676689843363918696026026864481389622766029639703914796164224079 129729945198772408146628198597561600024816480853174780972161310212250964889999420395499848159982681370673790) :: (Ell_certif 1358749790162503134193606296838237751532585929367053788594842608017856929600703043663607894435085582731 370440550923203790 ((3667929406692266288026121049769770559368716846812355845159381606515172960587608989463,1)::nil) 923811201559820290460058068616625666982884596139431239444022704301034392460667506619173888565212518197 1355456960579559590915116058512481702513766503560976678093280782602667708437289000346191339947419220018 798517639116596135122162585098680619108680156698087649917428505333547743803258481680689347062626943901 16366655857652332950368298914514191245332185705482573930096083320698032269909670133320245834396618075) :: (Ell_certif 3667929406692266288026121049769770559368716846812355845159381606515172960587608989463 148024408 ((24779220239761177008227731265574597395915408890994692626578352967217116437223,1)::nil) 3667929406692266288026121049769770559368716846812355845159381606515172960587608975463 784000 60 400) :: (Ell_certif 24779220239761177008227731265574597395915408890994692626578352967217116437223 4863 ((5095459642147064982156638138098827348487316862961642783571764450832994283,1)::nil) 0 685193 62 961) :: (Ell_certif 5095459642147064982156638138098827348487316862961642783571764450832994283 6247880414004 ((815550123322799369710110930529085332665654975143973008537863,1)::nil) 0 265625 50 625) :: (Ell_certif 815550123322799369710110930529085332665654975143973008537863 1388890468 ((587195421174709487393581082973693297788884280732317,1)::nil) 0 742278041930516613837718151614362822308975035970881683551923 407775061661399684855055465264542666332827487571986504268947 458746944369074645461937398422610499624430923518484817302608) :: (SPock_certif 587195421174709487393581082973693297788884280732317 2 ((1675040282222268303476708665587504700501158961, 1)::nil)) :: (Ell_certif 1675040282222268303476708665587504700501158961 41504575 ((40357967337872229831934528129557913213,1)::nil) 0 2322432 144 2304) :: (Ell_certif 40357967337872229831934528129557913213 452137 ((89260483742476793138452551090511,1)::nil) 0 16464 28 196) :: (Ell_certif 89260483742476793138452551090511 5141100 ((17362137235703800833691231,1)::nil) 0 5832 9 81) :: (Ell_certif 17362137235703800833691231 2925 ((5935773413918105370421,1)::nil) 0 8192000 320 6400) :: (Ell_certif 5935773413918105370421 319501 ((18578262396032923,1)::nil) 0 1838889 78 1521) :: (Ell_certif 18578262396032923 2027493 ((9163169557,1)::nil) 0 78608 17 289) :: (Proof_certif 9163169557 prime9163169557) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t250/prime7.v000066400000000000000000000525771451023060700215570ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime556373299 : prime 556373299. Proof. apply (Pocklington_refl (Pock_certif 556373299 2 ((271, 1)::(2,1)::nil) 1051) ((Proof_certif 271 prime271) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime7890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890125489: prime 7890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890125489. apply (Pocklington_refl (Ell_certif 7890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890125489 2800502725 ((2817395386319080387853899065414367744797244934780657605407103430018428847989192968523619118381726786853604059849254827833774102085289823415793155218414194594111583677098247841425645194906014800123522842568789640151853226030165616657343602537,1)::nil) 7890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567810890321 271737008656 0 521284) ( (Ell_certif 2817395386319080387853899065414367744797244934780657605407103430018428847989192968523619118381726786853604059849254827833774102085289823415793155218414194594111583677098247841425645194906014800123522842568789640151853226030165616657343602537 191318754650356 ((14726185059420874010862401535428877671981188877812049369654426299302862790334607425118214870934947842341870577388169936569460728572893253210629402889337335251265271778080010873111377823699730632821732050189912898828853848646821,1)::nil) 6084 0 52 676) :: (Ell_certif 14726185059420874010862401535428877671981188877812049369654426299302862790334607425118214870934947842341870577388169936569460728572893253210629402889337335251265271778080010873111377823699730632821732050189912898828853848646821 21210 ((694303868902445733656878903131960286279169678350403082020482145181653125428317181759463218808814136838372021564730963136033569369341210198918098666065471780652377294950807578539063898912607539492451233006755015332941063283,1)::nil) 8466923643286313753270537789707173637291516464895030851109865554457305450644359585189875411957748711469524127912902440579115242280840447492761253267783633956496489395506629398819822485971628898810245104036815677216129769515134 5657655658527616525079310940781278014961244993305394714380962122604541899256816290505524854062017035883848561486305879572360784262993165965748276004836408091833907942812869198467383063265769949784812378419317050669727415478235 0 4057209248136656069030487002228773796167388048325803128207964523570325448084289972066395431324792029267947363486333613824668387997708308106867137919606283444247925362820359670106219809436643116485135645014474576954508550686581) :: (Ell_certif 694303868902445733656878903131960286279169678350403082020482145181653125428317181759463218808814136838372021564730963136033569369341210198918098666065471780652377294950807578539063898912607539492451233006755015332941063283 397143 ((1748246523046977370007475652679161627623223066629408253501842271377446223220142824522812233399088330496501314548590046023865402606502210729946089364047786348905586632726274553281196019855060438761770055392880057311313,1)::nil) 335675877742639327249686303294274944780714897522883807453998291799817322759250682569811853331215493306733221037322253636076005430642797467027838143171324501674252347984143193399511019401536596607611225437620021815369643348 675218255633968739026113493632497597487381390449329375143243799664322802025803407819686767711991934430873209829704399247234690947396324973423016400154961785615993108981486792853777129276375797338080467997873133144327370694 0 18647678009827268691305513897433510748538487085066491996765991199471842150792086256669891114764858433122184238248660240975785105027107850928148795004157413070242632322920960544994152667378377885853660381865725269545868757) :: (Ell_certif 1748246523046977370007475652679161627623223066629408253501842271377446223220142824522812233399088330496501314548590046023865402606502210729946089364047786348905586632726274553281196019855060438761770055392880057311313 64 ((27316351922609021406366807073111900431612860416084503960966285490272597237814731633168941146860755164007833029772293418597684636166162688311564193892820323129052017147929578447651510877392492836724605390942827947117,1)::nil) 1263734003374542374440500911251053836259382983219596276110836654749734996952380674260586809418076688337268954161085591073243560146966049531343578760154113555918949549858422932420461621722457306948454830381963160500007 268144129525971001895369599230949522593738852479045278866793361445442895147987111834660339812657668072711284653047876323831516461887725423431457977945630018119189694171964193879231957884065033327954426709313155698287 1368661360181267494920719868279578958346889247709578542678208344570970856949316547171517855230702290572687567623538473830424288971792981773676671378048656909278240608631450416187568340403503531241653394905394587093869 1530426219432280834271245108267143868048004338752821213167360339344530398416571691847897098471435034005828992217572955278046137475080920909494779116668433314008122720392653006996480540768919927504020752480937472718225) :: (Ell_certif 27316351922609021406366807073111900431612860416084503960966285490272597237814731633168941146860755164007833029772293418597684636166162688311564193892820323129052017147929578447651510877392492836724605390942827947117 142339250 ((191910185859550485241188267277731900593918124593775110947727246632763606930728745817959144416320552230026736036933944547177760730634201147895773881004229612626372807757976205644207626902400330993297377275507,1)::nil) 13653717759011477913330698109323294158512309299388294853187682666111112333365720229430519398515911033893240140360917354430608257048154988760818154802853694441008900510338559215289319005114944929696284284917924172538 24847015980521307791794014386401524530630381614727977115021793800856361373449725501449767994433370067423699177470687916567254218203901301016867888524108660321773152278875555159674100655288388395538080603066010411575 0 19247252881007516674301851620944198915517360936075941866791660384523389168487876004817833470383200213225410511892884828384522802151533628162409758901425980259483970118530467283593648807048966219408890325008861551126) :: (Ell_certif 191910185859550485241188267277731900593918124593775110947727246632763606930728745817959144416320552230026736036933944547177760730634201147895773881004229612626372807757976205644207626902400330993297377275507 15376 ((12481151525725187645758862335960711537065434742050930732812646112952888067815345071407332493257059848466826903920541540118445361916693635706122157020013525782633066278653132648166637076009572786736118377,1)::nil) 191910185859550485241188267277731900593918124593775110947727246632763606930728745817959144416320552230026736036933944547177760730634201147895773881004229612626372807757976205644207626902400330993297377132147 25690112 64 4096) :: (Ell_certif 12481151525725187645758862335960711537065434742050930732812646112952888067815345071407332493257059848466826903920541540118445361916693635706122157020013525782633066278653132648166637076009572786736118377 77062 ((161962465621514983334962268510559180102585382445964687301298254820182295655645390353317231492266744287195798349198821110000334344438395748495772365995527705879524292435157297346841270557737310318081,1)::nil) 11983931913636914092280189581284429411319522513040079573027447013762720385698334161108173944945667539074881453864017228414129574787295687738580853927263348050379479467688292778712281958184918106873839905 7644010877491870738318677589428503665717029603186845297017041748470157887365797296761116785743018299494276294649197446285149910684004952274955979975411796497719611470734522910014083904831644174973255983 0 3939189740741999820440440245122941074277272544642304987835263126724760435181996481645993025950395476978946710248497928818399921160872525200382085792246826591257762175229455941977976329300459592120871266) :: (Ell_certif 161962465621514983334962268510559180102585382445964687301298254820182295655645390353317231492266744287195798349198821110000334344438395748495772365995527705879524292435157297346841270557737310318081 208 ((778665700103437419879626290916149904339352800220984073563933917404722575267525915160178997558974732888409204466479047469075646987639056843238560184984476255245335389189816594264717410207089587707,1)::nil) 0 39857950524044702930088370766270423228370621461311622265553867397154236821506482782261662437550019101927090999998147382539144780076636453731381480694211896368789181341464491143949218926318236866913 80981232810757491667481134255279590051292691222982343650649127410091147827822695176658615746133372143597899174599410555000167172219197874247886182997763852939762146217578648673420635278868655159228 151839811520170296876527126728649231346173796043091894344967113893920902177167553456234904524000072769246060952373894790625313447910996014214786593120807224262054024157959966262663691147878728431990) :: (SPock_certif 778665700103437419879626290916149904339352800220984073563933917404722575267525915160178997558974732888409204466479047469075646987639056843238560184984476255245335389189816594264717410207089587707 2 ((3791673727872914267876366079976577479472116556232331558730115198550474650945773391183271479431319975888475981274427827295583637613770107630615986331378133516645413412363614467451219846939013, 1)::nil)) :: (Ell_certif 3791673727872914267876366079976577479472116556232331558730115198550474650945773391183271479431319975888475981274427827295583637613770107630615986331378133516645413412363614467451219846939013 131410 ((28853768570678900143644822159474754428674503890360943297542920619058478433496487262638090551945794273467274094080931819675384662906788378499084469850879861490641268880912225588720394537,1)::nil) 36450 0 675 18225) :: (Ell_certif 28853768570678900143644822159474754428674503890360943297542920619058478433496487262638090551945794273467274094080931819675384662906788378499084469850879861490641268880912225588720394537 946007184 ((30500580818717017421344257106058884251215690440635113926939185505232356072146368882794964643609403471039497207045168372233878752508084558584888502800602200658340718474669366123,1)::nil) 28853768570678900143644822159474754428674503890360943297542920619058478433496487262638090551945794273467274094080931819675384662906788378499084469850879861490641268880912225588720300457 9834496 0 3136) :: (Ell_certif 30500580818717017421344257106058884251215690440635113926939185505232356072146368882794964643609403471039497207045168372233878752508084558584888502800602200658340718474669366123 21684 ((1406593839638305544242033624149551939273920422460575259497287654733091499361112750543947771255997101497305766052943787557923232620958032581084795668483340965166113736429449,1)::nil) 0 9000 10 100) :: (Ell_certif 1406593839638305544242033624149551939273920422460575259497287654733091499361112750543947771255997101497305766052943787557923232620958032581084795668483340965166113736429449 1490834848 ((943494070805558164845120137780380043325845588538707984036396535005795289379439533025924025499145231071127730747140701385526114329186193671880022896967212606899719,1)::nil) 704351462909901117731201677222560018201957010154042415646730724188693608385153483176995358470729447983937556178160187256871841135512631805763275729821968455839368705218833 1061813148135965491083383085870165386421536885573646128233988829759395974019639722099257293248499156703596569667061098709917196055811164451076800015298911481735273755418720 0 144638602711646742310521576037716732179258892384922443440413630418067794274566470180650799942153929479429403629830977586952827679798937282372398045761904346604597375327924) :: (Ell_certif 943494070805558164845120137780380043325845588538707984036396535005795289379439533025924025499145231071127730747140701385526114329186193671880022896967212606899719 10645791102 ((88626017715893948868988443709214165954037671904968400162056508386838651437163954119938535555463605446450227422772601473660608504292065675729304195721031,1)::nil) 19385789376487755380796490457096587623417584824914831843770345588610200874553282312038788737547680427150560867248364546459809062129912098355521424272948076919490 923242655221517933614037610401186442711400153815905690965495777177593604351761158778086690381953948434777356227258855685675005595801005479296082369223770030164060 100261929490994151902970737106860868390518966740100334059882121849379985585229573884988027277183639670789969810052257249153237237834427679589885659557875781099888 632694190003819912452771739687785578292675334056204057759265215893307104965237535096747181417978973393111797111572854911684596818396232819781917342838472177803345) :: (Ell_certif 88626017715893948868988443709214165954037671904968400162056508386838651437163954119938535555463605446450227422772601473660608504292065675729304195721031 12689031520 ((6984458788379930580311809621008346738982461910140199585701439599453264770293592534526130115734307926697088196156760175816999876068829922422571,1)::nil) 34259276318666625912387032929685171842798486287249841579489188388042798083404191132849773335116910756849449203757760067849141926154515117975708780687354 77297321605321605505251010185416084362550007035253232159952475481455858170568356723501196310746925158150286373111541390175523346114646464695645689741767 30113595822422864374846720369674823627098479719417355804198660716187790469022921913036232067875016989216228035778121191774621752666005036893839416345088 20337380008476414772297421159120816814261316410472069908305237507818256179393633581264298700636351333072453619502028419273983891918332716172584472379582) :: (Ell_certif 6984458788379930580311809621008346738982461910140199585701439599453264770293592534526130115734307926697088196156760175816999876068829922422571 1532 ((4559046206514315000203531084209103615523800202441383541580574151079154606250103254412514830667794738887978828369770996604291367100052371017,1)::nil) 6984458788379930580311809621008346738982461910140199585701439599453264770293592534526130115734307926697088196156759329477891236616894084806491 9476865744830856719995764701724677178102 9864395859 97306305663056347881) :: (Ell_certif 4559046206514315000203531084209103615523800202441383541580574151079154606250103254412514830667794738887978828369770996604291367100052371017 85501 ((53321554210059706906393271239039351768093942789457240752512533784156426695159429815281487893450177239523417682790675076208260284822119,1)::nil) 0 4185061947386187597843085174957575584562863467084863797935292677748442704956149471823988223464577201713574315105063219539095590892627248145 3419284654885736250152648313156827711642850151831037656185430613309365954687577440809386123000846054165984121277328247453218525325039278295 1994582715350012812589044849341482831791662588568105299441501191097130140234420173805475238417160198263490737411774811014377473106272913360) :: (Ell_certif 53321554210059706906393271239039351768093942789457240752512533784156426695159429815281487893450177239523417682790675076208260284822119 58 ((919337141552753567351608124811023306346447289473400702629526444554393180767746682837335242269618146410430222165000116849597543512827,1)::nil) 2099699014269465026793749581455274753726362452266324654111064868571989127080393166024573559810576440927618734615017620945717971504574 38898773546900729195940697615185340623271057947997598583304269279678647988589360651264343034574927287137198095784982918209354032199239 0 35875124871420302339348279523549068473461541241224239486972184086910072943447885172001223301843385786229755279360569689123050166518642) :: (Ell_certif 919337141552753567351608124811023306346447289473400702629526444554393180767746682837335242269618146410430222165000116849597543512827 2141669066098950 ((429261997619140142488846223878620457458509042688802245068925818068798944616789391884958204510001792442981731609595339,1)::nil) 670035061617898857051600983431380780008419122754481221778687526649775581549931627173975468786827023941805082631248632786810617157543 314284830668411792502760858634372665701795014599999148440903487091931081996720858808712708951785637593336022742214595759582395710543 327113443749397928657296903343754820883343629780300250321986940502319765490925744401070932942097645176624538946397851512617094479174 376693103344175825739523130487799516782849236444168162274344516546205967647712538266391971187715308304998848817673519993074028834352) :: (Ell_certif 429261997619140142488846223878620457458509042688802245068925818068798944616789391884958204510001792442981731609595339 5459215147 ((78630716332004663982671614586692979341286444941203971397335117781179269591021734885698598443506157433458239,1)::nil) 0 16099776 660 17424) :: (Ell_certif 78630716332004663982671614586692979341286444941203971397335117781179269591021734885698598443506157433458239 256140152 ((306983171978459136631853074666298235589734658005528047489892627949787285661749675519320411713597977,1)::nil) 57978528337745368650195069354756387321791946851916190867704519918861241222536876840056001306784210546286821 61207912157707941391187385565625297843905693529791385801873335261544823380827312238607551305728492599635103 0 49835933264331044507441350916883519972361054526739929098212433602349157690332773287462432808076140616024979) :: (Ell_certif 306983171978459136631853074666298235589734658005528047489892627949787285661749675519320411713597977 17325250 ((17718830722700055504645132085614824351148448536416054086076343205817753366011369189951968617,1)::nil) 213488822839612727248952819112009153987701635251868498744098918819101510873896459684167448915822846 0 96661399802586596490441918491536437220697430077378467421128226945039048263743636334612684947091757 159324854463774498659829198599695026586110124607971644389240559660737814786449739638260656149538040) :: (Ell_certif 17718830722700055504645132085614824351148448536416054086076343205817753366011369189951968617 138898 ((127567212794281094793626489118740545948454610794436898943426353709652540176972273048857,1)::nil) 13722009921487773651587087587154498684343270102119568928540564045115632935429053986053121174 0 831636964938652948581035611342696889960198188007246601729731154249432299116912362791098268 6653095719509223588648284890741575119681585504057972813837849233995458392935298902328786082) :: (Ell_certif 127567212794281094793626489118740545948454610794436898943426353709652540176972273048857 15011468 ((8497983861024191291193272311458182900463472605030277961205721787153573626825277,1)::nil) 5089062292402657293769997437319149534372176908258913822252589978320245315572187450946 104424197674611891685519302182186975408956295752245568012508164315953055767303639316293 0 52321984749477263553061839461805992428865901847668536198404343270325433064153130968409) :: (Ell_certif 8497983861024191291193272311458182900463472605030277961205721787153573626825277 18965108 ((448085181535701842098303490360201634520855088722327841856686825102778463,1)::nil) 8497983861024191291193272311458182900463472605030277961205721678620298952559957 13762346127466829996235398 1918747 3681590050009) :: (Ell_certif 448085181535701842098303490360201634520855088722327841856686825102778463 1111250 ((403226260099619205487787167928190447561295578161645278486755573413,1)::nil) 142091577905032654345494645253644398777156575057235390870306878473643443 171534118358319564845212937952916928940376799738762052172382759685933301 0 148106420138500356653730439851243163004750633118469479606042906401779646) :: (Ell_certif 403226260099619205487787167928190447561295578161645278486755573413 38282 ((10533051044867541024183354263836520212095319064510828279209669,1)::nil) 2178 0 99 1089) :: (Ell_certif 10533051044867541024183354263836520212095319064510828279209669 3538 ((2977120137045658853641422912331889625949756403702468119313,1)::nil) 18 0 3 9) :: (Ell_certif 2977120137045658853641422912331889625949756403702468119313 223176 ((13339786254102855386069393269179102536638894176128059,1)::nil) 2977120137045658853641422912331889625949756403702468025233 9834496 0 3136) :: (Ell_certif 13339786254102855386069393269179102536638894176128059 5346 ((2495283624037197041913466795895135583158214861377,1)::nil) 13339786254102855386069393269179102536638894176106189 1102248 27 729) :: (Ell_certif 2495283624037197041913466795895135583158214861377 866320 ((2880325542567639027049438453065920112816029,1)::nil) 900 0 90 900) :: (Ell_certif 2880325542567639027049438453065920112816029 1343290 ((2144232103691413638935812994488857029,1)::nil) 1080122078462864635143539419899720042306012 0 1440162771283819513524719226532960056408016 2160244156925729270287078839799440084612024) :: (SPock_certif 2144232103691413638935812994488857029 2 ((2340864742021193928969228159922333, 1)::nil)) :: (Ell_certif 2340864742021193928969228159922333 3477057610213971 ((673231509062382727,1)::nil) 0 6615898000 6705 555025) :: (SPock_certif 673231509062382727 2 ((613143450876487, 1)::nil)) :: (Ell_certif 613143450876487 1102036 ((556373299,1)::nil) 0 163840 96 1024) :: (Proof_certif 556373299 prime556373299) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t250/prime8.v000066400000000000000000000627451451023060700215560ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime1237231563721 : prime 1237231563721. Proof. apply (Pocklington_refl (Pock_certif 1237231563721 7 ((10310263031, 1)::(2,3)::nil) 1) ((Pock_certif 10310263031 17 ((41, 1)::(31, 1)::(2,1)::nil) 4016) :: (Proof_certif 41 prime41) :: (Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime8901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234809: prime 8901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234809. apply (Pocklington_refl (Ell_certif 8901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234809 73370328 ((121319269117757296339046110652236708476591383419422481147224514264602550095230006181958811454423845125649751174466772803290468866735388111169100893565838970554718069523741655009422011041809589407114406495751445928463751229116708669747525993347,1)::nil) 8901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234329 3584 8 16) ( (Ell_certif 121319269117757296339046110652236708476591383419422481147224514264602550095230006181958811454423845125649751174466772803290468866735388111169100893565838970554718069523741655009422011041809589407114406495751445928463751229116708669747525993347 289405694 ((419201389720263404143824864248305731250026419381446175510370277181217277968380284121012530784635651037500841895898471172712448829978449883535080736261204737527207429004707523432503576292267067169584178749173739688295184975434831446471,1)::nil) 68503501685089187316265634786761962826648684196278388387037226587899475648290308824062784513540636024145172690000487497525423444754435403863308255161455359579642201601066172516125005162584533426734691714844726993535576545403303626862459896485 33602445012320090971644799567759700549415685468278985909268745632356017632948580474159649125305387362501755831618787522016012717864957462635625212152824426849111160903194698142533083006246421447476338483135189966890179960994904751086497819839 0 4435131063537866260785029762468305014854328738288447204488483300385550606752565892513868674648526143983757901026733222119425946194724024786244818244584194664122075660298790969110200650183240401219508636940780722394741865585838366476378398543) :: (Ell_certif 419201389720263404143824864248305731250026419381446175510370277181217277968380284121012530784635651037500841895898471172712448829978449883535080736261204737527207429004707523432503576292267067169584178749173739688295184975434831446471 45871203438 ((9138661258077966106659023299032587531522839733992639609246658046687396742555465808945941672083751513227540143262340148054950185355172024368263740648007196245941452387761489508870788405317698990890143260483859772722556758773,1)::nil) 30496217413927916827270117357653452557063847179338349194845047423228779398142780282113640519353658666362340655213884374049728417477121266837515037327203190934365224377219294381420297693669097003086423971282285930157018948855193801513 39244112481659466907887691280742453515710508309546359922344150803315015547491739202914976098111778074417273870721976389619230404307303102951329904492277110433766521832901180903822675395043904466619999636893801030546974579722551252804 68539628273279149145415293346159907884537338996570665622925697636745264866149954801986211304350880631545145578152992415803338349348359908822659064240066500622849031236779068649468184132874561648313678324437791816610841336049993982590 188697782843330994810080400975936649522822704418685004766556820555188021132593378011900145763545407547502976703800352000781071585522382489077834030141953641443146654926314900050427868484540963559060757505941988202439061316414854146550) :: (Ell_certif 9138661258077966106659023299032587531522839733992639609246658046687396742555465808945941672083751513227540143262340148054950185355172024368263740648007196245941452387761489508870788405317698990890143260483859772722556758773 2666707927 ((3426944947945162089983551205393250976571173530693389508661650311540622177239084574463764164632399022087408428533310541520706590881955596533204839036941777987427901015857660345425462787095706949656919376273714962531,1)::nil) 0 4775858 47 2209) :: (Ell_certif 3426944947945162089983551205393250976571173530693389508661650311540622177239084574463764164632399022087408428533310541520706590881955596533204839036941777987427901015857660345425462787095706949656919376273714962531 2493597649 ((1374297473098540802315117680556191034719400126725652647044844206757038924862687250016638175228083487051526505424197274669171610843624375730213427874349468289473178009399827223735746773636138038347157081049,1)::nil) 3352944078045529744237466452460331438648039388292286211798004199737477612083355534737552174922007716973235666458898399491445855361944795299927971894332771810498670634715712734042651719671204855565135032380757453436 1211645989998574645280609615722252083849082860039582733332583684407383008909024619886336891072324663964674757103713479989305022359954617082071706858742484334356797966411057417878582348617628676858219521552553089243 0 1112678690499395998187282923588928922621663765567741661064978916961562498318589041877091943027653852014657311491573675708722015098435733727553964784993091320435931695942225992174735592262351785741405938689733942509) :: (Ell_certif 1374297473098540802315117680556191034719400126725652647044844206757038924862687250016638175228083487051526505424197274669171610843624375730213427874349468289473178009399827223735746773636138038347157081049 822141130 ((1671607736129854982824077516418855038573973457240428595325043775339446798948846227917873632265647002786607229653179662861441410615789271531191197806493165065447424534587475544718158411690723907323,1)::nil) 1195467401988592522354633963441205630948421418516400158106663854077451927525606692732053085640833394443942773958516060484731199567018177633449548388605643881008900161074900706493646938933140832877441213272 104835854986990075755114183653517719176670971048626425724264035004341948093229767659377047490830333525933288999494665751754722047048822030791754391169488349009908397704372000732033019071426776719380225956 159243945681401731517367469332843697665879119025100443848465457488767157523746672923020953681238553234984526645933300273211230095491875668605212537731943490611887806969462586124430843760353296349369024746 614224300780156526367491403228391711808185497362525564849485596042103426928525574407914840089011826435002719718872800443336791779190069641192962625700533691183000076306117560734033967318960425612474687739) :: (Ell_certif 1671607736129854982824077516418855038573973457240428595325043775339446798948846227917873632265647002786607229653179662861441410615789271531191197806493165065447424534587475544718158411690723907323 256086 ((6527524878868251223511154520039576699132219087495718607518738921063419315967472754925586061969990334027182140786576887649512427355750857885646060544057518726127938532224845380794179734075539,1)::nil) 1671607736129854982824077516418855038573973457240428595325043775339446798948846227917873632265647002786607229653179662861441410615789271531191197806493165065447424534587475544718158411690723813243 9834496 0 3136) :: (Ell_certif 6527524878868251223511154520039576699132219087495718607518738921063419315967472754925586061969990334027182140786576887649512427355750857885646060544057518726127938532224845380794179734075539 82034 ((79570969096572777427787923544378875821393801198231448027875501878043485822554949836964990881462410531787815275891697222397435010659649875834779852072262339287225818465198644295315734637,1)::nil) 5590789512062336863767901121296501828069519445966627646942286591495077980069189595137091726121681464237448070393919407211477015127743984647894181834840847696379606887232229054947734853130641 1460960205972635591379390779749570421035893436733445418755101167715525272016275945436985109591289340794930996779807908333863676688220891850413727906863350134945047149419554034789189574316351 763207849361675864886412042117986302579660954205769788358700446390798613168193310050033432267526385018826376819871497557931284223542398331591259317116122242092488141946098114887722281233833 4564096198442651584099899361620775898185979596063414356651996108420335074338286242420540200350116423746496283192894197053752076376910046503314464012480878993173915505393991665118986953758807) :: (Ell_certif 79570969096572777427787923544378875821393801198231448027875501878043485822554949836964990881462410531787815275891697222397435010659649875834779852072262339287225818465198644295315734637 55820 ((1425492101335950867570546820931187313174378380477095091864484089538579108250715690379165010425939093693790209143198380513049328057185831332008031055135038695516727188189278295127063,1)::nil) 78021737011464112208266195447254970297924170900182049184736440566712298601455626591283285704621292152695891580142772873329741420744425563254802713631782776484290458562404133557036815592 58658637534862693028914988609190568093297915894154103698233593409316097740561205662650268545841946167268970743066522535711780913659685025568054899723704022473473181320079219011635679398 0 72355020263360031149856593935714724008447073459730804268743983694021808226272807248429623841156165786616560180859426652791248152391576965854096234389242082104514513154949118147433503134) :: (Ell_certif 1425492101335950867570546820931187313174378380477095091864484089538579108250715690379165010425939093693790209143198380513049328057185831332008031055135038695516727188189278295127063 54 ((26398001876591682732787904091318283577303303342168427627120075732195909412050290562577129810165603710270006145311152837051859959135667034637120767975629931985854167899159363082227,1)::nil) 853042917814555665987742939621236513892218872641566023239525184386950955191045292299020418452772610030035897319967006079239392844117780184138525609445795078241332071518199111725590 1153195886746978739062087685289678594187111082788846893352133420802710290058580863404581096675597444644690323040787757104607750754321857764856815987028761701369445665141160300410661 609689361821434532436899266669820296541170102223458262778007636549421540439455552839995253119278254701386557761027035602527574440588689040256052733752406051872917928756118922256078 1002958913376083408836044935144026178095787258530316393682525829201439309432421191748684978896162843621647701428574570441103398270380411076747321571130794524987514814134974567206799) :: (Ell_certif 26398001876591682732787904091318283577303303342168427627120075732195909412050290562577129810165603710270006145311152837051859959135667034637120767975629931985854167899159363082227 575672 ((45855976800316295968516627682635743231047025636418703058547359837191854757657642828862841152782662948196288828298084840767145086210683546763646328764468907506663077985232937,1)::nil) 4435028319243129360561434841817153773558920576903862217929704657197019465194169590416560326567239647773171124707353289069412203589628160274881156326477699416414623319079075274445 24201109297875583125638920466062862223199835069849234069748460287511467585044796377431076102954549328173023498643403793629340434944366900339076541682643222761191643946425430389925 5836434946485453927761329609358658943848420397435959279444286158986069625346655008728050819692923264273533060704818804881615165701743059009143471845411493330748624636457629527472 4379582167307606614784210841552106387360367348166903710426704515118119011700901326981343958867863549321872386036377701766564451321512455874885815105347774853283016650893888585220) :: (Ell_certif 45855976800316295968516627682635743231047025636418703058547359837191854757657642828862841152782662948196288828298084840767145086210683546763646328764468907506663077985232937 224748 ((204032858135851246589587572225940801391100368574664526752395393227934641276708325897727346461541116870993096875654431498052057728512777199571003365356410185975016508939,1)::nil) 45855976800316295968516627682635743231047025636418703058547359837191854757657642828862841152782662948196288828298084840767145086210683546763646328764468907506663077985138857 9834496 0 3136) :: (Ell_certif 204032858135851246589587572225940801391100368574664526752395393227934641276708325897727346461541116870993096875654431498052057728512777199571003365356410185975016508939 88 ((2318555206089218711245313320749327288535231461075733258549947650317439105417140067022757587379347410753994083827811347791806176622262083602640616805192016915852043823,1)::nil) 127236213549668214233191818535120778597392201004376906853972776215609200589467369754012878105067006095782112964670150646877646674147159342520824754593703040615813640830 137373129265600022660896080045820931047363051233117056167131639256356831136544234794755043018144773266249855111968343201070554252257761208874867080984157480003232571578 91268115387802784151506645780939981381645741957431850870943737491835531516343369145821219895687180514073332322341815289425949364555562131301410980119091370925201691110 131242123694784619343042588551209252382190192142951004391126368884577937774879904996779725131175348534467891276455355294170839438341344231395737106548602734251302124236) :: (Ell_certif 2318555206089218711245313320749327288535231461075733258549947650317439105417140067022757587379347410753994083827811347791806176622262083602640616805192016915852043823 748 ((3099672735413393998991060589237068567560469867748306495387630548552726076760882442415831142542188234049962433083655001251920975133062893022256342512543812494014573,1)::nil) 2318555206089218711245313320749327288535231461075733258549947650317439105417140067022757587379347410753994083827811347791806176622262083602640616805191996170020567663 36370126051009921296 0 6030764964) :: (Ell_certif 3099672735413393998991060589237068567560469867748306495387630548552726076760882442415831142542188234049962433083655001251920975133062893022256342512543812494014573 351292 ((8823635993456708376481845841172211628959583103937198955249850689889681737019011076187522896370661385960154747535378405408052360991023820788259063025989999061,1)::nil) 1358057394974555742668741314080471498059194548351056803899491655681148816201725368735269929426787910485401104142234831061289922331601943647803632978689177587276826 1898382650894454698203161590021217552464277703160646667567727760343540782241048012337176154686013383883074614391526384952026933835342279631219856158258346494544504 2106281857895846651994793077220261038267132933906652744647031416323299915369574927661184123669122884029575824627056398292320154933977242362490533348660498557116476 2204025574868166268555975622127725181483200585738486128945592472484979278143115465866786514658283773690426366818483756749389233701956074710818830337148172550580135) :: (Ell_certif 8823635993456708376481845841172211628959583103937198955249850689889681737019011076187522896370661385960154747535378405408052360991023820788259063025989999061 99124 ((89016141332641019092064947350512606724502472700225969041300297505040976322777583627028269773917163566801686287467444903528092512272248774859565662073421,1)::nil) 213418997970825111529487787521060393525357493322745300169434193481699411744464701939434917934050790238609469040430985788830521637601138795612545700685026765 2200561111689879507484516033986476463085069068873245937716864893864242408464332821286762762158617544848983168010239058122184091394652197344839620914014803140 0 7919027988974347471842932594501764979452962787198780045389429735571188927272998803637667675964011605576090505897109695589979381494940630382700013129178771134) :: (Ell_certif 89016141332641019092064947350512606724502472700225969041300297505040976322777583627028269773917163566801686287467444903528092512272248774859565662073421 8460 ((10522002521588772942324461861762719470981379751799759933959846040784985380942783362996062685082954982211474935811123315645088755453316907196581906689,1)::nil) 65503858648815584800399170639959628394646436282591841741286537385005763950741374080842570207837997013618064310415992864003350405668677452225858193871062 53052739208420652581062592790765367933981835639485341038576023519539013004380344472295950704822295701807025426665455595102306851237700104066571436635844 0 247504745963186025729121753183632831431814627326792301777841461939238821352183207462220406051292221780670141682040289341288500920084374537512996459253) :: (Ell_certif 10522002521588772942324461861762719470981379751799759933959846040784985380942783362996062685082954982211474935811123315645088755453316907196581906689 7899135582 ((1332044805708308064122105590383917462803384978257708291853933396732141998177514996651797426510859885764933326504355881930566954445844074533,1)::nil) 8336114054728647037836134901189043967290435740314928101954267102272727340402170083665529016315169751397791917450869591916844028223997947592510137103 3256708387228792262245260831974742350403349943802527425144606605795782050979263947515472882453687966043524781628334574167391365563883302113773110787 0 7442723625048587190424014630843185497307671194983259529712477823844030822941305727205725193314152308648268655626077772860697137297095863570543123369) :: (Ell_certif 1332044805708308064122105590383917462803384978257708291853933396732141998177514996651797426510859885764933326504355881930566954445844074533 17937587141 ((74259976842908208850613415419109933164861271586432946536615428545063749926244996729521521076701117833944845906145834539778680951,1)::nil) 356914002446515977222515684142156084793156869294444358010773985019486744268163682079718231277192369494181250842336556579775449640741391343 464358780890089416362418603809687896350059353295922184441497141606654729953114114875096963194071483591212431391715914825377048902804690428 0 562259603668502384977367422658611444296169201007276386748422381514935375940233242339067119649405270024212001725855482522464818853404476652) :: (Ell_certif 74259976842908208850613415419109933164861271586432946536615428545063749926244996729521521076701117833944845906145834539778680951 1327425 ((55942879517041044767586428927517511848022503408051638726568678867787314598484710529112228314258060314316498944063415970637,1)::nil) 74259976842908208850613415419109933164861271586432946536615428545063749926244996729521521076701117833944845906145834539550838127 1358190060766 2787 863041) :: (Ell_certif 55942879517041044767586428927517511848022503408051638726568678867787314598484710529112228314258060314316498944063415970637 56 ((998979991375732942278329087991384140143258989429493548688726296698012707671582820413052145807645506559657527430836305839,1)::nil) 7617518386839349179663763526655562814673564589209499040361972879715320219933215719124082554188263582260560722183241984785 13070635453012352649696155377115702660076060222899051493903697622757310110628349900701331535923599956283586183535737607211 0 15131019054635438593953673003141099567628763711012964914931748068944766488293759815989084080336978796750720255208574449605) :: (Ell_certif 998979991375732942278329087991384140143258989429493548688726296698012707671582820413052145807645506559657527430836305839 1958 ((510204285687299766229994426961891797825974969065114171955428099167142109169073063442518068371637073093730344902116873,1)::nil) 479096276393369927431992306582812817406199400729255639891753096693996087568942355128882415695127309335509644197578920483 263349010098468260214390964994466053285991258612903746717000133263455093511852288481315080002867211603218135991513681210 0 835484202285759408661755244210622576000130396685459542173199058701587954355859316632377422964936627154708666814222218398) :: (Ell_certif 510204285687299766229994426961891797825974969065114171955428099167142109169073063442518068371637073093730344902116873 80 ((6377553571091247077874930337023647472824687113313927149442862421055821459900079415860201019211935442199820765278257,1)::nil) 16900 0 650 16900) :: (Ell_certif 6377553571091247077874930337023647472824687113313927149442862421055821459900079415860201019211935442199820765278257 50687098 ((125822030116840523753696262844316860926318707638656431848565063090081467196969084989245399782675756337055883,1)::nil) 813611551686912547018796916344431649766655761191114000760587407354303608820852443441330259561278809299427490233237 2950717397209035787828118588447407328865698132089080889667859195949272923795217697360325837378858602485845859393934 0 4261574233019739376285983130836479878813178974903098635206035321444105773135755666324637812236655029008810391241113) :: (Ell_certif 125822030116840523753696262844316860926318707638656431848565063090081467196969084989245399782675756337055883 114 ((1103702018568776524155230375827340885318585154725056425946830596382033681698026753309387825083409681924961,1)::nil) 125822030116840523753696262844316860926318707638656431848565063090081467196969084989245399782675756337034013 1102248 27 729) :: (Ell_certif 1103702018568776524155230375827340885318585154725056425946830596382033681698026753309387825083409681924961 195 ((5660010351634751405924258337576107104197872588333622904455636018730618715990172383670935920435366574893,1)::nil) 204049099388954597870644648411598349934495249793991758525545862481890358262171399456865893757573249111029 232903568618734612218525528396806485203670461316458460313996152159949985602935868390433231458650446162807 207185254140579300437888802757422713587765377579633397443457862774305284495551310069559378416660329749313 34924653286903041093779555433702157355938390997102196044954506780142011544620632343050479293281456514419) :: (Ell_certif 5660010351634751405924258337576107104197872588333622904455636018730618715990172383670935920435366574893 28987161527317 ((195259213162380713957367104550844342216206912567603516595236392512309678794840894415377313,1)::nil) 0 54 3 9) :: (Ell_certif 195259213162380713957367104550844342216206912567603516595236392512309678794840894415377313 18759 ((10408828464330759313255882752323916105133904425505603772836292495039723069700071643309,1)::nil) 0 419904 108 1296) :: (Ell_certif 10408828464330759313255882752323916105133904425505603772836292495039723069700071643309 390117 ((26681299364884789212610275256715078053850262119313070492016815422380333994822991,1)::nil) 0 192 4 16) :: (Ell_certif 26681299364884789212610275256715078053850262119313070492016815422380333994822991 7994445 ((3337479883204498775413462129855803380203466482631368077186573863582327149,1)::nil) 11145458798903836353584160091846126044050624281710219114385524692314669459262181 16887627423488871145965136303895474267852508264807382190390877661418279506155011 0 4003889296699138809375834203594897215541432238702921084104500764087599802452250) :: (SPock_certif 3337479883204498775413462129855803380203466482631368077186573863582327149 2 ((1944918346855768517140712196885666305479875572629002375982851901854503, 1)::nil)) :: (Ell_certif 1944918346855768517140712196885666305479875572629002375982851901854503 244 ((7970976831376100480084886052810108161983216906006635495936123350749,1)::nil) 1944918346855768517140712196885666305479874724796759992479268008324583 9501955807025115933281263315351902213136 0 97477976010097357444) :: (Ell_certif 7970976831376100480084886052810108161983216906006635495936123350749 256 ((31136628247562892500331586143789466383563999376220452430080469631,1)::nil) 7970976831376100480084886052810108161983216906006635495936123014609 92236816 0 9604) :: (Ell_certif 31136628247562892500331586143789466383563999376220452430080469631 69678 ((446864551903942313216963548663707615517961449452185541931663,1)::nil) 19428167246508852012789951949304878013827008455927980804179325998 30508465593234563259918281460844538989821490914873742266495475270 23354629825426600749087063678446949871129262830052032463236179366 17483874169501416904454705404032226410885416382756617919923559989) :: (Ell_certif 446864551903942313216963548663707615517961449452185541931663 544670 ((820431732799570957124430478386154377412664616838075013,1)::nil) 255763606847584829002719246030715311750697424650834892797829 294371776785535539234223346119507722586241590215286952823445 0 147972682212909117266794730137838098761952115317968838177392) :: (Ell_certif 820431732799570957124430478386154377412664616838075013 3049 ((269082234437379782592466539430579665352865862957769,1)::nil) 820431732799570957124430477539815268773212681000458933 9476865744830856719995764701724677178102 9864395859 97306305663056347881) :: (Ell_certif 269082234437379782592466539430579665352865862957769 58199827 ((4623419833144517467250659708315468845729481,1)::nil) 0 832000 120 1600) :: (Ell_certif 4623419833144517467250659708315468845729481 40635700 ((113777290243419393962634878445441577,1)::nil) 0 1210035659455791680882008595621377570446619 1155854958286129366812664927078867211435413 4334456093572985125547493476545752052129716) :: (Ell_certif 113777290243419393962634878445441577 827773072 ((137449856841223017879367733,1)::nil) 4624 0 272 4624) :: (Ell_certif 137449856841223017879367733 195008338 ((704840922449292787,1)::nil) 35827566252653613069437872 57837414610584920908283054 0 57167186665305465444700683) :: (Ell_certif 704840922449292787 569692 ((1237231563721,1)::nil) 0 630502231409718822 352420461224646409 220262788265404056) :: (Proof_certif 1237231563721 prime1237231563721) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t250/prime9.v000066400000000000000000000570011451023060700215440ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime2391516663307 : prime 2391516663307. Proof. apply (Pocklington_refl (Pock_certif 2391516663307 2 ((71, 1)::(59, 1)::(3, 1)::(2,1)::nil) 43602) ((Proof_certif 71 prime71) :: (Proof_certif 59 prime59) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime9012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345733: prime 9012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345733. apply (Pocklington_refl (Ell_certif 9012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345733 369 ((24423701026832614005122285790756131018100003345712439358961487838335173174077419756432132219545652246344809127073505302951252703584887760918452861267947740345241530215433280197121446730630384994449856986349836623071274266308336931007162571551011967,1)::nil) 1362176606420155488455695141592634016566040694860827212283431061319528836371535594496315370126429266285215623887355669115771493148121460237113621621619199778361923933955688771982616523393518103326910027339110670121843862892930412960518063647227618626 1712068661988234207103388498388469715189182968961325434920313017816043681860748186152712814024315357319110545667319098913075545425142366434240834207853423352495859567641173143220786555316069875438408957044386056308809332955422039440316222821554070971 5204579518128850239641282493434775356521544051268703618609768801975625963582864212043254925852592038077388840775009586939712865724091346411243446960672252994644666749521564509659332118935964620950157649658927879710185924432655113635226729684925542523 290512513115410157128897471614011806751867887829562960152944441718037106622419774207464144477515833559475788421074047460929570419530640644855163060246691469835276163976815483724354189705422479478728022086658117151857924847764061139129200265889163551) ( (Ell_certif 24423701026832614005122285790756131018100003345712439358961487838335173174077419756432132219545652246344809127073505302951252703584887760918452861267947740345241530215433280197121446730630384994449856986349836623071274266308336931007162571551011967 17434 ((1400923541747884249462101972625681485493862759304373027358121362758699849379225637055875428447037527035953259554520207809525028820873441926264112869728573654395110644590439627743110581112523814987758535022198476517635522106745882926765388289149,1)::nil) 23251881849969068288649474611096939678151745593868106080338986597664484469177311073600407371439313101364676742781737402024365233714318908036633253879310669555502330246649819781619050528704843642141504174122329368704224010381129537712514296308879605 3494605923707656950206799987665609265390953170630981088561293767890398579537566387586543022814321051653911225283714374707847995143567014811784150389510142036101117185806833480123200035373321604666941152528293086622303584686317520614275375417503070 0 17612215348807779081256079014154722891818540385904565967564905339340549607202418559480300737636387812874807513158291043078102919204563005746049577307737204914032433422223213519720871736101529867487210912439835578464193513474039600831884228899761638) :: (Ell_certif 1400923541747884249462101972625681485493862759304373027358121362758699849379225637055875428447037527035953259554520207809525028820873441926264112869728573654395110644590439627743110581112523814987758535022198476517635522106745882926765388289149 66226726808 ((21153446792098695041128205241401962863770085288198364426075402043727406939118216869853360977040022446340094222862897914300716429850661312010490395171355449333833126524006526078700712166283241507536473146671625752809239143051710877239,1)::nil) 40674634167656318886293446335672838002120797077276233224541801821021368129195967963091089613896629850043252281894599598594343324369075107301216547202527042271228654168593382340295231341093056440025411931758835137455879663634182072037872136454 185426381532362604987875961029692899365650488536166101780670959999356015058732274280300482403345312366467516842061698879982482854822936042961054688275556422820055301645942558814451045185362038995374408484846606182893979618417156156263842247923 708164726201577235829521190849022171274100699941242545624325520760701861335874373436787504491341485506371920344217300605686344109282567181647947471800964715529123406328102565406126886447407836828754698944452895738958119690989054000779183838476 401006669085268030840667834859088140667388343261178019295832948512938395127264023042265293518867436520385047720629852771377600527006367119281156678820716331167510858535887076854676372290826968374798818016105225694999048838490880739452885240422) :: (Ell_certif 21153446792098695041128205241401962863770085288198364426075402043727406939118216869853360977040022446340094222862897914300716429850661312010490395171355449333833126524006526078700712166283241507536473146671625752809239143051710877239 61213327103 ((345569303176497118249249906997037139364688672021297440798827445556883063172816294776026184871626490822212059608768790361813137330253760451807294810102827521594471307621323466086808739866957179458646165954669378673391747589,1)::nil) 21153446792098695041128205241401962863770085288198364426075402043727406939118216869853360977040022446340094222862897914300716429850661312010490395171355449333833126524006526078700712166283241507536473146671625752809239122305879401079 36370126051009921296 0 6030764964) :: (SPock_certif 345569303176497118249249906997037139364688672021297440798827445556883063172816294776026184871626490822212059608768790361813137330253760451807294810102827521594471307621323466086808739866957179458646165954669378673391747589 2 ((28797441931374759854104158916419761613724056001774786733235620463073588597734691231335515405968874235184338300730732530151094777521146704317274567508568960132872608968443622173900728322246431621553847162889114889449312299, 1)::nil)) :: (Ell_certif 28797441931374759854104158916419761613724056001774786733235620463073588597734691231335515405968874235184338300730732530151094777521146704317274567508568960132872608968443622173900728322246431621553847162889114889449312299 87936 ((327481826912467702125456683456374654450100709627169608956918900826437279359246397736257225777484468649749116411201301244909324326408708909133710098183047187579452531342866271932013222524997651157330868830644801949029,1)::nil) 798308619501887816558507137859950183837085503430415934761435796201123139076848025464222318435598713210739571327855805357159504625711387261718295292317072665093460064190738670095225835754776257771969753401523915214989731 5425444314752747919958769558985193668894491267248044705201572940221208268472351693593326025514271194641453023121846273792489586810589374363879136555440280932026780697525737010690194476992060804368624435821360427200188618 0 5234968042350653502718676541121958521590538210995721602449354605959230675302563349150725016969543280639894154790364722696627743019559223700458167247796723025650528757316595256671535140522863633018505023320950030815584103) :: (Ell_certif 327481826912467702125456683456374654450100709627169608956918900826437279359246397736257225777484468649749116411201301244909324326408708909133710098183047187579452531342866271932013222524997651157330868830644801949029 37553170 ((8720484233753573989238636404233641379678485454814323503366530730333478621358633578370540377216742784956612646713607253556580016841114240825425541197844661133337957660741698298429635632436965704445612212815881,1)::nil) 18 0 3 9) :: (Ell_certif 8720484233753573989238636404233641379678485454814323503366530730333478621358633578370540377216742784956612646713607253556580016841114240825425541197844661133337957660741698298429635632436965704445612212815881 2199149956 ((3965388631166893463648204444787593820490923109571852908863905927447122492341142369270311086151663404328909735594611032501700204243904311814908674018416376653691937712400465133728283351306089762783057,1)::nil) 900 0 10 100) :: (Ell_certif 3965388631166893463648204444787593820490923109571852908863905927447122492341142369270311086151663404328909735594611032501700204243904311814908674018416376653691937712400465133728283351306089762783057 861471 ((4603043667363026107260957646615607281604282801826007966447977851195365244263756260245917838385347160038920101988568824785674540437688410283446538801929667727024031150643233144500068896843743877,1)::nil) 0 221184 48 576) :: (Ell_certif 4603043667363026107260957646615607281604282801826007966447977851195365244263756260245917838385347160038920101988568824785674540437688410283446538801929667727024031150643233144500068896843743877 55485 ((82960145397188899833485764560072222791822705268559213597332213232321622857776989461042044487435294047512062864561682720785193452265809949847532380354742632575307566734520905212733992868361,1)::nil) 4603043667363026107260957646615607281604282801826007966447977851195365244263756260245917838385347160038920101988568824785674540437688410283446538801929667727024031150643233144500068896086159973 8234810772496 0 2869636) :: (Ell_certif 82960145397188899833485764560072222791822705268559213597332213232321622857776989461042044487435294047512062864561682720785193452265809949847532380354742632575307566734520905212733992868361 11900 ((6971440789679739481805526433619514520321235736853715428347244809438791836787982307650591973735372862745748981560467619344201474625964803945116699117092402665764514799614952898251912363,1)::nil) 39992689622983150466849803894195508763947920881874986355962295463835055299739673126342149598415993401467693604846384238525117550803365962688068484273426103250485154120017554349338003506389 8780514355289912522961307223062479741122789300316026446947067591043936830723743114630433785457213250927781739524104164543855089504513255026630574799068169270969695659890191653555025681250 39319820255469660890735918543873806458013813503444269316927015174708507728517860619145155530532517797914630274603788757657445977183790084958497920431166120342474178611868971339318958420522 23073598036784680839809007624925456160472801505518147761604849912069376271909124182881831633584311134908139411195221147674627658900959580606875776227858464542594671195319308165833006528642) :: (Ell_certif 6971440789679739481805526433619514520321235736853715428347244809438791836787982307650591973735372862745748981560467619344201474625964803945116699117092402665764514799614952898251912363 15868 ((439339601063759735430144090850738248066626905523929633750141467698436591680613959393155531503081613754918020420940214440628882593199704106175845430267803132364880068750265628949243,1)::nil) 4729814073786534577018854882547232990566916601870330077082916055374704231921089714861489898809451416556873192607524600025599969058914726544490991927469861473102612399222328632192283229 2155251738926650552342121605659037295819917052501998281787796124214873560000115312168567771180565599737024018612669583566637784428905961278410937512701493350190855505947776633696576778 4952024794332967312661771996923531741274598051380441485926955830585275587179814476739757547210717261071096783120048225312165798019138831200042005116878343805613313450076211645665406577 1767433712264428286481088577305653681472243543109094159829784518195177894940607975212786015880902747351021702923418434065899972541733688997479010469860426097520689983756659846145089661) :: (Ell_certif 439339601063759735430144090850738248066626905523929633750141467698436591680613959393155531503081613754918020420940214440628882593199704106175845430267803132364880068750265628949243 12084263919 ((36356339451755045323596270493762479705953772749932079148108637703979013178039972216296605313925657811061551171268033553741591531367672975502067970139401724925695566383683,1)::nil) 0 78608 17 289) :: (Ell_certif 36356339451755045323596270493762479705953772749932079148108637703979013178039972216296605313925657811061551171268033553741591531367672975502067970139401724925695566383683 15388 ((2362642283061804349076960650751395873794760381461663578639760703403887001432283091779546499183474597373581023938523452052986802065779260305961906715999638132113135893,1)::nil) 12517532248217684334252815989530226755245968145710682557959239401461371547475822861798927894226455274598886514865170790567375651997445996645387434137020380836641821863732 19277124160521871821687663054007849881745562586056784508404891673836334333190379513065808495613745575245420372274083209498956656511289213042244176965287323316864297698457 0 22530373241628863856221924639320932240267069443806770286964273132361201039509405550752850118536523868152227014315828557266743413282214037758305638726925208738687142199511) :: (Ell_certif 2362642283061804349076960650751395873794760381461663578639760703403887001432283091779546499183474597373581023938523452052986802065779260305961906715999638132113135893 2112076 ((1118635069505928929203760021301977709985227984912315455807348174688736106765231502973449657666171992404396790584784368947316874109465018738599742227549892899509,1)::nil) 653825157115666564764303928278851156002227261166751858511263494040495806440974055666328808932949105200136758908682258277833937647350600063541069605297031792986344324 1085555708024868490768703650093272491785035761636002302390750039210609409013989793476865580559775123786302545668772525345561450273522235822034726437192874287771420094 1544373842743651885772692894103675291115123737779868947397276792727752566786847680900465696404292713425965616850408541074774529891585966720334547014912723232487143581 849406163079003146386737314594396943823494533342514649531193530407670000435828972184590909705488612239473257638922610059485795301017197071799107851634064046135366580) :: (Ell_certif 1118635069505928929203760021301977709985227984912315455807348174688736106765231502973449657666171992404396790584784368947316874109465018738599742227549892899509 97651 ((11455438956138994267378316876447529569438387573218046469645453448390043181997434278466909770961907514943712343247008276280001347231773912623047238965208123,1)::nil) 0 488095744 1488 61504) :: (Ell_certif 11455438956138994267378316876447529569438387573218046469645453448390043181997434278466909770961907514943712343247008276280001347231773912623047238965208123 67237 ((170374034477133040846235210917315311055496044933861511811137520240195772892862721341442099729023330268641693751780912519780206404888634897906055905719,1)::nil) 8845836294318984834163573408048093930141680350298265765018768376469844851843055426610907576585745549116220554667617419515699109049158954956997146694557345 2599635419400926050380002903023912537672837259688046448696976256335130812039830581658123638310713950790538065076048187357199564707128250132950995383066078 2700144777858153471836186916374643604242303568130934679442856090572851643901670027149071242079137535883823806206601183167353489479636855562771214054287332 4869262481164785552808985303630923757721831010624588804100837809202269693870450422056716233520820599586797043429074137516958884095895445773021628276307598) :: (Ell_certif 170374034477133040846235210917315311055496044933861511811137520240195772892862721341442099729023330268641693751780912519780206404888634897906055905719 398945 ((427061460795681211310419258086491398702818796911507881565472734938890756604647599732999073080936646829378406087364794029265412603644826437221609,1)::nil) 20038377104658464690753742287481324736056826262217465143742030288760487315980467518730894624865267115656759480214982312065733399347528408096418250656 136277289192869304469968234263048920828692766661917318853844236817446403773463417740150793162410411688730882718774970505255468915939703572563566828915 62842605256792633925184647837414767263648703289941430967757169779404273804274209762806614924741725074668123830278657509659090012614571855235872903860 672361508072214066322486247653878934075844260184200518219031390357014095755021069601205449555425467153022863817399499754867633108157987339926287797) :: (SPock_certif 427061460795681211310419258086491398702818796911507881565472734938890756604647599732999073080936646829378406087364794029265412603644826437221609 2 ((43425303851593592294309527023784632410709151812487023251205843222325361507315103946741097271792363659022175045225449019041076723771517999, 1)::nil)) :: (Ell_certif 43425303851593592294309527023784632410709151812487023251205843222325361507315103946741097271792363659022175045225449019041076723771517999 1372221 ((31645998604884776063264974828241684401207350574351378714657364391250226046247518915425933205003827821033809835170276686280618320791,1)::nil) 43425303851593592294309527023784632410709151812487023251205843222325361507315103946741097271792363659022175045225449019041076723407653135 2741054664656 2348 1378276) :: (Ell_certif 31645998604884776063264974828241684401207350574351378714657364391250226046247518915425933205003827821033809835170276686280618320791 8617 ((3672507671450014629600205968230438018011761700632630696838501147886226114564436176042598803640285459627397579336384665177294537,1)::nil) 1845958534425912461038845432634752376455193877078026987738768603888600446590452244113836854580874041864535473937823770194838328645 28646596273572477374157070284113409098936223835952679709087315158780380455301930764641407742757160097023785695422987283606991211835 0 18178556046636187937585662364053476625489792957208393334608111261010736028358482102121374226777382369532111382014239084062444687099) :: (Ell_certif 3672507671450014629600205968230438018011761700632630696838501147886226114564436176042598803640285459627397579336384665177294537 58730856 ((62531144981949771506824384923496398860792386554567341855846629310782917107713483821576210196667292835657007443936767787,1)::nil) 412469948505542321575562389156330534270217306470867376467991927279619045402396816307474753107331987199822493451531585574785552 265500061709780390906393290544597364222171224000037284198169969922237631219940998710670748744963500413318162695709649445673296 0 3459226776518604567685544927429815130716000399707105329481103537608075299225452149273940057317967024425172879615001873979062671) :: (Ell_certif 62531144981949771506824384923496398860792386554567341855846629310782917107713483821576210196667292835657007443936767787 56196 ((1112733023381553340216819434185643085998868007590706489000049894608759494611117142550082809975121413075247071560127,1)::nil) 93351437075549940257141838916558474931643379868011848707974398450040578474914687433039457541256092367007158826166933 29624454834349134312912404502148184280233940033439891064593066323608467741934401545220878670555102345875058882548491236 44442041993026203816657925652434835270270956914558013100858800194545944738208051694892246532646396500755527640093335654 27507428447357669151423750977300252358882943961830911016677848742263669332853462771146371871138234357958427963441638601) :: (Ell_certif 1112733023381553340216819434185643085998868007590706489000049894608759494611117142550082809975121413075247071560127 24593839276 ((45244380549702074104780753475134773666757372672305109887306539754956182688776704125888451871823943394759,1)::nil) 302701414123249278079776131271621467194759813393894157471280455821873855437211896056191582939715487594688007874648 674442816363113397426349466742419669710851148294219552859261107020249826779438047739636044011805984865679597437017 0 539541575684632073720397846173315123110807135818517754702060847086558559157769581409806768807709619346170679278130) :: (Ell_certif 45244380549702074104780753475134773666757372672305109887306539754956182688776704125888451871823943394759 58851 ((768795441873580297782208517699525473938546034431107769022356057060447860591579145395627444156919929,1)::nil) 41832678262412387174239283194597248688732098075923061401878304813145689431842415711664251413576620397786 20942120398173437742731747474593025386931035457918638166489765965471360690443356275316287471018366126171 43773447974168707519312335315472283084730684574465688456311084878816091465898666763796464551856585962294 8905775644529289252784945849114183645007674863348756310700866158995643177694749394727988801800236965715) :: (Ell_certif 768795441873580297782208517699525473938546034431107769022356057060447860591579145395627444156919929 730 ((1053144440922712736687956873560993799915816485522137257356594316306036255330877929039171159091789,1)::nil) 365468110576391636016368862767828600004497983420906025660407352958511213484625720577309688370242520 0 688382057011177462886214557005931600742933564167806371531057932390686884740786671923439256315913422 474547677160699716327630001764123967325340621338344267712523898595422086164683340989681229254181972) :: (Ell_certif 1053144440922712736687956873560993799915816485522137257356594316306036255330877929039171159091789 16338 ((64459813987190154038925013683498212750386613142476080451041269447869927058887720473318050703,1)::nil) 594590101637992432067796165093755474861864476943842793635514075594780112262939485750236926862935 513717515236656150288926196852364931176400997654142330522851493655164492196713436351897009391034 0 666496868299951218223445110031386295849204215451525388754206185314207987235339974338995404161422) :: (Ell_certif 64459813987190154038925013683498212750386613142476080451041269447869927058887720473318050703 5357133 ((12032520750780343523098085054729500415686265979710355814226811629407493575240101532537,1)::nil) 0 2355167232 4224 278784) :: (Ell_certif 12032520750780343523098085054729500415686265979710355814226811629407493575240101532537 604201 ((19914764707076525068806713419424165825091770647126119367608824896125726290974423,1)::nil) 0 1080 6 36) :: (Ell_certif 19914764707076525068806713419424165825091770647126119367608824896125726290974423 1447399686956 ((13758994759048832679625183625818812205280616938343733944275095053991,1)::nil) 19914764707076525068806713419424165825091770647126119367608824787592451616709103 13762346127466829996235398 1918747 3681590050009) :: (Ell_certif 13758994759048832679625183625818812205280616938343733944275095053991 5191185037 ((2650453540180527508255950389043858365174071207586090941219,1)::nil) 0 3584 8 64) :: (Ell_certif 2650453540180527508255950389043858365174071207586090941219 26756 ((99060156233387931987440214866201798912696751757841759,1)::nil) 2303084692402997782770950003510879703688317660433782238427 267076417763036955248598376291223753513510895363939228154 2134895121527975525587139570932609730419922546730500155688 108659666614142429054853180275622738202795963589013888175) :: (Ell_certif 99060156233387931987440214866201798912696751757841759 529 ((187259274543266412074556172917858997621777072539473,1)::nil) 99060156233387931987440214866201798800802919310041279 14406462054002124060149776 0 3795584547076) :: (SPock_certif 187259274543266412074556172917858997621777072539473 2 ((342143557136087664941671611289098352716141931, 1)::nil)) :: (SPock_certif 342143557136087664941671611289098352716141931 2 ((92399559567602336820269577730003579039, 1)::nil)) :: (Ell_certif 92399559567602336820269577730003579039 3001353431552 ((30785964290724175142799593,1)::nil) 75726796498118481235389907038520956092 29847139133891144697941250008269691761 0 30916093056202388986286610132645726779) :: (Ell_certif 30785964290724175142799593 46240 ((665786424972352063421,1)::nil) 900 0 90 900) :: (SPock_certif 665786424972352063421 2 ((2391516663307, 1)::nil)) :: (Proof_certif 2391516663307 prime2391516663307) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t50/000077500000000000000000000000001451023060700200635ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/examples/t50/.depend000066400000000000000000000073501451023060700213300ustar00rootroot00000000000000prime12345678901234567890123456789012345678901234568119.vo: prime12345678901234567890123456789012345678901234568119.v ../PocklingtonRefl.vo prime12345678901234567890123456789012345678901234568119.vi: prime12345678901234567890123456789012345678901234568119.v ../PocklingtonRefl.vo prime23456789012345678901234567890123456789012345678921.vo: prime23456789012345678901234567890123456789012345678921.v ../PocklingtonRefl.vo prime23456789012345678901234567890123456789012345678921.vi: prime23456789012345678901234567890123456789012345678921.v ../PocklingtonRefl.vo prime34567890123456789012345678901234567890123456789133.vo: prime34567890123456789012345678901234567890123456789133.v ../PocklingtonRefl.vo prime34567890123456789012345678901234567890123456789133.vi: prime34567890123456789012345678901234567890123456789133.v ../PocklingtonRefl.vo prime45678901234567890123456789012345678901234567890173.vo: prime45678901234567890123456789012345678901234567890173.v ../PocklingtonRefl.vo prime45678901234567890123456789012345678901234567890173.vi: prime45678901234567890123456789012345678901234567890173.v ../PocklingtonRefl.vo prime56789012345678901234567890123456789012345678901251.vo: prime56789012345678901234567890123456789012345678901251.v ../PocklingtonRefl.vo prime56789012345678901234567890123456789012345678901251.vi: prime56789012345678901234567890123456789012345678901251.v ../PocklingtonRefl.vo prime67890123456789012345678901234567890123456789012361.vo: prime67890123456789012345678901234567890123456789012361.v ../PocklingtonRefl.vo prime67890123456789012345678901234567890123456789012361.vi: prime67890123456789012345678901234567890123456789012361.v ../PocklingtonRefl.vo prime78901234567890123456789012345678901234567890123491.vo: prime78901234567890123456789012345678901234567890123491.v ../PocklingtonRefl.vo prime78901234567890123456789012345678901234567890123491.vi: prime78901234567890123456789012345678901234567890123491.v ../PocklingtonRefl.vo prime89012345678901234567890123456789012345678901234671.vo: prime89012345678901234567890123456789012345678901234671.v ../PocklingtonRefl.vo prime89012345678901234567890123456789012345678901234671.vi: prime89012345678901234567890123456789012345678901234671.v ../PocklingtonRefl.vo prime90123456789012345678901234567890123456789012345767.vo: prime90123456789012345678901234567890123456789012345767.v ../PocklingtonRefl.vo prime90123456789012345678901234567890123456789012345767.vi: prime90123456789012345678901234567890123456789012345767.v ../PocklingtonRefl.vo prime12345678901234567890123456789012345678901234568119.html: prime12345678901234567890123456789012345678901234568119.v ../PocklingtonRefl.html prime23456789012345678901234567890123456789012345678921.html: prime23456789012345678901234567890123456789012345678921.v ../PocklingtonRefl.html prime34567890123456789012345678901234567890123456789133.html: prime34567890123456789012345678901234567890123456789133.v ../PocklingtonRefl.html prime45678901234567890123456789012345678901234567890173.html: prime45678901234567890123456789012345678901234567890173.v ../PocklingtonRefl.html prime56789012345678901234567890123456789012345678901251.html: prime56789012345678901234567890123456789012345678901251.v ../PocklingtonRefl.html prime67890123456789012345678901234567890123456789012361.html: prime67890123456789012345678901234567890123456789012361.v ../PocklingtonRefl.html prime78901234567890123456789012345678901234567890123491.html: prime78901234567890123456789012345678901234567890123491.v ../PocklingtonRefl.html prime89012345678901234567890123456789012345678901234671.html: prime89012345678901234567890123456789012345678901234671.v ../PocklingtonRefl.html prime90123456789012345678901234567890123456789012345767.html: prime90123456789012345678901234567890123456789012345767.v ../PocklingtonRefl.html coqprime-8.18/src/Coqprime/examples/t50/Makefile000066400000000000000000000003741451023060700215270ustar00rootroot00000000000000ifeq "$(COQBIN)" "" COQBIN=$(dir $(shell which coqtop))/ endif %: Makefile.coq Makefile.coq: _CoqProject $(COQBIN)coq_makefile -f _CoqProject -o Makefile.coq tests: all @$(MAKE) -C tests -s clean @$(MAKE) -C tests -s all -include Makefile.coq coqprime-8.18/src/Coqprime/examples/t50/Makefile.bak000066400000000000000000000112241451023060700222570ustar00rootroot00000000000000############################################################################## ## The Calculus of Inductive Constructions ## ## ## ## Projet Coq ## ## ## ## INRIA ENS-CNRS ## ## Rocquencourt Lyon ## ## ## ## Coq V7 ## ## ## ## ## ############################################################################## # WARNING # # This Makefile has been automagically generated by coq_makefile # Edit at your own risks ! # # END OF WARNING # # This Makefile was generated by the command line : # coq_makefile -f Make -o Makefile # ########################## # # # Variables definitions. # # # ########################## CAMLP4LIB=`camlp4 -where` COQSRC=-I $(COQTOP)/kernel -I $(COQTOP)/lib \ -I $(COQTOP)/library -I $(COQTOP)/parsing \ -I $(COQTOP)/pretyping -I $(COQTOP)/interp \ -I $(COQTOP)/proofs -I $(COQTOP)/syntax -I $(COQTOP)/tactics \ -I $(COQTOP)/toplevel -I $(COQTOP)/contrib/correctness \ -I $(COQTOP)/contrib/extraction -I $(COQTOP)/contrib/field \ -I $(COQTOP)/contrib/fourier -I $(COQTOP)/contrib/graphs \ -I $(COQTOP)/contrib/interface -I $(COQTOP)/contrib/jprover \ -I $(COQTOP)/contrib/omega -I $(COQTOP)/contrib/romega \ -I $(COQTOP)/contrib/ring -I $(COQTOP)/contrib/xml \ -I $(CAMLP4LIB) ZFLAGS=$(OCAMLLIBS) $(COQSRC) OPT= COQFLAGS=-q $(OPT) $(COQLIBS) $(OTHERFLAGS) $(COQ_XML) COQC=$(COQBIN)coqc GALLINA=gallina COQDOC=$(COQBIN)coqdoc CAMLC=ocamlc -c CAMLOPTC=ocamlopt -c CAMLLINK=ocamlc CAMLOPTLINK=ocamlopt COQDEP=$(COQBIN)coqdep -c GRAMMARS=grammar.cma CAMLP4EXTEND=pa_extend.cmo pa_ifdef.cmo q_MLast.cmo PP=-pp "camlp4o -I . -I $(COQTOP)/parsing $(CAMLP4EXTEND) $(GRAMMARS) -impl" ######################### # # # Libraries definition. # # # ######################### OCAMLLIBS=-I .\ -I ..\ -I ../../Tactic\ -I ../../N\ -I ../../Z\ -I ../../PrimalityTest\ -I ../../List\ -I ../../elliptic\ -I ../../num\ -I ../../num/W/W8 COQLIBS=-I .\ -I ..\ -I ../../Tactic\ -I ../../N\ -I ../../Z\ -I ../../PrimalityTest\ -I ../../List\ -I ../../elliptic\ -I ../../num\ -I ../../num/W/W8 ################################### # # # Definition of the "all" target. # # # ################################### VFILES=prime1.v\ prime2.v\ prime3.v\ prime4.v\ prime5.v\ prime6.v\ prime7.v\ prime8.v\ prime9.v VOFILES=$(VFILES:.v=.vo) VIFILES=$(VFILES:.v=.vi) GFILES=$(VFILES:.v=.g) HTMLFILES=$(VFILES:.v=.html) GHTMLFILES=$(VFILES:.v=.g.html) all: prime1.vo\ prime2.vo\ prime3.vo\ prime4.vo\ prime5.vo\ prime6.vo\ prime7.vo\ prime8.vo\ prime9.vo spec: $(VIFILES) gallina: $(GFILES) html: $(HTMLFILES) gallinahtml: $(GHTMLFILES) all.ps: $(VFILES) $(COQDOC) -ps -o $@ `$(COQDEP) -sort -suffix .v $(VFILES)` all-gal.ps: $(VFILES) $(COQDOC) -ps -g -o $@ `$(COQDEP) -sort -suffix .v $(VFILES)` #################### # # # Special targets. # # # #################### .PHONY: all opt byte archclean clean install depend html .SUFFIXES: .v .vo .vi .g .html .tex .g.tex .g.html .v.vo: $(COQC) $(COQDEBUG) $(COQFLAGS) $* .v.vi: $(COQC) -i $(COQDEBUG) $(COQFLAGS) $* .v.g: $(GALLINA) $< .v.tex: $(COQDOC) -latex $< -o $@ .v.html: $(COQDOC) -html $< -o $@ .v.g.tex: $(COQDOC) -latex -g $< -o $@ .v.g.html: $(COQDOC) -html -g $< -o $@ byte: $(MAKE) all "OPT=" opt: $(MAKE) all "OPT=-opt" include .depend .depend depend: rm -f .depend $(COQDEP) -i $(COQLIBS) $(VFILES) *.ml *.mli >.depend $(COQDEP) $(COQLIBS) -suffix .html $(VFILES) >>.depend install: mkdir -p `$(COQC) -where`/user-contrib cp -f $(VOFILES) `$(COQC) -where`/user-contrib Makefile: Make mv -f Makefile Makefile.bak $(COQBIN)coq_makefile -f Make -o Makefile clean: rm -f *.cmo *.cmi *.cmx *.o $(VOFILES) $(VIFILES) $(GFILES) *~ rm -f all.ps all-gal.ps $(HTMLFILES) $(GHTMLFILES) archclean: rm -f *.cmx *.o html: # WARNING # # This Makefile has been automagically generated by coq_makefile # Edit at your own risks ! # # END OF WARNING coqprime-8.18/src/Coqprime/examples/t50/Makefile.coq.local000066400000000000000000000000461451023060700233750ustar00rootroot00000000000000 res : make clean; make -s all > res coqprime-8.18/src/Coqprime/examples/t50/_CoqProject000066400000000000000000000001611451023060700222140ustar00rootroot00000000000000-R ../../../Coqprime Coqprime prime1.v prime2.v prime3.v prime4.v prime5.v prime6.v prime7.v prime8.v prime9.v coqprime-8.18/src/Coqprime/examples/t50/prime1.v000066400000000000000000000021711451023060700214500ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime781254495361 : prime 781254495361. Proof. apply (Pocklington_refl (Pock_certif 781254495361 22 ((5, 1)::(3, 3)::(2,7)::nil) 7006) ((Proof_certif 5 prime5) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime12345678901234567890123456789012345678901234568119: prime 12345678901234567890123456789012345678901234568119. apply (Pocklington_refl (Ell_certif 12345678901234567890123456789012345678901234568119 15065364 ((819474318790741988718191592468617421805573,1)::nil) 0 10985 26 169) ( (Ell_certif 819474318790741988718191592468617421805573 2974490 ((275500781240058628106524320054131689,1)::nil) 409737159395370994359095796234308710902827 0 18 81) :: (Ell_certif 275500781240058628106524320054131689 128968646599974823 ((2136184169588024581,1)::nil) 0 512169 58 841) :: (Ell_certif 2136184169588024581 2734300 ((781254495361,1)::nil) 0 5832 9 81) :: (Proof_certif 781254495361 prime781254495361) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t50/prime2.v000066400000000000000000000023501451023060700214500ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime12758741597671 : prime 12758741597671. Proof. apply (Pocklington_refl (Pock_certif 12758741597671 11 ((1277, 1)::(5, 1)::(3, 1)::(2,1)::nil) 48936) ((Proof_certif 1277 prime1277) :: (Proof_certif 5 prime5) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime23456789012345678901234567890123456789012345678921: prime 23456789012345678901234567890123456789012345678921. apply (Pocklington_refl (Ell_certif 23456789012345678901234567890123456789012345678921 985748 ((23795928586561351279672456893295268820653753,1)::nil) 10368 0 288 5184) ( (SPock_certif 23795928586561351279672456893295268820653753 2 ((4776647834905838370780687325926589, 1)::nil)) :: (SPock_certif 4776647834905838370780687325926589 2 ((3373243986825092585447171, 1)::nil)) :: (SPock_certif 3373243986825092585447171 2 ((43583861297644259, 1)::nil)) :: (SPock_certif 43583861297644259 2 ((357244764734789, 1)::nil)) :: (SPock_certif 357244764734789 2 ((12758741597671, 1)::nil)) :: (Proof_certif 12758741597671 prime12758741597671) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t50/prime3.v000066400000000000000000000026601451023060700214550ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime3147895291 : prime 3147895291. Proof. apply (Pocklington_refl (Pock_certif 3147895291 3 ((89, 1)::(5, 1)::(3, 1)::(2,1)::nil) 4186) ((Proof_certif 89 prime89) :: (Proof_certif 5 prime5) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime34567890123456789012345678901234567890123456789133: prime 34567890123456789012345678901234567890123456789133. apply (Pocklington_refl (Ell_certif 34567890123456789012345678901234567890123456789133 43963888 ((786279187215125036537844201647371988901943,1)::nil) 0 16464 28 196) ( (Ell_certif 786279187215125036537844201647371988901943 1340508 ((586553147922373485678237978786893227,1)::nil) 0 5832 9 81) :: (Ell_certif 586553147922373485678237978786893227 3141 ((186740893958094074246932344443953,1)::nil) 0 221184 48 576) :: (Ell_certif 186740893958094074246932344443953 64934242 ((2875846213128877353059789,1)::nil) 102754353218657969830473362907022 0 68502902145771979886982241938015 43635357312496922650498311654053) :: (Ell_certif 2875846213128877353059789 559008136 ((5144551622636221,1)::nil) 2875846213128877353059753 0 12 36) :: (Ell_certif 5144551622636221 1634283 ((3147895291,1)::nil) 0 8192000 320 6400) :: (Proof_certif 3147895291 prime3147895291) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t50/prime4.v000066400000000000000000000030501451023060700214500ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime409355789 : prime 409355789. Proof. apply (Pocklington_refl (Pock_certif 409355789 2 ((2069, 1)::(2,2)::nil) 16358) ((Proof_certif 2069 prime2069) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime45678901234567890123456789012345678901234567890173: prime 45678901234567890123456789012345678901234567890173. apply (Pocklington_refl (Ell_certif 45678901234567890123456789012345678901234567890173 4681 ((9758363861262100005011065186172171907551501609,1)::nil) 9781366845776061026631943744091905444389216947450 40534976206835742715124580184913825944485873842245 44725954163382645029460350557081647367325232751881 23944982921609000437359567501588754878872290232176) ( (Ell_certif 9758363861262100005011065186172171907551501609 360866384 ((27041487636216345396724441079320271749,1)::nil) 100 0 20 100) :: (Ell_certif 27041487636216345396724441079320271749 17640 ((1532964151712944749995301930939497,1)::nil) 27041487636216345396724441079320268149 0 240 3600) :: (Ell_certif 1532964151712944749995301930939497 11198922432 ((136884969158517056128193,1)::nil) 1532964151712944749995301173355593 8234810772496 0 2869636) :: (SPock_certif 136884969158517056128193 2 ((2268109907849235421, 1)::nil)) :: (SPock_certif 2268109907849235421 2 ((12600610599162419, 1)::nil)) :: (SPock_certif 12600610599162419 2 ((409355789, 1)::nil)) :: (Proof_certif 409355789 prime409355789) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t50/prime5.v000066400000000000000000000023121451023060700214510ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime296193496741 : prime 296193496741. Proof. apply (Pocklington_refl (Pock_certif 296193496741 2 ((2467, 1)::(2,2)::nil) 16834) ((Proof_certif 2467 prime2467) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime56789012345678901234567890123456789012345678901251: prime 56789012345678901234567890123456789012345678901251. apply (Pocklington_refl (SPock_certif 56789012345678901234567890123456789012345678901251 2 ((64809143903770500695655224106655394022648421, 1)::nil)) ( (SPock_certif 64809143903770500695655224106655394022648421 2 ((143528628977580537977599369933230499, 1)::nil)) :: (Ell_certif 143528628977580537977599369933230499 147984 ((969892886917373085790177496509,1)::nil) 80956800083162715589327371358432158 51310268889317992145811050312666099 0 128485858476228824601322735963624700) :: (Ell_certif 969892886917373085790177496509 18103449 ((53575033515291555240277,1)::nil) 0 500 5 25) :: (SPock_certif 53575033515291555240277 2 ((296193496741, 1)::nil)) :: (Proof_certif 296193496741 prime296193496741) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t50/prime6.v000066400000000000000000000026101451023060700214530ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime100243289 : prime 100243289. Proof. apply (Pocklington_refl (Pock_certif 100243289 3 ((737083, 1)::(2,3)::nil) 1) ((Pock_certif 737083 2 ((40949, 1)::(2,1)::nil) 1) :: (Proof_certif 40949 prime40949) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime67890123456789012345678901234567890123456789012361: prime 67890123456789012345678901234567890123456789012361. apply (Pocklington_refl (Ell_certif 67890123456789012345678901234567890123456789012361 97937504772156721 ((693198418876707274707103954283743,1)::nil) 0 35801432291666080729166608072916660807291736736560 33945061728394506172839450617283945061728394506368 29701929012345192901234519290123451929012345201697) ( (SPock_certif 693198418876707274707103954283743 2 ((7920276260559713840029980511, 1)::nil)) :: (Ell_certif 7920276260559713840029980511 21958 ((360701168620087663742953,1)::nil) 1452905144058057364936825490 3500075254047258054579801239 0 4612259265333956674606288033) :: (Ell_certif 360701168620087663742953 425220397 ((848268735846901,1)::nil) 0 348020268160787708704086 180350584310043831871555 338157345581332184760559) :: (SPock_certif 848268735846901 2 ((100243289, 1)::nil)) :: (Proof_certif 100243289 prime100243289) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t50/prime7.v000066400000000000000000000024271451023060700214620ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime95422040797 : prime 95422040797. Proof. apply (Pocklington_refl (Pock_certif 95422040797 2 ((16229, 1)::(2,2)::nil) 41778) ((Proof_certif 16229 prime16229) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime78901234567890123456789012345678901234567890123491: prime 78901234567890123456789012345678901234567890123491. apply (Pocklington_refl (Ell_certif 78901234567890123456789012345678901234567890123491 460 ((171524422973674181427802224787765088631887619361,1)::nil) 12031785075378784600176523961181540716182791851940 73848434268762360911557659986696456107315395586738 0 4522103279540963399034683202559513404643865562567) ( (Ell_certif 171524422973674181427802224787765088631887619361 5247525 ((32686728119194130838405191918476602246283,1)::nil) 0 1080 6 36) :: (Ell_certif 32686728119194130838405191918476602246283 33594709625459073 ((972972485358919527820537,1)::nil) 0 78608 17 289) :: (SPock_certif 972972485358919527820537 2 ((743194563113683361, 1)::nil)) :: (Ell_certif 743194563113683361 7788500 ((95422040797,1)::nil) 900 0 10 100) :: (Proof_certif 95422040797 prime95422040797) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t50/prime8.v000066400000000000000000000027131451023060700214610ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime6186655106941 : prime 6186655106941. Proof. apply (Pocklington_refl (Pock_certif 6186655106941 2 ((1339102837, 1)::(2,2)::nil) 1) ((Pock_certif 1339102837 2 ((599, 1)::(2,2)::nil) 3018) :: (Proof_certif 599 prime599) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime89012345678901234567890123456789012345678901234671: prime 89012345678901234567890123456789012345678901234671. apply (Pocklington_refl (SPock_certif 89012345678901234567890123456789012345678901234671 2 ((9434440862093035546786759640267923465041649, 1)::nil)) ( (Ell_certif 9434440862093035546786759640267923465041649 19763113 ((477376254545173907915829899446234441,1)::nil) 0 19008 12 144) :: (Ell_certif 477376254545173907915829899446234441 65611 ((7275857013994206904573583733469,1)::nil) 0 400921463778173399226185393785663489 2453 447540238636100538671090530731220864) :: (SPock_certif 7275857013994206904573583733469 2 ((55120128893895506852830179799, 1)::nil)) :: (Ell_certif 55120128893895506852830179799 15841 ((3479586446177328425306107,1)::nil) 0 13134093212998538742179185769 41340096670421630139622641408 3445008055868469178302417314) :: (Ell_certif 3479586446177328425306107 562434204919 ((6186655106941,1)::nil) 0 75449 38 361) :: (Proof_certif 6186655106941 prime6186655106941) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t50/prime9.v000066400000000000000000000030361451023060700214610ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime8172363812299 : prime 8172363812299. Proof. apply (Pocklington_refl (Pock_certif 8172363812299 2 ((2344338443, 1)::(2,1)::nil) 1) ((Pock_certif 2344338443 2 ((17495063, 1)::(2,1)::nil) 1) :: (Pock_certif 17495063 5 ((29, 1)::(13, 1)::(2,1)::nil) 582) :: (Proof_certif 29 prime29) :: (Proof_certif 13 prime13) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime90123456789012345678901234567890123456789012345767: prime 90123456789012345678901234567890123456789012345767. apply (Pocklington_refl (Ell_certif 90123456789012345678901234567890123456789012345767 17158 ((5252561883029044508619956759449886145396761249,1)::nil) 65136860129970470133208885679531502916987918440833 3287854945502081538460645485015755534450769431644 0 63991231585988043203870358151771006401958544985177) ( (SPock_certif 5252561883029044508619956759449886145396761249 2 ((473738743619720656436859847011961, 1)::nil)) :: (Ell_certif 473738743619720656436859847011961 399 ((1187315146916593223665588678129,1)::nil) 0 9000 10 100) :: (Ell_certif 1187315146916593223665588678129 202027 ((5877012215776086373849771,1)::nil) 0 511758 27 729) :: (SPock_certif 5877012215776086373849771 2 ((113302722494237254171, 1)::nil)) :: (Ell_certif 113302722494237254171 13864131 ((8172363812299,1)::nil) 0 78608 17 289) :: (Proof_certif 8172363812299 prime8172363812299) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t50/res000066400000000000000000000015451451023060700206040ustar00rootroot00000000000000COQDEP VFILES COQC prime1.v Finished transaction in 0.379 secs (0.256u,0.s) (successful) COQNATIVE prime1.vo COQC prime2.v Finished transaction in 0.19 secs (0.124u,0.s) (successful) COQNATIVE prime2.vo COQC prime3.v Finished transaction in 0.386 secs (0.278u,0.s) (successful) COQNATIVE prime3.vo COQC prime4.v Finished transaction in 0.477 secs (0.457u,0.s) (successful) COQNATIVE prime4.vo COQC prime5.v Finished transaction in 0.142 secs (0.11u,0.s) (successful) COQNATIVE prime5.vo COQC prime6.v Finished transaction in 0.228 secs (0.178u,0.s) (successful) COQNATIVE prime6.vo COQC prime7.v Finished transaction in 0.407 secs (0.404u,0.s) (successful) COQNATIVE prime7.vo COQC prime8.v Finished transaction in 0.126 secs (0.125u,0.s) (successful) COQNATIVE prime8.vo COQC prime9.v Finished transaction in 0.268 secs (0.26u,0.001s) (successful) COQNATIVE prime9.vo coqprime-8.18/src/Coqprime/examples/t75/000077500000000000000000000000001451023060700200725ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/examples/t75/.depend000066400000000000000000000120561451023060700213360ustar00rootroot00000000000000prime123456789012345678901234567890123456789012345678901234567890123456789012517.vo: prime123456789012345678901234567890123456789012345678901234567890123456789012517.v ../PocklingtonRefl.vo prime123456789012345678901234567890123456789012345678901234567890123456789012517.vi: prime123456789012345678901234567890123456789012345678901234567890123456789012517.v ../PocklingtonRefl.vo prime234567890123456789012345678901234567890123456789012345678901234567890123737.vo: prime234567890123456789012345678901234567890123456789012345678901234567890123737.v ../PocklingtonRefl.vo prime234567890123456789012345678901234567890123456789012345678901234567890123737.vi: prime234567890123456789012345678901234567890123456789012345678901234567890123737.v ../PocklingtonRefl.vo prime345678901234567890123456789012345678901234567890123456789012345678901234867.vo: prime345678901234567890123456789012345678901234567890123456789012345678901234867.v ../PocklingtonRefl.vo prime345678901234567890123456789012345678901234567890123456789012345678901234867.vi: prime345678901234567890123456789012345678901234567890123456789012345678901234867.v ../PocklingtonRefl.vo prime456789012345678901234567890123456789012345678901234567890123456789012345719.vo: prime456789012345678901234567890123456789012345678901234567890123456789012345719.v ../PocklingtonRefl.vo prime456789012345678901234567890123456789012345678901234567890123456789012345719.vi: prime456789012345678901234567890123456789012345678901234567890123456789012345719.v ../PocklingtonRefl.vo prime567890123456789012345678901234567890123456789012345678901234567890123457001.vo: prime567890123456789012345678901234567890123456789012345678901234567890123457001.v ../PocklingtonRefl.vo prime567890123456789012345678901234567890123456789012345678901234567890123457001.vi: prime567890123456789012345678901234567890123456789012345678901234567890123457001.v ../PocklingtonRefl.vo prime678901234567890123456789012345678901234567890123456789012345678901234568009.vo: prime678901234567890123456789012345678901234567890123456789012345678901234568009.v ../PocklingtonRefl.vo prime678901234567890123456789012345678901234567890123456789012345678901234568009.vi: prime678901234567890123456789012345678901234567890123456789012345678901234568009.v ../PocklingtonRefl.vo prime789012345678901234567890123456789012345678901234567890123456789012345678959.vo: prime789012345678901234567890123456789012345678901234567890123456789012345678959.v ../PocklingtonRefl.vo prime789012345678901234567890123456789012345678901234567890123456789012345678959.vi: prime789012345678901234567890123456789012345678901234567890123456789012345678959.v ../PocklingtonRefl.vo prime890123456789012345678901234567890123456789012345678901234567890123456789173.vo: prime890123456789012345678901234567890123456789012345678901234567890123456789173.v ../PocklingtonRefl.vo prime890123456789012345678901234567890123456789012345678901234567890123456789173.vi: prime890123456789012345678901234567890123456789012345678901234567890123456789173.v ../PocklingtonRefl.vo prime901234567890123456789012345678901234567890123456789012345678901234567890211.vo: prime901234567890123456789012345678901234567890123456789012345678901234567890211.v ../PocklingtonRefl.vo prime901234567890123456789012345678901234567890123456789012345678901234567890211.vi: prime901234567890123456789012345678901234567890123456789012345678901234567890211.v ../PocklingtonRefl.vo prime123456789012345678901234567890123456789012345678901234567890123456789012517.html: prime123456789012345678901234567890123456789012345678901234567890123456789012517.v ../PocklingtonRefl.html prime234567890123456789012345678901234567890123456789012345678901234567890123737.html: prime234567890123456789012345678901234567890123456789012345678901234567890123737.v ../PocklingtonRefl.html prime345678901234567890123456789012345678901234567890123456789012345678901234867.html: prime345678901234567890123456789012345678901234567890123456789012345678901234867.v ../PocklingtonRefl.html prime456789012345678901234567890123456789012345678901234567890123456789012345719.html: prime456789012345678901234567890123456789012345678901234567890123456789012345719.v ../PocklingtonRefl.html prime567890123456789012345678901234567890123456789012345678901234567890123457001.html: prime567890123456789012345678901234567890123456789012345678901234567890123457001.v ../PocklingtonRefl.html prime678901234567890123456789012345678901234567890123456789012345678901234568009.html: prime678901234567890123456789012345678901234567890123456789012345678901234568009.v ../PocklingtonRefl.html prime789012345678901234567890123456789012345678901234567890123456789012345678959.html: prime789012345678901234567890123456789012345678901234567890123456789012345678959.v ../PocklingtonRefl.html prime890123456789012345678901234567890123456789012345678901234567890123456789173.html: prime890123456789012345678901234567890123456789012345678901234567890123456789173.v ../PocklingtonRefl.html prime901234567890123456789012345678901234567890123456789012345678901234567890211.html: prime901234567890123456789012345678901234567890123456789012345678901234567890211.v ../PocklingtonRefl.html coqprime-8.18/src/Coqprime/examples/t75/Makefile000066400000000000000000000003741451023060700215360ustar00rootroot00000000000000ifeq "$(COQBIN)" "" COQBIN=$(dir $(shell which coqtop))/ endif %: Makefile.coq Makefile.coq: _CoqProject $(COQBIN)coq_makefile -f _CoqProject -o Makefile.coq tests: all @$(MAKE) -C tests -s clean @$(MAKE) -C tests -s all -include Makefile.coq coqprime-8.18/src/Coqprime/examples/t75/Makefile.bak000066400000000000000000000112241451023060700222660ustar00rootroot00000000000000############################################################################## ## The Calculus of Inductive Constructions ## ## ## ## Projet Coq ## ## ## ## INRIA ENS-CNRS ## ## Rocquencourt Lyon ## ## ## ## Coq V7 ## ## ## ## ## ############################################################################## # WARNING # # This Makefile has been automagically generated by coq_makefile # Edit at your own risks ! # # END OF WARNING # # This Makefile was generated by the command line : # coq_makefile -f Make -o Makefile # ########################## # # # Variables definitions. # # # ########################## CAMLP4LIB=`camlp4 -where` COQSRC=-I $(COQTOP)/kernel -I $(COQTOP)/lib \ -I $(COQTOP)/library -I $(COQTOP)/parsing \ -I $(COQTOP)/pretyping -I $(COQTOP)/interp \ -I $(COQTOP)/proofs -I $(COQTOP)/syntax -I $(COQTOP)/tactics \ -I $(COQTOP)/toplevel -I $(COQTOP)/contrib/correctness \ -I $(COQTOP)/contrib/extraction -I $(COQTOP)/contrib/field \ -I $(COQTOP)/contrib/fourier -I $(COQTOP)/contrib/graphs \ -I $(COQTOP)/contrib/interface -I $(COQTOP)/contrib/jprover \ -I $(COQTOP)/contrib/omega -I $(COQTOP)/contrib/romega \ -I $(COQTOP)/contrib/ring -I $(COQTOP)/contrib/xml \ -I $(CAMLP4LIB) ZFLAGS=$(OCAMLLIBS) $(COQSRC) OPT= COQFLAGS=-q $(OPT) $(COQLIBS) $(OTHERFLAGS) $(COQ_XML) COQC=$(COQBIN)coqc GALLINA=gallina COQDOC=$(COQBIN)coqdoc CAMLC=ocamlc -c CAMLOPTC=ocamlopt -c CAMLLINK=ocamlc CAMLOPTLINK=ocamlopt COQDEP=$(COQBIN)coqdep -c GRAMMARS=grammar.cma CAMLP4EXTEND=pa_extend.cmo pa_ifdef.cmo q_MLast.cmo PP=-pp "camlp4o -I . -I $(COQTOP)/parsing $(CAMLP4EXTEND) $(GRAMMARS) -impl" ######################### # # # Libraries definition. # # # ######################### OCAMLLIBS=-I .\ -I ..\ -I ../../Tactic\ -I ../../N\ -I ../../Z\ -I ../../PrimalityTest\ -I ../../List\ -I ../../elliptic\ -I ../../num\ -I ../../num/W/W8 COQLIBS=-I .\ -I ..\ -I ../../Tactic\ -I ../../N\ -I ../../Z\ -I ../../PrimalityTest\ -I ../../List\ -I ../../elliptic\ -I ../../num\ -I ../../num/W/W8 ################################### # # # Definition of the "all" target. # # # ################################### VFILES=prime1.v\ prime2.v\ prime3.v\ prime4.v\ prime5.v\ prime6.v\ prime7.v\ prime8.v\ prime9.v VOFILES=$(VFILES:.v=.vo) VIFILES=$(VFILES:.v=.vi) GFILES=$(VFILES:.v=.g) HTMLFILES=$(VFILES:.v=.html) GHTMLFILES=$(VFILES:.v=.g.html) all: prime1.vo\ prime2.vo\ prime3.vo\ prime4.vo\ prime5.vo\ prime6.vo\ prime7.vo\ prime8.vo\ prime9.vo spec: $(VIFILES) gallina: $(GFILES) html: $(HTMLFILES) gallinahtml: $(GHTMLFILES) all.ps: $(VFILES) $(COQDOC) -ps -o $@ `$(COQDEP) -sort -suffix .v $(VFILES)` all-gal.ps: $(VFILES) $(COQDOC) -ps -g -o $@ `$(COQDEP) -sort -suffix .v $(VFILES)` #################### # # # Special targets. # # # #################### .PHONY: all opt byte archclean clean install depend html .SUFFIXES: .v .vo .vi .g .html .tex .g.tex .g.html .v.vo: $(COQC) $(COQDEBUG) $(COQFLAGS) $* .v.vi: $(COQC) -i $(COQDEBUG) $(COQFLAGS) $* .v.g: $(GALLINA) $< .v.tex: $(COQDOC) -latex $< -o $@ .v.html: $(COQDOC) -html $< -o $@ .v.g.tex: $(COQDOC) -latex -g $< -o $@ .v.g.html: $(COQDOC) -html -g $< -o $@ byte: $(MAKE) all "OPT=" opt: $(MAKE) all "OPT=-opt" include .depend .depend depend: rm -f .depend $(COQDEP) -i $(COQLIBS) $(VFILES) *.ml *.mli >.depend $(COQDEP) $(COQLIBS) -suffix .html $(VFILES) >>.depend install: mkdir -p `$(COQC) -where`/user-contrib cp -f $(VOFILES) `$(COQC) -where`/user-contrib Makefile: Make mv -f Makefile Makefile.bak $(COQBIN)coq_makefile -f Make -o Makefile clean: rm -f *.cmo *.cmi *.cmx *.o $(VOFILES) $(VIFILES) $(GFILES) *~ rm -f all.ps all-gal.ps $(HTMLFILES) $(GHTMLFILES) archclean: rm -f *.cmx *.o html: # WARNING # # This Makefile has been automagically generated by coq_makefile # Edit at your own risks ! # # END OF WARNING coqprime-8.18/src/Coqprime/examples/t75/Makefile.coq.local000066400000000000000000000000461451023060700234040ustar00rootroot00000000000000 res : make clean; make -s all > res coqprime-8.18/src/Coqprime/examples/t75/_CoqProject000066400000000000000000000001611451023060700222230ustar00rootroot00000000000000-R ../../../Coqprime Coqprime prime1.v prime2.v prime3.v prime4.v prime5.v prime6.v prime7.v prime8.v prime9.v coqprime-8.18/src/Coqprime/examples/t75/prime1.v000066400000000000000000000062221451023060700214600ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime250292848634953 : prime 250292848634953. Proof. apply (Pocklington_refl (Pock_certif 250292848634953 5 ((5515001953, 1)::(2,3)::nil) 1) ((Pock_certif 5515001953 5 ((173, 1)::(2,5)::nil) 10798) :: (Proof_certif 173 prime173) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime123456789012345678901234567890123456789012345678901234567890123456789012517: prime 123456789012345678901234567890123456789012345678901234567890123456789012517. apply (Pocklington_refl (Ell_certif 123456789012345678901234567890123456789012345678901234567890123456789012517 386804746624 ((319170822203880316003188985442628281207410404831346658084563687,1)::nil) 123456789012345678901234567890123456789012345678901234567890123456788869157 25690112 64 4096) ( (Ell_certif 319170822203880316003188985442628281207410404831346658084563687 26762294 ((11926138402181827761222150292595409964961572248030502423,1)::nil) 104103958272786094797916337926444355433917598794896872682241060 159829671526420700078538713203296037933776980221892644309666459 157104402592595980307913399135326776342954969785951541253102834 266946987538985664411434248829708867398374209207893105508462563) :: (SPock_certif 11926138402181827761222150292595409964961572248030502423 2 ((220854414855219032615225005418433517869658745333898193, 1)::nil)) :: (Ell_certif 220854414855219032615225005418433517869658745333898193 364 ((606742897953898441250618149323080160408998218247431,1)::nil) 0 126818746030145303884523733580116121589218107673247541 165640811141414274461418754063825138402244059000423677 207051013926767843076773442579781423002805073750530596) :: (Ell_certif 606742897953898441250618149323080160408998218247431 52300 ((11601202637741844000967841405861262324265654981,1)::nil) 0 552230840715852878169507924969834677247252284576647 303371448976949220625309074661540080204499109123731 341292880099067873203472708994232590230061497764240) :: (Ell_certif 11601202637741844000967841405861262324265654981 3150 ((3682921472298998095545378139088228136413449,1)::nil) 1886815219304717717044917638260558285648943686 5340589639749335260549658728180276666816252326 0 6672977350652300057857130174792665118861290892) :: (SPock_certif 3682921472298998095545378139088228136413449 2 ((153455061345791587314390755795342839017227, 1)::nil)) :: (SPock_certif 153455061345791587314390755795342839017227 2 ((37409815052606432792391700583945109463, 1)::nil)) :: (Ell_certif 37409815052606432792391700583945109463 32314679 ((1157672494676689587528802518017,1)::nil) 19155572044270759185424729103693377770 27994334197828200959203470384324369949 0 22074521957674884925381819683630513704) :: (SPock_certif 1157672494676689587528802518017 2 ((1130539545582704675321096209, 1)::nil)) :: (Ell_certif 1130539545582704675321096209 14536636 ((77771744823399134707,1)::nil) 0 1015808 32 1024) :: (Ell_certif 77771744823399134707 310723 ((250292848634953,1)::nil) 0 51341503418571599664 58328808617549351654 63189542669011812512) :: (Proof_certif 250292848634953 prime250292848634953) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t75/prime2.v000066400000000000000000000042311451023060700214570ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime846065480749 : prime 846065480749. Proof. apply (Pocklington_refl (Pock_certif 846065480749 2 ((239, 1)::(101, 1)::(2,2)::nil) 72392) ((Proof_certif 239 prime239) :: (Proof_certif 101 prime101) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime234567890123456789012345678901234567890123456789012345678901234567890123737: prime 234567890123456789012345678901234567890123456789012345678901234567890123737. apply (Pocklington_refl (SPock_certif 234567890123456789012345678901234567890123456789012345678901234567890123737 2 ((15781610878736016561814635747512580452164237391485721518763528869627, 1)::nil)) ( (Ell_certif 15781610878736016561814635747512580452164237391485721518763528869627 24472980 ((644858569685261727906231106612786078795446164661545894408647,1)::nil) 15781610878736016561814635747512580452164237391485721518763479311395 134414314742 571 326041) :: (Ell_certif 644858569685261727906231106612786078795446164661545894408647 199593 ((3230867664122798534548962672109500545444193073958610013,1)::nil) 0 78608 17 289) :: (SPock_certif 3230867664122798534548962672109500545444193073958610013 2 ((98154929642811961798182120309560716534335674868107, 1)::nil)) :: (Ell_certif 98154929642811961798182120309560716534335674868107 804144582 ((122061295741978849517613364696232539466089,1)::nil) 98154929642811961798182120309560716534335674839277 1668296 155 961) :: (Ell_certif 122061295741978849517613364696232539466089 11628 ((10497187456310530574230993942383491833,1)::nil) 122061295741978849517613364696232539444219 1102248 27 729) :: (Ell_certif 10497187456310530574230993942383491833 10227 ((1026419033569035942160253106332683,1)::nil) 0 3584 8 64) :: (SPock_certif 1026419033569035942160253106332683 2 ((4797166187239533134835349, 1)::nil)) :: (Ell_certif 4797166187239533134835349 796747 ((6020940382886741341,1)::nil) 0 15145569 348 7569) :: (Ell_certif 6020940382886741341 7116400 ((846065480749,1)::nil) 0 5832 9 81) :: (Proof_certif 846065480749 prime846065480749) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t75/prime3.v000066400000000000000000000043051451023060700214620ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime2364816956681 : prime 2364816956681. Proof. apply (Pocklington_refl (Pock_certif 2364816956681 3 ((137, 1)::(71, 1)::(2,3)::nil) 41614) ((Proof_certif 137 prime137) :: (Proof_certif 71 prime71) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime345678901234567890123456789012345678901234567890123456789012345678901234867: prime 345678901234567890123456789012345678901234567890123456789012345678901234867. apply (Pocklington_refl (Ell_certif 345678901234567890123456789012345678901234567890123456789012345678901234867 1411371 ((244924191608420387072893512061921124139552809881227346027983516310153,1)::nil) 0 221184 48 576) ( (Ell_certif 244924191608420387072893512061921124139552809881227346027983516310153 198457 ((1234142366398869211329877565729206534556712063187094448285343321,1)::nil) 0 3584 8 64) :: (Ell_certif 1234142366398869211329877565729206534556712063187094448285343321 6464400 ((190913675886218243198112363982624337051242242430488723943,1)::nil) 280120286059203341420141182543512307820207837035157399901023459 229081674606460389541462454361558765656911902473492210381286539 659217991305228829812191135366836900663879886034496438707371790 381667883141002426290615343870262269768390903304738380192888616) :: (Ell_certif 190913675886218243198112363982624337051242242430488723943 259 ((737118439715128352116263953568149199484378845031173121,1)::nil) 0 163840 96 1024) :: (Ell_certif 737118439715128352116263953568149199484378845031173121 146982189 ((5015018790576920528216272196550135572327274421,1)::nil) 0 500 5 25) :: (Ell_certif 5015018790576920528216272196550135572327274421 621712 ((8066466129939458347621035472426050852343,1)::nil) 0 5832 9 81) :: (Ell_certif 8066466129939458347621035472426050852343 63859722214917 ((126315396468405112769531077,1)::nil) 0 61440 16 256) :: (Ell_certif 126315396468405112769531077 1502431642 ((84073972443922913,1)::nil) 63157698234202556384765579 0 18 81) :: (SPock_certif 84073972443922913 2 ((2364816956681, 1)::nil)) :: (Proof_certif 2364816956681 prime2364816956681) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t75/prime4.v000066400000000000000000000061121451023060700214610ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime2487334028981 : prime 2487334028981. Proof. apply (Pocklington_refl (Pock_certif 2487334028981 2 ((379, 1)::(31, 1)::(2,2)::nil) 9008) ((Proof_certif 379 prime379) :: (Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime456789012345678901234567890123456789012345678901234567890123456789012345719: prime 456789012345678901234567890123456789012345678901234567890123456789012345719. apply (Pocklington_refl (Ell_certif 456789012345678901234567890123456789012345678901234567890123456789012345719 120374 ((3794748137851021825598284431218176591087303254928343022645607860922259,1)::nil) 246963818571832597245629546866271265884277149277950832642753103119424699973 115706626755254436293181523932784492184736521000726766656540962256102729132 0 194880594014284907056814023349881406580036080549641945352434457136224622870) ( (Ell_certif 3794748137851021825598284431218176591087303254928343022645607860922259 2338 ((1623074481544491798801661433369622196057562304312441684816529340543,1)::nil) 260937662969224746687791422043055176699299051182173658257535865039214 2406768493081104712184738096874684989631960420819057746909314164946576 3137449062497646937119646401027656691273727581269488912842330388090489 2955929133447540224352983867452447284191321347104163341335686455922360) :: (Ell_certif 1623074481544491798801661433369622196057562304312441684816529340543 8994 ((180461917005169201556778011270805498355305081567302630307971021,1)::nil) 1335331925045624323819777246276569837381807370360471662556654584334 390277261854246710071669354089870287237505990331202882151305934020 1250474251050274576856232841465984634682677860340021134368849210696 1495261323307087204001754181798907291261277441151714942120953942655) :: (Ell_certif 180461917005169201556778011270805498355305081567302630307971021 45037837 ((4006895735360674660214654874984062879040384232852775309,1)::nil) 180461917005169201556778011270805498355305081567283681205705181 31749105730618655022 74219 5508459961) :: (Ell_certif 4006895735360674660214654874984062879040384232852775309 3023877893853 ((1325085164154932698927766288385561275311697,1)::nil) 4006895735360674660214654874984062879040384232312166405 4964006108754 1431 2047761) :: (Ell_certif 1325085164154932698927766288385561275311697 402290 ((3293855587150892885554067514512669357,1)::nil) 656208365428440560451347803258941149529709 0 257303547660735480957480370467534720859168 733343217130951148732076675354716491561591) :: (SPock_certif 3293855587150892885554067514512669357 2 ((646868732747622326306768954146243, 1)::nil)) :: (Ell_certif 646868732747622326306768954146243 441755076 ((1464315336464005611820747,1)::nil) 0 9000 10 100) :: (SPock_certif 1464315336464005611820747 2 ((9342426612852643, 1)::nil)) :: (SPock_certif 9342426612852643 2 ((1557071102142107, 1)::nil)) :: (SPock_certif 1557071102142107 2 ((2487334028981, 1)::nil)) :: (Proof_certif 2487334028981 prime2487334028981) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t75/prime5.v000066400000000000000000000045421451023060700214670ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime36381236858437 : prime 36381236858437. Proof. apply (Pocklington_refl (Pock_certif 36381236858437 2 ((1583, 1)::(31, 1)::(2,2)::nil) 42784) ((Proof_certif 1583 prime1583) :: (Proof_certif 31 prime31) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime567890123456789012345678901234567890123456789012345678901234567890123457001: prime 567890123456789012345678901234567890123456789012345678901234567890123457001. apply (Pocklington_refl (Ell_certif 567890123456789012345678901234567890123456789012345678901234567890123457001 28677 ((19802982301384001546384869450589946303889376491014415575248444876236177,1)::nil) 0 192 4 16) ( (Ell_certif 19802982301384001546384869450589946303889376491014415575248444876236177 893575372 ((22161513087654794436730368449086963097397182116939446309026837,1)::nil) 8446351099326273315371371081831452751213667519396316913430917507164525 10797632546788407783012824472292622442457505180638213964525714401661221 0 7957382745923967674847550991125140250542629463592365827276261999280239) :: (Ell_certif 22161513087654794436730368449086963097397182116939446309026837 4357311677780 ((5086051842622795697587778457413138845532724941909,1)::nil) 100 0 20 100) :: (SPock_certif 5086051842622795697587778457413138845532724941909 2 ((514574245510197864992693085533502513712335587, 1)::nil)) :: (Ell_certif 514574245510197864992693085533502513712335587 1229 ((418693446306100785185294426399856051702167,1)::nil) 514574245510197864992693085424969239038070267 13762346127466829996235398 1918747 3681590050009) :: (Ell_certif 418693446306100785185294426399856051702167 16657 ((25136185766110391137927288668886636721,1)::nil) 418693446306100785185294426380906949436327 31749105730618655022 74219 5508459961) :: (Ell_certif 25136185766110391137927288668886636721 151479924640 ((165937406067819596064291379,1)::nil) 22999174035389941984992140154319855469 226581753138899745779479119277070072 1051450546243441357795046507597738599 5853847509957483966356781753592071450) :: (SPock_certif 165937406067819596064291379 2 ((10319756122316805673, 1)::nil)) :: (SPock_certif 10319756122316805673 2 ((36381236858437, 1)::nil)) :: (Proof_certif 36381236858437 prime36381236858437) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t75/prime6.v000066400000000000000000000052011451023060700214610ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime3421288327 : prime 3421288327. Proof. apply (Pocklington_refl (Pock_certif 3421288327 3 ((570214721, 1)::(2,1)::nil) 1) ((Pock_certif 570214721 3 ((1781921, 1)::(2,6)::nil) 1) :: (Pock_certif 1781921 3 ((5, 1)::(2,5)::nil) 256) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime678901234567890123456789012345678901234567890123456789012345678901234568009: prime 678901234567890123456789012345678901234567890123456789012345678901234568009. apply (Pocklington_refl (Ell_certif 678901234567890123456789012345678901234567890123456789012345678901234568009 260 ((2611158594491885090218419278252611158563837190503948396276492024847644113,1)::nil) 900 0 10 100) ( (Ell_certif 2611158594491885090218419278252611158563837190503948396276492024847644113 1117789 ((2336003122675106921090133538845534494933789237251785382341823297633,1)::nil) 0 1621774283297694255252846348602207711764258255039561699249852468559606057 1305579297245942545109209639126305579281918595251974198138246012423822135 1142381885090199726970558434235517381871678770845477423370965260870845840) :: (SPock_certif 2336003122675106921090133538845534494933789237251785382341823297633 2 ((37378442183101429228912787039899105461690175967290472707722467, 1)::nil)) :: (Ell_certif 37378442183101429228912787039899105461690175967290472707722467 6726 ((5557306301382906516341478893829939337927637259654768631777,1)::nil) 37378442183101429228912787039899105461690175967290472707700597 1102248 27 729) :: (Ell_certif 5557306301382906516341478893829939337927637259654768631777 1899772 ((2925249083249414412014430623242669214975289035495359,1)::nil) 0 13310 11 121) :: (SPock_certif 2925249083249414412014430623242669214975289035495359 2 ((162513837958300800667468367957926067498627168638631, 1)::nil)) :: (SPock_certif 162513837958300800667468367957926067498627168638631 2 ((39929689916044422768419746427008861793274488609, 1)::nil)) :: (Ell_certif 39929689916044422768419746427008861793274488609 1469500298 ((27172291132154927108711465018614587973,1)::nil) 48 0 4 16) :: (Ell_certif 27172291132154927108711465018614587973 655606476 ((41446038327655151348947203829,1)::nil) 0 78608 17 289) :: (Ell_certif 41446038327655151348947203829 701827 ((59054493953147091155017,1)::nil) 0 2058 7 49) :: (Ell_certif 59054493953147091155017 6068 ((9732118318000285237,1)::nil) 48 0 4 16) :: (SPock_certif 9732118318000285237 2 ((3421288327, 1)::nil)) :: (Proof_certif 3421288327 prime3421288327) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t75/prime7.v000066400000000000000000000065431451023060700214740ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime27748957772981 : prime 27748957772981. Proof. apply (Pocklington_refl (Pock_certif 27748957772981 2 ((69001, 1)::(2,2)::nil) 72788) ((Pock_certif 69001 19 ((5, 1)::(2,3)::nil) 43) :: (Proof_certif 5 prime5) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime789012345678901234567890123456789012345678901234567890123456789012345678959: prime 789012345678901234567890123456789012345678901234567890123456789012345678959. apply (Pocklington_refl (SPock_certif 789012345678901234567890123456789012345678901234567890123456789012345678959 2 ((394506172839450617283945061728394506172839450617283945061728394506172839479, 1)::nil)) ( (Ell_certif 394506172839450617283945061728394506172839450617283945061728394506172839479 239 ((1650653442842889612066715739449349398249814414659252768600365116539773821,1)::nil) 99732839895929658721858427128528143209595282124976935293626830813033217768 202446870946127498356534994784223914312700292280139740154553523474271118842 0 133651010739828353241318700256601626348201888236269242108007321549960096204) :: (Ell_certif 1650653442842889612066715739449349398249814414659252768600365116539773821 736 ((2242735656036534799003689863382268201911807580302126684830278105025551,1)::nil) 1650653442842889612066715739449349398249814414659252768600365116539630461 25690112 64 4096) :: (Ell_certif 2242735656036534799003689863382268201911807580302126684830278105025551 163806000 ((13691413355045204687274519024835893004331196287838640974928381,1)::nil) 458780045235945239011361112474093385500753683290864974888776245978629 2148718638500306357536058174389106709980712320000391528056236970099338 691035487657762580526860539770008202621674112218820028822675362393602 1635814914901580201052657899191945983097162084387463291852340377921058) :: (Ell_certif 13691413355045204687274519024835893004331196287838640974928381 1675 ((8173978122415047574492250164085331908882575606588834294477,1)::nil) 0 13310 11 121) :: (Ell_certif 8173978122415047574492250164085331908882575606588834294477 9529488 ((857756274252619613403390629583497819082400600470199,1)::nil) 0 44851536 705 19881) :: (Ell_certif 857756274252619613403390629583497819082400600470199 1512783 ((567005495337149884288355096629900853318519383,1)::nil) 0 78608 17 289) :: (Ell_certif 567005495337149884288355096629900853318519383 19857 ((28554439005748596680683507904331946271827,1)::nil) 0 8586756 645 16641) :: (SPock_certif 28554439005748596680683507904331946271827 2 ((4759073167624766113447251317388657711971, 1)::nil)) :: (Ell_certif 4759073167624766113447251317388657711971 490 ((9712394219642379823093313355477936401,1)::nil) 4586890095725857294196229219405635523022 2692812102149550361966369771669339085991 0 2142676368960249273201468743722821448455) :: (SPock_certif 9712394219642379823093313355477936401 2 ((7790709714827945424165198499, 1)::nil)) :: (Ell_certif 7790709714827945424165198499 19812 ((393231865274990771473861,1)::nil) 0 1080 6 36) :: (Ell_certif 393231865274990771473861 525 ((749013076712203103083,1)::nil) 0 500 5 25) :: (SPock_certif 749013076712203103083 2 ((61769180002655707, 1)::nil)) :: (SPock_certif 61769180002655707 2 ((27748957772981, 1)::nil)) :: (Proof_certif 27748957772981 prime27748957772981) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t75/prime8.v000066400000000000000000000047271451023060700214770ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime1428863796293 : prime 1428863796293. Proof. apply (Pocklington_refl (Pock_certif 1428863796293 2 ((5521, 1)::(2,2)::nil) 39360) ((Proof_certif 5521 prime5521) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime890123456789012345678901234567890123456789012345678901234567890123456789173: prime 890123456789012345678901234567890123456789012345678901234567890123456789173. apply (Pocklington_refl (Ell_certif 890123456789012345678901234567890123456789012345678901234567890123456789173 8157 ((109123876031508194885239822798564438326984028833593131325708554662494431,1)::nil) 0 6912 24 144) ( (Ell_certif 109123876031508194885239822798564438326984028833593131325708554662494431 23126 ((4718666264442973055662017763494094857332768848910597827514106537269,1)::nil) 75086423499566443626294790461747896159635481549407206330838166528837345 59953269250185783651557418217622427910089096673128817048258912126221366 0 82899844225043528315881252052116704460417867294689765206259949533005158) :: (Ell_certif 4718666264442973055662017763494094857332768848910597827514106537269 6154934806532 ((766647643356876932190231753946036742091898972419711353,1)::nil) 900 0 90 900) :: (Ell_certif 766647643356876932190231753946036742091898972419711353 432 ((1774647322585363268958869804318404498357590845516267,1)::nil) 111886407845002772474570366365409298112033165382738455 752469734628528106621455495761382810994729448598465265 0 223244498068698190097254653622960681088833419085712351) :: (Ell_certif 1774647322585363268958869804318404498357590845516267 3484036 ((509365380433888532999908672890634937587338727,1)::nil) 1774647322585363268958869804318404498336845014040107 36370126051009921296 0 6030764964) :: (SPock_certif 509365380433888532999908672890634937587338727 2 ((84894230072314755499984778815105822931223121, 1)::nil)) :: (Ell_certif 84894230072314755499984778815105822931223121 1332936 ((63689652070553091446225773835726149979,1)::nil) 84894230072314755499984778815105822931129041 9834496 0 3136) :: (SPock_certif 63689652070553091446225773835726149979 2 ((18538246409960803251808677733, 1)::nil)) :: (Ell_certif 18538246409960803251808677733 22305783 ((831095972284889937607,1)::nil) 0 6912 24 144) :: (SPock_certif 831095972284889937607 2 ((1428863796293, 1)::nil)) :: (Proof_certif 1428863796293 prime1428863796293) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t75/prime9.v000066400000000000000000000055601451023060700214740ustar00rootroot00000000000000Require Import PocklingtonRefl. Local Open Scope positive_scope. Lemma prime4508941553 : prime 4508941553. Proof. apply (Pocklington_refl (Pock_certif 4508941553 3 ((16576991, 1)::(2,4)::nil) 1) ((Pock_certif 16576991 7 ((1657699, 1)::(2,1)::nil) 1) :: (Pock_certif 1657699 2 ((29, 1)::(3, 1)::(2,1)::nil) 130) :: (Proof_certif 29 prime29) :: (Proof_certif 3 prime3) :: (Proof_certif 2 prime2) :: nil)). vm_cast_no_check (refl_equal true). Qed. Lemma prime901234567890123456789012345678901234567890123456789012345678901234567890211: prime 901234567890123456789012345678901234567890123456789012345678901234567890211. apply (Pocklington_refl (Ell_certif 901234567890123456789012345678901234567890123456789012345678901234567890211 4050731092 ((222486891235515136186930165563036894503916729222810524577723178123,1)::nil) 0 524546682092298418209229841820922984182092298418209229841820922984182092233 450617283945061728394506172839450617283945061728394506172839450617283945121 281635802465663580246566358024656635802465663580246566358024656635802465751) ( (Ell_certif 222486891235515136186930165563036894503916729222810524577723178123 107024 ((2078850456304334879904789258138711748572189593279863874430709,1)::nil) 222486891235515136186930165563036894503916729222810524577722841983 92236816 0 9604) :: (Ell_certif 2078850456304334879904789258138711748572189593279863874430709 228 ((9117765159229538946950830079552831972482624828665900683671,1)::nil) 0 192 4 16) :: (Ell_certif 9117765159229538946950830079552831972482624828665900683671 14591416 ((624871853371155955457018707393787749486143125084059,1)::nil) 9117765159229538946950830079552831972482624828665900603031 10838016 240 2304) :: (Ell_certif 624871853371155955457018707393787749486143125084059 3252 ((192150016411794574248775724948189993781867541981,1)::nil) 0 419904 108 1296) :: (Ell_certif 192150016411794574248775724948189993781867541981 36075 ((5326403781338726936903009916273800504055847,1)::nil) 0 500 5 25) :: (Ell_certif 5326403781338726936903009916273800504055847 14243 ((373966424302374986793941983713669426703,1)::nil) 5326403781338726936903009916256563841237607 27544082901737469648 141572 5010657796) :: (Ell_certif 373966424302374986793941983713669426703 927 ((403415775946467083950818227317015681,1)::nil) 0 44851536 705 19881) :: (SPock_certif 403415775946467083950818227317015681 2 ((50239402180479521590404073, 1)::nil)) :: (Ell_certif 50239402180479521590404073 386113 ((130115800764195271033,1)::nil) 0 1080 6 36) :: (SPock_certif 130115800764195271033 2 ((774498814072590899, 1)::nil)) :: (SPock_certif 774498814072590899 2 ((387249407036295449, 1)::nil)) :: (Ell_certif 387249407036295449 85884770 ((4508941553,1)::nil) 242079864415856010 0 338859559496148969 290469711956002490) :: (Proof_certif 4508941553 prime4508941553) :: nil)). vm_cast_no_check (refl_equal true). Time Qed. coqprime-8.18/src/Coqprime/examples/t75/res000066400000000000000000000007661451023060700206170ustar00rootroot00000000000000Finished transaction in 39. secs (39.091057u,0.153977s) Finished transaction in 37. secs (36.682423u,0.154977s) Finished transaction in 79. secs (79.045983u,0.167974s) Finished transaction in 90. secs (89.222437u,0.158976s) Finished transaction in 24. secs (23.688399u,0.114983s) Finished transaction in 6. secs (5.634144u,0.084987s) Finished transaction in 97. secs (96.794285u,0.125981s) Finished transaction in 79. secs (78.935001u,0.139979s) Finished transaction in 23. secs (23.017501u,0.105983s) coqprime-8.18/src/Coqprime/num/000077500000000000000000000000001451023060700164345ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/num/.depend000066400000000000000000000255051451023060700177030ustar00rootroot00000000000000basic_type.cmo: basic_type.ml basic_type.cmi binInt.cmi binPos.cmi zpower.cmi basic_type.cmx: basic_type.ml basic_type.cmi binInt.cmx binPos.cmx zpower.cmx binInt.cmo: binInt.ml binInt.cmi binNat.cmi binPos.cmi datatypes.cmi binInt.cmx: binInt.ml binInt.cmi binNat.cmx binPos.cmx datatypes.cmx binNat.cmo: binNat.ml binNat.cmi binPos.cmi datatypes.cmi binNat.cmx: binNat.ml binNat.cmi binPos.cmx datatypes.cmx binPos.cmo: binPos.ml binPos.cmi datatypes.cmi peano.cmi binPos.cmx: binPos.ml binPos.cmi datatypes.cmx peano.cmx datatypes.cmo: datatypes.ml datatypes.cmi datatypes.cmx: datatypes.ml datatypes.cmi genN.cmo: genN.ml genN.cmx: genN.ml logic.cmo: logic.ml logic.cmi logic.cmx: logic.ml logic.cmi peano.cmo: peano.ml peano.cmi datatypes.cmi peano.cmx: peano.ml peano.cmi datatypes.cmx w2_add.cmo: w2_add.ml w2_add.cmi basic_type.cmi w2_basic.cmi w2_add.cmx: w2_add.ml w2_add.cmi basic_type.cmx w2_basic.cmx w2_basic.cmo: w2_basic.ml w2_basic.cmi basic_type.cmi binInt.cmi binNat.cmi binPos.cmi datatypes.cmi w2_basic.cmx: w2_basic.ml w2_basic.cmi basic_type.cmx binInt.cmx binNat.cmx binPos.cmx datatypes.cmx w2_compare.cmo: w2_compare.ml w2_compare.cmi datatypes.cmi w2_basic.cmi w2_compare.cmx: w2_compare.ml w2_compare.cmi datatypes.cmx w2_basic.cmx w2_div_aux.cmo: w2_div_aux.ml w2_div_aux.cmi datatypes.cmi w2_basic.cmi w2_div_aux.cmx: w2_div_aux.ml w2_div_aux.cmi datatypes.cmx w2_basic.cmx w2_div.cmo: w2_div.ml w2_div.cmi basic_type.cmi datatypes.cmi w2_add.cmi w2_basic.cmi w2_compare.cmi w2_div_aux.cmi w2_sub.cmi w2_div.cmx: w2_div.ml w2_div.cmi basic_type.cmx datatypes.cmx w2_add.cmx w2_basic.cmx w2_compare.cmx w2_div_aux.cmx w2_sub.cmx w2_lift.cmo: w2_lift.ml w2_lift.cmi binNat.cmi binPos.cmi w2_basic.cmi w2_lift.cmx: w2_lift.ml w2_lift.cmi binNat.cmx binPos.cmx w2_basic.cmx w2_mul.cmo: w2_mul.ml w2_mul.cmi basic_type.cmi w2_basic.cmi w2_mul.cmx: w2_mul.ml w2_mul.cmi basic_type.cmx w2_basic.cmx w2_op.cmo: w2_op.ml w2_op.cmi binPos.cmi w2_add.cmi w2_basic.cmi w2_compare.cmi w2_div.cmi w2_div_aux.cmi w2_lift.cmi w2_mul.cmi w2_opp.cmi w2_pos_mod.cmi w2_sqrt.cmi w2_sub.cmi znZ.cmi w2_op.cmx: w2_op.ml w2_op.cmi binPos.cmx w2_add.cmx w2_basic.cmx w2_compare.cmx w2_div.cmx w2_div_aux.cmx w2_lift.cmx w2_mul.cmx w2_opp.cmx w2_pos_mod.cmx w2_sqrt.cmx w2_sub.cmx znZ.cmx w2_opp.cmo: w2_opp.ml w2_opp.cmi basic_type.cmi w2_basic.cmi w2_opp.cmx: w2_opp.ml w2_opp.cmi basic_type.cmx w2_basic.cmx w2_op_spec.cmo: w2_op_spec.ml w2_op_spec.cmi w2_basic.cmi znZ.cmi w2_op_spec.cmx: w2_op_spec.ml w2_op_spec.cmi w2_basic.cmx znZ.cmx w2_pos_mod.cmo: w2_pos_mod.ml w2_pos_mod.cmi binPos.cmi w2_basic.cmi w2_pos_mod.cmx: w2_pos_mod.ml w2_pos_mod.cmi binPos.cmx w2_basic.cmx w2_sqrt.cmo: w2_sqrt.ml w2_sqrt.cmi basic_type.cmi datatypes.cmi w2_basic.cmi w2_sqrt.cmx: w2_sqrt.ml w2_sqrt.cmi basic_type.cmx datatypes.cmx w2_basic.cmx w2_sub.cmo: w2_sub.ml w2_sub.cmi basic_type.cmi w2_basic.cmi w2_sub.cmx: w2_sub.ml w2_sub.cmi basic_type.cmx w2_basic.cmx zArith.cmo: zArith.ml zArith.cmi zArith.cmx: zArith.ml zArith.cmi zmisc.cmo: zmisc.ml zmisc.cmi binInt.cmi binPos.cmi datatypes.cmi zmisc.cmx: zmisc.ml zmisc.cmi binInt.cmx binPos.cmx datatypes.cmx znZ.cmo: znZ.ml znZ.cmi basic_type.cmi binInt.cmi binNat.cmi binPos.cmi datatypes.cmi znZ.cmx: znZ.ml znZ.cmi basic_type.cmx binInt.cmx binNat.cmx binPos.cmx datatypes.cmx zpower.cmo: zpower.ml zpower.cmi binInt.cmi binPos.cmi datatypes.cmi logic.cmi zmisc.cmi zpower.cmx: zpower.ml zpower.cmi binInt.cmx binPos.cmx datatypes.cmx logic.cmx zmisc.cmx basic_type.cmi: basic_type.mli binInt.cmi binPos.cmi zpower.cmi binInt.cmi: binInt.mli binNat.cmi binPos.cmi datatypes.cmi binNat.cmi: binNat.mli binPos.cmi datatypes.cmi binPos.cmi: binPos.mli datatypes.cmi peano.cmi datatypes.cmi: datatypes.mli logic.cmi: logic.mli peano.cmi: peano.mli datatypes.cmi w2_add.cmi: w2_add.mli basic_type.cmi w2_basic.cmi w2_basic.cmi: w2_basic.mli basic_type.cmi binInt.cmi binNat.cmi binPos.cmi datatypes.cmi w2_compare.cmi: w2_compare.mli datatypes.cmi w2_basic.cmi w2_div_aux.cmi: w2_div_aux.mli datatypes.cmi w2_basic.cmi w2_div.cmi: w2_div.mli basic_type.cmi datatypes.cmi w2_add.cmi w2_basic.cmi w2_compare.cmi w2_div_aux.cmi w2_sub.cmi w2_lift.cmi: w2_lift.mli binNat.cmi binPos.cmi w2_basic.cmi w2_mul.cmi: w2_mul.mli basic_type.cmi w2_basic.cmi w2_op.cmi: w2_op.mli binPos.cmi w2_add.cmi w2_basic.cmi w2_compare.cmi w2_div.cmi w2_div_aux.cmi w2_lift.cmi w2_mul.cmi w2_opp.cmi w2_pos_mod.cmi w2_sqrt.cmi w2_sub.cmi znZ.cmi w2_opp.cmi: w2_opp.mli basic_type.cmi w2_basic.cmi w2_op_spec.cmi: w2_op_spec.mli w2_basic.cmi znZ.cmi w2_pos_mod.cmi: w2_pos_mod.mli binPos.cmi w2_basic.cmi w2_sqrt.cmi: w2_sqrt.mli basic_type.cmi datatypes.cmi w2_basic.cmi w2_sub.cmi: w2_sub.mli basic_type.cmi w2_basic.cmi zArith.cmi: zArith.mli zmisc.cmi: zmisc.mli binInt.cmi binPos.cmi datatypes.cmi znZ.cmi: znZ.mli basic_type.cmi binInt.cmi binNat.cmi binPos.cmi datatypes.cmi zpower.cmi: zpower.mli binInt.cmi binPos.cmi datatypes.cmi logic.cmi zmisc.cmi Basic_type.vo: Basic_type.v ../Z/ZDivModAux.vo ../Z/ZPowerAux.vo Basic_type.vi: Basic_type.v ../Z/ZDivModAux.vo ../Z/ZPowerAux.vo GenBase.vo: GenBase.v ../Z/ZAux.vo ../Z/ZDivModAux.vo ../Z/ZPowerAux.vo Basic_type.vo GenBase.vi: GenBase.v ../Z/ZAux.vo ../Z/ZDivModAux.vo ../Z/ZPowerAux.vo Basic_type.vo GenAdd.vo: GenAdd.v ../Z/ZAux.vo ../Z/ZDivModAux.vo Basic_type.vo GenBase.vo GenAdd.vi: GenAdd.v ../Z/ZAux.vo ../Z/ZDivModAux.vo Basic_type.vo GenBase.vo GenSub.vo: GenSub.v ../Z/ZAux.vo ../Z/ZDivModAux.vo Basic_type.vo GenBase.vo GenSub.vi: GenSub.v ../Z/ZAux.vo ../Z/ZDivModAux.vo Basic_type.vo GenBase.vo GenMul.vo: GenMul.v ../Z/ZAux.vo ../Z/ZDivModAux.vo Basic_type.vo GenBase.vo GenMul.vi: GenMul.v ../Z/ZAux.vo ../Z/ZDivModAux.vo Basic_type.vo GenBase.vo GenLift.vo: GenLift.v ../Z/ZAux.vo ../Z/ZPowerAux.vo ../Z/ZDivModAux.vo Basic_type.vo GenBase.vo GenLift.vi: GenLift.v ../Z/ZAux.vo ../Z/ZPowerAux.vo ../Z/ZDivModAux.vo Basic_type.vo GenBase.vo GenDivn1.vo: GenDivn1.v ../Z/ZDivModAux.vo ../Z/ZPowerAux.vo Basic_type.vo GenBase.vo GenDivn1.vi: GenDivn1.v ../Z/ZDivModAux.vo ../Z/ZPowerAux.vo Basic_type.vo GenBase.vo GenDiv.vo: GenDiv.v ../Z/ZAux.vo ../Z/ZDivModAux.vo ../Z/ZPowerAux.vo Basic_type.vo GenBase.vo GenDivn1.vo GenAdd.vo GenSub.vo GenDiv.vi: GenDiv.v ../Z/ZAux.vo ../Z/ZDivModAux.vo ../Z/ZPowerAux.vo Basic_type.vo GenBase.vo GenDivn1.vo GenAdd.vo GenSub.vo GenSqrt.vo: GenSqrt.v ../Z/ZAux.vo ../Z/ZDivModAux.vo Basic_type.vo GenBase.vo GenSqrt.vi: GenSqrt.v ../Z/ZAux.vo ../Z/ZDivModAux.vo Basic_type.vo GenBase.vo ZnZ.vo: ZnZ.v ../Tactic/Tactic.vo Basic_type.vo GenBase.vo ZnZ.vi: ZnZ.v ../Tactic/Tactic.vo Basic_type.vo GenBase.vo Zn2Z.vo: Zn2Z.v ../Z/ZAux.vo ../Z/ZDivModAux.vo Basic_type.vo GenBase.vo GenAdd.vo GenSub.vo GenMul.vo GenSqrt.vo GenLift.vo GenDivn1.vo GenDiv.vo ZnZ.vo Zn2Z.vi: Zn2Z.v ../Z/ZAux.vo ../Z/ZDivModAux.vo Basic_type.vo GenBase.vo GenAdd.vo GenSub.vo GenMul.vo GenSqrt.vo GenLift.vo GenDivn1.vo GenDiv.vo ZnZ.vo GenWord.vo: GenWord.v ../Z/ZAux.vo ../Z/ZDivModAux.vo Basic_type.vo GenBase.vo GenAdd.vo GenSub.vo GenMul.vo GenLift.vo GenDivn1.vo GenDiv.vo ZnZ.vo Zn2Z.vo GenWord.vi: GenWord.v ../Z/ZAux.vo ../Z/ZDivModAux.vo Basic_type.vo GenBase.vo GenAdd.vo GenSub.vo GenMul.vo GenLift.vo GenDivn1.vo GenDiv.vo ZnZ.vo Zn2Z.vo W.vo: W.v Basic_type.vo ZnZ.vo Zn2Z.vo W/W8/W8_op.vo W/W8/W8_op_spec.vo W.vi: W.v Basic_type.vo ZnZ.vo Zn2Z.vo W/W8/W8_op.vo W/W8/W8_op_spec.vo Lucas.vo: Lucas.v ../Z/ZAux.vo ../Z/ZDivModAux.vo Basic_type.vo ZnZ.vo W.vo Mod_op.vo ../PrimalityTest/LucasLehmer.vo Lucas.vi: Lucas.v ../Z/ZAux.vo ../Z/ZDivModAux.vo Basic_type.vo ZnZ.vo W.vo Mod_op.vo ../PrimalityTest/LucasLehmer.vo Pock.vo: Pock.v ../Z/ZAux.vo ../PrimalityTest/LucasLehmer.vo ../PrimalityTest/Pocklington.vo ZnZ.vo ../Z/Zmisc.vo ../Z/Pmod.vo Mod_op.vo W.vo Lucas.vo ../PrimalityTest/PocklingtonCertificat.vo NEll.vo Pock.vi: Pock.v ../Z/ZAux.vo ../PrimalityTest/LucasLehmer.vo ../PrimalityTest/Pocklington.vo ZnZ.vo ../Z/Zmisc.vo ../Z/Pmod.vo Mod_op.vo W.vo Lucas.vo ../PrimalityTest/PocklingtonCertificat.vo NEll.vo Mod_op.vo: Mod_op.v ../Z/ZDivModAux.vo Basic_type.vo ZnZ.vo Zn2Z.vo GenBase.vo GenLift.vo Mod_op.vi: Mod_op.v ../Z/ZDivModAux.vo Basic_type.vo ZnZ.vo Zn2Z.vo GenBase.vo GenLift.vo Nbasic.vo: Nbasic.v Basic_type.vo Nbasic.vi: Nbasic.v Basic_type.vo NMake.vo: NMake.v Basic_type.vo ZnZ.vo Zn2Z.vo Nbasic.vo GenMul.vo GenDivn1.vo NMake.vi: NMake.v Basic_type.vo ZnZ.vo Zn2Z.vo Nbasic.vo GenMul.vo GenDivn1.vo ZMake.vo: ZMake.v ZMake.vi: ZMake.v Arith.vo: Arith.v W/W8/W8_op.vo W/W8/W8_op_spec.vo NMake.vo ZMake.vo Arith.vi: Arith.v W/W8/W8_op.vo W/W8/W8_op_spec.vo NMake.vo ZMake.vo NEll.vo: NEll.v ../Z/ZAux.vo ../Z/ZDivModAux.vo Basic_type.vo ZnZ.vo W.vo Mod_op.vo ../elliptic/ZEll.vo ../Z/Zmod.vo NEll.vi: NEll.v ../Z/ZAux.vo ../Z/ZDivModAux.vo Basic_type.vo ZnZ.vo W.vo Mod_op.vo ../elliptic/ZEll.vo ../Z/Zmod.vo Basic_type.html: Basic_type.v ../Z/ZDivModAux.html ../Z/ZPowerAux.html GenBase.html: GenBase.v ../Z/ZAux.html ../Z/ZDivModAux.html ../Z/ZPowerAux.html Basic_type.html GenAdd.html: GenAdd.v ../Z/ZAux.html ../Z/ZDivModAux.html Basic_type.html GenBase.html GenSub.html: GenSub.v ../Z/ZAux.html ../Z/ZDivModAux.html Basic_type.html GenBase.html GenMul.html: GenMul.v ../Z/ZAux.html ../Z/ZDivModAux.html Basic_type.html GenBase.html GenLift.html: GenLift.v ../Z/ZAux.html ../Z/ZPowerAux.html ../Z/ZDivModAux.html Basic_type.html GenBase.html GenDivn1.html: GenDivn1.v ../Z/ZDivModAux.html ../Z/ZPowerAux.html Basic_type.html GenBase.html GenDiv.html: GenDiv.v ../Z/ZAux.html ../Z/ZDivModAux.html ../Z/ZPowerAux.html Basic_type.html GenBase.html GenDivn1.html GenAdd.html GenSub.html GenSqrt.html: GenSqrt.v ../Z/ZAux.html ../Z/ZDivModAux.html Basic_type.html GenBase.html ZnZ.html: ZnZ.v ../Tactic/Tactic.html Basic_type.html GenBase.html Zn2Z.html: Zn2Z.v ../Z/ZAux.html ../Z/ZDivModAux.html Basic_type.html GenBase.html GenAdd.html GenSub.html GenMul.html GenSqrt.html GenLift.html GenDivn1.html GenDiv.html ZnZ.html GenWord.html: GenWord.v ../Z/ZAux.html ../Z/ZDivModAux.html Basic_type.html GenBase.html GenAdd.html GenSub.html GenMul.html GenLift.html GenDivn1.html GenDiv.html ZnZ.html Zn2Z.html W.html: W.v Basic_type.html ZnZ.html Zn2Z.html W/W8/W8_op.html W/W8/W8_op_spec.html Lucas.html: Lucas.v ../Z/ZAux.html ../Z/ZDivModAux.html Basic_type.html ZnZ.html W.html Mod_op.html ../PrimalityTest/LucasLehmer.html Pock.html: Pock.v ../Z/ZAux.html ../PrimalityTest/LucasLehmer.html ../PrimalityTest/Pocklington.html ZnZ.html ../Z/Zmisc.html ../Z/Pmod.html Mod_op.html W.html Lucas.html ../PrimalityTest/PocklingtonCertificat.html NEll.html Mod_op.html: Mod_op.v ../Z/ZDivModAux.html Basic_type.html ZnZ.html Zn2Z.html GenBase.html GenLift.html Nbasic.html: Nbasic.v Basic_type.html NMake.html: NMake.v Basic_type.html ZnZ.html Zn2Z.html Nbasic.html GenMul.html GenDivn1.html ZMake.html: ZMake.v Arith.html: Arith.v W/W8/W8_op.html W/W8/W8_op_spec.html NMake.html ZMake.html NEll.html: NEll.v ../Z/ZAux.html ../Z/ZDivModAux.html Basic_type.html ZnZ.html W.html Mod_op.html ../elliptic/ZEll.html ../Z/Zmod.html coqprime-8.18/src/Coqprime/num/Bits.v000066400000000000000000000062531451023060700175320ustar00rootroot00000000000000Require Import ZArith Zpow_facts. Open Scope Z_scope. Fixpoint plength (p: positive) : positive := match p with xH => xH | xO p1 => Pos.succ (plength p1) | xI p1 => Pos.succ (plength p1) end. Theorem plength_correct: forall p, (Zpos p < 2 ^ Zpos (plength p))%Z. assert (F: (forall p, 2 ^ (Zpos (Pos.succ p)) = 2 * 2 ^ Zpos p)%Z). intros p; replace (Zpos (Pos.succ p)) with (1 + Zpos p)%Z. rewrite Zpower_exp. 1-2: auto with zarith. red; intros; discriminate. rewrite Zpos_succ_morphism; unfold Z.succ; auto with zarith. intros p; elim p; simpl plength; auto. intros p1 Hp1; rewrite F; repeat rewrite Zpos_xI. assert (tmp: (forall p, 2 * p = p + p)%Z); try repeat rewrite tmp; auto with zarith. intros p1 Hp1; rewrite F; rewrite (Zpos_xO p1). assert (tmp: (forall p, 2 * p = p + p)%Z); try repeat rewrite tmp; auto with zarith. rewrite Zpower_1_r; auto with zarith. Qed. Theorem plength_pred_correct: forall p, (Zpos p <= 2 ^ Zpos (plength (Pos.pred p)))%Z. intros p; case (Psucc_pred p); intros H1. subst; simpl plength. rewrite Zpower_1_r; auto with zarith. pattern p at 1; rewrite <- H1. rewrite Zpos_succ_morphism; unfold Z.succ; auto with zarith. generalize (plength_correct (Pos.pred p)); auto with zarith. Qed. Definition Pdiv p q := match Z.div (Zpos p) (Zpos q) with Zpos q1 => match (Zpos p) - (Zpos q) * (Zpos q1) with Z0 => q1 | _ => (Pos.succ q1) end | _ => xH end. Theorem Pdiv_le: forall p q, Zpos p <= Zpos q * Zpos (Pdiv p q). intros p q. unfold Pdiv. assert (H1: Zpos q > 0); auto with zarith. assert (H1b: Zpos p >= 0). red; intros; discriminate. generalize (Z_div_ge0 (Zpos p) (Zpos q) H1 H1b). generalize (Z_div_mod_eq_full (Zpos p) (Zpos q)); case Z.div. intros HH _; rewrite HH; rewrite Zmult_0_r; rewrite Zmult_1_r; simpl. case (Z_mod_lt (Zpos p) (Zpos q) H1); auto with zarith. intros q1 H2. replace (Zpos p - Zpos q * Zpos q1) with (Zpos p mod Zpos q). 2: pattern (Zpos p) at 2; rewrite H2; auto with zarith. generalize H2 (Z_mod_lt (Zpos p) (Zpos q) H1); clear H2; case Z.modulo. intros HH _; rewrite HH; auto with zarith. intros r1 HH (_,HH1); rewrite HH; rewrite Zpos_succ_morphism. unfold Z.succ; rewrite Zmult_plus_distr_r; auto with zarith. intros r1 _ (HH,_); case HH; auto. intros q1 HH; rewrite HH. unfold Z.ge; simpl Z.compare; intros HH1; case HH1; auto. Qed. Definition is_one p := match p with xH => true | _ => false end. Theorem is_one_one: forall p, is_one p = true -> p = xH. intros p; case p; auto; intros p1 H1; discriminate H1. Qed. Definition get_height digits p := let r := Pdiv p digits in if is_one r then xH else Pos.succ (plength (Pos.pred r)). Theorem get_height_correct: forall digits N, Zpos N <= Zpos digits * (2 ^ (Zpos (get_height digits N) -1)). intros digits N. unfold get_height. assert (H1 := Pdiv_le N digits). case_eq (is_one (Pdiv N digits)); intros H2. rewrite (is_one_one _ H2) in H1. rewrite Zmult_1_r in H1. change (2^(1-1))%Z with 1; rewrite Zmult_1_r; auto. clear H2. apply Z.le_trans with (1 := H1). apply Zmult_le_compat_l; auto with zarith. rewrite Zpos_succ_morphism; unfold Z.succ. rewrite Zplus_comm; rewrite Zminus_plus. apply plength_pred_correct. Qed. coqprime-8.18/src/Coqprime/num/Int63Compat.v.v811000066400000000000000000000000371451023060700213700ustar00rootroot00000000000000From Coq Require Export Int63. coqprime-8.18/src/Coqprime/num/Int63Compat.v.v812000066400000000000000000000000371451023060700213710ustar00rootroot00000000000000From Coq Require Export Int63. coqprime-8.18/src/Coqprime/num/Int63Compat.v.v813000066400000000000000000000000371451023060700213720ustar00rootroot00000000000000From Coq Require Export Int63. coqprime-8.18/src/Coqprime/num/Int63Compat.v.v814000066400000000000000000000000371451023060700213730ustar00rootroot00000000000000From Coq Require Export Int63. coqprime-8.18/src/Coqprime/num/Int63Compat.v.v815000066400000000000000000000000371451023060700213740ustar00rootroot00000000000000From Coq Require Export Int63. coqprime-8.18/src/Coqprime/num/Int63Compat.v.v816000066400000000000000000000000401451023060700213670ustar00rootroot00000000000000From Coq Require Export Uint63. coqprime-8.18/src/Coqprime/num/Lucas.v000066400000000000000000000342221451023060700176750ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Set Implicit Arguments. Require Import ZArith Znumtheory Zpow_facts. Require Import CyclicAxioms Cyclic63 Int63Compat. From Bignums Require Import DoubleCyclic BigN. Require Import ZCAux. Require Import W. Require Import Mod_op. Require Import LucasLehmer. Require Import Bits. Import CyclicAxioms DoubleType DoubleBase. Open Scope Z_scope. Section test. Variable w: univ_of_cycles. Variable w_op: ZnZ.Ops w. Variable op_spec: ZnZ.Specs w_op. Variable p: positive. Variable b: w. Notation "[| x |]" := (ZnZ.to_Z x) (at level 0, x at level 99). Hypothesis p_more_1: 2 < Zpos p. Hypothesis b_p: [|b|] = 2 ^ Zpos p - 1. Lemma b_pos: 0 < [|b|]. rewrite b_p. assert (2 ^ 0 < 2 ^ Zpos p). apply Zpower_lt_monotone; auto with zarith. rewrite Zpower_0_r in H; auto with zarith. Qed. Hint Resolve b_pos : core. Variable m_op: mod_op w. Variable m_op_spec: mod_spec w_op b m_op. Let w2 := m_op.(add_mod) ZnZ.one ZnZ.one. Lemma w1_b: [|ZnZ.one|] = 1 mod [|b|]. rewrite ZnZ.spec_1; simpl; auto. rewrite Zmod_small; auto with zarith. split; auto with zarith. rewrite b_p. assert (H : 2 ^ 1 < 2 ^ Zpos p) by (apply Zpower_lt_monotone; auto with zarith). rewrite Zpower_1_r in H; auto with zarith. Qed. Lemma w2_b: [|w2|] = 2 mod [|b|]. unfold w2; rewrite (add_mod_spec m_op_spec _ _ _ _ w1_b w1_b). rewrite w1_b; rewrite <- Zplus_mod; auto with zarith. Qed. Let w4 := m_op.(add_mod) w2 w2. Lemma w4_b: [|w4|] = 4 mod [|b|]. unfold w4; rewrite (add_mod_spec m_op_spec _ _ _ _ w2_b w2_b). rewrite w2_b; rewrite <- Zplus_mod; auto with zarith. Qed. Let square_m2 := let square := m_op.(square_mod) in let sub := m_op.(sub_mod) in fun x => sub (square x) w2. Definition lucastest_step x p := iter_pos _ square_m2 x p. Lemma square_m2_bounded x : 0 <= [|x|] < [|b|] -> 0 <= [|square_m2 x|] < [|b|]. Proof. intro H. unfold square_m2. rewrite (sub_mod_spec m_op_spec _ _ [|square_mod m_op x|] 2). apply Z.mod_pos_bound; auto with zarith. rewrite Z.mod_small; auto with zarith. rewrite (square_mod_spec m_op_spec x [|x|]); auto. apply Z.mod_pos_bound; auto with zarith. rewrite Z.mod_small; auto with zarith. exact w2_b. Qed. Lemma lucastest_bounded x p1 : 0 <= [|x|] < [|b|] -> 0 <= [|lucastest_step x p1|] < [|b|]. Proof. unfold lucastest_step. revert p1 x. intros p1; pattern p1; apply Pind; simpl iter_pos; simpl s; clear p1. exact square_m2_bounded. intros p1 IH x Hx. rewrite Pos.iter_succ. apply square_m2_bounded. apply IH; auto. Qed. Lemma square_m2_eq x1 x2 : [|x1|] < [|b|] -> [|x1|] = [|x2|] -> [|square_m2 x1|] = [|square_m2 x2|]. Proof. intros Hx1 Ex1. assert (H1 : [|x1|] = [|x1|] mod [|b|]). rewrite Z.mod_small; auto with zarith. case (ZnZ.spec_to_Z x1); auto with zarith. assert (H2 : [|x2|] = [|x2|] mod [|b|]). rewrite <- Ex1; auto. unfold square_m2. rewrite (sub_mod_spec m_op_spec _ _ [|square_mod m_op x1|] 2). rewrite (sub_mod_spec m_op_spec _ _ [|square_mod m_op x2|] 2). rewrite (square_mod_spec m_op_spec x1 [|x1|]); auto. rewrite (square_mod_spec m_op_spec x2 [|x2|]); auto. rewrite Ex1; auto. rewrite Z.mod_small; auto with zarith. rewrite (square_mod_spec m_op_spec x2 [|x2|]); auto. apply Z.mod_bound_pos; auto with zarith. apply Z.square_nonneg. exact w2_b. rewrite Z.mod_small; auto with zarith. rewrite (square_mod_spec m_op_spec x1 [|x1|]); auto. apply Z.mod_bound_pos; auto with zarith. apply Z.square_nonneg. exact w2_b. Qed. Lemma lucastest_eq x1 x2 p1 : [|x1|] < [|b|] -> [|x1|] = [|x2|] -> [|lucastest_step x1 p1|] = [|lucastest_step x2 p1|]. Proof. unfold lucastest_step. revert p1 x1 x2. intros p1; pattern p1; apply Pind; simpl iter_pos; simpl s; clear p1. exact square_m2_eq. intros p1 IH x1 x2 Hx1 Hx2. rewrite !Pos.iter_succ. apply square_m2_eq. assert (F : 0 <= [|x1|] < [|b|]). case (ZnZ.spec_to_Z x1); auto with zarith. generalize (lucastest_bounded _ p1 F). unfold lucastest_step; auto with zarith. apply IH; auto. Qed. Theorem lucastest_step_add : forall p1 p2 z z1 z2, lucastest_step z p1 = z1 -> lucastest_step z1 p2 = z2 -> lucastest_step z (p2 + p1) = z2. Proof. unfold lucastest_step. intros p1 p2 z z1 z2 H1 H2. rewrite Pos.iter_add, H1; auto. Qed. Theorem lucastest_step_correct: forall p1 z n, 0 <= n -> [|z|] = fst (s n) mod (2 ^ Zpos p - 1) -> [|lucastest_step z p1|] = fst (s (n + Zpos p1)) mod (2 ^ Zpos p - 1). unfold lucastest_step. intros p1; pattern p1; apply Pind; simpl iter_pos; simpl s; clear p1. intros z p1 Hp1 H. unfold square_m2. rewrite <- b_p in H. generalize (square_mod_spec m_op_spec _ _ H); intros H1. rewrite (sub_mod_spec m_op_spec _ _ _ _ H1 w2_b). rewrite H1; rewrite w2_b. rewrite H; rewrite <- Zmult_mod. rewrite <- Zminus_mod. rewrite sn by assumption; simpl. rewrite b_p; auto. intros p1 Rec w1 z Hz Hw1. rewrite Pplus_one_succ_l; rewrite iter_pos_plus; simpl iter_pos. match goal with |- context[square_m2 ?X] => set (tmp := X); unfold square_m2; unfold tmp; clear tmp end. generalize (Rec _ _ Hz Hw1); intros H1. rewrite <- b_p in H1. generalize (square_mod_spec m_op_spec _ _ H1); intros H2. rewrite (sub_mod_spec m_op_spec _ _ _ _ H2 w2_b). rewrite H2; rewrite w2_b. rewrite H1; rewrite <- Zmult_mod. rewrite <- Zminus_mod. replace (z + Zpos (1 + p1)) with ((z + Zpos p1) + 1). rewrite sn; simpl fst; try rewrite b_p; auto with zarith. rewrite Zpos_plus_distr; auto with zarith. Qed. Definition lucastest := [|lucastest_step w4 (Pminus p 2)|]. Theorem lucastest_prop: lucastest = fst(s (Zpos p -2)) mod (2 ^ Zpos p - 1). unfold lucastest. assert (F: 0 <= 0); auto with zarith. generalize (lucastest_step_correct (p -2) w4 F); simpl Zplus; rewrite Zpos_minus; auto with zarith. rewrite Zmax_right; auto with zarith. intros tmp; apply tmp; clear tmp. rewrite <- b_p; simpl; exact w4_b. Qed. Theorem lucastest_prop_cor: lucastest = 0 -> (2 ^ Zpos p - 1 | fst(s (Zpos p - 2)))%Z. intros H. apply Zmod_divide. assert (H1: 2 ^ 1 < 2 ^ Zpos p). apply Zpower_lt_monotone; auto with zarith. rewrite Zpower_1_r in H1; auto with zarith. apply trans_equal with (2:= H); apply sym_equal; apply lucastest_prop; auto. Qed. Theorem lucastest_prime: lucastest = 0 -> prime (2 ^ Zpos p - 1). intros H1; case (prime_dec (2 ^ Zpos p - 1)); auto; intros H2. case Zdivide_div_prime_le_square with (2 := H2). assert (H3: 2 ^ 1 < 2 ^ Zpos p). apply Zpower_lt_monotone; auto with zarith. rewrite Zpower_1_r in H3; auto with zarith. intros q (H3, (H4, H5)). contradict H5; apply Zlt_not_le. generalize q_more_than_square; unfold Mp; intros tmp; apply tmp; auto; clear tmp. apply lucastest_prop_cor; auto. case (Zle_lt_or_eq 2 q); auto. apply prime_ge_2; auto. intros H5; subst. absurd (2 <= 1); auto with arith. apply Zdivide_le; auto with zarith. case H4; intros x Hx. exists (2 ^ (Zpos p -1) - x). rewrite Zmult_minus_distr_r; rewrite <- Hx; unfold Mp. pattern 2 at 2; rewrite <- Zpower_1_r; rewrite <- Zpower_exp; auto with zarith. replace (Zpos p - 1 + 1) with (Zpos p); auto with zarith. Qed. End test. Definition znz_of_Z (w: univ_of_cycles) (op: ZnZ.Ops w) z := match z with | Zpos p => snd (ZnZ.of_pos p) | _ => ZnZ.zero end. Definition lucas p := let op := cmk_op (Peano.pred (nat_of_P (get_height 63 p))) in let b := znz_of_Z op (Zpower 2 (Zpos p) - 1) in let zp := znz_of_Z op (Zpos p) in let mod_op := mmake_mod_op op b zp in lucastest op p mod_op. Section LucasStep. Let op p := cmk_op (Peano.pred (nat_of_P (get_height 63 p))). Let b p := znz_of_Z (op p) (2 ^ (Zpos p) - 1). Let zp p := znz_of_Z (op p) (Zpos p). Let mod_op p := mmake_mod_op (op p) (b p) (zp p). Let lucas_f1 p : (2 < p)%positive -> Zpos p <= Zpos (ZnZ.digits (op p)). Proof. intros Hp. unfold op, base; rewrite cmk_op_digits. generalize (get_height_correct 63 p). replace (Z_of_nat (Peano.pred (nat_of_P (get_height 63 p)))) with ((Zpos (get_height 63 p) - 1) ). auto with zarith. rewrite <- Nat.sub_1_r; rewrite inj_minus1. rewrite <- Zpos_eq_Z_of_nat_o_nat_of_P; auto with zarith. generalize (lt_O_nat_of_P (get_height 63 p)); auto with zarith. Qed. Let lucas_f2 p : (2 < p)%positive -> @ZnZ.to_Z _ (op p) (b p) = 2 ^ (Zpos p) - 1. Proof. unfold b; intros Hp. assert (F1: 0 < 2 ^ (Zpos p) - 1). assert (F2: 2 ^ 0 < 2 ^ (Zpos p)). apply Zpower_lt_monotone; auto with zarith. rewrite Zpower_0_r in F2; auto with zarith. case_eq (2 ^ (Zpos p) - 1); simpl ZnZ.to_Z. intros HH; contradict F1; rewrite HH; auto with zarith. 2: intros p1 HH; contradict F1; rewrite HH; apply Zle_not_lt; red; simpl; intros; discriminate. intros p1 Hp1; apply (@ZnZ.of_pos_correct _ (op p)); auto. apply cmk_spec. rewrite <- Hp1. unfold base. apply Z.lt_le_trans with (2 ^ (Zpos p)); auto with zarith. apply Zpower_le_monotone; auto with zarith. Qed. Let lucas_f3 p :(2 < p)%positive -> mod_spec (op p) (b p) (mod_op p). Proof. intro Hp. assert (F1 : ZnZ.Specs (op p)). apply cmk_spec; auto. apply mmake_mod_spec with (p := p); auto. rewrite lucas_f2; auto. assert (F2: 2 ^ 1 < 2 ^ (Zpos p)). apply Zpower_lt_monotone. auto with zarith. assert (2 < Z.pos p); auto with zarith. rewrite Zpower_1_r in F2; auto with zarith. unfold zp. apply ZnZ.of_Z_correct. split. auto with zarith. apply Z.le_lt_trans with (1 := lucas_f1 Hp). unfold base; apply Zpower2_lt_lin; auto with zarith. Qed. Theorem lucas_prime: forall p, 2 < Zpos p -> lucas p = 0 -> prime (2 ^ Zpos p - 1). intros p Hp H. assert(A1: ZnZ.Specs (op p)). apply cmk_spec; auto. apply (lucastest_prime A1 Hp (lucas_f2 Hp) (lucas_f3 Hp) H). Qed. Definition lucas_step p x p1 := let op := cmk_op (Peano.pred (nat_of_P (get_height 63 p))) in let b := znz_of_Z op (Zpower 2 (Zpos p) - 1) in let zp := znz_of_Z op (Zpos p) in let mod_op := mmake_mod_op op b zp in ZnZ.to_Z (lucastest_step op mod_op (znz_of_Z op x) p1). Lemma lucasE p : 2 < Zpos p -> lucas_step p 4 (p - 2) = 0 -> lucas p = 0. Proof. intros H. unfold lucas, lucas_step, lucastest. set (o := cmk_op _). set (m := mmake_mod_op _ _ _). assert (F0 : 1 < ZnZ.to_Z (b p)). replace (ZnZ.to_Z (b p)) with (2 ^ Z.pos p - 1). assert (2 ^ 1 < 2 ^ Z.pos p). apply Zpower_lt_monotone; auto with zarith. replace (2 ^ 1) with 2 in H0; auto with zarith. rewrite <-(lucas_f2 H); auto. assert (F1 : ZnZ.to_Z ZnZ.one = 1). rewrite w1_b with (p := p) (b := b p); [..|auto| ]. rewrite Z.mod_small; auto with zarith. apply cmk_spec; auto. rewrite <-(lucas_f2 H); auto. assert (F2 : ZnZ.to_Z ZnZ.one = 1 mod ZnZ.to_Z (b p)). rewrite Z.mod_small; auto with zarith. intro H1; rewrite <-H1. assert (F3 : ZnZ.to_Z (add_mod m ZnZ.one ZnZ.one) = 2 mod ZnZ.to_Z (b p)). rewrite (add_mod_spec (lucas_f3 H) _ _ 1 1); auto. replace (ZnZ.to_Z ZnZ.one) with 1; auto. apply lucastest_eq with (p := p) (b := b p); [ |auto|..]. apply cmk_spec; auto. apply lucas_f2; auto. apply lucas_f3; auto. rewrite (add_mod_spec (lucas_f3 H) _ _ 2 2); auto. match goal with |- ?X < ?Y => enough (0 <= X < Y) by auto with zarith end. apply Z.mod_pos_bound; auto with zarith. rewrite (add_mod_spec (lucas_f3 H) _ _ 2 2); auto. replace ((ZnZ.to_Z (add_mod m ZnZ.one ZnZ.one))) with (2 mod ZnZ.to_Z (b p)). rewrite <-Z.add_mod. rewrite Z.mod_small. simpl. apply sym_equal. apply (@ZnZ.of_pos_correct _ o). apply cmk_spec; auto. change 4 with (2 ^ 2). apply Zpower_lt_monotone. auto with zarith. split. auto with zarith. assert (F := lucas_f1 H). unfold op in F; simpl in F; unfold o; auto with zarith. split. auto with zarith. change (2 + 2) with (2 ^ 2). replace (ZnZ.to_Z (b p)) with (2 ^ Z.pos p - 1). assert (2 ^ 3 <= 2 ^ Z.pos p). apply Zpower_le_monotone; auto with zarith. change (2 ^ 3) with 8 in H0. change (2 ^ 2) with 4; auto with zarith. rewrite <-(lucas_f2 H); auto. generalize F0. set (u := ZnZ.to_Z _). auto with zarith. Qed. Theorem lucas_step_add p p1 p2 z z1 z2 : (2 < Zpos p) -> 0 <= z < 2 ^ (Zpos p) - 1 -> lucas_step p z p1 = z1 -> lucas_step p z1 p2 = z2 -> lucas_step p z (p2 + p1) = z2. Proof. intros H H0 H1 H2. assert(A1: ZnZ.Specs (op p)). apply cmk_spec; auto. unfold lucas_step. set (o := cmk_op _). set (m := mmake_mod_op _ _ _). assert (F1 : forall z3, 0 <= z3 < ZnZ.to_Z (b p) -> ZnZ.to_Z (znz_of_Z o z3) = z3). intro z3. case z3; simpl. rewrite ZnZ.spec_0; auto. intros p3 [H3 H4]. apply ZnZ.of_pos_correct. apply Z.lt_le_trans with (1 := H4). replace (ZnZ.to_Z (b p)) with (2 ^ Z.pos p - 1). enough (2 ^ Zpos p <= base (ZnZ.digits o)) by auto with zarith. apply Zpower_le_monotone. auto with zarith. assert (F := lucas_f1 H); auto with zarith. rewrite <-(lucas_f2 H); auto. intros p3 [[]]; unfold Z.le; simpl; auto. unfold lucastest_step. rewrite Pos.iter_add; auto. change (@ZnZ.to_Z _ o (lucastest_step o m (lucastest_step o m (znz_of_Z o z) p1) p2) = z2). assert (F : ZnZ.to_Z (lucastest_step o m (znz_of_Z o z) p1) = ZnZ.to_Z (znz_of_Z o z1)). unfold lucas_step in H1; fold o in H1; fold m in H1; rewrite H1. rewrite F1. reflexivity. rewrite <- H1. apply (lucastest_bounded A1 H (lucas_f2 H) (lucas_f3 H)). rewrite F1. rewrite (lucas_f2 H); auto with zarith. replace (ZnZ.to_Z (b p)) with (2 ^ Z.pos p - 1). auto with zarith. rewrite <-(lucas_f2 H); auto with zarith. rewrite lucastest_eq with (p := p) (b := b p) (6 := F); [auto..| | | ]. apply lucas_f2; auto. apply lucas_f3; auto. assert (0 <= ZnZ.to_Z (lucastest_step o m (znz_of_Z o z) p1) < ZnZ.to_Z (b p)). apply (lucastest_bounded A1 H (lucas_f2 H) (lucas_f3 H)). rewrite F1. replace (ZnZ.to_Z (b p)) with (2 ^ Z.pos p - 1). auto with zarith. rewrite <-(lucas_f2 H); auto with zarith. replace (ZnZ.to_Z (b p)) with (2 ^ Z.pos p - 1). auto with zarith. rewrite <-(lucas_f2 H); auto with zarith. auto with zarith. Qed. Lemma lucas_step_same_p : forall p x p1 p2 z, p1 = p2 -> lucas_step p x p1 = z -> lucas_step p x p2 = z. Proof. intros p x p1 p2 z Hp Hz. apply trans_equal with (2 := Hz). apply f_equal2 with (f := lucas_step p); auto. Qed. End LucasStep. Ltac vmtac := match goal with |- _ = ?x => vm_cast_no_check (refl_equal x) end. Lemma lucas_Zpos p : 2 < Zpos p -> 0 <= 4 < 2 ^ (Zpos p) - 1. Proof. intros H; split; auto with zarith. assert (8 <= 2 ^Zpos p); auto with zarith. replace 8 with (2 ^ 3); auto with zarith. apply Zpow_facts.Zpower_le_monotone; auto with zarith. Qed. coqprime-8.18/src/Coqprime/num/MEll.v000066400000000000000000001070471451023060700174650ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Require Import ZArith Znumtheory Zpow_facts. Require Import Uint63 ZEll montgomery. Set Implicit Arguments. Open Scope Z_scope. Record ex: Set := mkEx { vN : positive; vS : positive; vR: List.list (positive * positive); vA: Z; vB: Z; vx: Z; vy: Z }. Local Coercion Zpos : positive >-> Z. Record ex_spec (exx: ex): Prop := mkExS { n2_div: ~(2 | exx.(vN)); n_pos: 2 < exx.(vN); lprime: forall p : positive * positive, List.In p (vR exx) -> prime (fst p); lbig: 4 * vN exx < (Zmullp (vR exx) - 1) ^ 2; inC: vy exx ^ 2 mod vN exx = (vx exx ^ 3 + vA exx * vx exx + vB exx) mod vN exx }. (* Let is_even m := Fixpoint invM_aux (n : nat) (m v: int31) : int31 := match n with 0%nat => 0%int31 | S n => if (iszero (Cyclic31.nshiftl 30 m)) then lsl (invM_aux n (lsr m 1) v) 1 else (1 lor (lsl (invM_aux n (lsr (m - v) 1) v) 1)) end. Definition invM := invM_aux 31. Lemma invM_spec m v : is_even v = false -> (v * (invM m v) = m)%int31. Proof. admit. Qed. Inductive melt: Type := mzero | mtriple: number -> number -> number -> melt. (* Montgomery version *) Section MEll. Variable add_mod sub_mod mult_mod : number -> number -> number. Notation "x ++ y " := (add_mod x y). Notation "x -- y" := (sub_mod x y) (at level 50, left associativity). Notation "x ** y" := (mult_mod x y) (at level 40, left associativity). Notation "x ?= y" := (eq_num x y). Variable A c0 c2 c3 : number. Definition mdouble : number -> melt -> (melt * number):= fun (sc: number) (p1: melt) => match p1 with mzero => (p1, sc) | (mtriple x1 y1 z1) => if (y1 ?= c0) then (mzero, z1 ** sc) else (* we do 2p *) let m' := c3 ** x1 ** x1 ++ A ** z1 ** z1 in let l' := c2 ** y1 ** z1 in let m'2 := m' ** m' in let l'2 := l' ** l' in let l'3 := l'2 ** l' in let x3 := m'2 ** z1 -- c2 ** x1 ** l'2 in (mtriple (l' ** x3) (l'2 ** (m' ** x1 -- y1 ** l') -- m' ** x3) (z1 ** l'3), sc) end. Definition madd := fun (sc : number) (p1 p2 : melt) => match p1, p2 with mzero, _ => (p2, sc) | _ , mzero => (p1, sc) | (mtriple x1 y1 z1), (mtriple x2 y2 z2) => let d1 := x2 ** z1 in let d2 := x1 ** z2 in let l := d1 -- d2 in let dl := d1 ++ d2 in let m := y2 ** z1 -- y1 ** z2 in if (l ?= c0) then (* we have p1 = p2 o p1 = -p2 *) if (m ?= c0) then if (y1 ?= c0) then (mzero, z1 ** z2 ** sc) else (* we do 2p *) let m' := c3 ** x1 ** x1 ++ A ** z1 ** z1 in let l' := c2 ** y1 ** z1 in let m'2 := m' ** m' in let l'2 := l' ** l' in let l'3 := l'2 ** l' in let x3 := m'2 ** z1 -- c2 ** x1 ** l'2 in (mtriple (l' ** x3) (l'2 ** (m' ** x1 -- y1 ** l') -- m' ** x3) (z1 ** l'3), z2 ** sc) else (* p - p *) (mzero, m ** z1 ** z2 ** sc) else let l2 := l ** l in let l3 := l2 ** l in let m2 := m ** m in let x3 := z1 ** z2 ** m2 -- l2 ** dl in (mtriple (l ** x3) (z2 ** l2 ** (m ** x1 -- y1 ** l) -- m ** x3) (z1 ** z2 ** l3), sc) end. Definition mopp p := match p with mzero => p | (mtriple x1 y1 z1) => (mtriple x1 (c0 -- y1) z1) end. End MEll. *) (* Section Scal. Variable mdouble : number -> melt -> melt * number. Variable madd : number -> melt -> melt -> melt * number. Variable mopp : melt -> melt. Fixpoint scalb (sc: number) (b:bool) (a: melt) (p: positive) {struct p}: melt * number := match p with xH => if b then mdouble sc a else (a,sc) | xO p1 => let (a1, sc1) := scalb sc false a p1 in if b then let (a2, sc2) := mdouble sc1 a1 in madd sc2 a a2 else mdouble sc1 a1 | xI p1 => let (a1, sc1) := scalb sc true a p1 in if b then mdouble sc1 a1 else let (a2, sc2) := mdouble sc1 a1 in madd sc2 (mopp a) a2 end. Definition scal sc a p := scalb sc false a p. Definition scal_list sc a l := List.fold_left (fun (asc: melt * number) p1 => let (a,sc) := asc in scal sc a p1) l (a,sc). Variable mult_mod : number -> number -> number. Notation "x ** y" := (mult_mod x y) (at level 40, left associativity). Variable c0 : number. Fixpoint scalL (sc : number) (a: melt) (l: List.list positive) {struct l} : (melt * number) := match l with List.nil => (a,sc) | List.cons n l1 => let (a1, sc1) := scal sc a n in let (a2, sc2) := scal_list sc1 a l1 in match a2 with mzero => (mzero, c0) | mtriple _ _ z => scalL (sc2 ** z) a1 l1 end end. End Scal. Definition isM2 p := match p with xH => false | xO _ => false | _ => true end. Definition ell_test (N S: positive) (l: List.list (positive * positive)) (A B x y: Z) := if isM2 N then match (4 * N) ?= (ZEll.Zmullp l - 1) ^ 2 with Lt => match y ^ 2 mod N ?= (x ^ 3 + A * x + B) mod N with Eq => let M := positive_to_num N in let m' := invM (0 - 1) (nhead M) in let n := length M in let e := encode M m' n in let d := decode M m' n in let add_mod := add_mod M in let sub_mod := sub_mod M in let mult_mod := reduce_mult_num M m' n in let mA := e A in let mB := e B in let c0 := e 0 in let c1 := e 1 in let c2 := e 2 in let c3 := e 3 in let c4 := e 4 in let c27 := e 27 in let mdouble := mdouble add_mod sub_mod mult_mod mA c0 c2 c3 in let madd := madd add_mod sub_mod mult_mod mA c0 c2 c3 in let mopp := mopp sub_mod c0 in let scal := scal mdouble madd mopp in let scalL := scalL mdouble madd mopp mult_mod c0 in let da := add_mod in let dm := mult_mod in let isc := (da (dm (dm (dm c4 mA) mA) mA) (dm (dm c27 mB) mB)) in let a := mtriple (e x) (e y) c1 in let (a1, sc1) := scal isc a S in let (S1,R1) := ZEll.psplit l in let (a2, sc2) := scal sc1 a1 S1 in let (a3, sc3) := scalL sc2 a2 R1 in match a3 with mzero => if (Zeq_bool (Zgcd (d sc3) N) 1) then true else false | _ => false end | _ => false end | _ => false end else false. Time Eval vm_compute in (ell_test 329719147332060395689499 8209062 (List.cons (40165264598163841%positive,1%positive) List.nil) (-94080) 9834496 0 3136). Time Eval vm_compute in (ell_test 1384435372850622112932804334308326689651568940268408537 13077052794 (List.cons (105867537178241517538435987563198410444088809%positive, 1%positive) List.nil) (-677530058123796416781392907869501000001421915645008494) 0 (- 169382514530949104195348226967375250000355478911252124) 1045670343788723904542107880373576189650857982445904291 ). *) (* Variable M : number. Variable m' : int. Definition n := length M. Definition e z := encode M m' n z. Definition d z := decode M m' n z. Variable exx: ex. Variable exxs: ex_spec exx. Definition S := exx.(vS). Definition R := exx.(vR). Definition A := e exx.(vA). Definition B := e exx.(vB). Definition xx := e exx.(vx). Definition yy := e exx.(vy). Definition c3 := e 3. Definition c2 := e 2. Definition c1 := e 1. Definition c0 := e 0. Definition pp := mtriple xx yy c1. Notation "x ++ y " := (add_mod M x y). Notation "x -- y" := (sub_mod M x y) (at level 50, left associativity). Notation "x ** y" := (reduce_mult_num M m' n x y) (at level 40, left associativity). Notation "x ?= y" := (eq_num x y). Definition mdouble : number -> melt -> (melt * number):= fun (sc: number) (p1: melt) => match p1 with mzero => (p1, sc) | (mtriple x1 y1 z1) => if (y1 ?= c0) then (mzero, z1 ** sc) else (* we do 2p *) let m' := c3 ** x1 ** x1 ++ A ** z1 ** z1 in let l' := c2 ** y1 ** z1 in let m'2 := m' ** m' in let l'2 := l' ** l' in let l'3 := l'2 ** l' in let x3 := m'2 ** z1 -- c2 ** x1 ** l'2 in (mtriple (l' ** x3) (l'2 ** (m' ** x1 -- y1 ** l') -- m' ** x3) (z1 ** l'3), sc) end. End MEll. Print mdouble. Definition Ex := mkEx 101 99 nil 10 3 4 5. Check ( let v := Eval lazy compute in mdouble in Check (fun exx: ex => nN (mkMOp exx)). Definition e z := encode nn nn' nT ll z. Definition d z := decode nn nn' nT ll z. } Lemma nEx : to_Z nN = to_Z (cons nn nT). Proof. unfold nn, nT; case nN; auto. Qed. Definition nn' := invM (0 - 1) nn. Notation phi := Int31Op.to_Z. Lemma nn'_spec : phi (nn * nn') = wB - 1. Proof. unfold nn'; rewrite invM_spec. rewrite sub_spec, to_Z_0, to_Z_1; simpl; auto. admit. Qed. Definition ll := length nN. Inductive melt: Type := mzero | mtriple: number -> number -> number -> melt. Definition pp := mtriple xx yy c1. Definition mplus x y : number := add_mod x y nN. Definition msub x y : number := sub_mod x y nN. Definition mmult x y : number := reduce_mult_num nn nn' nT x y ll. Definition meq x y : bool := eq_num x y. Notation "x ++ y " := (mplus x y). Notation "x -- y" := (msub x y) (at level 50, left associativity). Notation "x ** y" := (mmult x y) (at level 40, left associativity). Notation "x ?= y" := (meq x y). Definition mdouble: number -> melt -> (melt * number):= fun (sc: number) (p1: melt) => match p1 with mzero => (p1, sc) | (mtriple x1 y1 z1) => if (y1 ?= c0) then (mzero, z1 ** sc) else (* we do 2p *) let m' := c3 ** x1 ** x1 ++ A ** z1 ** z1 in let l' := c2 ** y1 ** z1 in let m'2 := m' ** m' in let l'2 := l' ** l' in let l'3 := l'2 ** l' in let x3 := m'2 ** z1 -- c2 ** x1 ** l'2 in (mtriple (l' ** x3) (l'2 ** (m' ** x1 -- y1 ** l') -- m' ** x3) (z1 ** l'3), sc) end. Definition madd := fun (sc : number) (p1 p2 : melt) => match p1, p2 with mzero, _ => (p2, sc) | _ , mzero => (p1, sc) | (mtriple x1 y1 z1), (mtriple x2 y2 z2) => let d1 := x2 ** z1 in let d2 := x1 ** z2 in let l := d1 -- d2 in let dl := d1 ++ d2 in let m := y2 ** z1 -- y1 ** z2 in if (l ?= c0) then (* we have p1 = p2 o p1 = -p2 *) if (m ?= c0) then if (y1 ?= c0) then (mzero, z1 ** z2 ** sc) else (* we do 2p *) let m' := c3 ** x1 ** x1 ++ A ** z1 ** z1 in let l' := c2 ** y1 ** z1 in let m'2 := m' ** m' in let l'2 := l' ** l' in let l'3 := l'2 ** l' in let x3 := m'2 ** z1 -- c2 ** x1 ** l'2 in (mtriple (l' ** x3) (l'2 ** (m' ** x1 -- y1 ** l') -- m' ** x3) (z1 ** l'3), z2 ** sc) else (* p - p *) (mzero, m ** z1 ** z2 ** sc) else let l2 := l ** l in let l3 := l2 ** l in let m2 := m ** m in let x3 := z1 ** z2 ** m2 -- l2 ** dl in (mtriple (l ** x3) (z2 ** l2 ** (m ** x1 -- y1 ** l) -- m ** x3) (z1 ** z2 ** l3), sc) end. Definition mopp p := match p with mzero => p | (mtriple x1 y1 z1) => (mtriple x1 (c0 -- y1) z1) end. Fixpoint scalb (sc: number) (b:bool) (a: melt) (p: positive) {struct p}: melt * number := match p with xH => if b then mdouble sc a else (a,sc) | xO p1 => let (a1, sc1) := scalb sc false a p1 in if b then let (a2, sc2) := mdouble sc1 a1 in madd sc2 a a2 else mdouble sc1 a1 | xI p1 => let (a1, sc1) := scalb sc true a p1 in if b then mdouble sc1 a1 else let (a2, sc2) := mdouble sc1 a1 in madd sc2 (mopp a) a2 end. Definition scal sc a p := scalb sc false a p. Definition scal_list sc a l := List.fold_left (fun (asc: melt * number) p1 => let (a,sc) := asc in scal sc a p1) l (a,sc). Fixpoint scalL (sc : number) (a: melt) (l: List.list positive) {struct l} : (melt * number) := match l with List.nil => (a,sc) | List.cons n l1 => let (a1, sc1) := scal sc a n in let (a2, sc2) := scal_list sc1 a l1 in match a2 with mzero => (mzero, c0) | mtriple _ _ z => scalL (sc2 ** z) a1 l1 end end. Definition zpow sc p n := let (p,sc') := scal sc p n in (p, Zgcd (d sc') (exx.(vN))). Definition e2E n := match n with mzero => ZEll.nzero | mtriple x1 y1 z1 => ntriple (d x1) (d y1) (d z1) end. Definition wft t := d t = (d t) mod (to_Z nN). Lemma vN_pos : 0 < exx.(vN). Proof. red; simpl; auto. Qed. Hint Resolve vN_pos. Lemma mplusz x y : wft x -> wft y -> d (x ++ y) = nplus (exx.(vN)) (d x) (d y). Proof. intros Hx Hy. unfold d, mplus, nplus. (* rewrite decode_encode_add. rewrite (mop_spec.(add_mod_spec) _ _ _ _ Hx Hy); auto. rewrite <- z2ZN; auto. *) admit. Qed. Lemma mplusw x y : wft x -> wft y -> wft (x ++ y). Proof. intros Hx Hy. unfold wft. (* pattern (z2Z (x ++ y)) at 2; rewrite (nplusz Hx Hy). unfold ZEll.nplus; rewrite z2ZN. rewrite Zmod_mod; auto. apply (nplusz Hx Hy). *) admit. Qed. Lemma msubz x y : wft x -> wft y -> d (x -- y) = ZEll.nsub (vN exx) (d x) (d y). Proof. intros Hx Hy. (* unfold z2Z, nsub. rewrite (mop_spec.(sub_mod_spec) _ _ _ _ Hx Hy); auto. rewrite <- z2ZN; auto. *) admit. Qed. Lemma msubw x y : wft x -> wft y -> wft (x -- y). Proof. intros Hx Hy. unfold wft. (* pattern (z2Z (x -- y)) at 2; rewrite (nsubz Hx Hy). unfold ZEll.nsub; rewrite z2ZN. rewrite Zmod_mod; auto. apply (nsubz Hx Hy). *) admit. Qed. Lemma mmulz x y : wft x -> wft y -> d (x ** y) = ZEll.nmul (vN exx) (d x) (d y). Proof. intros Hx Hy. (* unfold z2Z, nmul. rewrite (mop_spec.(mul_mod_spec) _ _ _ _ Hx Hy); auto. rewrite <- z2ZN; auto. *) admit. Qed. Lemma mmulw x y : wft x -> wft y -> wft (x ** y). Proof. intros Hx Hy. unfold wft. (* pattern (z2Z (x ** y)) at 2; rewrite (nmulz Hx Hy). unfold ZEll.nmul; rewrite z2ZN. rewrite Zmod_mod; auto. apply (nmulz Hx Hy). *) admit. Qed. Hint Resolve mmulw mplusw msubw. Definition wfe p := match p with mtriple x y z => wft x /\ wft y /\ wft z | _ => True end. Lemma dx x : d (e x) = x mod exx.(vN). Proof. (* unfold Z2z; intros x. generalize (Z_mod_lt x exx.(vN)). case_eq (x mod exx.(vN)). intros _ _. simpl; unfold z2Z; rewrite ZnZ.spec_0; auto. intros p Hp HH; case HH; auto with zarith; clear HH. intros _ HH1. case (ZnZ.spec_to_Z zN). generalize z2ZN; unfold z2Z; intros HH; rewrite HH; auto. intros _ H0. set (v := ZnZ.of_pos p); generalize HH1. rewrite (ZnZ.spec_of_pos p); fold v. case (fst v). simpl; auto. intros p1 H1. contradict H0; apply Zle_not_lt. apply Zlt_le_weak; apply Zle_lt_trans with (2:= H1). apply Zle_trans with (1 * base (ZnZ.digits op) + 0); auto with zarith. apply Zplus_le_compat; auto. apply Zmult_gt_0_le_compat_r; auto with zarith. case (ZnZ.spec_to_Z (snd v)); auto with zarith. case p1; red; simpl; intros; discriminate. case (ZnZ.spec_to_Z (snd v)); auto with zarith. intros p Hp; case (Z_mod_lt x exx.(vN)); auto with zarith. rewrite Hp; intros HH; case HH; auto. *) admit. Qed. Lemma dx1 x : d (e x) = d (e x) mod [nN]. Proof. (* unfold Z2z; intros x. generalize (Z_mod_lt x exx.(vN)). case_eq (x mod exx.(vN)). intros _ _. simpl; unfold z2Z; rewrite ZnZ.spec_0; auto. intros p H1 H2. case (ZnZ.spec_to_Z zN). generalize z2ZN; unfold z2Z; intros HH; rewrite HH; auto. intros _ H0. case H2; auto with zarith; clear H2; intros _ H2. rewrite Zmod_small; auto. set (v := ZnZ.of_pos p). split. case (ZnZ.spec_to_Z (snd v)); auto. generalize H2; rewrite (ZnZ.spec_of_pos p); fold v. case (fst v). simpl; auto. intros p1 H. contradict H0; apply Zle_not_lt. apply Zlt_le_weak; apply Zle_lt_trans with (2:= H). apply Zle_trans with (1 * base (ZnZ.digits op) + 0); auto with zarith. apply Zplus_le_compat; auto. apply Zmult_gt_0_le_compat_r; auto with zarith. case (ZnZ.spec_to_Z (snd v)); auto with zarith. case p1; red; simpl; intros; discriminate. case (ZnZ.spec_to_Z (snd v)); auto with zarith. intros p Hp; case (Z_mod_lt x exx.(vN)); auto with zarith. rewrite Hp; intros HH; case HH; auto. *) admit. Qed. Lemma c0w : wft c0. Proof. apply dx1. Qed. Lemma c2w : wft c2. Proof. apply dx1. Qed. Lemma c3w : wft c3. Proof. apply dx1. Qed. Lemma Aw : wft A. Proof. apply dx1. Qed. Hint Resolve c0w c2w c3w Aw. Ltac nw := repeat (apply mplusw || apply msubw || apply mmulw || apply c2w || apply c3w || apply Aw); auto. Lemma madd_wf x y sc : wfe x -> wfe y -> wft sc -> wfe (fst (madd sc x y)) /\ wft (snd (madd sc x y)). Proof. destruct x as [ | x1 y1 z1]; auto. destruct y as [ | x2 y2 z2]; auto. (* intros (wfx1,(wfy1, wfz1)) (wfx2,(wfy2, wfz2)) wfsc; simpl; auto. case meq. 2: repeat split; simpl; nw. case meq. 2: repeat split; simpl; nw. case meq. repeat split; simpl; nw; auto. repeat split; simpl; nw; auto. *) admit. Qed. (* Lemma ztest: forall x y, x ?= y =Zeq_bool (z2Z x) (z2Z y). Proof. intros x y. unfold neq. rewrite (ZnZ.spec_compare x y); case Zcompare_spec; intros HH; match goal with H: context[x] |- _ => generalize H; clear H; intros HH1 end. symmetry; apply GZnZ.Zeq_iok; auto. case_eq (Zeq_bool (z2Z x) (z2Z y)); intros H1; auto; generalize HH1; generalize (Zeq_bool_eq _ _ H1); unfold z2Z; intros HH; rewrite HH; auto with zarith. case_eq (Zeq_bool (z2Z x) (z2Z y)); intros H1; auto; generalize HH1; generalize (Zeq_bool_eq _ _ H1); unfold z2Z; intros HH; rewrite HH; auto with zarith. Qed. Lemma zc0: z2Z c0 = 0. Proof. unfold z2Z, c0, z2Z; simpl. generalize ZnZ.spec_0; auto. Qed. Ltac iftac t := match t with context[if ?x ?= ?y then _ else _] => case_eq (x ?= y) end. Ltac ftac := match goal with |- context[?x = ?y] => (iftac x); let H := fresh "tmp" in (try rewrite ztest; try rewrite zc0; intros H; repeat ((rewrite nmulz in H || rewrite nplusz in H || rewrite nsubz in H); auto); try (rewrite H; clear H)) end. Require Import Zmod. Lemma c2ww: forall x, ZEll.nmul (vN exx) 2 x = ZEll.nmul (vN exx) (z2Z c2) x. intros x; unfold ZEll.nmul. unfold c2; rewrite z2Zx; rewrite Zmodml; auto. Qed. Lemma c3ww: forall x, ZEll.nmul (vN exx) 3 x = ZEll.nmul (vN exx) (z2Z c3) x. intros x; unfold ZEll.nmul. unfold c3; rewrite z2Zx; rewrite Zmodml; auto. Qed. Lemma Aww: forall x, ZEll.nmul (vN exx) exx.(vA) x = ZEll.nmul (vN exx) (z2Z A) x. intros x; unfold ZEll.nmul. unfold A; rewrite z2Zx; rewrite Zmodml; auto. Qed. Lemma nadd_correct: forall x y sc, wfe x -> wfe y -> wft sc -> e2E (fst (nadd sc x y)) = fst (ZEll.nadd exx.(vN) exx.(vA) (z2Z sc) (e2E x) (e2E y) )/\ z2Z (snd (nadd sc x y)) = snd (ZEll.nadd exx.(vN) exx.(vA) (z2Z sc) (e2E x) (e2E y)). Proof. intros x; case x; clear; auto. intros x1 y1 z1 y; case y; clear; auto. intros x2 y2 z2 sc (wfx1,(wfy1, wfz1)) (wfx2,(wfy2, wfz2)) wfsc; simpl. ftac. ftac. ftac. simpl; split; auto. repeat ((rewrite nmulz || rewrite nplusz || rewrite nsubz); auto). simpl; split; auto. repeat ((rewrite nmulz || rewrite nplusz || rewrite nsubz|| rewrite c2ww || rewrite c3ww || rewrite Aww); try nw; auto). rewrite nmulz; auto. simpl; split; auto. repeat ((rewrite nmulz || rewrite nplusz || rewrite nsubz); auto). simpl; split; auto. repeat ((rewrite nmulz || rewrite nplusz || rewrite nsubz || rewrite c2ww || rewrite c3ww || rewrite Aww); try nw; auto). Qed. Lemma ndouble_wf: forall x sc, wfe x -> wft sc -> wfe (fst (ndouble sc x)) /\ wft (snd (ndouble sc x)). Proof. intros x; case x; clear; auto. intros x1 y1 z1 sc (wfx1,(wfy1, wfz1)) wfsc; simpl; auto. repeat (case neq; repeat split; simpl; nw; auto). Qed. Lemma ndouble_correct: forall x sc, wfe x -> wft sc -> e2E (fst (ndouble sc x)) = fst (ZEll.ndouble exx.(vN) exx.(vA) (z2Z sc) (e2E x))/\ z2Z (snd (ndouble sc x)) = snd (ZEll.ndouble exx.(vN) exx.(vA) (z2Z sc) (e2E x)). Proof. intros x; case x; clear; auto. intros x1 y1 z1 sc (wfx1,(wfy1, wfz1)) wfsc; simpl. ftac. simpl; split; auto. repeat ((rewrite nmulz || rewrite nplusz || rewrite nsubz); auto). simpl; split; auto. repeat ((rewrite nmulz || rewrite nplusz || rewrite nsubz || rewrite c2ww || rewrite c3ww || rewrite Aww); try nw; auto). Qed. Lemma nopp_wf: forall x, wfe x -> wfe (nopp x). Proof. intros x; case x; simpl nopp; auto. intros x1 y1 z1 [H1 [H2 H3]]; repeat split; auto. Qed. Lemma scalb_wf: forall n b x sc, wfe x -> wft sc -> wfe (fst (scalb sc b x n)) /\ wft (snd (scalb sc b x n)). Proof. intros n; elim n; unfold scalb; fold scalb; auto. intros n1 Hrec b x sc H H1. case (Hrec true x sc H H1). case scalb; simpl fst; simpl snd. intros a1 sc1 H2 H3. case (ndouble_wf _ H2 H3); auto; case ndouble; simpl fst; simpl snd; intros x2 sc2 H4 H5. case b; auto. case (nadd_wf _ _ (nopp_wf _ H) H4 H5); auto; case ndouble; simpl fst; simpl snd; intros x2 sc2 H4 H5. intros n1 Hrec b x sc H H1. case (Hrec false x sc H H1). case scalb; simpl fst; simpl snd. intros a1 sc1 H2 H3. case (ndouble_wf _ H2 H3); auto; case ndouble; simpl fst; simpl snd; intros x2 sc2 H4 H5. case b; auto. case (nadd_wf _ _ H H4 H5); auto; case ndouble; simpl fst; simpl snd; intros x2 sc2 H4 H5. intros b x sc H H1; case b; auto. case (ndouble_wf _ H H1); auto. Qed. Lemma scal_wf: forall n x sc, wfe x -> wft sc -> wfe (fst (scal sc x n)) /\ wft (snd (scal sc x n)). Proof. intros n; exact (scalb_wf n false). Qed. Lemma nopp_correct: forall x, wfe x -> e2E x = ZEll.nopp exx.(vN) (e2E (nopp x)). Proof. intros x; case x; simpl; auto. intros x1 y1 z1 [H1 [H2 H3]]; apply f_equal3 with (f := ZEll.ntriple); auto. rewrite nsubz; auto. rewrite zc0. unfold ZEll.nsub, ninv; simpl. apply sym_equal. rewrite <- (Z_mod_plus) with (b := -(-z2Z y1 /exx.(vN))); auto with zarith. rewrite <- Zopp_mult_distr_l. rewrite <- Zopp_plus_distr. rewrite Zmult_comm; rewrite Zplus_comm. rewrite <- Z_div_mod_eq; auto with zarith. rewrite Zopp_involutive; rewrite <- z2ZN. apply sym_equal; auto. Qed. Lemma scalb_correct: forall n b x sc, wfe x -> wft sc -> e2E (fst (scalb sc b x n)) = fst (ZEll.scalb exx.(vN) exx.(vA) (z2Z sc) b (e2E x) n)/\ z2Z (snd (scalb sc b x n)) = snd (ZEll.scalb exx.(vN) exx.(vA) (z2Z sc) b (e2E x) n). Proof. intros n; elim n; clear; auto. intros p Hrec b x sc H1 H2. case b; unfold scalb; fold scalb. generalize (scalb_wf p true x H1 H2); generalize (Hrec true _ _ H1 H2); case scalb; simpl. case ZEll.scalb; intros r1 rc1; simpl. intros a2 sc2 (H3, H4) (H5, H6); subst r1 rc1. apply ndouble_correct; auto. generalize (scalb_wf p true x H1 H2); generalize (Hrec true _ _ H1 H2); case scalb; simpl. case ZEll.scalb; intros r1 rc1; simpl. intros a2 sc2 (H3, H4) (H5, H6); subst r1 rc1. generalize (ndouble_wf _ H5 H6); generalize (ndouble_correct _ H5 H6); case ndouble; simpl. case ZEll.ndouble; intros r1 rc1; simpl. intros a3 sc3 (H7,H8) (H9,H10); subst r1 rc1. replace (ZEll.nopp (vN exx) (e2E x)) with (e2E (nopp x)). apply nadd_correct; auto. generalize H1; case x; auto. intros x1 y1 z1 [HH1 [HH2 HH3]]; split; auto. rewrite nopp_correct; auto. apply f_equal2 with (f := ZEll.nopp); auto. generalize H1; case x; simpl; auto; clear x H1. intros x1 y1 z1 [HH1 [HH2 HH3]]; apply f_equal3 with (f := ZEll.ntriple); auto. repeat rewrite nsubz; auto. rewrite zc0. unfold ZEll.nsub; simpl. rewrite <- (Z_mod_plus) with (b := -(-z2Z y1 /exx.(vN))); auto with zarith. rewrite <- Zopp_mult_distr_l. rewrite <- Zopp_plus_distr. rewrite Zmult_comm; rewrite Zplus_comm. rewrite <- Z_div_mod_eq; auto with zarith. rewrite Zopp_involutive; rewrite <- z2ZN. apply sym_equal; auto. generalize H1; case x; auto. intros x1 y1 z1 [HH1 [HH2 HH3]]; split; auto. intros p Hrec b x sc H1 H2. case b; unfold scalb; fold scalb. generalize (scalb_wf p false x H1 H2); generalize (Hrec false _ _ H1 H2); case scalb; simpl. case ZEll.scalb; intros r1 rc1; simpl. intros a2 sc2 (H3, H4) (H5, H6); subst r1 rc1. generalize (ndouble_wf _ H5 H6); generalize (ndouble_correct _ H5 H6); case ndouble; simpl. case ZEll.ndouble; intros r1 rc1; simpl. intros a3 sc3 (H7,H8) (H9,H10); subst r1 rc1. replace (ZEll.nopp (vN exx) (e2E x)) with (e2E (nopp x)). apply nadd_correct; auto. rewrite nopp_correct; auto. apply f_equal2 with (f := ZEll.nopp); auto. generalize H1; case x; simpl; auto; clear x H1. intros x1 y1 z1 [HH1 [HH2 HH3]]; apply f_equal3 with (f := ZEll.ntriple); auto. repeat rewrite nsubz; auto. rewrite zc0. unfold ZEll.nsub; simpl. rewrite <- (Z_mod_plus) with (b := -(-z2Z y1 /exx.(vN))); auto with zarith. rewrite <- Zopp_mult_distr_l. rewrite <- Zopp_plus_distr. rewrite Zmult_comm; rewrite Zplus_comm. rewrite <- Z_div_mod_eq; auto with zarith. rewrite Zopp_involutive; rewrite <- z2ZN. apply sym_equal; auto. generalize H1; case x; auto. intros x1 y1 z1 [HH1 [HH2 HH3]]; split; auto. generalize (scalb_wf p false x H1 H2); generalize (Hrec false _ _ H1 H2); case scalb; simpl. case ZEll.scalb; intros r1 rc1; simpl. intros a2 sc2 (H3, H4) (H5, H6); subst r1 rc1. apply ndouble_correct; auto. intros b x sc H H1. case b; simpl; auto. apply ndouble_correct; auto. Qed. Lemma scal_correct: forall n x sc, wfe x -> wft sc -> e2E (fst (scal sc x n)) = fst (ZEll.scal exx.(vN) exx.(vA) (z2Z sc) (e2E x) n)/\ z2Z (snd (scal sc x n)) = snd (ZEll.scal exx.(vN) exx.(vA) (z2Z sc) (e2E x) n). Proof. intros n; exact (scalb_correct n false). Qed. Lemma scal_list_correct: forall l x sc, wfe x -> wft sc -> e2E (fst (scal_list sc x l)) = fst (ZEll.scal_list exx.(vN) exx.(vA) (z2Z sc) (e2E x) l)/\ z2Z (snd (scal_list sc x l)) = snd (ZEll.scal_list exx.(vN) exx.(vA) (z2Z sc) (e2E x) l). Proof. intros l1; elim l1; simpl; auto. unfold scal_list, ZEll.scal_list; simpl; intros a l2 Hrec x sc H1 H2. generalize (scal_correct a _ H1 H2) (scal_wf a _ H1 H2); case scal. case ZEll.scal; intros r1 rsc1; simpl. simpl; intros a1 sc1 (H3, H4) (H5, H6); subst r1 rsc1; auto. Qed. Lemma scal_list_wf: forall l x sc, wfe x -> wft sc -> wfe (fst (scal_list sc x l)) /\ wft (snd (scal_list sc x l)). Proof. intros l1; elim l1; simpl; auto. unfold scal_list; intros a l Hrec x sc H1 H2; simpl. generalize (@scal_wf a _ _ H1 H2); case (scal sc x a); simpl; intros x1 sc1 [H3 H4]; auto. Qed. Lemma scalL_wf: forall l x sc, wfe x -> wft sc -> wfe (fst (scalL sc x l)) /\ wft (snd (scalL sc x l)). Proof. intros l1; elim l1; simpl; auto. intros a l2 Hrec x sc H1 H2. generalize (scal_wf a _ H1 H2); case scal; simpl. intros a1 sc1 (H3, H4); auto. generalize (scal_list_wf l2 _ H1 H4); case scal_list; simpl. intros a2 sc2; case a2; simpl; auto. intros x1 y1 z1 ((V1, (V2, V3)), V4); apply Hrec; auto. Qed. Lemma scalL_correct: forall l x sc, wfe x -> wft sc -> e2E (fst (scalL sc x l)) = fst (ZEll.scalL exx.(vN) exx.(vA) (z2Z sc) (e2E x) l)/\ z2Z (snd (scalL sc x l)) = snd (ZEll.scalL exx.(vN) exx.(vA) (z2Z sc) (e2E x) l). Proof. intros l1; elim l1; simpl; auto. intros a l2 Hrec x sc H1 H2. generalize (scal_wf a _ H1 H2) (scal_correct a _ H1 H2); case scal; simpl. case ZEll.scal; intros r1 rsc1; simpl. intros a1 sc1 (H3, H4) (H5, H6); subst r1 rsc1. generalize (scal_list_wf l2 _ H1 H4) (scal_list_correct l2 _ H1 H4); case scal_list; simpl. case ZEll.scal_list; intros r1 rsc1; simpl. intros a2 sc2 (H7, H8) (H9, H10); subst r1 rsc1. generalize H7; clear H7; case a2; simpl; auto. rewrite zc0; auto. intros x1 y1 z1 (V1, (V2, V3)); auto. generalize (nmulw H8 V3) (nmulz H8 V3); intros V4 V5; rewrite <- V5. apply Hrec; auto. Qed. Lemma f4 : wft (Z2z 4). Proof. red; apply z2Zx1. Qed. Lemma f27 : wft (Z2z 27). Proof. red; apply z2Zx1. Qed. Lemma Bw : wft B. Proof. red; unfold B; apply z2Zx1. Qed. Hint Resolve f4 f27 Bw. Lemma mww: forall x y, ZEll.nmul (vN exx) (x mod (vN exx) ) y = ZEll.nmul (vN exx) x y. intros x y; unfold ZEll.nmul; rewrite Zmodml; auto. Qed. Lemma wwA: forall x, ZEll.nmul (vN exx) x exx.(vA) = ZEll.nmul (vN exx) x (z2Z A). intros x; unfold ZEll.nmul. unfold A; rewrite z2Zx; rewrite Zmodmr; auto. Qed. Lemma wwB: forall x, ZEll.nmul (vN exx) x exx.(vB) = ZEll.nmul (vN exx) x (z2Z B). intros x; unfold ZEll.nmul. unfold B; rewrite z2Zx; rewrite Zmodmr; auto. Qed. Lemma scalL_prime: let a := ntriple (Z2z (exx.(vx))) (Z2z (exx.(vy))) c1 in let isc := (Z2z 4) ** A ** A ** A ++ (Z2z 27) ** B ** B in let (a1, sc1) := scal isc a exx.(vS) in let (S1,R1) := psplit exx.(vR) in let (a2, sc2) := scal sc1 a1 S1 in let (a3, sc3) := scalL sc2 a2 R1 in match a3 with nzero => if (Zeq_bool (Zgcd (z2Z sc3) exx.(vN)) 1) then prime exx.(vN) else True | _ => True end. Proof. intros a isc. case_eq (scal isc a (vS exx)); intros a1 sc1 Ha1. case_eq (psplit (vR exx)); intros S1 R1 HS1. case_eq (scal sc1 a1 S1); intros a2 sc2 Ha2. case_eq (scalL sc2 a2 R1); intros a3 sc3; case a3; auto. intros Ha3; case_eq (Zeq_bool (Zgcd (z2Z sc3) (vN exx)) 1); auto. intros H1. assert (F0: (vy exx mod vN exx) ^ 2 mod vN exx = ((vx exx mod vN exx) ^ 3 + vA exx * (vx exx mod vN exx) + vB exx) mod vN exx). generalize exxs.(inC). simpl; unfold Zpower_pos; simpl. repeat rewrite Zmult_1_r. intros HH. match goal with |- ?t1 = ?t2 => rmod t1; auto end. rewrite HH. rewrite Zplus_mod; auto; symmetry; rewrite Zplus_mod; auto; symmetry. apply f_equal2 with (f := Zmod); auto. apply f_equal2 with (f := Zplus); auto. rewrite Zplus_mod; auto; symmetry; rewrite Zplus_mod; auto; symmetry. apply f_equal2 with (f := Zmod); auto. apply f_equal2 with (f := Zplus); auto. rewrite Zmult_mod; auto; symmetry; rewrite Zmult_mod; auto; symmetry. apply f_equal2 with (f := Zmod); auto. apply f_equal2 with (f := Zmult); auto. rewrite Zmod_mod; auto. match goal with |- ?t1 = ?t2 => rmod t2; auto end. rewrite Zmult_mod; auto; symmetry; rewrite Zmult_mod; auto; symmetry. apply f_equal2 with (f := Zmod); auto. rewrite Zmod_mod; auto. generalize (@ZEll.scalL_prime exx.(vN) (exx.(vx) mod exx.(vN)) (exx.(vy) mod exx.(vN)) exx.(vA) exx.(vB) exxs.(n_pos) exxs.(n2_div) exx.(vR) exxs.(lprime) exx.(vS) exxs.(lbig) F0); simpl. generalize (@scal_wf (vS exx) a isc) (@scal_correct (vS exx) a isc). unfold isc. rewrite nplusz; auto; try nw; auto. repeat rewrite nmulz; auto; try nw; auto. repeat rewrite z2Zx. repeat rewrite wwA || rewrite wwB|| rewrite mww. replace (e2E a) with (ZEll.ntriple (vx exx mod vN exx) (vy exx mod vN exx) 1). case ZEll.scal. fold isc; rewrite HS1; rewrite Ha1; simpl; auto. intros r1 rsc1 HH1 HH2. case HH1; clear HH1. unfold c1; repeat split; red; try apply z2Zx1. unfold isc; nw. case HH2; clear HH2. unfold c1; repeat split; red; try apply z2Zx1. unfold isc; nw. intros U1 U2 W1 W2; subst r1 rsc1. generalize (@scal_wf S1 a1 sc1) (@scal_correct S1 a1 sc1). case ZEll.scal. intros r1 rsc1 HH1 HH2. case HH1; clear HH1; auto. case HH2; clear HH2; auto. rewrite Ha2; simpl. intros U1 U2 W3 W4; subst r1 rsc1. generalize (@scalL_wf R1 a2 sc2) (@scalL_correct R1 a2 sc2). case ZEll.scalL. intros n; case n; auto. rewrite Ha3; simpl. intros rsc1 HH1 HH2. case HH1; clear HH1; auto. case HH2; clear HH2; auto. intros _ U2 _ W5; subst rsc1. rewrite H1; auto. intros x1 y1 z1 sc4; rewrite Ha3; simpl; auto. intros _ HH; case HH; auto. intros; discriminate. unfold a; simpl. unfold c1; repeat rewrite z2Zx. rewrite (Zmod_small 1); auto. generalize exxs.(n_pos). auto with zarith. Qed. *) End NEll. Definition isM2 p := match p with xH => false | xO _ => false | _ => true end. Lemma isM2_correct: forall p, if isM2 p then ~(Zdivide 2 p) /\ 2 < p else True. Proof. intros p; case p; simpl; auto; clear p. intros p1; split; auto. intros HH; inversion_clear HH. generalize H; rewrite Zmult_comm. case x; simpl; intros; discriminate. case p1; red; simpl; auto. Qed. Definition ell_test (N S: positive) (l: List.list (positive * positive)) (A B x y: Z) := if isM2 N then match (4 * N) ?= (ZEll.Zmullp l - 1) ^ 2 with Lt => match y ^ 2 mod N ?= (x ^ 3 + A * x + B) mod N with Eq => let ex := mkEx N S l A B x y in let e2n := e ex in let a := mtriple (e2n x) (e2n y) (e2n 1) in let A := (e2n A) in let B := (e2n B) in let d4 := (e2n 4) in let d27 := (e2n 27) in let dN := nN ex in let n := nn ex in let n' := nn' ex in let da := mplus ex in let dm := mmult ex in let isc := (da (dm (dm (dm d4 A) A) A) (dm (dm d27 B) B)) in let (a1, sc1) := scal ex isc a S in let (S1,R1) := ZEll.psplit l in let (a2, sc2) := scal ex sc1 a1 S1 in let (a3, sc3) := scalL ex sc2 a2 R1 in match a3 with mzero => if (Zeq_bool (Zgcd (d ex sc3) N) 1) then true else false | _ => false end | _ => false end | _ => false end else false. (* Lemma Zcompare_correct: forall x y, match x ?= y with Eq => x = y | Gt => x > y | Lt => x < y end. Proof. intros x y; unfold Zlt, Zgt; generalize (Zcompare_Eq_eq x y); case Zcompare; auto. Qed. Lemma ell_test_correct: forall (N S: positive) (l: List.list (positive * positive)) (A B x y: Z), (forall p, List.In p l -> prime (fst p)) -> if ell_test N S l A B x y then prime N else True. intros N S1 l A1 B1 x y H; unfold ell_test. generalize (isM2_correct N); case isM2; auto. intros (H1, H2). match goal with |- context[?x ?= ?y] => generalize (Zcompare_correct x y); case Zcompare; auto end; intros H3. match goal with |- context[?x ?= ?y] => generalize (Zcompare_correct x y); case Zcompare; auto end; intros H4. set (n := Peano.pred (nat_of_P (get_height 31 (plength N)))). set (op := cmk_op n). set (mop := make_mod_op op (ZnZ.of_Z N)). set (exx := mkEx N S1 l A1 B1 x y). set (op_spec := cmk_spec n). assert (exxs: ex_spec exx). constructor; auto. assert (H0: N < base (ZnZ.digits op)). apply Zlt_le_trans with (1 := plength_correct N). unfold op, base. rewrite cmk_op_digits. apply Zpower_le_monotone; split; auto with zarith. generalize (get_height_correct 31 (plength N)); unfold n. set (p := plength N). replace (Z_of_nat (Peano.pred (nat_of_P (get_height 31 p)))) with ((Zpos (get_height 31 p) - 1) ); auto with zarith. rewrite pred_of_minus; rewrite inj_minus1; auto with zarith. rewrite <- Zpos_eq_Z_of_nat_o_nat_of_P; auto with zarith. generalize (lt_O_nat_of_P (get_height 31 p)); auto with zarith. assert (mspec: mod_spec op (zN exx op) mop). unfold mop; apply make_mod_spec; auto. rewrite ZnZ.of_Z_correct; auto with zarith. generalize (@scalL_prime exx exxs _ op (cmk_spec n) mop mspec H0). lazy zeta. unfold c1, A, B, nplus, nmul; simpl exx.(vA); simpl exx.(vB); simpl exx.(vx); simpl exx.(vy); simpl exx.(vS); simpl exx.(vR); simpl exx.(vN). case scal; intros a1 sc1. case ZEll.psplit; intros S2 R2. case scal; intros a2 sc2. case scalL; intros a3 sc3. case a3; auto. case Zeq_bool; auto. Qed. *) Time Eval vm_compute in (ell_test 329719147332060395689499 8209062 (List.cons (40165264598163841%positive,1%positive) List.nil) (-94080) 9834496 0 3136). Time Eval vm_compute in (ell_test 1384435372850622112932804334308326689651568940268408537 13077052794 (List.cons (105867537178241517538435987563198410444088809%positive, 1%positive) List.nil) (-677530058123796416781392907869501000001421915645008494) 0 (- 169382514530949104195348226967375250000355478911252124) 1045670343788723904542107880373576189650857982445904291 ). *) coqprime-8.18/src/Coqprime/num/Mod_op.v000066400000000000000000001224021451023060700200410ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Set Implicit Arguments. From Bignums Require Import DoubleBase DoubleSub DoubleMul DoubleSqrt DoubleLift DoubleDivn1 DoubleDiv. From Bignums Require Import DoubleCyclic BigN. Require Import CyclicAxioms Cyclic63. Require Import ZArith ZCAux. Import CyclicAxioms DoubleType DoubleBase. (* For backward compatibility. The intended value is Set, but we use Type when compiling against an old version of the standard library. *) Definition univ_of_cycles : Type. Proof. first [let _ := constr:(word : Set -> nat -> Set) in exact Set | exact Type]. Defined. Theorem Zpos_pos: forall x, 0 < Zpos x. red; simpl; auto. Qed. Global Hint Resolve Zpos_pos: zarith. Section Mod_op. Variable w : univ_of_cycles. Record mod_op : Type := mk_mod_op { succ_mod : w -> w; add_mod : w -> w -> w; pred_mod : w -> w; sub_mod : w -> w -> w; mul_mod : w -> w -> w; square_mod : w -> w; power_mod : w -> positive -> w }. Variable w_op : ZnZ.Ops w. Let w_digits := w_op.(ZnZ.digits). Let w_zdigits := w_op.(ZnZ.zdigits). Let w_to_Z := (@ZnZ.to_Z _ w_op). Let w_of_pos := (@ZnZ.of_pos _ w_op). Let w_head0 := (@ZnZ.head0 _ w_op). Let w0 := (@ZnZ.zero _ w_op). Let w1 := (@ZnZ.one _ w_op). Let wBm1 := (@ZnZ.minus_one _ w_op). Let wWW := (@ZnZ.WW _ w_op). Let wW0 := (@ZnZ.WO _ w_op). Let w0W := (@ZnZ.OW _ w_op). Let w_compare := (@ZnZ.compare _ w_op). Let w_opp_c := (@ZnZ.opp_c _ w_op). Let w_opp := (@ZnZ.opp _ w_op). Let w_opp_carry := (@ZnZ.opp_carry _ w_op). Let w_succ := (@ZnZ.succ _ w_op). Let w_succ_c := (@ZnZ.succ_c _ w_op). Let w_add_c := (@ZnZ.add_c _ w_op). Let w_add_carry_c := (@ZnZ.add_carry_c _ w_op). Let w_add := (@ZnZ.add _ w_op). Let w_pred_c := (@ZnZ.pred_c _ w_op). Let w_sub_c := (@ZnZ.sub_c _ w_op). Let w_sub_carry := (@ZnZ.sub_carry _ w_op). Let w_sub_carry_c := (@ZnZ.sub_carry_c _ w_op). Let w_sub := (@ZnZ.sub _ w_op). Let w_pred := (@ZnZ.pred _ w_op). Let w_mul_c := (@ZnZ.mul_c _ w_op). Let w_mul := (@ZnZ.mul _ w_op). Let w_square_c := (@ZnZ.square_c _ w_op). Let w_div21 := (@ZnZ.div21 _ w_op). Let w_add_mul_div := (@ZnZ.add_mul_div _ w_op). Variable b : w. (* b should be > 1 *) Let n := w_head0 b. Let b2n := w_add_mul_div n b w0. Let bm1 := w_sub b w1. Let mb := w_opp b. Let wwb := WW w0 b. Let low x := match x with WW _ x => x | W0 => w0 end. Let w_add2 x y := match w_add_c x y with C0 n => WW w0 n |C1 n => WW w1 n end. Let ww_zdigits := w_add2 w_zdigits w_zdigits. Let ww_compare := Eval lazy beta delta [ww_compare] in ww_compare w0 w_compare. Let ww_sub := Eval lazy beta delta [ww_sub] in ww_sub w0 wWW w_opp_c w_opp_carry w_sub_c w_opp w_sub w_sub_carry. Let ww_add_mul_div := Eval lazy beta delta [ww_add_mul_div] in ww_add_mul_div w0 wWW wW0 w0W ww_compare w_add_mul_div ww_sub w_zdigits low (w0W n). Let ww_lsl_n := Eval lazy beta delta [ww_add_mul_div] in fun ww => ww_add_mul_div ww W0. Let w_lsr_n w := w_add_mul_div (w_sub w_zdigits n) w0 w. Open Scope Z_scope. Notation "[| x |]" := (@ZnZ.to_Z _ w_op x) (at level 0, x at level 99). Notation "[[ x ]]" := (@ww_to_Z _ w_digits w_to_Z x) (at level 0, x at level 99). Section Mod_spec. Variable m_op : mod_op. Record mod_spec : Prop := mk_mod_spec { succ_mod_spec : forall w t, [|w|]= t mod [|b|] -> [|succ_mod m_op w|] = ([|w|] + 1) mod [|b|]; add_mod_spec : forall w1 w2 t1 t2, [|w1|]= t1 mod [|b|] -> [|w2|]= t2 mod [|b|] -> [|add_mod m_op w1 w2|] = ([|w1|] + [|w2|]) mod [|b|]; pred_mod_spec : forall w t, [|w|]= t mod [|b|] -> [|pred_mod m_op w|] = ([|w|] - 1) mod [|b|]; sub_mod_spec : forall w1 w2 t1 t2, [|w1|]= t1 mod [|b|] -> [|w2|]= t2 mod [|b|] -> [|sub_mod m_op w1 w2|] = ([|w1|] - [|w2|]) mod [|b|]; mul_mod_spec : forall w1 w2 t1 t2, [|w1|]= t1 mod [|b|] -> [|w2|]= t2 mod [|b|] -> [|mul_mod m_op w1 w2|] = ([|w1|] * [|w2|]) mod [|b|]; square_mod_spec : forall w t, [|w|]= t mod [|b|] -> [|square_mod m_op w|] = ([|w|] * [|w|]) mod [|b|]; power_mod_spec : forall w t p, [|w|]= t mod [|b|] -> [|power_mod m_op w p|] = (Zpower_pos [|w|] p) mod [|b|] (* shift_spec : forall w p, wf w -> [|shift m_op w p|] = ([|w|] / (Zpower_pos 2 p)) mod [|b|]; trunc_spec : forall w p, wf w -> [|power_mod m_op w p|] = ([|w1|] mod (Zpower_pos 2 p)) mod [|b|] *) }. End Mod_spec. Hypothesis b_pos: 1 < [|b|]. Variable op_spec: ZnZ.Specs w_op. Lemma Zpower_n: 0 < 2 ^ [|n|]. apply Zpower_gt_0; auto with zarith. case (ZnZ.spec_to_Z n); auto with zarith. Qed. Hint Resolve Zpower_n Zmult_lt_0_compat Zpower_gt_0 : core. Variable m_op : mod_op. Hint Rewrite ZnZ.spec_0 ZnZ.spec_1 ZnZ.spec_m1 ZnZ.spec_WW ZnZ.spec_opp_c ZnZ.spec_opp ZnZ.spec_opp_carry ZnZ.spec_succ_c ZnZ.spec_add_c ZnZ.spec_add_carry_c ZnZ.spec_add ZnZ.spec_pred_c ZnZ.spec_sub_c ZnZ.spec_sub_carry_c ZnZ.spec_sub ZnZ.spec_mul_c ZnZ.spec_mul : w_rewrite. Let _succ_mod x := let res :=w_succ x in match w_compare res b with | Lt => res | _ => w0 end. Let split x := match x with | W0 => (w0,w0) | WW h l => (h,l) end. Let _w0_is_0: [|w0|] = 0. unfold ZnZ.to_Z; rewrite <- ZnZ.spec_0; auto. Qed. Let _w1_is_1: [|w1|] = 1. unfold ZnZ.to_Z; rewrite <-ZnZ.spec_1; simpl; auto. Qed. Theorem Zmod_plus_one: forall a1 b1, 0 < b1 -> (a1 + b1) mod b1 = a1 mod b1. intros a1 b1 H; rewrite Zplus_mod; auto with zarith. rewrite Z_mod_same; try rewrite Zplus_0_r; auto with zarith. apply Zmod_mod; auto. Qed. Theorem Zmod_minus_one: forall a1 b1, 0 < b1 -> (a1 - b1) mod b1 = a1 mod b1. intros a1 b1 H; rewrite Zminus_mod; auto with zarith. rewrite Z_mod_same; try rewrite Zminus_0_r; auto with zarith. apply Zmod_mod; auto. Qed. Lemma without_c_b: forall w2, [|w2|] < [|b|] -> [|w_succ w2|] = [|w2|] + 1. intros w2 H. unfold w_succ;rewrite ZnZ.spec_succ. rewrite Zmod_small;auto. assert (HH := ZnZ.spec_to_Z w2). assert (HH' := ZnZ.spec_to_Z b);auto with zarith. Qed. Lemma _succ_mod_spec: forall w t, [|w|]= t mod [|b|] -> [|_succ_mod w|] = ([|w|] + 1) mod [|b|]. intros w2 t H; unfold _succ_mod, w_compare; simpl. assert (F: [|w2|] < [|b|]). case (Z_mod_lt t [|b|]); auto with zarith. rewrite ZnZ.spec_compare; case Z.compare_spec; intros H1; match goal with H: context[w_succ _] |- _ => generalize H; clear H; rewrite (without_c_b _ F); intros H1; auto with zarith end. rewrite H1, Z_mod_same, _w0_is_0; auto with zarith. rewrite Zmod_small; auto with zarith. case (ZnZ.spec_to_Z w2); auto with zarith. Qed. Let _add_mod x y := match w_add_c x y with | C0 z => match w_compare z b with | Lt => z | Eq => w0 | Gt => w_sub z b end | C1 z => w_add mb z end. Lemma _add_mod_correct: forall w1 w2, [|w1|] + [|w2|] < 2 * [|b|] -> [|_add_mod w1 w2|] = ([|w1|] + [|w2|]) mod [|b|]. intros w2 w3; unfold _add_mod, w_compare, w_add_c; intros H. match goal with |- context[ZnZ.add_c ?x ?y] => generalize (ZnZ.spec_add_c x y); unfold interp_carry; case (ZnZ.add_c x y); autorewrite with w_rewrite end; auto with zarith. intros w4 H2. rewrite ZnZ.spec_compare; case Z.compare_spec; intros H1; match goal with H: context[b] |- _ => generalize H; clear H; intros H1; rewrite <-H2; auto with zarith end. rewrite H1, Z_mod_same; auto with zarith. rewrite Zmod_small; auto with zarith. case (ZnZ.spec_to_Z w4); auto with zarith. assert (F1: 0 < [|w4|] - [|b|]); auto with zarith. assert (F2: [|w4|] < [|b|] + [|b|]); auto with zarith. autorewrite with w_rewrite; auto. rewrite (fun x y => Zmod_small (x - y)); auto with zarith. rewrite <- (Zmod_minus_one [|w4|]); auto with zarith. apply sym_equal; apply Zmod_small; auto with zarith. split; auto with zarith. apply Z.lt_trans with [|b|]; auto with zarith. case (ZnZ.spec_to_Z b); unfold base; auto with zarith. rewrite Zmult_1_l; intros w4 H2; rewrite <- H2. unfold mb, w_add; rewrite ZnZ.spec_add; auto with zarith. assert (F1: [|w4|] < [|b|]). assert (F2: base (ZnZ.digits w_op) + [|w4|] < base (ZnZ.digits w_op) + [|b|]); auto with zarith. rewrite H2. apply Z.lt_trans with ([|b|] +[|b|]); auto with zarith. apply Zplus_lt_compat_r; auto with zarith. case (ZnZ.spec_to_Z b); auto with zarith. assert (F2: [|b|] < base (ZnZ.digits w_op) + [|w4|]); auto with zarith. apply Z.lt_le_trans with (base (ZnZ.digits w_op)); auto with zarith. case (ZnZ.spec_to_Z b); auto with zarith. case (ZnZ.spec_to_Z w4); auto with zarith. assert (F3: base (ZnZ.digits w_op) + [|w4|] < [|b|] + [|b|]); auto with zarith. rewrite <- (fun x => Zmod_minus_one (base x + [|w4|])); auto with zarith. rewrite (fun x y => Zmod_small (x - y)); auto with zarith. unfold w_opp;rewrite (ZnZ.spec_opp b). rewrite <- (fun x => Zmod_plus_one (-x)); auto with zarith. rewrite (Zmod_small (- [|b|] + base (ZnZ.digits w_op)));auto with zarith. 2 : assert (HHH := ZnZ.spec_to_Z b);auto with zarith. repeat rewrite Zmod_small; auto with zarith. Qed. Lemma _add_mod_spec: forall w1 w2 t1 t2, [|w1|] = t1 mod [|b|] -> [|w2|] = t2 mod [|b|] -> [|_add_mod w1 w2|] = ([|w1|] + [|w2|]) mod [|b|]. intros w2 w3 t1 t2 H H1. apply _add_mod_correct; auto with zarith. assert (F: [|w2|] < [|b|]). case (Z_mod_lt t1 [|b|]); auto with zarith. assert (F': [|w3|] < [|b|]). case (Z_mod_lt t2 [|b|]); auto with zarith. assert (tmp: forall x, 2 * x = x + x); auto with zarith. Qed. Let _pred_mod x := match w_compare w0 x with | Eq => bm1 | _ => w_pred x end. Lemma _pred_mod_spec: forall w t, [|w|] = t mod [|b|] -> [|_pred_mod w|] = ([|w|] - 1) mod [|b|]. intros w2 t H; unfold _pred_mod, w_compare, bm1; simpl. assert (F: [|w2|] < [|b|]). case (Z_mod_lt t [|b|]); auto with zarith. rewrite ZnZ.spec_compare; case Z.compare_spec; intros H1; match goal with H: context[w2] |- _ => generalize H; clear H; intros H1; autorewrite with w_rewrite; auto with zarith end; try rewrite _w0_is_0; try rewrite _w1_is_1; auto with zarith. rewrite <- H1, _w0_is_0; simpl. rewrite <- (Zmod_plus_one (-1)); auto with zarith. repeat rewrite Zmod_small; auto with zarith. case (ZnZ.spec_to_Z b); auto with zarith. unfold w_pred;rewrite ZnZ.spec_pred; auto. assert (HHH := ZnZ.spec_to_Z b);repeat rewrite Zmod_small;auto with zarith. intros;assert (HHH := ZnZ.spec_to_Z w2);auto with zarith. Qed. Let _sub_mod x y := match w_sub_c x y with | C0 z => z | C1 z => w_add z b end. Lemma _sub_mod_spec: forall w1 w2 t1 t2, [|w1|] = t1 mod [|b|] -> [|w2|] = t2 mod [|b|] -> [|_sub_mod w1 w2|] = ([|w1|] - [|w2|]) mod [|b|]. intros w2 w3 t1 t2; unfold _sub_mod, w_compare, w_sub_c; intros H H1. assert (F: [|w2|] < [|b|]). case (Z_mod_lt t1 [|b|]); auto with zarith. assert (F': [|w3|] < [|b|]). case (Z_mod_lt t2 [|b|]); auto with zarith. match goal with |- context[ZnZ.sub_c ?x ?y] => generalize (ZnZ.spec_sub_c x y); unfold interp_carry; case (ZnZ.sub_c x y); autorewrite with w_rewrite end; auto with zarith. intros w4 H2. rewrite Zmod_small; auto with zarith. split; auto with zarith. rewrite <- H2; case (ZnZ.spec_to_Z w4); auto with zarith. apply Z.le_lt_trans with [|w2|]; auto with zarith. case (ZnZ.spec_to_Z w3); auto with zarith. intros w4 H2; rewrite <- H2. unfold w_add; rewrite ZnZ.spec_add; auto with zarith. case (ZnZ.spec_to_Z w4); intros F1 F2. assert (F3: 0 <= - 1 * base (ZnZ.digits w_op) + [|w4|] + [|b|]); auto with zarith. rewrite H2. case (ZnZ.spec_to_Z w3); case (ZnZ.spec_to_Z w2); auto with zarith. rewrite <- (fun x => Zmod_minus_one ([|w4|] + x)); auto with zarith. rewrite <- (fun x y => Zmod_plus_one (-y + x)); auto with zarith. repeat rewrite Zmod_small; auto with zarith. case (ZnZ.spec_to_Z b); auto with zarith. Qed. Let _mul_mod x y := let xy := w_mul_c x y in match ww_compare xy wwb with | Lt => snd (split xy) | Eq => w0 | Gt => let xy2n := ww_lsl_n xy in let (h,l) := split xy2n in let (q,r) := w_div21 h l b2n in w_lsr_n r end. Theorem high_zero:forall x, [[x]] < base w_digits -> [|fst (split x)|] = 0. intros x; case x; simpl; auto. intros xh xl H; case (Zle_lt_or_eq 0 [|xh|]); auto with zarith. case (ZnZ.spec_to_Z xh); auto with zarith. intros H1; contradict H; apply Zle_not_lt. assert (HHHH := wB_pos w_digits). unfold w_to_Z. match goal with |- ?X <= ?Y + ?Z => pattern X at 1; rewrite <- (Zmult_1_l X); auto with zarith; apply Z.le_trans with Y; auto with zarith end. case (ZnZ.spec_to_Z xl); auto with zarith. Qed. Theorem n_spec: base (ZnZ.digits w_op) / 2 <= 2 ^ [|n|] * [|b|] < base (ZnZ.digits w_op). unfold n, w_head0; apply (ZnZ.spec_head0); auto with zarith. Qed. Theorem b2n_spec: [|b2n|] = 2 ^ [|n|] * [|b|]. unfold b2n, w_add_mul_div; case n_spec; intros Hp Hp1. assert (F1: [|n|] < Zpos (ZnZ.digits w_op)). case (Zle_or_lt (Zpos (ZnZ.digits w_op)) [|n|]); auto with zarith. intros H1; contradict Hp1; apply Zle_not_lt; unfold base. apply Z.le_trans with (2 ^ [|n|] * 1); auto with zarith. rewrite Zmult_1_r; apply Zpower_le_monotone; auto with zarith. rewrite ZnZ.spec_add_mul_div; auto with zarith. rewrite _w0_is_0; rewrite Zdiv_0_l; auto with zarith. rewrite Zplus_0_r; rewrite Zmult_comm; apply Zmod_small; auto with zarith. Qed. Theorem ww_lsl_n_spec: forall w, [[w]] < [|b|] * [|b|] -> [[ww_lsl_n w]] = 2 ^ [|n|] * [[w]]. intros w2 H; unfold ww_lsl_n. case n_spec; intros Hp Hp1. assert (F0: forall x, 2 * x = x + x) by auto with zarith. assert (F1: [|n|] < Zpos (ZnZ.digits w_op)). case (Zle_or_lt (Zpos (ZnZ.digits w_op)) [|n|]). 2: auto. intros H1; contradict Hp1; apply Zle_not_lt; unfold base. apply Z.le_trans with (2 ^ [|n|] * 1). 2: auto with zarith. rewrite Zmult_1_r; apply Zpower_le_monotone; auto with zarith. assert (F2: [|n|] < Zpos (xO (ZnZ.digits w_op))). rewrite (Zpos_xO (ZnZ.digits w_op)). rewrite F0. pattern [|n|]; rewrite <- Zplus_0_r. apply Zplus_lt_compat; auto with zarith. change ([[DoubleLift.ww_add_mul_div w0 wWW wW0 w0W ww_compare w_add_mul_div ww_sub w_zdigits low (w0W n) w2 W0]] = 2 ^ [|n|] * [[w2]]). rewrite (DoubleLift.spec_ww_add_mul_div ). 2: auto with zarith. 2: apply ZnZ.spec_to_Z; auto. 2: refine (spec_ww_to_Z _ _ _); auto. 2: apply ZnZ.spec_to_Z; auto. 2: apply ZnZ.spec_WW; auto. 2: apply ZnZ.spec_WO; auto. 2: apply ZnZ.spec_OW; auto. 2: refine (spec_ww_compare _ _ _ _ _ _ _); auto. 2: apply ZnZ.spec_to_Z; auto. 2: apply ZnZ.spec_compare; auto. 2: apply ZnZ.spec_add_mul_div; auto. 2: refine (spec_ww_sub _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _); auto. 2: apply ZnZ.spec_to_Z; auto. 2: apply ZnZ.spec_WW; auto. 2: apply ZnZ.spec_opp_c; auto. 2: apply ZnZ.spec_opp; auto. 2: apply ZnZ.spec_opp_carry; auto. 2: apply ZnZ.spec_sub_c; auto. 2: apply ZnZ.spec_sub; auto. 2: apply ZnZ.spec_sub_carry; auto. 2: apply ZnZ.spec_zdigits; auto. replace ([[w0W n]]) with [|n|]. change [[W0]] with 0. rewrite Zdiv_0_l; auto with zarith. rewrite Zplus_0_r; rewrite Zmod_small; auto with zarith. split; auto with zarith. case spec_ww_to_Z with (w_digits := w_digits) (w_to_Z := w_to_Z) (x:=w2); auto with zarith. apply ZnZ.spec_to_Z; auto. apply Z.lt_trans with ([|b|] * [|b|] * 2 ^ [|n|]); auto with zarith. apply Zmult_lt_compat_r; auto with zarith. rewrite <- Zmult_assoc. unfold base; unfold base in Hp. unfold ww_digits,w_digits;rewrite (Zpos_xO (ZnZ.digits w_op)); rewrite F0; auto with zarith. rewrite Zpower_exp; auto with zarith. apply Zmult_lt_compat; auto with zarith. case (ZnZ.spec_to_Z b); auto with zarith. split; auto with zarith. rewrite Zmult_comm; auto with zarith. unfold w_digits;auto with zarith. generalize (ZnZ.spec_OW n). unfold ww_to_Z, w_digits; auto. intros x; case x; simpl. unfold w_to_Z, w_digits, w0; rewrite ZnZ.spec_0; auto. intros w3 w4; rewrite Zplus_comm. rewrite Z_mod_plus; auto with zarith. rewrite Zmod_small; auto with zarith. case (ZnZ.spec_to_Z w4); auto with zarith. unfold base; auto with zarith. unfold ww_to_Z, w_digits, w_to_Z, w0W; auto. rewrite ZnZ.spec_OW; auto with zarith. Qed. Theorem w_lsr_n_spec: forall w, [|w|] < 2 ^ [|n|] * [|b|]-> [|w_lsr_n w|] = [|w|] / 2 ^ [|n|]. intros w2 H. case (ZnZ.spec_to_Z w2); intros U1 U2. unfold w_lsr_n, w_add_mul_div. rewrite ZnZ.spec_add_mul_div. rewrite _w0_is_0; rewrite Zmult_0_l. rewrite Zplus_0_l. autorewrite with w_rewrite. rewrite (fun x y => Zmod_small (x - y)). unfold w_zdigits; rewrite ZnZ.spec_zdigits. assert (tmp: forall p q, p - (p - q) = q) by (intros; ring). rewrite tmp; clear tmp. rewrite Zmod_small. reflexivity. split. auto with zarith. apply Z.le_lt_trans with (2 := U2). apply Zdiv_le_upper_bound. auto with zarith. apply Z.le_trans with ([|w2|] * (2 ^ 0)). simpl Zpower; rewrite Zmult_1_r; reflexivity. apply Zmult_le_compat_l. 2: auto with zarith. apply Zpower_le_monotone; auto with zarith. case (ZnZ.spec_to_Z n); auto with zarith. unfold n. assert (HH: 0 < [|b|]) by auto with zarith. split. case (Zle_or_lt [|w_head0 b|] [|w_zdigits|]); auto with zarith. unfold w_zdigits; rewrite ZnZ.spec_zdigits; auto; intros H1. case (ZnZ.spec_head0 b HH); intros _ H2; contradict H2. apply Zle_not_lt; unfold base. apply Z.le_trans with (2^[|ZnZ.head0 b|] * 1); auto with zarith. rewrite Zmult_1_r; apply Zpower_le_monotone; auto with zarith. unfold w_zdigits; rewrite ZnZ.spec_zdigits; auto. apply Z.le_lt_trans with (Zpos (ZnZ.digits w_op)); auto with zarith. case (ZnZ.spec_to_Z (w_head0 b)); auto with zarith. unfold base; apply Zpower2_lt_lin; auto with zarith. autorewrite with w_rewrite; auto. rewrite Zmod_small; auto with zarith. unfold w_zdigits; rewrite ZnZ.spec_zdigits; auto with zarith. case (ZnZ.spec_to_Z n); auto with zarith. unfold w_zdigits; rewrite ZnZ.spec_zdigits; auto. split; auto with zarith. case (Zle_or_lt [|n|] (Zpos (ZnZ.digits w_op))); auto with zarith; intros H1. case (ZnZ.spec_head0 b); auto with zarith; intros _ H2. contradict H2; apply Zle_not_lt; auto with zarith. unfold base; apply Z.le_trans with (2 ^ [|ZnZ.head0 b|] * 1); auto with zarith. rewrite Zmult_1_r; unfold base; apply Zpower_le_monotone; auto with zarith. apply Z.le_lt_trans with (Zpos (ZnZ.digits w_op)); auto with zarith. case (ZnZ.spec_to_Z n); auto with zarith. unfold base; apply Zpower2_lt_lin; auto with zarith. Qed. Lemma split_correct: forall x, let (xh, xl) := split x in [[WW xh xl]] = [[x]]. intros x; case x; simpl; unfold w0, w_to_Z;try rewrite ZnZ.spec_0; auto with zarith. Qed. Lemma _mul_mod_spec: forall w1 w2 t1 t2, [|w1|] = t1 mod [|b|] -> [|w2|] = t2 mod [|b|] -> [|_mul_mod w1 w2|] = ([|w1|] * [|w2|]) mod [|b|]. intros w2 w3 t1 t2 H H1; unfold _mul_mod, wwb. assert (F: [|w2|] < [|b|]). case (Z_mod_lt t1 [|b|]); auto with zarith. assert (F': [|w3|] < [|b|]). case (Z_mod_lt t2 [|b|]); auto with zarith. match goal with |- context[ww_compare ?x ?y] => change (ww_compare x y) with (DoubleBase.ww_compare w0 w_compare x y) end. rewrite (@spec_ww_compare w w0 w_digits w_to_Z w_compare ZnZ.spec_0 ZnZ.spec_to_Z ZnZ.spec_compare (w_mul_c w2 w3) (WW w0 b)). case Z.compare_spec; intros H2; match goal with H: context[w_mul_c] |- _ => generalize H; clear H end. rewrite _w0_is_0. unfold w_mul_c, ww_to_Z, w_to_Z, w_digits; rewrite ZnZ.spec_mul_c. simpl; rewrite _w0_is_0, Zmult_0_l, Zplus_0_l. intros H2; rewrite H2; simpl. rewrite Z_mod_same; auto with zarith. generalize (high_zero (w_mul_c w2 w3)). unfold w_mul_c; generalize (ZnZ.spec_mul_c w2 w3); case (ZnZ.mul_c w2 w3); simpl. intros H3 _ _; rewrite <- H3; autorewrite with w_rewrite; auto. (* rewrite Zmod_small; auto with zarith. *) intros w4 w5. change (w_to_Z w0) with [|w0|]; rewrite _w0_is_0. change (w_to_Z w4) with [|w4|]. change (w_to_Z w5) with [|w5|]. simpl. intros H2 H3 H4. assert (E1: [|w4|] = 0). apply H3. apply Z.lt_trans with (1 := H4). case (ZnZ.spec_to_Z b); auto with zarith. generalize H4 H2; rewrite E1; rewrite Zmult_0_l; rewrite Zplus_0_l; clear H4 H2; intros H4 H2. rewrite <- H2; rewrite Zmod_small. auto with zarith. case (ZnZ.spec_to_Z w5); auto with zarith. intros H2. match goal with |- context[split ?x] => generalize (split_correct x); case (split x); auto with zarith end. assert (F1: [[w_mul_c w2 w3]] < [|b|] * [|b|]). unfold w_to_Z, w_mul_c, ww_to_Z,w_digits; rewrite ZnZ.spec_mul_c. apply Zmult_lt_compat. case (ZnZ.spec_to_Z w2); auto with zarith. case (ZnZ.spec_to_Z w3); auto with zarith. intros w4 w5; rewrite ww_lsl_n_spec. 2: auto with zarith. intros H3. unfold w_div21; match goal with |- context[ZnZ.div21 ?y ?z ?t] => generalize (ZnZ.spec_div21 y z t); case (ZnZ.div21 y z t) end. rewrite b2n_spec; case (n_spec). intros H4 H5 w6 w7 H6. case H6. auto with zarith. case (Zle_or_lt (2 ^ [|n|] * [|b|]) [|w4|]); auto; intros H7. match type of H3 with ?X = ?Y => absurd (Y < X) end. apply Zle_not_lt; rewrite H3. auto with zarith. simpl ww_to_Z. match goal with |- ?X < ?Y + _ => apply Z.lt_le_trans with Y; auto with zarith end. apply Z.lt_trans with (2 ^ [|n|] * ([|b|] * [|b|])); auto with zarith. apply Zmult_lt_compat_l; auto with zarith. rewrite Zmult_assoc. apply Zmult_lt_compat2; auto with zarith. case (ZnZ.spec_to_Z b); auto with zarith. case (ZnZ.spec_to_Z w5); unfold w_to_Z;auto with zarith. clear H6; intros H7 H8. rewrite w_lsr_n_spec by auto with zarith. rewrite <- (Z_div_mult ([|w2|] * [|w3|]) (2 ^ [|n|])) by auto with zarith; rewrite Zmult_comm. rewrite <- ZnZ.spec_mul_c. unfold w_mul_c in H3; unfold ww_to_Z in H3;simpl in H3. unfold w_digits,w_to_Z in H3. rewrite <- H3; simpl. rewrite H7; rewrite (fun x => Zmult_comm (2 ^ x)); rewrite Zmult_assoc; rewrite BigNumPrelude.Z_div_plus_l by auto with zarith. rewrite Zplus_mod. rewrite Z_mod_mult. rewrite Zplus_0_l. rewrite Zmod_mod. rewrite Zmod_small. auto with zarith. split. auto with zarith. apply Zdiv_lt_upper_bound. auto with zarith. rewrite Zmult_comm; auto with zarith. Qed. Let _square_mod x := let x2 := w_square_c x in match ww_compare x2 wwb with | Lt => snd (split x2) | Eq => w0 | Gt => let x2_2n := ww_lsl_n x2 in let (h,l) := split x2_2n in let (q,r) := w_div21 h l b2n in w_lsr_n r end. Lemma _square_mod_spec: forall w t, [|w|] = t mod [|b|] -> [|_square_mod w|] = ([|w|] * [|w|]) mod [|b|]. intros w2 t2 H; unfold _square_mod, wwb. assert (F: [|w2|] < [|b|]). case (Z_mod_lt t2 [|b|]); auto with zarith. match goal with |- context[ww_compare ?x ?y] => change (ww_compare x y) with (DoubleBase.ww_compare w0 w_compare x y) end. rewrite (@spec_ww_compare w w0 w_digits w_to_Z w_compare ZnZ.spec_0 ZnZ.spec_to_Z ZnZ.spec_compare); case Z.compare_spec; intros H2; match goal with H: context[w_square_c] |- _ => generalize H; clear H end; autorewrite with w_rewrite. rewrite _w0_is_0. unfold w_square_c, ww_to_Z, w_to_Z, w_digits; rewrite ZnZ.spec_square_c. intros H2;rewrite H2; simpl. rewrite _w0_is_0; simpl. rewrite Z_mod_same; auto with zarith. generalize (high_zero (w_square_c w2)). unfold w_square_c; generalize (ZnZ.spec_square_c w2); case (ZnZ.square_c w2); simpl; auto with zarith. intros H3 _ _; rewrite <- H3; autorewrite with w_rewrite; auto. intros w4 w5. change (w_to_Z w0) with [|w0|]; rewrite _w0_is_0; simpl. change (w_to_Z w4) with [|w4|]. change (w_to_Z w5) with [|w5|]. intros H2 H3 H4. assert (E1: [|w4|] = 0). apply H3. apply Z.lt_trans with (1 := H4). case (ZnZ.spec_to_Z b); auto with zarith. generalize H4 H2; rewrite E1; rewrite Zmult_0_l; rewrite Zplus_0_l; clear H4 H2; intros H4 H2. rewrite <- H2; rewrite Zmod_small. auto with zarith. case (ZnZ.spec_to_Z w5); auto with zarith. intros H2. match goal with |- context[split ?x] => generalize (split_correct x); case (split x); auto with zarith end. assert (F1: [[w_square_c w2]] < [|b|] * [|b|]). unfold w_square_c, ww_to_Z, w_digits, w_to_Z. rewrite ZnZ.spec_square_c. apply Zmult_lt_compat. case (ZnZ.spec_to_Z w2); auto with zarith. case (ZnZ.spec_to_Z w2); auto with zarith. intros w4 w5; rewrite ww_lsl_n_spec by auto with zarith. intros H3. unfold w_div21; match goal with |- context[ZnZ.div21 ?y ?z ?t] => generalize (ZnZ.spec_div21 y z t); case (ZnZ.div21 y z t) end. rewrite b2n_spec; case (n_spec); auto. intros H4 H5 w6 w7 H6. case H6. auto with zarith. case (Zle_or_lt (2 ^ [|n|] * [|b|]) [|w4|]); auto; intros H7. match type of H3 with ?X = ?Y => absurd (Y < X) end. apply Zle_not_lt; rewrite H3; auto with zarith. simpl ww_to_Z. match goal with |- ?X < ?Y + _ => apply Z.lt_le_trans with Y; auto with zarith end. apply Z.lt_trans with (2 ^ [|n|] * ([|b|] * [|b|])). apply Zmult_lt_compat_l; auto with zarith. rewrite Zmult_assoc. apply Zmult_lt_compat2. auto with zarith. case (ZnZ.spec_to_Z b); auto with zarith. unfold w_to_Z,w_digits;case (ZnZ.spec_to_Z w5). auto with zarith. clear H6; intros H7 H8. rewrite w_lsr_n_spec by auto with zarith. rewrite <- (Z_div_mult ([|w2|] * [|w2|]) (2 ^ [|n|])) by auto with zarith; rewrite Zmult_comm. rewrite <- ZnZ.spec_square_c. unfold w_square_c, ww_to_Z in H3; unfold w_digits,w_to_Z in H3. rewrite <- H3; simpl. rewrite H7; rewrite (fun x => Zmult_comm (2 ^ x)); rewrite Zmult_assoc; rewrite BigNumPrelude.Z_div_plus_l by auto with zarith. rewrite Zplus_mod. rewrite Z_mod_mult. rewrite Zplus_0_l. rewrite Zmod_mod. rewrite Zmod_small. auto with zarith. split. auto with zarith. apply Zdiv_lt_upper_bound. auto with zarith. rewrite Zmult_comm; auto with zarith. Qed. Let _power_mod := fix pow_mod (x:w) (p:positive) {struct p} : w := match p with | xH => x | xO p' => let pow := pow_mod x p' in _square_mod pow | xI p' => let pow := pow_mod x p' in _mul_mod (_square_mod pow) x end. Lemma _power_mod_spec: forall w t p, [|w|] = t mod [|b|] -> [|_power_mod w p|] = (Zpower_pos [|w|] p) mod [|b|]. intros w2 t p; elim p; simpl; auto with zarith. intros p' Rec H. assert (F: [|w2|] < [|b|]). case (Z_mod_lt t [|b|]); auto with zarith. replace (xI p') with (p' + p' + 1)%positive. repeat rewrite Zpower_pos_is_exp; auto with zarith. pose (t1 := [|_power_mod w2 p'|]). rewrite _mul_mod_spec with (t1 := t1 * t1) (t2 := t); auto with zarith. rewrite _square_mod_spec with (t := Zpower_pos [|w2|] p'); auto with zarith. rewrite Rec; auto with zarith. assert (tmp: forall p, Zpower_pos p 1 = p); try (rewrite tmp; clear tmp). intros p1; unfold Zpower_pos; simpl; ring. rewrite <- Zmult_mod; auto with zarith. rewrite Zmult_mod; auto with zarith. rewrite Zmod_mod; auto with zarith. rewrite <- Zmult_mod; auto with zarith. simpl; unfold t1; apply _square_mod_spec with (t := Zpower_pos [|w2|] p'); auto with zarith. rewrite xI_succ_xO; rewrite <- Pplus_diag. rewrite Pplus_one_succ_r; auto. intros p' Rec H. replace (xO p') with (p' + p')%positive. repeat rewrite Zpower_pos_is_exp; auto with zarith. rewrite _square_mod_spec with (t := Zpower_pos [|w2|] p'); auto with zarith. rewrite Rec; auto with zarith. rewrite <- Zmult_mod; auto with zarith. rewrite <- Pplus_diag; auto. intros H. assert (tmp: forall p, Zpower_pos p 1 = p); try (rewrite tmp; clear tmp). intros p1; unfold Zpower_pos; simpl; ring. rewrite Zmod_small; auto with zarith. assert (F: [|w2|] < [|b|]). case (Z_mod_lt t [|b|]); auto with zarith. case (ZnZ.spec_to_Z w2); auto with zarith. Qed. Definition make_mod_op := mk_mod_op _succ_mod _add_mod _pred_mod _sub_mod _mul_mod _square_mod _power_mod. Definition make_mod_spec: mod_spec make_mod_op. apply mk_mod_spec. exact _succ_mod_spec. exact _add_mod_spec. exact _pred_mod_spec. exact _sub_mod_spec. exact _mul_mod_spec. exact _square_mod_spec. exact _power_mod_spec. Defined. (*********** Mersenne special **********) Variable p: positive. Variable zp: w. Hypothesis zp_b: [|zp|] = Zpos p. Hypothesis p_lt_w_digits: Zpos p <= Zpos w_digits. Let p1 := Pminus (xO w_digits) p. Theorem p_p1: Zpos p + Zpos p1 = Zpos (xO w_digits). unfold p1. rewrite Zpos_minus. rewrite Zmax_right. auto with zarith. rewrite Zpos_xO. assert (0 < Zpos w_digits); auto with zarith. Qed. Let zp1 := ww_sub ww_zdigits (WW w0 zp). Let spec_add2: forall x y, [[w_add2 x y]] = [|x|] + [|y|]. unfold w_add2. intros xh xl; generalize (ZnZ.spec_add_c xh xl). unfold w_add_c; case ZnZ.add_c; unfold interp_carry; simpl ww_to_Z. intros w2 Hw2; simpl; unfold w_to_Z; rewrite Hw2. unfold w0; rewrite ZnZ.spec_0; simpl; auto with zarith. intros w2; rewrite Zmult_1_l; simpl. unfold w_to_Z, w1; rewrite ZnZ.spec_1; auto with zarith. rewrite Zmult_1_l; auto. Qed. Let spec_ww_digits: [[ww_zdigits]] = Zpos (xO w_digits). Proof. unfold w_to_Z, ww_zdigits. rewrite spec_add2. unfold w_to_Z, w_zdigits, w_digits. rewrite ZnZ.spec_zdigits; auto. rewrite Zpos_xO; auto with zarith. Qed. Let spec_ww_to_Z := (spec_ww_to_Z _ _ ZnZ.spec_to_Z). Let spec_ww_compare := spec_ww_compare _ _ _ _ ZnZ.spec_0 ZnZ.spec_to_Z ZnZ.spec_compare. Let spec_ww_sub := spec_ww_sub w0 zp wWW zp1 w_opp_c w_opp_carry w_sub_c w_opp w_sub w_sub_carry w_digits w_to_Z ZnZ.spec_0 ZnZ.spec_to_Z ZnZ.spec_WW ZnZ.spec_opp_c ZnZ.spec_opp ZnZ.spec_opp_carry ZnZ.spec_sub_c ZnZ.spec_sub ZnZ.spec_sub_carry. Theorem zp1_b: [[zp1]] = Zpos p1. change ([[DoubleSub.ww_sub w0 wWW w_opp_c w_opp_carry w_sub_c w_opp w_sub w_sub_carry ww_zdigits (WW w0 zp)]] = Zpos p1). rewrite spec_ww_sub. rewrite spec_ww_digits; simpl ww_to_Z. change (w_to_Z w0) with [|w0|]. unfold w0; rewrite ZnZ.spec_0; autorewrite with rm10. change (w_to_Z zp) with [|zp|]. rewrite zp_b. rewrite Zmod_small. rewrite <- p_p1; ring. unfold ww_digits; split. rewrite <- p_p1. assert (0 < Zpos p1); auto with zarith. apply Z.le_lt_trans with (Zpos (xO w_digits)). assert (0 < Zpos p); auto with zarith. unfold base; apply Zpower2_lt_lin; auto with zarith. Qed. Hypothesis p_b: [|b|] = 2 ^ (Zpos p) - 1. Let w_pos_mod := ZnZ.pos_mod. Let add_mul_div := DoubleLift.ww_add_mul_div w0 wWW wW0 w0W ww_compare w_add_mul_div ww_sub w_zdigits low. Let _mmul_mod x y := let xy := w_mul_c x y in match xy with W0 => w0 | WW xh xl => let xl1 := w_pos_mod zp xl in match add_mul_div zp1 W0 xy with W0 => match w_compare xl1 b with | Lt => xl1 | Eq => w0 | Gt => w1 end | WW _ xl2 => _add_mod xl1 xl2 end end. Hint Unfold w_digits : core. Lemma WW_0: forall x y, [[WW x y]] = 0 -> [|x|] = 0 /\ [|y|] =0. intros x y; simpl; case (ZnZ.spec_to_Z x); intros H1 H2; case (ZnZ.spec_to_Z y); intros H3 H4 H5. case Zle_lt_or_eq with (1 := H1); clear H1; intros H1. absurd (0 < [|x|] * base (ZnZ.digits w_op) + [|y|]). unfold w_to_Z, w_digits in H5;auto with zarith. match goal with |- _ < ?X + _ => apply Z.lt_le_trans with X; auto with zarith end. case Zle_lt_or_eq with (1 := H3); clear H3; intros H3. 2: auto with zarith. absurd (0 < [|x|] * base (ZnZ.digits w_op) + [|y|]). unfold w_to_Z, w_digits in H5; auto with zarith. rewrite <- H1; rewrite Zmult_0_l; auto with zarith. Qed. Theorem WW0_is_0: [[W0]] = 0. simpl; auto. Qed. Hint Rewrite WW0_is_0: w_rewrite. Theorem mmul_aux0: Zpos (xO w_digits) - Zpos p1 = Zpos p. unfold w_digits. apply trans_equal with (Zpos p + Zpos p1 - Zpos p1). rewrite p_p1; auto with zarith. auto with zarith. Qed. Theorem mmul_aux1: 2 ^ Zpos w_digits = 2 ^ (Zpos w_digits - Zpos p) * 2 ^ Zpos p. rewrite <- Zpower_exp; auto with zarith. eq_tac; auto with zarith. Qed. Theorem mmul_aux2:forall x, x mod (2 ^ Zpos p - 1) = ((x / 2 ^ Zpos p) + (x mod 2 ^ Zpos p)) mod (2 ^ Zpos p - 1). intros x; pattern x at 1; rewrite Z_div_mod_eq_full with (b := 2 ^ Zpos p). match goal with |- (?X * ?Y + ?Z) mod (?X - 1) = ?T => replace (X * Y + Z) with (Y * (X - 1) + (Y + Z)); try ring end. rewrite Zplus_mod; auto with zarith. rewrite Z_mod_mult; auto with zarith. rewrite Zplus_0_l. rewrite Zmod_mod; auto with zarith. Qed. Theorem mmul_aux3:forall xh xl, [[WW xh xl]] mod (2 ^ Zpos p) = [|xl|] mod (2 ^ Zpos p). intros xh xl; simpl ww_to_Z; unfold base. rewrite Zplus_mod; auto with zarith. generalize mmul_aux1; unfold w_digits; intros tmp; rewrite tmp; clear tmp. rewrite Zmult_assoc. rewrite Z_mod_mult; auto with zarith. rewrite Zplus_0_l; apply Zmod_mod; auto with zarith. Qed. Let spec_low: forall x, [|low x|] = [[x]] mod base w_digits. intros x; case x; simpl low; auto with zarith. intros xh xl; simpl. rewrite Zplus_comm; rewrite Z_mod_plus; auto with zarith. rewrite Zmod_small; auto with zarith. case (ZnZ.spec_to_Z xl); auto with zarith. unfold base; auto with zarith. Qed. Theorem mmul_aux4:forall x, [[x]] < [|b|] * 2 ^ Zpos p -> match add_mul_div zp1 W0 x with W0 => 0 | WW _ xl2 => [|xl2|] end = [[x]] / 2 ^ Zpos p. intros x Hx. assert (Hp: [[zp1]] <= Zpos (xO w_digits)). rewrite zp1_b; rewrite <- p_p1. assert (0 <= Zpos p); auto with zarith. generalize (@DoubleLift.spec_ww_add_mul_div w w0 wWW wW0 w0W ww_compare w_add_mul_div ww_sub w_digits w_zdigits low w_to_Z ZnZ.spec_0 ZnZ.spec_to_Z spec_ww_to_Z ZnZ.spec_WW ZnZ.spec_WO ZnZ.spec_OW spec_ww_compare ZnZ.spec_add_mul_div spec_ww_sub ZnZ.spec_zdigits spec_low W0 x zp1 Hp). unfold add_mul_div; case DoubleLift.ww_add_mul_div; autorewrite with w_rewrite. rewrite Zmult_0_l; rewrite Zplus_0_l. rewrite zp1_b. generalize mmul_aux0; unfold w_digits; intros tmp; rewrite tmp. rewrite Zmod_small. auto with zarith. split. apply Z_div_pos. auto with zarith. case (spec_ww_to_Z x); auto with zarith. unfold base. apply Zdiv_lt_upper_bound. auto with zarith. rewrite <- Zpower_exp by auto with zarith. apply Z.lt_le_trans with (base (ww_digits (ZnZ.digits w_op))). case (spec_ww_to_Z x); auto with zarith. unfold base; apply Zpower_le_monotone. auto with zarith. split. auto with zarith. assert (0 < Zpos p); auto with zarith. intros w2 w3; rewrite Zmult_0_l; rewrite Zplus_0_l. rewrite zp1_b. generalize mmul_aux0; unfold w_digits; intros tmp; rewrite tmp; clear tmp. simpl ww_to_Z; rewrite Zmod_small. intros H1; generalize (high_zero (WW w2 w3)); unfold w_digits;intros tmp; simpl fst in tmp; simpl ww_to_Z in tmp. unfold w_to_Z in *. rewrite tmp in H1. auto with zarith. clear tmp. simpl ww_to_Z; rewrite H1; apply Zdiv_lt_upper_bound. auto with zarith. unfold base; rewrite <- Zpower_exp by auto with zarith. apply Z.lt_le_trans with (1 := Hx). apply Z.le_trans with (2 ^ Zpos p * 2 ^ Zpos p). rewrite p_b; apply Zmult_le_compat_r; auto with zarith. rewrite <- Zpower_exp by auto with zarith. apply Zpower_le_monotone; auto with zarith. split. apply Z_div_pos. auto with zarith. case (spec_ww_to_Z x); auto with zarith. unfold base. apply Zdiv_lt_upper_bound. auto with zarith. rewrite <- Zpower_exp by auto with zarith. apply Z.lt_le_trans with (base (ww_digits (ZnZ.digits w_op))). case (spec_ww_to_Z x); auto with zarith. unfold base; apply Zpower_le_monotone. auto with zarith. split. auto with zarith. assert (0 < Zpos p); auto with zarith. Qed. Theorem mmul_aux5:forall xh xl, [[WW xh xl]] < [|b|] * 2 ^ Zpos p -> let xl1 := w_pos_mod zp xl in let r := match add_mul_div zp1 W0 (WW xh xl) with W0 => match w_compare xl1 b with | Lt => xl1 | Eq => w0 | Gt => w1 end | WW _ xl2 => _add_mod xl1 xl2 end in [|r|] = [[WW xh xl]] mod [|b|]. intros xh xl Hx xl1 r; unfold r; clear r. generalize (mmul_aux4 _ Hx). simpl ww_to_Z; rewrite p_b. rewrite mmul_aux2. assert (Hp: [[zp1]] <= Zpos (xO w_digits)); auto with zarith. rewrite zp1_b; rewrite <- p_p1; auto with zarith. assert (0 <= Zpos p); auto with zarith. generalize (@DoubleLift.spec_ww_add_mul_div w w0 wWW wW0 w0W ww_compare w_add_mul_div ww_sub w_digits w_zdigits low w_to_Z ZnZ.spec_0 ZnZ.spec_to_Z spec_ww_to_Z ZnZ.spec_WW ZnZ.spec_WO ZnZ.spec_OW spec_ww_compare ZnZ.spec_add_mul_div spec_ww_sub ZnZ.spec_zdigits spec_low W0 (WW xh xl) zp1 Hp). unfold add_mul_div; case DoubleLift.ww_add_mul_div; autorewrite with w_rewrite; auto. rewrite Zmult_0_l; rewrite Zplus_0_l. rewrite zp1_b. generalize mmul_aux0; unfold w_digits; intros tmp; rewrite tmp; clear tmp. intros H1 H2. rewrite <- H2. rewrite Zplus_0_l. generalize mmul_aux3; simpl ww_to_Z; intros tmp; rewrite tmp; clear tmp; auto with zarith. unfold xl1; unfold w_pos_mod. rewrite <- p_b; rewrite <- zp_b. rewrite <- ZnZ.spec_pos_mod; auto with zarith. unfold w_compare; rewrite ZnZ.spec_compare; case Z.compare_spec; intros Hc; match goal with H: context[b] |- _ => generalize H; clear H end; try rewrite _w0_is_0. intros H3; rewrite H3. rewrite Z_mod_same; auto with zarith. intros H3; rewrite Zmod_small; auto with zarith. case (ZnZ.spec_to_Z (ZnZ.pos_mod zp xl)); unfold w_to_Z; auto with zarith. rewrite p_b; rewrite ZnZ.spec_pos_mod; auto with zarith. intros H3; assert (HH: [|xl|] mod 2 ^ Zpos p = 2 ^ Zpos p). apply Zle_antisym; auto with zarith. case (Z_mod_lt ([|xl|]) (2 ^ Zpos p)); auto with zarith. rewrite zp_b in H3; auto with zarith. rewrite zp_b; rewrite HH. rewrite <- Zmod_minus_one; auto with zarith. rewrite _w1_is_1; rewrite Zmod_small; auto with zarith. rewrite Zmult_0_l; rewrite Zplus_0_l. rewrite zp1_b. generalize mmul_aux0; unfold w_digits; intros tmp; rewrite tmp; clear tmp. intros w2 w3 H1 H2; rewrite <- H2. generalize mmul_aux3; simpl ww_to_Z; intros tmp; rewrite tmp; clear tmp; auto with zarith. rewrite <- p_b; rewrite <- zp_b. rewrite <- ZnZ.spec_pos_mod; auto with zarith. unfold xl1; unfold w_pos_mod. rewrite Zplus_comm. apply _add_mod_correct; auto with zarith. assert (tmp: forall x, 2 * x = x + x); auto with zarith; rewrite tmp; apply Zplus_le_lt_compat; clear tmp; auto with zarith. rewrite ZnZ.spec_pos_mod; auto with zarith. rewrite p_b; case (Z_mod_lt [|xl|] (2 ^ Zpos p)); auto with zarith. rewrite zp_b; auto with zarith. rewrite H2; apply Zdiv_lt_upper_bound; auto with zarith. Qed. Lemma _mmul_mod_spec: forall w1 w2 t1 t2, [|w1|] = t1 mod [|b|] -> [|w2|] = t2 mod [|b|] -> [|_mmul_mod w1 w2|] = ([|w1|] * [|w2|]) mod [|b|]. intros w2 w3 t1 t2; unfold _mmul_mod, w_mul_c; intros H H1. assert (F: [|w2|] < [|b|]). case (Z_mod_lt t1 [|b|]); auto with zarith. assert (F': [|w3|] < [|b|]). case (Z_mod_lt t2 [|b|]); auto with zarith. match goal with |- context[ZnZ.mul_c ?x ?y] => generalize (ZnZ.spec_mul_c x y); unfold interp_carry; case (ZnZ.mul_c x y); autorewrite with w_rewrite end; auto with zarith. simpl; intros H2; rewrite <- H2; rewrite Zmod_small; auto with zarith. intros w4 w5 H2. rewrite mmul_aux5; auto with zarith. rewrite <- H2; auto. unfold ww_to_Z,w_digits,w_to_Z; rewrite H2. apply Zmult_lt_compat; auto with zarith. case (ZnZ.spec_to_Z w2); auto with zarith. case (ZnZ.spec_to_Z w3); auto with zarith. Qed. Let _msquare_mod x := let xy := w_square_c x in match xy with W0 => w0 | WW xh xl => let xl1 := w_pos_mod zp xl in match add_mul_div zp1 W0 xy with W0 => match w_compare xl1 b with | Lt => xl1 | Eq => w0 | Gt => w1 end | WW _ xl2 => _add_mod xl1 xl2 end end. Lemma _msquare_mod_spec: forall w1 t1, [|w1|] = t1 mod [|b|] -> [|_msquare_mod w1|] = ([|w1|] * [|w1|]) mod [|b|]. intros w2 t2; unfold _msquare_mod, w_square_c; intros H. assert (F: [|w2|] < [|b|]). case (Z_mod_lt t2 [|b|]); auto with zarith. match goal with |- context[ZnZ.square_c ?x] => generalize (ZnZ.spec_square_c x); unfold interp_carry; case (ZnZ.square_c x); autorewrite with w_rewrite end; auto with zarith. simpl; intros H2; rewrite <- H2; rewrite Zmod_small; auto with zarith. intros w4 w5 H2. rewrite mmul_aux5; auto with zarith. unfold ww_to_Z, w_to_Z ,w_digits; rewrite <- H2; auto. unfold ww_to_Z,w_to_Z ,w_digits; rewrite H2. apply Zmult_lt_compat; auto with zarith. case (ZnZ.spec_to_Z w2); auto with zarith. case (ZnZ.spec_to_Z w2); auto with zarith. Qed. Definition mmake_mod_op := mk_mod_op _succ_mod _add_mod _pred_mod _sub_mod _mmul_mod _msquare_mod _power_mod. Definition mmake_mod_spec: mod_spec mmake_mod_op. apply mk_mod_spec. exact _succ_mod_spec. exact _add_mod_spec. exact _pred_mod_spec. exact _sub_mod_spec. exact _mmul_mod_spec. exact _msquare_mod_spec. exact _power_mod_spec. Defined. End Mod_op. coqprime-8.18/src/Coqprime/num/NEll.v000066400000000000000000000740761451023060700174730ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Require Import ZArith Znumtheory Zpow_facts. Require Import CyclicAxioms Cyclic63 Int63Compat. From Bignums Require Import DoubleCyclic BigN. Require Import W. Require Import Mod_op. Require Import ZEll. Require Import Bits. Import CyclicAxioms DoubleType DoubleBase. Require Import Zmod. Set Implicit Arguments. Open Scope Z_scope. Record ex: Set := mkEx { vN : positive; vS : positive; vR: List.list (positive * positive); vA: Z; vB: Z; vx: Z; vy: Z }. Local Coercion Zpos : positive >-> Z. Record ex_spec (exx: ex): Prop := mkExS { n2_div: ~(2 | exx.(vN)); n_pos: 2 < exx.(vN); lprime: forall p : positive * positive, List.In p (vR exx) -> prime (fst p); lbig: 4 * vN exx < (Zmullp (vR exx) - 1) ^ 2; inC: vy exx ^ 2 mod vN exx = (vx exx ^ 3 + vA exx * vx exx + vB exx) mod vN exx }. Section NEll. Variable exx: ex. Variable exxs: ex_spec exx. Variable zZ: univ_of_cycles. Variable op: ZnZ.Ops zZ. Variable op_spec: ZnZ.Specs op. Definition z2Z z := ZnZ.to_Z z. Definition zN := snd (ZnZ.of_pos exx.(vN)). Variable mop: mod_op zZ. Variable mop_spec: mod_spec op zN mop. Variable N_small: exx.(vN) < base (ZnZ.digits op). Lemma z2ZN: z2Z zN = exx.(vN). apply (@ZnZ.of_Z_correct _ _ op_spec exx.(vN)); split; auto with zarith. Qed. Definition Z2z z := match z mod exx.(vN) with | Zpos p => snd (ZnZ.of_pos p) | _ => ZnZ.zero end. Definition S := exx.(vS). Definition R := exx.(vR). Definition A := Z2z exx.(vA). Definition B := Z2z exx.(vB). Definition xx := Z2z exx.(vx). Definition yy := Z2z exx.(vy). Definition c3 := Z2z 3. Definition c2 := Z2z 2. Definition c1 := Z2z 1. Definition c0 := Z2z 0. Inductive nelt: Type := nzero | ntriple: zZ -> zZ -> zZ -> nelt. Definition pp := ntriple xx yy c1. Definition nplus x y := mop.(add_mod) x y. Definition nmul x y := mop.(mul_mod) x y. Definition nsub x y := mop.(sub_mod) x y. Definition neq x y := match ZnZ.compare x y with Eq => true | _ => false end. Notation "x ++ y " := (nplus x y). Notation "x -- y" := (nsub x y) (at level 50, left associativity). Notation "x ** y" := (nmul x y) (at level 40, left associativity). Notation "x ?= y" := (neq x y). Definition ndouble: zZ -> nelt -> (nelt * zZ):= fun (sc: zZ) (p1: nelt) => match p1 with nzero => (p1, sc) | (ntriple x1 y1 z1) => if (y1 ?= c0) then (nzero, z1 ** sc) else (* we do 2p *) let m' := c3 ** x1 ** x1 ++ A ** z1 ** z1 in let l' := c2 ** y1 ** z1 in let m'2 := m' ** m' in let l'2 := l' ** l' in let l'3 := l'2 ** l' in let x3 := m'2 ** z1 -- c2 ** x1 ** l'2 in (ntriple (l' ** x3) (l'2 ** (m' ** x1 -- y1 ** l') -- m' ** x3) (z1 ** l'3), sc) end. Definition nadd := fun (sc: zZ) (p1 p2: nelt) => match p1, p2 with nzero, _ => (p2, sc) | _ , nzero => (p1, sc) | (ntriple x1 y1 z1), (ntriple x2 y2 z2) => let d1 := x2 ** z1 in let d2 := x1 ** z2 in let l := d1 -- d2 in let dl := d1 ++ d2 in let m := y2 ** z1 -- y1 ** z2 in if (l ?= c0) then (* we have p1 = p2 o p1 = -p2 *) if (m ?= c0) then if (y1 ?= c0) then (nzero, z1 ** z2 ** sc) else (* we do 2p *) let m' := c3 ** x1 ** x1 ++ A ** z1 ** z1 in let l' := c2 ** y1 ** z1 in let m'2 := m' ** m' in let l'2 := l' ** l' in let l'3 := l'2 ** l' in let x3 := m'2 ** z1 -- c2 ** x1 ** l'2 in (ntriple (l' ** x3) (l'2 ** (m' ** x1 -- y1 ** l') -- m' ** x3) (z1 ** l'3), z2 ** sc) else (* p - p *) (nzero, m ** z1 ** z2 ** sc) else let l2 := l ** l in let l3 := l2 ** l in let m2 := m ** m in let x3 := z1 ** z2 ** m2 -- l2 ** dl in (ntriple (l ** x3) (z2 ** l2 ** (m ** x1 -- y1 ** l) -- m ** x3) (z1 ** z2 ** l3), sc) end. Definition nopp p := match p with nzero => p | (ntriple x1 y1 z1) => (ntriple x1 (c0 -- y1) z1) end. Fixpoint scalb (sc: zZ) (b:bool) (a: nelt) (p: positive) {struct p}: nelt * zZ := match p with xH => if b then ndouble sc a else (a,sc) | xO p1 => let (a1, sc1) := scalb sc false a p1 in if b then let (a2, sc2) := ndouble sc1 a1 in nadd sc2 a a2 else ndouble sc1 a1 | xI p1 => let (a1, sc1) := scalb sc true a p1 in if b then ndouble sc1 a1 else let (a2, sc2) := ndouble sc1 a1 in nadd sc2 (nopp a) a2 end. Definition scal sc a p := scalb sc false a p. Definition scal_list sc a l := List.fold_left (fun (asc: nelt * zZ) p1 => let (a,sc) := asc in scal sc a p1) l (a,sc). Fixpoint scalL (sc:zZ) (a: nelt) (l: List.list positive) {struct l}: (nelt * zZ) := match l with List.nil => (a,sc) | List.cons n l1 => let (a1, sc1) := scal sc a n in let (a2, sc2) := scal_list sc1 a l1 in match a2 with nzero => (nzero, c0) | ntriple _ _ z => scalL (sc2 ** z) a1 l1 end end. Definition zpow sc p n := let (p,sc') := scal sc p n in (p, ZnZ.to_Z (ZnZ.gcd sc' zN)). Definition e2E n := match n with nzero => ZEll.nzero | ntriple x1 y1 z1 => ZEll.ntriple (z2Z x1) (z2Z y1) (z2Z z1) end. Definition wft t := z2Z t = (z2Z t) mod (z2Z zN). Lemma vN_pos: 0 < exx.(vN). red; simpl; auto. Qed. Hint Resolve vN_pos : core. Lemma nplusz: forall x y, wft x -> wft y -> z2Z (x ++ y) = ZEll.nplus (vN exx) (z2Z x) (z2Z y). Proof. intros x y Hx Hy. unfold z2Z, nplus. rewrite (mop_spec.(add_mod_spec) _ _ _ _ Hx Hy); auto. rewrite <- z2ZN; auto. Qed. Lemma nplusw: forall x y, wft x -> wft y -> wft (x ++ y). Proof. intros x y Hx Hy. unfold wft. pattern (z2Z (x ++ y)) at 2; rewrite (nplusz Hx Hy). unfold ZEll.nplus; rewrite z2ZN. rewrite Zmod_mod; auto. apply (nplusz Hx Hy). Qed. Lemma nsubz: forall x y, wft x -> wft y -> z2Z (x -- y) = ZEll.nsub (vN exx) (z2Z x) (z2Z y). Proof. intros x y Hx Hy. unfold z2Z, nsub. rewrite (mop_spec.(sub_mod_spec) _ _ _ _ Hx Hy); auto. rewrite <- z2ZN; auto. Qed. Lemma nsubw: forall x y, wft x -> wft y -> wft (x -- y). Proof. intros x y Hx Hy. unfold wft. pattern (z2Z (x -- y)) at 2; rewrite (nsubz Hx Hy). unfold ZEll.nsub; rewrite z2ZN. rewrite Zmod_mod; auto. apply (nsubz Hx Hy). Qed. Lemma nmulz: forall x y, wft x -> wft y -> z2Z (x ** y) = ZEll.nmul (vN exx) (z2Z x) (z2Z y). Proof. intros x y Hx Hy. unfold z2Z, nmul. rewrite (mop_spec.(mul_mod_spec) _ _ _ _ Hx Hy); auto. rewrite <- z2ZN; auto. Qed. Lemma nmulw: forall x y, wft x -> wft y -> wft (x ** y). Proof. intros x y Hx Hy. unfold wft. pattern (z2Z (x ** y)) at 2; rewrite (nmulz Hx Hy). unfold ZEll.nmul; rewrite z2ZN. rewrite Zmod_mod; auto. apply (nmulz Hx Hy). Qed. Hint Resolve nmulw nplusw nsubw : core. Definition wfe p := match p with ntriple x y z => wft x /\ wft y /\ wft z | _ => True end. Lemma z2Zx: forall x, z2Z (Z2z x) = x mod exx.(vN). unfold Z2z; intros x. generalize (Z_mod_lt x exx.(vN)). case_eq (x mod exx.(vN)). intros _ _. simpl; unfold z2Z; rewrite ZnZ.spec_0; auto. intros p Hp HH; case HH. auto with zarith. clear HH. intros _ HH1. case (ZnZ.spec_to_Z zN). generalize z2ZN; unfold z2Z; intros HH; rewrite HH. intros _ H0. set (v := ZnZ.of_pos p); generalize HH1. rewrite (ZnZ.spec_of_pos p); fold v. case (fst v). simpl; auto. intros p1 H1. contradict H0; apply Zle_not_lt. apply Zlt_le_weak; apply Z.le_lt_trans with (2:= H1). apply Z.le_trans with (1 * base (ZnZ.digits op) + 0). auto with zarith. apply Zplus_le_compat. apply Zmult_gt_0_le_compat_r. case (ZnZ.spec_to_Z (snd v)); auto with zarith. case p1; red; simpl; intros; discriminate. case (ZnZ.spec_to_Z (snd v)); auto with zarith. intros p Hp; case (Z_mod_lt x exx.(vN)). auto with zarith. rewrite Hp; intros HH; case HH; auto. Qed. Lemma z2Zx1: forall x, z2Z (Z2z x) = z2Z (Z2z x) mod z2Z zN. Proof. unfold Z2z; intros x. generalize (Z_mod_lt x exx.(vN)). case_eq (x mod exx.(vN)). intros _ _. simpl; unfold z2Z; rewrite ZnZ.spec_0; auto. intros p H1 H2. case (ZnZ.spec_to_Z zN). generalize z2ZN; unfold z2Z; intros HH; rewrite HH. intros _ H0. case H2; auto with zarith; clear H2; intros _ H2. rewrite Zmod_small. reflexivity. set (v := ZnZ.of_pos p). split. case (ZnZ.spec_to_Z (snd v)); auto. generalize H2; rewrite (ZnZ.spec_of_pos p); fold v. case (fst v). simpl; auto. intros p1 H. contradict H0; apply Zle_not_lt. apply Zlt_le_weak; apply Z.le_lt_trans with (2:= H). apply Z.le_trans with (1 * base (ZnZ.digits op) + 0). auto with zarith. apply Zplus_le_compat. apply Zmult_gt_0_le_compat_r. case (ZnZ.spec_to_Z (snd v)); auto with zarith. case p1; red; simpl; intros; discriminate. case (ZnZ.spec_to_Z (snd v)); auto with zarith. intros p Hp; case (Z_mod_lt x exx.(vN)). auto with zarith. rewrite Hp; intros HH; case HH; auto. Qed. Lemma c0w: wft c0. Proof. red; unfold c0; apply z2Zx1. Qed. Lemma c2w: wft c2. Proof. red; unfold c2; apply z2Zx1. Qed. Lemma c3w: wft c3. Proof. red; unfold c3; apply z2Zx1. Qed. Lemma Aw: wft A. Proof. red; unfold A; apply z2Zx1. Qed. Hint Resolve c0w c2w c3w Aw : core. Ltac nw := repeat (apply nplusw || apply nsubw || apply nmulw || apply c2w || apply c3w || apply Aw); auto. Lemma nadd_wf: forall x y sc, wfe x -> wfe y -> wft sc -> wfe (fst (nadd sc x y)) /\ wft (snd (nadd sc x y)). Proof. intros x; case x; clear x; auto. intros x1 y1 z1 y; case y; clear y; auto. intros x2 y2 z2 sc (wfx1,(wfy1, wfz1)) (wfx2,(wfy2, wfz2)) wfsc; simpl; auto. case neq. 2: repeat split; simpl; nw. case neq. 2: repeat split; simpl; nw. case neq. repeat split; simpl; nw; auto. repeat split; simpl; nw; auto. Qed. Lemma ztest: forall x y, x ?= y =Zeq_bool (z2Z x) (z2Z y). Proof. intros x y. unfold neq. rewrite (ZnZ.spec_compare x y); case Z.compare_spec; intros HH; match goal with H: context[x] |- _ => generalize H; clear H; intros HH1 end. symmetry; apply GZnZ.Zeq_iok; auto. case_eq (Zeq_bool (z2Z x) (z2Z y)); intros H1; auto; generalize HH1; generalize (Zeq_bool_eq _ _ H1); unfold z2Z; intros HH; rewrite HH; auto with zarith. case_eq (Zeq_bool (z2Z x) (z2Z y)); intros H1; auto; generalize HH1; generalize (Zeq_bool_eq _ _ H1); unfold z2Z; intros HH; rewrite HH; auto with zarith. Qed. Lemma zc0: z2Z c0 = 0. Proof. unfold z2Z, c0, z2Z; simpl. generalize ZnZ.spec_0; auto. Qed. Ltac iftac t := match t with context[if ?x ?= ?y then _ else _] => case_eq (x ?= y) end. Ltac ftac := match goal with |- context[?x = ?y] => (iftac x); let H := fresh "tmp" in (try rewrite ztest; try rewrite zc0; intros H; repeat ((rewrite nmulz in H || rewrite nplusz in H || rewrite nsubz in H); auto); try (rewrite H; clear H)) end. Lemma c2ww: forall x, ZEll.nmul (vN exx) 2 x = ZEll.nmul (vN exx) (z2Z c2) x. intros x; unfold ZEll.nmul. unfold c2; rewrite z2Zx; rewrite Zmodml; auto. Qed. Lemma c3ww: forall x, ZEll.nmul (vN exx) 3 x = ZEll.nmul (vN exx) (z2Z c3) x. intros x; unfold ZEll.nmul. unfold c3; rewrite z2Zx; rewrite Zmodml; auto. Qed. Lemma Aww: forall x, ZEll.nmul (vN exx) exx.(vA) x = ZEll.nmul (vN exx) (z2Z A) x. intros x; unfold ZEll.nmul. unfold A; rewrite z2Zx; rewrite Zmodml; auto. Qed. Lemma nadd_correct: forall x y sc, wfe x -> wfe y -> wft sc -> e2E (fst (nadd sc x y)) = fst (ZEll.nadd exx.(vN) exx.(vA) (z2Z sc) (e2E x) (e2E y) )/\ z2Z (snd (nadd sc x y)) = snd (ZEll.nadd exx.(vN) exx.(vA) (z2Z sc) (e2E x) (e2E y)). Proof. intros x; case x; clear x; auto. intros x1 y1 z1 y; case y; clear y; auto. intros x2 y2 z2 sc (wfx1,(wfy1, wfz1)) (wfx2,(wfy2, wfz2)) wfsc; simpl. ftac. ftac. ftac. simpl; split; auto. repeat ((rewrite nmulz || rewrite nplusz || rewrite nsubz); auto). simpl; split; auto. repeat ((rewrite nmulz || rewrite nplusz || rewrite nsubz|| rewrite c2ww || rewrite c3ww || rewrite Aww); try nw; auto). rewrite nmulz; auto. simpl; split; auto. repeat ((rewrite nmulz || rewrite nplusz || rewrite nsubz); auto). simpl; split; auto. repeat ((rewrite nmulz || rewrite nplusz || rewrite nsubz || rewrite c2ww || rewrite c3ww || rewrite Aww); try nw; auto). Qed. Lemma ndouble_wf: forall x sc, wfe x -> wft sc -> wfe (fst (ndouble sc x)) /\ wft (snd (ndouble sc x)). Proof. intros x; case x; clear x; auto. intros x1 y1 z1 sc (wfx1,(wfy1, wfz1)) wfsc; simpl; auto. repeat (case neq; repeat split; simpl; nw; auto). Qed. Lemma ndouble_correct: forall x sc, wfe x -> wft sc -> e2E (fst (ndouble sc x)) = fst (ZEll.ndouble exx.(vN) exx.(vA) (z2Z sc) (e2E x))/\ z2Z (snd (ndouble sc x)) = snd (ZEll.ndouble exx.(vN) exx.(vA) (z2Z sc) (e2E x)). Proof. intros x; case x; clear x; auto. intros x1 y1 z1 sc (wfx1,(wfy1, wfz1)) wfsc; simpl. ftac. simpl; split; auto. repeat ((rewrite nmulz || rewrite nplusz || rewrite nsubz); auto). simpl; split; auto. repeat ((rewrite nmulz || rewrite nplusz || rewrite nsubz || rewrite c2ww || rewrite c3ww || rewrite Aww); try nw; auto). Qed. Lemma nopp_wf: forall x, wfe x -> wfe (nopp x). Proof. intros x; case x; simpl nopp; auto. intros x1 y1 z1 [H1 [H2 H3]]; repeat split; auto. Qed. Lemma scalb_wf: forall n b x sc, wfe x -> wft sc -> wfe (fst (scalb sc b x n)) /\ wft (snd (scalb sc b x n)). Proof. intros n; elim n; unfold scalb; fold scalb; auto. intros n1 Hrec b x sc H H1. case (Hrec true x sc H H1). case scalb; simpl fst; simpl snd. intros a1 sc1 H2 H3. case (ndouble_wf _ H2 H3); auto; case ndouble; simpl fst; simpl snd; intros x2 sc2 H4 H5. case b; auto. case (nadd_wf _ _ (nopp_wf _ H) H4 H5); auto; case ndouble; simpl fst; simpl snd; intros x2 sc2 H4 H5. intros n1 Hrec b x sc H H1. case (Hrec false x sc H H1). case scalb; simpl fst; simpl snd. intros a1 sc1 H2 H3. case (ndouble_wf _ H2 H3); auto; case ndouble; simpl fst; simpl snd; intros x2 sc2 H4 H5. case b; auto. case (nadd_wf _ _ H H4 H5); auto; case ndouble; simpl fst; simpl snd; intros x2 sc2 H4 H5. intros b x sc H H1; case b; auto. case (ndouble_wf _ H H1); auto. Qed. Lemma scal_wf: forall n x sc, wfe x -> wft sc -> wfe (fst (scal sc x n)) /\ wft (snd (scal sc x n)). Proof. intros n; exact (scalb_wf n false). Qed. Lemma nopp_correct: forall x, wfe x -> e2E x = ZEll.nopp exx.(vN) (e2E (nopp x)). Proof. intros x; case x; simpl; auto. intros x1 y1 z1 [H1 [H2 H3]]; apply f_equal3 with (f := ZEll.ntriple); auto. rewrite nsubz; auto. rewrite zc0. unfold ZEll.nsub, ninv; simpl. apply sym_equal. rewrite <- (Z_mod_plus) with (b := -(-z2Z y1 /exx.(vN))); auto with zarith. rewrite <- Zopp_mult_distr_l. rewrite <- Zopp_plus_distr. rewrite Zmult_comm; rewrite Zplus_comm. rewrite <- Z_div_mod_eq_full. rewrite Z.opp_involutive; rewrite <- z2ZN. apply sym_equal; auto. Qed. Lemma scalb_correct: forall n b x sc, wfe x -> wft sc -> e2E (fst (scalb sc b x n)) = fst (ZEll.scalb exx.(vN) exx.(vA) (z2Z sc) b (e2E x) n)/\ z2Z (snd (scalb sc b x n)) = snd (ZEll.scalb exx.(vN) exx.(vA) (z2Z sc) b (e2E x) n). Proof. intros n; elim n; clear n; auto. intros p Hrec b x sc H1 H2. case b; unfold scalb; fold scalb. generalize (scalb_wf p true x H1 H2); generalize (Hrec true _ _ H1 H2); case scalb; simpl. case ZEll.scalb; intros r1 rc1; simpl. intros a2 sc2 (H3, H4) (H5, H6); subst r1 rc1. apply ndouble_correct; auto. generalize (scalb_wf p true x H1 H2); generalize (Hrec true _ _ H1 H2); case scalb; simpl. case ZEll.scalb; intros r1 rc1; simpl. intros a2 sc2 (H3, H4) (H5, H6); subst r1 rc1. generalize (ndouble_wf _ H5 H6); generalize (ndouble_correct _ H5 H6); case ndouble; simpl. case ZEll.ndouble; intros r1 rc1; simpl. intros a3 sc3 (H7,H8) (H9,H10); subst r1 rc1. replace (ZEll.nopp (vN exx) (e2E x)) with (e2E (nopp x)). apply nadd_correct; auto. generalize H1; case x; auto. intros x1 y1 z1 [HH1 [HH2 HH3]]; split; auto. rewrite nopp_correct; auto. apply f_equal2 with (f := ZEll.nopp); auto. generalize H1; case x; simpl; auto; clear x H1. intros x1 y1 z1 [HH1 [HH2 HH3]]; apply f_equal3 with (f := ZEll.ntriple); auto. repeat rewrite nsubz; auto. rewrite zc0. unfold ZEll.nsub; simpl. rewrite <- (Z_mod_plus) with (b := -(-z2Z y1 /exx.(vN))); auto with zarith. rewrite <- Zopp_mult_distr_l. rewrite <- Zopp_plus_distr. rewrite Zmult_comm; rewrite Zplus_comm. rewrite <- Z_div_mod_eq_full. rewrite Z.opp_involutive; rewrite <- z2ZN. apply sym_equal; auto. generalize H1; case x; auto. intros x1 y1 z1 [HH1 [HH2 HH3]]; split; auto. intros p Hrec b x sc H1 H2. case b; unfold scalb; fold scalb. generalize (scalb_wf p false x H1 H2); generalize (Hrec false _ _ H1 H2); case scalb; simpl. case ZEll.scalb; intros r1 rc1; simpl. intros a2 sc2 (H3, H4) (H5, H6); subst r1 rc1. generalize (ndouble_wf _ H5 H6); generalize (ndouble_correct _ H5 H6); case ndouble; simpl. case ZEll.ndouble; intros r1 rc1; simpl. intros a3 sc3 (H7,H8) (H9,H10); subst r1 rc1. replace (ZEll.nopp (vN exx) (e2E x)) with (e2E (nopp x)). apply nadd_correct; auto. rewrite nopp_correct; auto. apply f_equal2 with (f := ZEll.nopp); auto. generalize H1; case x; simpl; auto; clear x H1. intros x1 y1 z1 [HH1 [HH2 HH3]]; apply f_equal3 with (f := ZEll.ntriple); auto. repeat rewrite nsubz; auto. rewrite zc0. unfold ZEll.nsub; simpl. rewrite <- (Z_mod_plus) with (b := -(-z2Z y1 /exx.(vN))); auto with zarith. rewrite <- Zopp_mult_distr_l. rewrite <- Zopp_plus_distr. rewrite Zmult_comm; rewrite Zplus_comm. rewrite <- Z_div_mod_eq_full. rewrite Z.opp_involutive; rewrite <- z2ZN. apply sym_equal; auto. generalize H1; case x; auto. intros x1 y1 z1 [HH1 [HH2 HH3]]; split; auto. generalize (scalb_wf p false x H1 H2); generalize (Hrec false _ _ H1 H2); case scalb; simpl. case ZEll.scalb; intros r1 rc1; simpl. intros a2 sc2 (H3, H4) (H5, H6); subst r1 rc1. apply ndouble_correct; auto. intros b x sc H H1. case b; simpl; auto. apply ndouble_correct; auto. Qed. Lemma scal_correct: forall n x sc, wfe x -> wft sc -> e2E (fst (scal sc x n)) = fst (ZEll.scal exx.(vN) exx.(vA) (z2Z sc) (e2E x) n)/\ z2Z (snd (scal sc x n)) = snd (ZEll.scal exx.(vN) exx.(vA) (z2Z sc) (e2E x) n). Proof. intros n; exact (scalb_correct n false). Qed. Lemma scal_list_correct: forall l x sc, wfe x -> wft sc -> e2E (fst (scal_list sc x l)) = fst (ZEll.scal_list exx.(vN) exx.(vA) (z2Z sc) (e2E x) l)/\ z2Z (snd (scal_list sc x l)) = snd (ZEll.scal_list exx.(vN) exx.(vA) (z2Z sc) (e2E x) l). Proof. intros l1; elim l1; simpl; auto. unfold scal_list, ZEll.scal_list; simpl; intros a l2 Hrec x sc H1 H2. generalize (scal_correct a _ H1 H2) (scal_wf a _ H1 H2); case scal. case ZEll.scal; intros r1 rsc1; simpl. simpl; intros a1 sc1 (H3, H4) (H5, H6); subst r1 rsc1; auto. Qed. Lemma scal_list_wf: forall l x sc, wfe x -> wft sc -> wfe (fst (scal_list sc x l)) /\ wft (snd (scal_list sc x l)). Proof. intros l1; elim l1; simpl; auto. unfold scal_list; intros a l Hrec x sc H1 H2; simpl. generalize (@scal_wf a _ _ H1 H2); case (scal sc x a); simpl; intros x1 sc1 [H3 H4]; auto. Qed. Lemma scalL_wf: forall l x sc, wfe x -> wft sc -> wfe (fst (scalL sc x l)) /\ wft (snd (scalL sc x l)). Proof. intros l1; elim l1; simpl; auto. intros a l2 Hrec x sc H1 H2. generalize (scal_wf a _ H1 H2); case scal; simpl. intros a1 sc1 (H3, H4); auto. generalize (scal_list_wf l2 _ H1 H4); case scal_list; simpl. intros a2 sc2; case a2; simpl; auto. intros x1 y1 z1 ((V1, (V2, V3)), V4); apply Hrec; auto. Qed. Lemma scalL_correct: forall l x sc, wfe x -> wft sc -> e2E (fst (scalL sc x l)) = fst (ZEll.scalL exx.(vN) exx.(vA) (z2Z sc) (e2E x) l)/\ z2Z (snd (scalL sc x l)) = snd (ZEll.scalL exx.(vN) exx.(vA) (z2Z sc) (e2E x) l). Proof. intros l1; elim l1; simpl; auto. intros a l2 Hrec x sc H1 H2. generalize (scal_wf a _ H1 H2) (scal_correct a _ H1 H2); case scal; simpl. case ZEll.scal; intros r1 rsc1; simpl. intros a1 sc1 (H3, H4) (H5, H6); subst r1 rsc1. generalize (scal_list_wf l2 _ H1 H4) (scal_list_correct l2 _ H1 H4); case scal_list; simpl. case ZEll.scal_list; intros r1 rsc1; simpl. intros a2 sc2 (H7, H8) (H9, H10); subst r1 rsc1. generalize H7; clear H7; case a2; simpl; auto. rewrite zc0; auto. intros x1 y1 z1 (V1, (V2, V3)); auto. generalize (nmulw H8 V3) (nmulz H8 V3); intros V4 V5; rewrite <- V5. apply Hrec; auto. Qed. Lemma f4 : wft (Z2z 4). Proof. red; apply z2Zx1. Qed. Lemma f27 : wft (Z2z 27). Proof. red; apply z2Zx1. Qed. Lemma Bw : wft B. Proof. red; unfold B; apply z2Zx1. Qed. Hint Resolve f4 f27 Bw : core. Lemma mww: forall x y, ZEll.nmul (vN exx) (x mod (vN exx) ) y = ZEll.nmul (vN exx) x y. intros x y; unfold ZEll.nmul; rewrite Zmodml; auto. Qed. Lemma wwA: forall x, ZEll.nmul (vN exx) x exx.(vA) = ZEll.nmul (vN exx) x (z2Z A). intros x; unfold ZEll.nmul. unfold A; rewrite z2Zx; rewrite Zmodmr; auto. Qed. Lemma wwB: forall x, ZEll.nmul (vN exx) x exx.(vB) = ZEll.nmul (vN exx) x (z2Z B). intros x; unfold ZEll.nmul. unfold B; rewrite z2Zx; rewrite Zmodmr; auto. Qed. Lemma scalL_prime: let a := ntriple (Z2z (exx.(vx))) (Z2z (exx.(vy))) c1 in let isc := (Z2z 4) ** A ** A ** A ++ (Z2z 27) ** B ** B in let (a1, sc1) := scal isc a exx.(vS) in let (S1,R1) := psplit exx.(vR) in let (a2, sc2) := scal sc1 a1 S1 in let (a3, sc3) := scalL sc2 a2 R1 in match a3 with nzero => if (Zeq_bool (Z.gcd (z2Z sc3) exx.(vN)) 1) then prime exx.(vN) else True | _ => True end. Proof. intros a isc. case_eq (scal isc a (vS exx)); intros a1 sc1 Ha1. case_eq (psplit (vR exx)); intros S1 R1 HS1. case_eq (scal sc1 a1 S1); intros a2 sc2 Ha2. case_eq (scalL sc2 a2 R1); intros a3 sc3; case a3; auto. intros Ha3; case_eq (Zeq_bool (Z.gcd (z2Z sc3) (vN exx)) 1); auto. intros H1. assert (F0: (vy exx mod vN exx) ^ 2 mod vN exx = ((vx exx mod vN exx) ^ 3 + vA exx * (vx exx mod vN exx) + vB exx) mod vN exx). generalize exxs.(inC). simpl; unfold Zpower_pos; simpl. repeat rewrite Zmult_1_r. intros HH. match goal with |- ?t1 = ?t2 => rmod t1; auto end. rewrite HH. rewrite Zplus_mod; auto; symmetry; rewrite Zplus_mod; auto; symmetry. apply f_equal2 with (f := Z.modulo); auto. apply f_equal2 with (f := Zplus); auto. rewrite Zplus_mod; auto; symmetry; rewrite Zplus_mod; auto; symmetry. apply f_equal2 with (f := Z.modulo); auto. apply f_equal2 with (f := Zplus); auto. rewrite Zmult_mod; auto; symmetry; rewrite Zmult_mod; auto; symmetry. apply f_equal2 with (f := Z.modulo); auto. apply f_equal2 with (f := Zmult); auto. rewrite Zmod_mod; auto. match goal with |- ?t1 = ?t2 => rmod t2; auto end. rewrite Zmult_mod; auto; symmetry; rewrite Zmult_mod; auto; symmetry. apply f_equal2 with (f := Z.modulo); auto. rewrite Zmod_mod; auto. generalize (@ZEll.scalL_prime exx.(vN) (exx.(vx) mod exx.(vN)) (exx.(vy) mod exx.(vN)) exx.(vA) exx.(vB) exxs.(n_pos) exxs.(n2_div) exx.(vR) exxs.(lprime) exx.(vS) exxs.(lbig) F0); simpl. generalize (@scal_wf (vS exx) a isc) (@scal_correct (vS exx) a isc). unfold isc. rewrite nplusz; auto; try nw; auto. repeat rewrite nmulz; auto; try nw; auto. repeat rewrite z2Zx. repeat rewrite wwA || rewrite wwB|| rewrite mww. replace (e2E a) with (ZEll.ntriple (vx exx mod vN exx) (vy exx mod vN exx) 1). case ZEll.scal. fold isc; rewrite HS1; rewrite Ha1; simpl; auto. intros r1 rsc1 HH1 HH2. case HH1; clear HH1. unfold c1; repeat split; red; try apply z2Zx1. unfold isc; nw. case HH2; clear HH2. unfold c1; repeat split; red; try apply z2Zx1. unfold isc; nw. intros U1 U2 W1 W2; subst r1 rsc1. generalize (@scal_wf S1 a1 sc1) (@scal_correct S1 a1 sc1). case ZEll.scal. intros r1 rsc1 HH1 HH2. case HH1; clear HH1; auto. case HH2; clear HH2; auto. rewrite Ha2; simpl. intros U1 U2 W3 W4; subst r1 rsc1. generalize (@scalL_wf R1 a2 sc2) (@scalL_correct R1 a2 sc2). case ZEll.scalL. intros n; case n; auto. rewrite Ha3; simpl. intros rsc1 HH1 HH2. case HH1; clear HH1; auto. case HH2; clear HH2; auto. intros _ U2 _ W5; subst rsc1. rewrite H1; auto. intros x1 y1 z1 sc4; rewrite Ha3; simpl; auto. intros _ HH; case HH; auto. intros; discriminate. unfold a; simpl. unfold c1; repeat rewrite z2Zx. rewrite (Zmod_small 1); auto. generalize exxs.(n_pos). auto with zarith. Qed. End NEll. Fixpoint plength (p: positive) : positive := match p with xH => xH | xO p1 => Pos.succ (plength p1) | xI p1 => Pos.succ (plength p1) end. Theorem plength_correct: forall p, (Zpos p < 2 ^ Zpos (plength p))%Z. assert (F: (forall p, 2 ^ (Zpos (Pos.succ p)) = 2 * 2 ^ Zpos p)%Z). intros p; replace (Zpos (Pos.succ p)) with (1 + Zpos p)%Z. rewrite Zpower_exp; auto with zarith. rewrite Zpos_succ_morphism; unfold Z.succ; auto with zarith. intros p; elim p; simpl plength; auto. intros p1 Hp1; rewrite F; repeat rewrite Zpos_xI. assert (tmp: (forall p, 2 * p = p + p)%Z); try repeat rewrite tmp; auto with zarith. intros p1 Hp1; rewrite F; rewrite (Zpos_xO p1). assert (tmp: (forall p, 2 * p = p + p)%Z); try repeat rewrite tmp; auto with zarith. rewrite Zpower_1_r; auto with zarith. Qed. Theorem plength_pred_correct: forall p, (Zpos p <= 2 ^ Zpos (plength (Pos.pred p))) %Z. intros p; case (Psucc_pred p); intros H1. subst; simpl plength. rewrite Zpower_1_r; auto with zarith. pattern p at 1; rewrite <- H1. rewrite Zpos_succ_morphism; unfold Z.succ; auto with zarith. generalize (plength_correct (Pos.pred p)); auto with zarith. Qed. Definition pheight p := plength (Pos.pred (plength (Pos.pred p))). Theorem pheight_correct: forall p, (Zpos p <= 2 ^ (2 ^ (Zpos (pheight p))))%Z. intros p; apply Z.le_trans with (1 := (plength_pred_correct p)). apply Zpower_le_monotone; auto with zarith. split; auto with zarith. unfold pheight; apply plength_pred_correct. Qed. Definition isM2 p := match p with xH => false | xO _ => false | _ => true end. Lemma isM2_correct: forall p, if isM2 p then ~(Z.divide 2 p) /\ 2 < p else True. Proof. intros p; case p; simpl; auto; clear p. intros p1; split; auto. intros HH; inversion_clear HH. generalize H; rewrite Zmult_comm. case x; simpl; intros; discriminate. case p1; red; simpl; auto. Qed. Definition ell_test (N S: positive) (l: List.list (positive * positive)) (A B x y: Z) := let op := cmk_op (Peano.pred (nat_of_P (get_height 63 (plength N)))) in let mop := make_mod_op op (ZnZ.of_Z N) in if isM2 N then match (4 * N) ?= (ZEll.Zmullp l - 1) ^ 2 with Lt => match y ^ 2 mod N ?= (x ^ 3 + A * x + B) mod N with Eq => let ex := mkEx N S l A B x y in let a := ntriple (Z2z ex op x) (Z2z ex op y) (Z2z ex op 1) in let A := (Z2z ex op A) in let B := (Z2z ex op B) in let d4 := (Z2z ex op 4) in let d27 := (Z2z ex op 27) in let da := mop.(add_mod) in let dm := mop.(mul_mod) in let isc := (da (dm (dm (dm d4 A) A) A) (dm (dm d27 B) B)) in let (a1, sc1) := scal ex op mop isc a S in let (S1,R1) := ZEll.psplit l in let (a2, sc2) := scal ex op mop sc1 a1 S1 in let (a3, sc3) := scalL ex op mop sc2 a2 R1 in match a3 with nzero _ => if (Zeq_bool (Z.gcd (z2Z op sc3) N) 1) then true else false | _ => false end | _ => false end | _ => false end else false. Lemma Zcompare_correct: forall x y, match x ?= y with Eq => x = y | Gt => x > y | Lt => x < y end. Proof. intros x y; unfold Z.lt, Z.gt; generalize (Zcompare_Eq_eq x y); case Z.compare; auto. Qed. Lemma ell_test_correct: forall (N S: positive) (l: List.list (positive * positive)) (A B x y: Z), (forall p, List.In p l -> prime (fst p)) -> if ell_test N S l A B x y then prime N else True. intros N S1 l A1 B1 x y H; unfold ell_test. generalize (isM2_correct N); case isM2; auto. intros (H1, H2). match goal with |- context[?x ?= ?y] => generalize (Zcompare_correct x y); case Z.compare; auto end; intros H3. match goal with |- context[?x ?= ?y] => generalize (Zcompare_correct x y); case Z.compare; auto end; intros H4. set (n := Peano.pred (nat_of_P (get_height 63 (plength N)))). set (op := cmk_op n). set (mop := make_mod_op op (ZnZ.of_Z N)). set (exx := mkEx N S1 l A1 B1 x y). set (op_spec := cmk_spec n). assert (exxs: ex_spec exx). constructor; auto. assert (H0: N < base (ZnZ.digits op)). apply Z.lt_le_trans with (1 := plength_correct N). unfold op, base. rewrite cmk_op_digits. apply Zpower_le_monotone; split. auto with zarith. generalize (get_height_correct 63 (plength N)); unfold n. set (p := plength N). replace (Z_of_nat (Peano.pred (nat_of_P (get_height 63 p)))) with ((Zpos (get_height 63 p) - 1) ). auto with zarith. rewrite <- Nat.sub_1_r; rewrite inj_minus1. rewrite <- Zpos_eq_Z_of_nat_o_nat_of_P; reflexivity. generalize (lt_O_nat_of_P (get_height 63 p)); auto with zarith. assert (mspec: mod_spec op (zN exx op) mop). unfold mop; apply make_mod_spec; auto. rewrite ZnZ.of_Z_correct; auto with zarith. generalize (@scalL_prime exx exxs _ op (cmk_spec n) mop mspec H0). lazy zeta. unfold c1, A, B, nplus, nmul; simpl (exx.(vA)); simpl (exx.(vB)); simpl (exx.(vx)); simpl (exx.(vy)); simpl (exx.(vS)); simpl (exx.(vR)); simpl (exx.(vN)). case scal; intros a1 sc1. case ZEll.psplit; intros S2 R2. case scal; intros a2 sc2. case scalL; intros a3 sc3. case a3; auto. case Zeq_bool; auto. Qed. Time Eval vm_compute in (ell_test 329719147332060395689499 8209062 (List.cons (40165264598163841%positive,1%positive) List.nil) (-94080) 9834496 0 3136). Time Eval vm_compute in (ell_test 1384435372850622112932804334308326689651568940268408537 13077052794 (List.cons (105867537178241517538435987563198410444088809%positive, 1%positive) List.nil) (-677530058123796416781392907869501000001421915645008494) 0 (-169382514530949104195348226967375250000355478911252124) 1045670343788723904542107880373576189650857982445904291 ). coqprime-8.18/src/Coqprime/num/NMake.v000066400000000000000000003720361451023060700176310ustar00rootroot00000000000000Require Import ZArith. Require Import Basic_type. Require Import ZnZ. Require Import Zn2Z. Require Import Nbasic. Require Import GenMul. Require Import GenDivn1. Fixpoint plength (p: positive) : positive := match p with xH => xH | xO p1 => Psucc (plength p1) | xI p1 => Psucc (plength p1) end. Definition pheight p := plength (Ppred (plength (Ppred p))). Module Type W0Type. Parameter w : Set. Parameter w_op : znz_op w. Parameter w_spec : znz_spec w_op. End W0Type. Module Make (W0:W0Type). Import W0. Definition w0 := W0.w. Definition w1 := zn2z w0. Definition w2 := zn2z w1. Definition w3 := zn2z w2. Definition w4 := zn2z w3. Definition w5 := zn2z w4. Definition w6 := zn2z w5. Definition w7 := zn2z w6. Definition w8 := zn2z w7. Definition w9 := zn2z w8. Definition w10 := zn2z w9. Definition w11 := zn2z w10. Definition w12 := zn2z w11. Definition w0_op := W0.w_op. Definition w1_op := mk_zn2z_op w0_op. Definition w2_op := mk_zn2z_op w1_op. Definition w3_op := mk_zn2z_op w2_op. Definition w4_op := mk_zn2z_op_karatsuba w3_op. Definition w5_op := mk_zn2z_op_karatsuba w4_op. Definition w6_op := mk_zn2z_op_karatsuba w5_op. Definition w7_op := mk_zn2z_op_karatsuba w6_op. Definition w8_op := mk_zn2z_op_karatsuba w7_op. Definition w9_op := mk_zn2z_op_karatsuba w8_op. Definition w10_op := mk_zn2z_op_karatsuba w9_op. Definition w11_op := mk_zn2z_op_karatsuba w10_op. Definition w12_op := mk_zn2z_op_karatsuba w11_op. Definition w13_op := mk_zn2z_op_karatsuba w12_op. Definition w14_op := mk_zn2z_op_karatsuba w13_op. Definition w15_op := mk_zn2z_op_karatsuba w14_op. Section Make_op. Variable mk : forall w', znz_op w' -> znz_op (zn2z w'). Fixpoint make_op_aux (n:nat) : znz_op (word w12 (S n)):= match n return znz_op (word w12 (S n)) with | O => w13_op | S n1 => match n1 return znz_op (word w12 (S (S n1))) with | O => w14_op | S n2 => match n2 return znz_op (word w12 (S (S (S n2)))) with | O => w15_op | S n3 => mk _ (mk _ (mk _ (make_op_aux n3))) end end end. End Make_op. Definition make_op := make_op_aux mk_zn2z_op_karatsuba. Inductive t_ : Set := | N0 : w0 -> t_ | N1 : w1 -> t_ | N2 : w2 -> t_ | N3 : w3 -> t_ | N4 : w4 -> t_ | N5 : w5 -> t_ | N6 : w6 -> t_ | N7 : w7 -> t_ | N8 : w8 -> t_ | N9 : w9 -> t_ | N10 : w10 -> t_ | N11 : w11 -> t_ | N12 : w12 -> t_ | Nn : forall n, word w12 (S n) -> t_. Definition t := t_. Definition w_0 := w0_op.(znz_0). Definition one0 := w0_op.(znz_1). Definition one1 := w1_op.(znz_1). Definition one2 := w2_op.(znz_1). Definition one3 := w3_op.(znz_1). Definition one4 := w4_op.(znz_1). Definition one5 := w5_op.(znz_1). Definition one6 := w6_op.(znz_1). Definition one7 := w7_op.(znz_1). Definition one8 := w8_op.(znz_1). Definition one9 := w9_op.(znz_1). Definition one10 := w10_op.(znz_1). Definition one11 := w11_op.(znz_1). Definition one12 := w12_op.(znz_1). Definition zero := N0 w_0. Definition one := N0 one0. Definition w0_succ_c := w0_op.(znz_succ_c). Definition w1_succ_c := w1_op.(znz_succ_c). Definition w2_succ_c := w2_op.(znz_succ_c). Definition w3_succ_c := w3_op.(znz_succ_c). Definition w4_succ_c := w4_op.(znz_succ_c). Definition w5_succ_c := w5_op.(znz_succ_c). Definition w6_succ_c := w6_op.(znz_succ_c). Definition w7_succ_c := w7_op.(znz_succ_c). Definition w8_succ_c := w8_op.(znz_succ_c). Definition w9_succ_c := w9_op.(znz_succ_c). Definition w10_succ_c := w10_op.(znz_succ_c). Definition w11_succ_c := w11_op.(znz_succ_c). Definition w12_succ_c := w12_op.(znz_succ_c). Definition w0_succ := w0_op.(znz_succ). Definition w1_succ := w1_op.(znz_succ). Definition w2_succ := w2_op.(znz_succ). Definition w3_succ := w3_op.(znz_succ). Definition w4_succ := w4_op.(znz_succ). Definition w5_succ := w5_op.(znz_succ). Definition w6_succ := w6_op.(znz_succ). Definition w7_succ := w7_op.(znz_succ). Definition w8_succ := w8_op.(znz_succ). Definition w9_succ := w9_op.(znz_succ). Definition w10_succ := w10_op.(znz_succ). Definition w11_succ := w11_op.(znz_succ). Definition w12_succ := w12_op.(znz_succ). Definition succ x := match x with | N0 wx => match w0_succ_c wx with | C0 r => N0 r | C1 r => N1 (WW one0 r) end | N1 wx => match w1_succ_c wx with | C0 r => N1 r | C1 r => N2 (WW one1 r) end | N2 wx => match w2_succ_c wx with | C0 r => N2 r | C1 r => N3 (WW one2 r) end | N3 wx => match w3_succ_c wx with | C0 r => N3 r | C1 r => N4 (WW one3 r) end | N4 wx => match w4_succ_c wx with | C0 r => N4 r | C1 r => N5 (WW one4 r) end | N5 wx => match w5_succ_c wx with | C0 r => N5 r | C1 r => N6 (WW one5 r) end | N6 wx => match w6_succ_c wx with | C0 r => N6 r | C1 r => N7 (WW one6 r) end | N7 wx => match w7_succ_c wx with | C0 r => N7 r | C1 r => N8 (WW one7 r) end | N8 wx => match w8_succ_c wx with | C0 r => N8 r | C1 r => N9 (WW one8 r) end | N9 wx => match w9_succ_c wx with | C0 r => N9 r | C1 r => N10 (WW one9 r) end | N10 wx => match w10_succ_c wx with | C0 r => N10 r | C1 r => N11 (WW one10 r) end | N11 wx => match w11_succ_c wx with | C0 r => N11 r | C1 r => N12 (WW one11 r) end | N12 wx => match w12_succ_c wx with | C0 r => N12 r | C1 r => Nn 0 (WW one12 r) end | Nn n wx => let op := make_op n in match op.(znz_succ_c) wx with | C0 r => Nn n r | C1 r => Nn (S n) (WW op.(znz_1) r) end end. Definition extend1 := Eval lazy beta zeta iota delta [extend]in extend 1. Definition extend2 := Eval lazy beta zeta iota delta [extend]in extend 2. Definition extend3 := Eval lazy beta zeta iota delta [extend]in extend 3. Definition extend4 := Eval lazy beta zeta iota delta [extend]in extend 4. Definition extend5 := Eval lazy beta zeta iota delta [extend]in extend 5. Definition extend6 := Eval lazy beta zeta iota delta [extend]in extend 6. Definition extend7 := Eval lazy beta zeta iota delta [extend]in extend 7. Definition extend8 := Eval lazy beta zeta iota delta [extend]in extend 8. Definition extend9 := Eval lazy beta zeta iota delta [extend]in extend 9. Definition extend10 := Eval lazy beta zeta iota delta [extend]in extend 10. Definition extend11 := Eval lazy beta zeta iota delta [extend]in extend 11. Definition extend12 := Eval lazy beta zeta iota delta [extend]in extend 12. Definition w0_eq0 := w0_op.(znz_eq0). Definition w1_eq0 := w1_op.(znz_eq0). Definition w2_eq0 := w2_op.(znz_eq0). Definition w3_eq0 := w3_op.(znz_eq0). Definition w4_eq0 := w4_op.(znz_eq0). Definition w5_eq0 := w5_op.(znz_eq0). Definition w6_eq0 := w6_op.(znz_eq0). Definition w7_eq0 := w7_op.(znz_eq0). Definition w8_eq0 := w8_op.(znz_eq0). Definition w9_eq0 := w9_op.(znz_eq0). Definition w10_eq0 := w10_op.(znz_eq0). Definition w11_eq0 := w11_op.(znz_eq0). Definition w12_eq0 := w12_op.(znz_eq0). Definition w0_add_c := w0_op.(znz_add_c). Definition w1_add_c := w1_op.(znz_add_c). Definition w2_add_c := w2_op.(znz_add_c). Definition w3_add_c := w3_op.(znz_add_c). Definition w4_add_c := w4_op.(znz_add_c). Definition w5_add_c := w5_op.(znz_add_c). Definition w6_add_c := w6_op.(znz_add_c). Definition w7_add_c := w7_op.(znz_add_c). Definition w8_add_c := w8_op.(znz_add_c). Definition w9_add_c := w9_op.(znz_add_c). Definition w10_add_c := w10_op.(znz_add_c). Definition w11_add_c := w11_op.(znz_add_c). Definition w12_add_c := w12_op.(znz_add_c). Definition w0_add x y := match w0_add_c x y with | C0 r => N0 r | C1 r => N1 (WW one0 r) end. Definition w1_add x y := match w1_add_c x y with | C0 r => N1 r | C1 r => N2 (WW one1 r) end. Definition w2_add x y := match w2_add_c x y with | C0 r => N2 r | C1 r => N3 (WW one2 r) end. Definition w3_add x y := match w3_add_c x y with | C0 r => N3 r | C1 r => N4 (WW one3 r) end. Definition w4_add x y := match w4_add_c x y with | C0 r => N4 r | C1 r => N5 (WW one4 r) end. Definition w5_add x y := match w5_add_c x y with | C0 r => N5 r | C1 r => N6 (WW one5 r) end. Definition w6_add x y := match w6_add_c x y with | C0 r => N6 r | C1 r => N7 (WW one6 r) end. Definition w7_add x y := match w7_add_c x y with | C0 r => N7 r | C1 r => N8 (WW one7 r) end. Definition w8_add x y := match w8_add_c x y with | C0 r => N8 r | C1 r => N9 (WW one8 r) end. Definition w9_add x y := match w9_add_c x y with | C0 r => N9 r | C1 r => N10 (WW one9 r) end. Definition w10_add x y := match w10_add_c x y with | C0 r => N10 r | C1 r => N11 (WW one10 r) end. Definition w11_add x y := match w11_add_c x y with | C0 r => N11 r | C1 r => N12 (WW one11 r) end. Definition w12_add x y := match w12_add_c x y with | C0 r => N12 r | C1 r => Nn 0 (WW one12 r) end. Definition addn n (x y : word w12 (S n)) := let op := make_op n in match op.(znz_add_c) x y with | C0 r => Nn n r | C1 r => Nn (S n) (WW op.(znz_1) r) end. Definition add x y := match x, y with | N0 wx, N0 wy => w0_add wx wy | N0 wx, N1 wy => if w0_eq0 wx then y else w1_add (WW w_0 wx) wy | N0 wx, N2 wy => if w0_eq0 wx then y else w2_add (extend1 w0 (WW w_0 wx)) wy | N0 wx, N3 wy => if w0_eq0 wx then y else w3_add (extend2 w0 (WW w_0 wx)) wy | N0 wx, N4 wy => if w0_eq0 wx then y else w4_add (extend3 w0 (WW w_0 wx)) wy | N0 wx, N5 wy => if w0_eq0 wx then y else w5_add (extend4 w0 (WW w_0 wx)) wy | N0 wx, N6 wy => if w0_eq0 wx then y else w6_add (extend5 w0 (WW w_0 wx)) wy | N0 wx, N7 wy => if w0_eq0 wx then y else w7_add (extend6 w0 (WW w_0 wx)) wy | N0 wx, N8 wy => if w0_eq0 wx then y else w8_add (extend7 w0 (WW w_0 wx)) wy | N0 wx, N9 wy => if w0_eq0 wx then y else w9_add (extend8 w0 (WW w_0 wx)) wy | N0 wx, N10 wy => if w0_eq0 wx then y else w10_add (extend9 w0 (WW w_0 wx)) wy | N0 wx, N11 wy => if w0_eq0 wx then y else w11_add (extend10 w0 (WW w_0 wx)) wy | N0 wx, N12 wy => if w0_eq0 wx then y else w12_add (extend11 w0 (WW w_0 wx)) wy | N0 wx, Nn n wy => if w0_eq0 wx then y else addn n (extend n w12 (extend12 w0 (WW w_0 wx))) wy | N1 wx, N0 wy => if w0_eq0 wy then x else w1_add wx (WW w_0 wy) | N1 wx, N1 wy => w1_add wx wy | N1 wx, N2 wy => w2_add (extend1 w0 wx) wy | N1 wx, N3 wy => w3_add (extend2 w0 wx) wy | N1 wx, N4 wy => w4_add (extend3 w0 wx) wy | N1 wx, N5 wy => w5_add (extend4 w0 wx) wy | N1 wx, N6 wy => w6_add (extend5 w0 wx) wy | N1 wx, N7 wy => w7_add (extend6 w0 wx) wy | N1 wx, N8 wy => w8_add (extend7 w0 wx) wy | N1 wx, N9 wy => w9_add (extend8 w0 wx) wy | N1 wx, N10 wy => w10_add (extend9 w0 wx) wy | N1 wx, N11 wy => w11_add (extend10 w0 wx) wy | N1 wx, N12 wy => w12_add (extend11 w0 wx) wy | N1 wx, Nn n wy => addn n (extend n w12 (extend12 w0 wx)) wy | N2 wx, N0 wy => if w0_eq0 wy then x else w2_add wx (extend1 w0 (WW w_0 wy)) | N2 wx, N1 wy => w2_add wx (extend1 w0 wy) | N2 wx, N2 wy => w2_add wx wy | N2 wx, N3 wy => w3_add (extend1 w1 wx) wy | N2 wx, N4 wy => w4_add (extend2 w1 wx) wy | N2 wx, N5 wy => w5_add (extend3 w1 wx) wy | N2 wx, N6 wy => w6_add (extend4 w1 wx) wy | N2 wx, N7 wy => w7_add (extend5 w1 wx) wy | N2 wx, N8 wy => w8_add (extend6 w1 wx) wy | N2 wx, N9 wy => w9_add (extend7 w1 wx) wy | N2 wx, N10 wy => w10_add (extend8 w1 wx) wy | N2 wx, N11 wy => w11_add (extend9 w1 wx) wy | N2 wx, N12 wy => w12_add (extend10 w1 wx) wy | N2 wx, Nn n wy => addn n (extend n w12 (extend11 w1 wx)) wy | N3 wx, N0 wy => if w0_eq0 wy then x else w3_add wx (extend2 w0 (WW w_0 wy)) | N3 wx, N1 wy => w3_add wx (extend2 w0 wy) | N3 wx, N2 wy => w3_add wx (extend1 w1 wy) | N3 wx, N3 wy => w3_add wx wy | N3 wx, N4 wy => w4_add (extend1 w2 wx) wy | N3 wx, N5 wy => w5_add (extend2 w2 wx) wy | N3 wx, N6 wy => w6_add (extend3 w2 wx) wy | N3 wx, N7 wy => w7_add (extend4 w2 wx) wy | N3 wx, N8 wy => w8_add (extend5 w2 wx) wy | N3 wx, N9 wy => w9_add (extend6 w2 wx) wy | N3 wx, N10 wy => w10_add (extend7 w2 wx) wy | N3 wx, N11 wy => w11_add (extend8 w2 wx) wy | N3 wx, N12 wy => w12_add (extend9 w2 wx) wy | N3 wx, Nn n wy => addn n (extend n w12 (extend10 w2 wx)) wy | N4 wx, N0 wy => if w0_eq0 wy then x else w4_add wx (extend3 w0 (WW w_0 wy)) | N4 wx, N1 wy => w4_add wx (extend3 w0 wy) | N4 wx, N2 wy => w4_add wx (extend2 w1 wy) | N4 wx, N3 wy => w4_add wx (extend1 w2 wy) | N4 wx, N4 wy => w4_add wx wy | N4 wx, N5 wy => w5_add (extend1 w3 wx) wy | N4 wx, N6 wy => w6_add (extend2 w3 wx) wy | N4 wx, N7 wy => w7_add (extend3 w3 wx) wy | N4 wx, N8 wy => w8_add (extend4 w3 wx) wy | N4 wx, N9 wy => w9_add (extend5 w3 wx) wy | N4 wx, N10 wy => w10_add (extend6 w3 wx) wy | N4 wx, N11 wy => w11_add (extend7 w3 wx) wy | N4 wx, N12 wy => w12_add (extend8 w3 wx) wy | N4 wx, Nn n wy => addn n (extend n w12 (extend9 w3 wx)) wy | N5 wx, N0 wy => if w0_eq0 wy then x else w5_add wx (extend4 w0 (WW w_0 wy)) | N5 wx, N1 wy => w5_add wx (extend4 w0 wy) | N5 wx, N2 wy => w5_add wx (extend3 w1 wy) | N5 wx, N3 wy => w5_add wx (extend2 w2 wy) | N5 wx, N4 wy => w5_add wx (extend1 w3 wy) | N5 wx, N5 wy => w5_add wx wy | N5 wx, N6 wy => w6_add (extend1 w4 wx) wy | N5 wx, N7 wy => w7_add (extend2 w4 wx) wy | N5 wx, N8 wy => w8_add (extend3 w4 wx) wy | N5 wx, N9 wy => w9_add (extend4 w4 wx) wy | N5 wx, N10 wy => w10_add (extend5 w4 wx) wy | N5 wx, N11 wy => w11_add (extend6 w4 wx) wy | N5 wx, N12 wy => w12_add (extend7 w4 wx) wy | N5 wx, Nn n wy => addn n (extend n w12 (extend8 w4 wx)) wy | N6 wx, N0 wy => if w0_eq0 wy then x else w6_add wx (extend5 w0 (WW w_0 wy)) | N6 wx, N1 wy => w6_add wx (extend5 w0 wy) | N6 wx, N2 wy => w6_add wx (extend4 w1 wy) | N6 wx, N3 wy => w6_add wx (extend3 w2 wy) | N6 wx, N4 wy => w6_add wx (extend2 w3 wy) | N6 wx, N5 wy => w6_add wx (extend1 w4 wy) | N6 wx, N6 wy => w6_add wx wy | N6 wx, N7 wy => w7_add (extend1 w5 wx) wy | N6 wx, N8 wy => w8_add (extend2 w5 wx) wy | N6 wx, N9 wy => w9_add (extend3 w5 wx) wy | N6 wx, N10 wy => w10_add (extend4 w5 wx) wy | N6 wx, N11 wy => w11_add (extend5 w5 wx) wy | N6 wx, N12 wy => w12_add (extend6 w5 wx) wy | N6 wx, Nn n wy => addn n (extend n w12 (extend7 w5 wx)) wy | N7 wx, N0 wy => if w0_eq0 wy then x else w7_add wx (extend6 w0 (WW w_0 wy)) | N7 wx, N1 wy => w7_add wx (extend6 w0 wy) | N7 wx, N2 wy => w7_add wx (extend5 w1 wy) | N7 wx, N3 wy => w7_add wx (extend4 w2 wy) | N7 wx, N4 wy => w7_add wx (extend3 w3 wy) | N7 wx, N5 wy => w7_add wx (extend2 w4 wy) | N7 wx, N6 wy => w7_add wx (extend1 w5 wy) | N7 wx, N7 wy => w7_add wx wy | N7 wx, N8 wy => w8_add (extend1 w6 wx) wy | N7 wx, N9 wy => w9_add (extend2 w6 wx) wy | N7 wx, N10 wy => w10_add (extend3 w6 wx) wy | N7 wx, N11 wy => w11_add (extend4 w6 wx) wy | N7 wx, N12 wy => w12_add (extend5 w6 wx) wy | N7 wx, Nn n wy => addn n (extend n w12 (extend6 w6 wx)) wy | N8 wx, N0 wy => if w0_eq0 wy then x else w8_add wx (extend7 w0 (WW w_0 wy)) | N8 wx, N1 wy => w8_add wx (extend7 w0 wy) | N8 wx, N2 wy => w8_add wx (extend6 w1 wy) | N8 wx, N3 wy => w8_add wx (extend5 w2 wy) | N8 wx, N4 wy => w8_add wx (extend4 w3 wy) | N8 wx, N5 wy => w8_add wx (extend3 w4 wy) | N8 wx, N6 wy => w8_add wx (extend2 w5 wy) | N8 wx, N7 wy => w8_add wx (extend1 w6 wy) | N8 wx, N8 wy => w8_add wx wy | N8 wx, N9 wy => w9_add (extend1 w7 wx) wy | N8 wx, N10 wy => w10_add (extend2 w7 wx) wy | N8 wx, N11 wy => w11_add (extend3 w7 wx) wy | N8 wx, N12 wy => w12_add (extend4 w7 wx) wy | N8 wx, Nn n wy => addn n (extend n w12 (extend5 w7 wx)) wy | N9 wx, N0 wy => if w0_eq0 wy then x else w9_add wx (extend8 w0 (WW w_0 wy)) | N9 wx, N1 wy => w9_add wx (extend8 w0 wy) | N9 wx, N2 wy => w9_add wx (extend7 w1 wy) | N9 wx, N3 wy => w9_add wx (extend6 w2 wy) | N9 wx, N4 wy => w9_add wx (extend5 w3 wy) | N9 wx, N5 wy => w9_add wx (extend4 w4 wy) | N9 wx, N6 wy => w9_add wx (extend3 w5 wy) | N9 wx, N7 wy => w9_add wx (extend2 w6 wy) | N9 wx, N8 wy => w9_add wx (extend1 w7 wy) | N9 wx, N9 wy => w9_add wx wy | N9 wx, N10 wy => w10_add (extend1 w8 wx) wy | N9 wx, N11 wy => w11_add (extend2 w8 wx) wy | N9 wx, N12 wy => w12_add (extend3 w8 wx) wy | N9 wx, Nn n wy => addn n (extend n w12 (extend4 w8 wx)) wy | N10 wx, N0 wy => if w0_eq0 wy then x else w10_add wx (extend9 w0 (WW w_0 wy)) | N10 wx, N1 wy => w10_add wx (extend9 w0 wy) | N10 wx, N2 wy => w10_add wx (extend8 w1 wy) | N10 wx, N3 wy => w10_add wx (extend7 w2 wy) | N10 wx, N4 wy => w10_add wx (extend6 w3 wy) | N10 wx, N5 wy => w10_add wx (extend5 w4 wy) | N10 wx, N6 wy => w10_add wx (extend4 w5 wy) | N10 wx, N7 wy => w10_add wx (extend3 w6 wy) | N10 wx, N8 wy => w10_add wx (extend2 w7 wy) | N10 wx, N9 wy => w10_add wx (extend1 w8 wy) | N10 wx, N10 wy => w10_add wx wy | N10 wx, N11 wy => w11_add (extend1 w9 wx) wy | N10 wx, N12 wy => w12_add (extend2 w9 wx) wy | N10 wx, Nn n wy => addn n (extend n w12 (extend3 w9 wx)) wy | N11 wx, N0 wy => if w0_eq0 wy then x else w11_add wx (extend10 w0 (WW w_0 wy)) | N11 wx, N1 wy => w11_add wx (extend10 w0 wy) | N11 wx, N2 wy => w11_add wx (extend9 w1 wy) | N11 wx, N3 wy => w11_add wx (extend8 w2 wy) | N11 wx, N4 wy => w11_add wx (extend7 w3 wy) | N11 wx, N5 wy => w11_add wx (extend6 w4 wy) | N11 wx, N6 wy => w11_add wx (extend5 w5 wy) | N11 wx, N7 wy => w11_add wx (extend4 w6 wy) | N11 wx, N8 wy => w11_add wx (extend3 w7 wy) | N11 wx, N9 wy => w11_add wx (extend2 w8 wy) | N11 wx, N10 wy => w11_add wx (extend1 w9 wy) | N11 wx, N11 wy => w11_add wx wy | N11 wx, N12 wy => w12_add (extend1 w10 wx) wy | N11 wx, Nn n wy => addn n (extend n w12 (extend2 w10 wx)) wy | N12 wx, N0 wy => if w0_eq0 wy then x else w12_add wx (extend11 w0 (WW w_0 wy)) | N12 wx, N1 wy => w12_add wx (extend11 w0 wy) | N12 wx, N2 wy => w12_add wx (extend10 w1 wy) | N12 wx, N3 wy => w12_add wx (extend9 w2 wy) | N12 wx, N4 wy => w12_add wx (extend8 w3 wy) | N12 wx, N5 wy => w12_add wx (extend7 w4 wy) | N12 wx, N6 wy => w12_add wx (extend6 w5 wy) | N12 wx, N7 wy => w12_add wx (extend5 w6 wy) | N12 wx, N8 wy => w12_add wx (extend4 w7 wy) | N12 wx, N9 wy => w12_add wx (extend3 w8 wy) | N12 wx, N10 wy => w12_add wx (extend2 w9 wy) | N12 wx, N11 wy => w12_add wx (extend1 w10 wy) | N12 wx, N12 wy => w12_add wx wy | N12 wx, Nn n wy => addn n (extend n w12 (extend1 w11 wx)) wy | Nn n wx, N0 wy => if w0_eq0 wy then x else addn n wx (extend n w12 (extend12 w0 (WW w_0 wy))) | Nn n wx, N1 wy => addn n wx (extend n w12 (extend12 w0 wy)) | Nn n wx, N2 wy => addn n wx (extend n w12 (extend11 w1 wy)) | Nn n wx, N3 wy => addn n wx (extend n w12 (extend10 w2 wy)) | Nn n wx, N4 wy => addn n wx (extend n w12 (extend9 w3 wy)) | Nn n wx, N5 wy => addn n wx (extend n w12 (extend8 w4 wy)) | Nn n wx, N6 wy => addn n wx (extend n w12 (extend7 w5 wy)) | Nn n wx, N7 wy => addn n wx (extend n w12 (extend6 w6 wy)) | Nn n wx, N8 wy => addn n wx (extend n w12 (extend5 w7 wy)) | Nn n wx, N9 wy => addn n wx (extend n w12 (extend4 w8 wy)) | Nn n wx, N10 wy => addn n wx (extend n w12 (extend3 w9 wy)) | Nn n wx, N11 wy => addn n wx (extend n w12 (extend2 w10 wy)) | Nn n wx, N12 wy => addn n wx (extend n w12 (extend1 w11 wy)) | Nn n wx, Nn m wy => match extend_to_max w12 n m wx wy with | inl wx' => addn m wx' wy | inr wy' => addn n wx wy' end end. Definition reduce_0 (x:w) := N0 x. Definition reduce_1 := Eval lazy beta iota delta[reduce_n1] in reduce_n1 _ _ zero w0_eq0 N0 N1. Definition reduce_2 := Eval lazy beta iota delta[reduce_n1] in reduce_n1 _ _ zero w1_eq0 reduce_1 N2. Definition reduce_3 := Eval lazy beta iota delta[reduce_n1] in reduce_n1 _ _ zero w2_eq0 reduce_2 N3. Definition reduce_4 := Eval lazy beta iota delta[reduce_n1] in reduce_n1 _ _ zero w3_eq0 reduce_3 N4. Definition reduce_5 := Eval lazy beta iota delta[reduce_n1] in reduce_n1 _ _ zero w4_eq0 reduce_4 N5. Definition reduce_6 := Eval lazy beta iota delta[reduce_n1] in reduce_n1 _ _ zero w5_eq0 reduce_5 N6. Definition reduce_7 := Eval lazy beta iota delta[reduce_n1] in reduce_n1 _ _ zero w6_eq0 reduce_6 N7. Definition reduce_8 := Eval lazy beta iota delta[reduce_n1] in reduce_n1 _ _ zero w7_eq0 reduce_7 N8. Definition reduce_9 := Eval lazy beta iota delta[reduce_n1] in reduce_n1 _ _ zero w8_eq0 reduce_8 N9. Definition reduce_10 := Eval lazy beta iota delta[reduce_n1] in reduce_n1 _ _ zero w9_eq0 reduce_9 N10. Definition reduce_11 := Eval lazy beta iota delta[reduce_n1] in reduce_n1 _ _ zero w10_eq0 reduce_10 N11. Definition reduce_12 := Eval lazy beta iota delta[reduce_n1] in reduce_n1 _ _ zero w11_eq0 reduce_11 N12. Definition reduce_13 := Eval lazy beta iota delta[reduce_n1] in reduce_n1 _ _ zero w12_eq0 reduce_12 (Nn 0). Definition reduce_n n := Eval lazy beta iota delta[reduce_n] in reduce_n _ _ zero reduce_13 Nn n. Definition w0_pred_c := w0_op.(znz_pred_c). Definition w1_pred_c := w1_op.(znz_pred_c). Definition w2_pred_c := w2_op.(znz_pred_c). Definition w3_pred_c := w3_op.(znz_pred_c). Definition w4_pred_c := w4_op.(znz_pred_c). Definition w5_pred_c := w5_op.(znz_pred_c). Definition w6_pred_c := w6_op.(znz_pred_c). Definition w7_pred_c := w7_op.(znz_pred_c). Definition w8_pred_c := w8_op.(znz_pred_c). Definition w9_pred_c := w9_op.(znz_pred_c). Definition w10_pred_c := w10_op.(znz_pred_c). Definition w11_pred_c := w11_op.(znz_pred_c). Definition w12_pred_c := w12_op.(znz_pred_c). Definition pred x := match x with | N0 wx => match w0_pred_c wx with | C0 r => reduce_0 r | C1 r => zero end | N1 wx => match w1_pred_c wx with | C0 r => reduce_1 r | C1 r => zero end | N2 wx => match w2_pred_c wx with | C0 r => reduce_2 r | C1 r => zero end | N3 wx => match w3_pred_c wx with | C0 r => reduce_3 r | C1 r => zero end | N4 wx => match w4_pred_c wx with | C0 r => reduce_4 r | C1 r => zero end | N5 wx => match w5_pred_c wx with | C0 r => reduce_5 r | C1 r => zero end | N6 wx => match w6_pred_c wx with | C0 r => reduce_6 r | C1 r => zero end | N7 wx => match w7_pred_c wx with | C0 r => reduce_7 r | C1 r => zero end | N8 wx => match w8_pred_c wx with | C0 r => reduce_8 r | C1 r => zero end | N9 wx => match w9_pred_c wx with | C0 r => reduce_9 r | C1 r => zero end | N10 wx => match w10_pred_c wx with | C0 r => reduce_10 r | C1 r => zero end | N11 wx => match w11_pred_c wx with | C0 r => reduce_11 r | C1 r => zero end | N12 wx => match w12_pred_c wx with | C0 r => reduce_12 r | C1 r => zero end | Nn n wx => let op := make_op n in match op.(znz_pred_c) wx with | C0 r => reduce_n n r | C1 r => zero end end. Definition w0_sub_c := w0_op.(znz_sub_c). Definition w1_sub_c := w1_op.(znz_sub_c). Definition w2_sub_c := w2_op.(znz_sub_c). Definition w3_sub_c := w3_op.(znz_sub_c). Definition w4_sub_c := w4_op.(znz_sub_c). Definition w5_sub_c := w5_op.(znz_sub_c). Definition w6_sub_c := w6_op.(znz_sub_c). Definition w7_sub_c := w7_op.(znz_sub_c). Definition w8_sub_c := w8_op.(znz_sub_c). Definition w9_sub_c := w9_op.(znz_sub_c). Definition w10_sub_c := w10_op.(znz_sub_c). Definition w11_sub_c := w11_op.(znz_sub_c). Definition w12_sub_c := w12_op.(znz_sub_c). Definition w0_sub x y := match w0_sub_c x y with | C0 r => reduce_0 r | C1 r => zero end. Definition w1_sub x y := match w1_sub_c x y with | C0 r => reduce_1 r | C1 r => zero end. Definition w2_sub x y := match w2_sub_c x y with | C0 r => reduce_2 r | C1 r => zero end. Definition w3_sub x y := match w3_sub_c x y with | C0 r => reduce_3 r | C1 r => zero end. Definition w4_sub x y := match w4_sub_c x y with | C0 r => reduce_4 r | C1 r => zero end. Definition w5_sub x y := match w5_sub_c x y with | C0 r => reduce_5 r | C1 r => zero end. Definition w6_sub x y := match w6_sub_c x y with | C0 r => reduce_6 r | C1 r => zero end. Definition w7_sub x y := match w7_sub_c x y with | C0 r => reduce_7 r | C1 r => zero end. Definition w8_sub x y := match w8_sub_c x y with | C0 r => reduce_8 r | C1 r => zero end. Definition w9_sub x y := match w9_sub_c x y with | C0 r => reduce_9 r | C1 r => zero end. Definition w10_sub x y := match w10_sub_c x y with | C0 r => reduce_10 r | C1 r => zero end. Definition w11_sub x y := match w11_sub_c x y with | C0 r => reduce_11 r | C1 r => zero end. Definition w12_sub x y := match w12_sub_c x y with | C0 r => reduce_12 r | C1 r => zero end. Definition subn n (x y : word w12 (S n)) := let op := make_op n in match op.(znz_sub_c) x y with | C0 r => Nn n r | C1 r => Nn (S n) (WW op.(znz_1) r) end. Definition sub x y := match x, y with | N0 wx, N0 wy => w0_sub wx wy | N0 wx, N1 wy => if w0_eq0 wx then zero else w1_sub (WW w_0 wx) wy | N0 wx, N2 wy => if w0_eq0 wx then zero else w2_sub (extend1 w0 (WW w_0 wx)) wy | N0 wx, N3 wy => if w0_eq0 wx then zero else w3_sub (extend2 w0 (WW w_0 wx)) wy | N0 wx, N4 wy => if w0_eq0 wx then zero else w4_sub (extend3 w0 (WW w_0 wx)) wy | N0 wx, N5 wy => if w0_eq0 wx then zero else w5_sub (extend4 w0 (WW w_0 wx)) wy | N0 wx, N6 wy => if w0_eq0 wx then zero else w6_sub (extend5 w0 (WW w_0 wx)) wy | N0 wx, N7 wy => if w0_eq0 wx then zero else w7_sub (extend6 w0 (WW w_0 wx)) wy | N0 wx, N8 wy => if w0_eq0 wx then zero else w8_sub (extend7 w0 (WW w_0 wx)) wy | N0 wx, N9 wy => if w0_eq0 wx then zero else w9_sub (extend8 w0 (WW w_0 wx)) wy | N0 wx, N10 wy => if w0_eq0 wx then zero else w10_sub (extend9 w0 (WW w_0 wx)) wy | N0 wx, N11 wy => if w0_eq0 wx then zero else w11_sub (extend10 w0 (WW w_0 wx)) wy | N0 wx, N12 wy => if w0_eq0 wx then zero else w12_sub (extend11 w0 (WW w_0 wx)) wy | N0 wx, Nn n wy => if w0_eq0 wx then zero else subn n (extend n w12 (extend12 w0 (WW w_0 wx))) wy | N1 wx, N0 wy => if w0_eq0 wy then x else w1_sub wx (WW w_0 wy) | N1 wx, N1 wy => w1_sub wx wy | N1 wx, N2 wy => w2_sub (extend1 w0 wx) wy | N1 wx, N3 wy => w3_sub (extend2 w0 wx) wy | N1 wx, N4 wy => w4_sub (extend3 w0 wx) wy | N1 wx, N5 wy => w5_sub (extend4 w0 wx) wy | N1 wx, N6 wy => w6_sub (extend5 w0 wx) wy | N1 wx, N7 wy => w7_sub (extend6 w0 wx) wy | N1 wx, N8 wy => w8_sub (extend7 w0 wx) wy | N1 wx, N9 wy => w9_sub (extend8 w0 wx) wy | N1 wx, N10 wy => w10_sub (extend9 w0 wx) wy | N1 wx, N11 wy => w11_sub (extend10 w0 wx) wy | N1 wx, N12 wy => w12_sub (extend11 w0 wx) wy | N1 wx, Nn n wy => subn n (extend n w12 (extend12 w0 wx)) wy | N2 wx, N0 wy => if w0_eq0 wy then x else w2_sub wx (extend1 w0 (WW w_0 wy)) | N2 wx, N1 wy => w2_sub wx (extend1 w0 wy) | N2 wx, N2 wy => w2_sub wx wy | N2 wx, N3 wy => w3_sub (extend1 w1 wx) wy | N2 wx, N4 wy => w4_sub (extend2 w1 wx) wy | N2 wx, N5 wy => w5_sub (extend3 w1 wx) wy | N2 wx, N6 wy => w6_sub (extend4 w1 wx) wy | N2 wx, N7 wy => w7_sub (extend5 w1 wx) wy | N2 wx, N8 wy => w8_sub (extend6 w1 wx) wy | N2 wx, N9 wy => w9_sub (extend7 w1 wx) wy | N2 wx, N10 wy => w10_sub (extend8 w1 wx) wy | N2 wx, N11 wy => w11_sub (extend9 w1 wx) wy | N2 wx, N12 wy => w12_sub (extend10 w1 wx) wy | N2 wx, Nn n wy => subn n (extend n w12 (extend11 w1 wx)) wy | N3 wx, N0 wy => if w0_eq0 wy then x else w3_sub wx (extend2 w0 (WW w_0 wy)) | N3 wx, N1 wy => w3_sub wx (extend2 w0 wy) | N3 wx, N2 wy => w3_sub wx (extend1 w1 wy) | N3 wx, N3 wy => w3_sub wx wy | N3 wx, N4 wy => w4_sub (extend1 w2 wx) wy | N3 wx, N5 wy => w5_sub (extend2 w2 wx) wy | N3 wx, N6 wy => w6_sub (extend3 w2 wx) wy | N3 wx, N7 wy => w7_sub (extend4 w2 wx) wy | N3 wx, N8 wy => w8_sub (extend5 w2 wx) wy | N3 wx, N9 wy => w9_sub (extend6 w2 wx) wy | N3 wx, N10 wy => w10_sub (extend7 w2 wx) wy | N3 wx, N11 wy => w11_sub (extend8 w2 wx) wy | N3 wx, N12 wy => w12_sub (extend9 w2 wx) wy | N3 wx, Nn n wy => subn n (extend n w12 (extend10 w2 wx)) wy | N4 wx, N0 wy => if w0_eq0 wy then x else w4_sub wx (extend3 w0 (WW w_0 wy)) | N4 wx, N1 wy => w4_sub wx (extend3 w0 wy) | N4 wx, N2 wy => w4_sub wx (extend2 w1 wy) | N4 wx, N3 wy => w4_sub wx (extend1 w2 wy) | N4 wx, N4 wy => w4_sub wx wy | N4 wx, N5 wy => w5_sub (extend1 w3 wx) wy | N4 wx, N6 wy => w6_sub (extend2 w3 wx) wy | N4 wx, N7 wy => w7_sub (extend3 w3 wx) wy | N4 wx, N8 wy => w8_sub (extend4 w3 wx) wy | N4 wx, N9 wy => w9_sub (extend5 w3 wx) wy | N4 wx, N10 wy => w10_sub (extend6 w3 wx) wy | N4 wx, N11 wy => w11_sub (extend7 w3 wx) wy | N4 wx, N12 wy => w12_sub (extend8 w3 wx) wy | N4 wx, Nn n wy => subn n (extend n w12 (extend9 w3 wx)) wy | N5 wx, N0 wy => if w0_eq0 wy then x else w5_sub wx (extend4 w0 (WW w_0 wy)) | N5 wx, N1 wy => w5_sub wx (extend4 w0 wy) | N5 wx, N2 wy => w5_sub wx (extend3 w1 wy) | N5 wx, N3 wy => w5_sub wx (extend2 w2 wy) | N5 wx, N4 wy => w5_sub wx (extend1 w3 wy) | N5 wx, N5 wy => w5_sub wx wy | N5 wx, N6 wy => w6_sub (extend1 w4 wx) wy | N5 wx, N7 wy => w7_sub (extend2 w4 wx) wy | N5 wx, N8 wy => w8_sub (extend3 w4 wx) wy | N5 wx, N9 wy => w9_sub (extend4 w4 wx) wy | N5 wx, N10 wy => w10_sub (extend5 w4 wx) wy | N5 wx, N11 wy => w11_sub (extend6 w4 wx) wy | N5 wx, N12 wy => w12_sub (extend7 w4 wx) wy | N5 wx, Nn n wy => subn n (extend n w12 (extend8 w4 wx)) wy | N6 wx, N0 wy => if w0_eq0 wy then x else w6_sub wx (extend5 w0 (WW w_0 wy)) | N6 wx, N1 wy => w6_sub wx (extend5 w0 wy) | N6 wx, N2 wy => w6_sub wx (extend4 w1 wy) | N6 wx, N3 wy => w6_sub wx (extend3 w2 wy) | N6 wx, N4 wy => w6_sub wx (extend2 w3 wy) | N6 wx, N5 wy => w6_sub wx (extend1 w4 wy) | N6 wx, N6 wy => w6_sub wx wy | N6 wx, N7 wy => w7_sub (extend1 w5 wx) wy | N6 wx, N8 wy => w8_sub (extend2 w5 wx) wy | N6 wx, N9 wy => w9_sub (extend3 w5 wx) wy | N6 wx, N10 wy => w10_sub (extend4 w5 wx) wy | N6 wx, N11 wy => w11_sub (extend5 w5 wx) wy | N6 wx, N12 wy => w12_sub (extend6 w5 wx) wy | N6 wx, Nn n wy => subn n (extend n w12 (extend7 w5 wx)) wy | N7 wx, N0 wy => if w0_eq0 wy then x else w7_sub wx (extend6 w0 (WW w_0 wy)) | N7 wx, N1 wy => w7_sub wx (extend6 w0 wy) | N7 wx, N2 wy => w7_sub wx (extend5 w1 wy) | N7 wx, N3 wy => w7_sub wx (extend4 w2 wy) | N7 wx, N4 wy => w7_sub wx (extend3 w3 wy) | N7 wx, N5 wy => w7_sub wx (extend2 w4 wy) | N7 wx, N6 wy => w7_sub wx (extend1 w5 wy) | N7 wx, N7 wy => w7_sub wx wy | N7 wx, N8 wy => w8_sub (extend1 w6 wx) wy | N7 wx, N9 wy => w9_sub (extend2 w6 wx) wy | N7 wx, N10 wy => w10_sub (extend3 w6 wx) wy | N7 wx, N11 wy => w11_sub (extend4 w6 wx) wy | N7 wx, N12 wy => w12_sub (extend5 w6 wx) wy | N7 wx, Nn n wy => subn n (extend n w12 (extend6 w6 wx)) wy | N8 wx, N0 wy => if w0_eq0 wy then x else w8_sub wx (extend7 w0 (WW w_0 wy)) | N8 wx, N1 wy => w8_sub wx (extend7 w0 wy) | N8 wx, N2 wy => w8_sub wx (extend6 w1 wy) | N8 wx, N3 wy => w8_sub wx (extend5 w2 wy) | N8 wx, N4 wy => w8_sub wx (extend4 w3 wy) | N8 wx, N5 wy => w8_sub wx (extend3 w4 wy) | N8 wx, N6 wy => w8_sub wx (extend2 w5 wy) | N8 wx, N7 wy => w8_sub wx (extend1 w6 wy) | N8 wx, N8 wy => w8_sub wx wy | N8 wx, N9 wy => w9_sub (extend1 w7 wx) wy | N8 wx, N10 wy => w10_sub (extend2 w7 wx) wy | N8 wx, N11 wy => w11_sub (extend3 w7 wx) wy | N8 wx, N12 wy => w12_sub (extend4 w7 wx) wy | N8 wx, Nn n wy => subn n (extend n w12 (extend5 w7 wx)) wy | N9 wx, N0 wy => if w0_eq0 wy then x else w9_sub wx (extend8 w0 (WW w_0 wy)) | N9 wx, N1 wy => w9_sub wx (extend8 w0 wy) | N9 wx, N2 wy => w9_sub wx (extend7 w1 wy) | N9 wx, N3 wy => w9_sub wx (extend6 w2 wy) | N9 wx, N4 wy => w9_sub wx (extend5 w3 wy) | N9 wx, N5 wy => w9_sub wx (extend4 w4 wy) | N9 wx, N6 wy => w9_sub wx (extend3 w5 wy) | N9 wx, N7 wy => w9_sub wx (extend2 w6 wy) | N9 wx, N8 wy => w9_sub wx (extend1 w7 wy) | N9 wx, N9 wy => w9_sub wx wy | N9 wx, N10 wy => w10_sub (extend1 w8 wx) wy | N9 wx, N11 wy => w11_sub (extend2 w8 wx) wy | N9 wx, N12 wy => w12_sub (extend3 w8 wx) wy | N9 wx, Nn n wy => subn n (extend n w12 (extend4 w8 wx)) wy | N10 wx, N0 wy => if w0_eq0 wy then x else w10_sub wx (extend9 w0 (WW w_0 wy)) | N10 wx, N1 wy => w10_sub wx (extend9 w0 wy) | N10 wx, N2 wy => w10_sub wx (extend8 w1 wy) | N10 wx, N3 wy => w10_sub wx (extend7 w2 wy) | N10 wx, N4 wy => w10_sub wx (extend6 w3 wy) | N10 wx, N5 wy => w10_sub wx (extend5 w4 wy) | N10 wx, N6 wy => w10_sub wx (extend4 w5 wy) | N10 wx, N7 wy => w10_sub wx (extend3 w6 wy) | N10 wx, N8 wy => w10_sub wx (extend2 w7 wy) | N10 wx, N9 wy => w10_sub wx (extend1 w8 wy) | N10 wx, N10 wy => w10_sub wx wy | N10 wx, N11 wy => w11_sub (extend1 w9 wx) wy | N10 wx, N12 wy => w12_sub (extend2 w9 wx) wy | N10 wx, Nn n wy => subn n (extend n w12 (extend3 w9 wx)) wy | N11 wx, N0 wy => if w0_eq0 wy then x else w11_sub wx (extend10 w0 (WW w_0 wy)) | N11 wx, N1 wy => w11_sub wx (extend10 w0 wy) | N11 wx, N2 wy => w11_sub wx (extend9 w1 wy) | N11 wx, N3 wy => w11_sub wx (extend8 w2 wy) | N11 wx, N4 wy => w11_sub wx (extend7 w3 wy) | N11 wx, N5 wy => w11_sub wx (extend6 w4 wy) | N11 wx, N6 wy => w11_sub wx (extend5 w5 wy) | N11 wx, N7 wy => w11_sub wx (extend4 w6 wy) | N11 wx, N8 wy => w11_sub wx (extend3 w7 wy) | N11 wx, N9 wy => w11_sub wx (extend2 w8 wy) | N11 wx, N10 wy => w11_sub wx (extend1 w9 wy) | N11 wx, N11 wy => w11_sub wx wy | N11 wx, N12 wy => w12_sub (extend1 w10 wx) wy | N11 wx, Nn n wy => subn n (extend n w12 (extend2 w10 wx)) wy | N12 wx, N0 wy => if w0_eq0 wy then x else w12_sub wx (extend11 w0 (WW w_0 wy)) | N12 wx, N1 wy => w12_sub wx (extend11 w0 wy) | N12 wx, N2 wy => w12_sub wx (extend10 w1 wy) | N12 wx, N3 wy => w12_sub wx (extend9 w2 wy) | N12 wx, N4 wy => w12_sub wx (extend8 w3 wy) | N12 wx, N5 wy => w12_sub wx (extend7 w4 wy) | N12 wx, N6 wy => w12_sub wx (extend6 w5 wy) | N12 wx, N7 wy => w12_sub wx (extend5 w6 wy) | N12 wx, N8 wy => w12_sub wx (extend4 w7 wy) | N12 wx, N9 wy => w12_sub wx (extend3 w8 wy) | N12 wx, N10 wy => w12_sub wx (extend2 w9 wy) | N12 wx, N11 wy => w12_sub wx (extend1 w10 wy) | N12 wx, N12 wy => w12_sub wx wy | N12 wx, Nn n wy => subn n (extend n w12 (extend1 w11 wx)) wy | Nn n wx, N0 wy => if w0_eq0 wy then x else subn n wx (extend n w12 (extend12 w0 (WW w_0 wy))) | Nn n wx, N1 wy => subn n wx (extend n w12 (extend12 w0 wy)) | Nn n wx, N2 wy => subn n wx (extend n w12 (extend11 w1 wy)) | Nn n wx, N3 wy => subn n wx (extend n w12 (extend10 w2 wy)) | Nn n wx, N4 wy => subn n wx (extend n w12 (extend9 w3 wy)) | Nn n wx, N5 wy => subn n wx (extend n w12 (extend8 w4 wy)) | Nn n wx, N6 wy => subn n wx (extend n w12 (extend7 w5 wy)) | Nn n wx, N7 wy => subn n wx (extend n w12 (extend6 w6 wy)) | Nn n wx, N8 wy => subn n wx (extend n w12 (extend5 w7 wy)) | Nn n wx, N9 wy => subn n wx (extend n w12 (extend4 w8 wy)) | Nn n wx, N10 wy => subn n wx (extend n w12 (extend3 w9 wy)) | Nn n wx, N11 wy => subn n wx (extend n w12 (extend2 w10 wy)) | Nn n wx, N12 wy => subn n wx (extend n w12 (extend1 w11 wy)) | Nn n wx, Nn m wy => match extend_to_max w12 n m wx wy with | inl wx' => subn m wx' wy | inr wy' => subn n wx wy' end end. Definition compare_0 := w0_op.(znz_compare). Definition comparen_0 := compare_mn_1 w0 w0 w_0 compare_0 (compare_0 w_0) compare_0. Definition compare_1 := w1_op.(znz_compare). Definition comparen_1 := compare_mn_1 w1 w1 W0 compare_1 (compare_1 W0) compare_1. Definition compare_2 := w2_op.(znz_compare). Definition comparen_2 := compare_mn_1 w2 w2 W0 compare_2 (compare_2 W0) compare_2. Definition compare_3 := w3_op.(znz_compare). Definition comparen_3 := compare_mn_1 w3 w3 W0 compare_3 (compare_3 W0) compare_3. Definition compare_4 := w4_op.(znz_compare). Definition comparen_4 := compare_mn_1 w4 w4 W0 compare_4 (compare_4 W0) compare_4. Definition compare_5 := w5_op.(znz_compare). Definition comparen_5 := compare_mn_1 w5 w5 W0 compare_5 (compare_5 W0) compare_5. Definition compare_6 := w6_op.(znz_compare). Definition comparen_6 := compare_mn_1 w6 w6 W0 compare_6 (compare_6 W0) compare_6. Definition compare_7 := w7_op.(znz_compare). Definition comparen_7 := compare_mn_1 w7 w7 W0 compare_7 (compare_7 W0) compare_7. Definition compare_8 := w8_op.(znz_compare). Definition comparen_8 := compare_mn_1 w8 w8 W0 compare_8 (compare_8 W0) compare_8. Definition compare_9 := w9_op.(znz_compare). Definition comparen_9 := compare_mn_1 w9 w9 W0 compare_9 (compare_9 W0) compare_9. Definition compare_10 := w10_op.(znz_compare). Definition comparen_10 := compare_mn_1 w10 w10 W0 compare_10 (compare_10 W0) compare_10. Definition compare_11 := w11_op.(znz_compare). Definition comparen_11 := compare_mn_1 w11 w11 W0 compare_11 (compare_11 W0) compare_11. Definition compare_12 := w12_op.(znz_compare). Definition comparen_12 := compare_mn_1 w12 w12 W0 compare_12 (compare_12 W0) compare_12. Definition compare x y := match x, y with | N0 wx, N0 wy => compare_0 wx wy | N0 wx, N1 wy => opp_compare (comparen_0 1 wy wx) | N0 wx, N2 wy => opp_compare (comparen_0 2 wy wx) | N0 wx, N3 wy => opp_compare (comparen_0 3 wy wx) | N0 wx, N4 wy => opp_compare (comparen_0 4 wy wx) | N0 wx, N5 wy => opp_compare (comparen_0 5 wy wx) | N0 wx, N6 wy => opp_compare (comparen_0 6 wy wx) | N0 wx, N7 wy => opp_compare (comparen_0 7 wy wx) | N0 wx, N8 wy => opp_compare (comparen_0 8 wy wx) | N0 wx, N9 wy => opp_compare (comparen_0 9 wy wx) | N0 wx, N10 wy => opp_compare (comparen_0 10 wy wx) | N0 wx, N11 wy => opp_compare (comparen_0 11 wy wx) | N0 wx, N12 wy => opp_compare (comparen_0 12 wy wx) | N0 wx, Nn n wy => opp_compare (compare_mn_1 w12 w0 w_0 compare_0 (compare_12 W0) (comparen_0 12) (S n) wy wx) | N1 wx, N0 wy => comparen_0 1 wx wy | N1 wx, N1 wy => compare_1 wx wy | N1 wx, N2 wy => opp_compare (comparen_1 1 wy wx) | N1 wx, N3 wy => opp_compare (comparen_1 2 wy wx) | N1 wx, N4 wy => opp_compare (comparen_1 3 wy wx) | N1 wx, N5 wy => opp_compare (comparen_1 4 wy wx) | N1 wx, N6 wy => opp_compare (comparen_1 5 wy wx) | N1 wx, N7 wy => opp_compare (comparen_1 6 wy wx) | N1 wx, N8 wy => opp_compare (comparen_1 7 wy wx) | N1 wx, N9 wy => opp_compare (comparen_1 8 wy wx) | N1 wx, N10 wy => opp_compare (comparen_1 9 wy wx) | N1 wx, N11 wy => opp_compare (comparen_1 10 wy wx) | N1 wx, N12 wy => opp_compare (comparen_1 11 wy wx) | N1 wx, Nn n wy => opp_compare (compare_mn_1 w12 w1 W0 compare_1 (compare_12 W0) (comparen_1 11) (S n) wy wx) | N2 wx, N0 wy => comparen_0 2 wx wy | N2 wx, N1 wy => comparen_1 1 wx wy | N2 wx, N2 wy => compare_2 wx wy | N2 wx, N3 wy => opp_compare (comparen_2 1 wy wx) | N2 wx, N4 wy => opp_compare (comparen_2 2 wy wx) | N2 wx, N5 wy => opp_compare (comparen_2 3 wy wx) | N2 wx, N6 wy => opp_compare (comparen_2 4 wy wx) | N2 wx, N7 wy => opp_compare (comparen_2 5 wy wx) | N2 wx, N8 wy => opp_compare (comparen_2 6 wy wx) | N2 wx, N9 wy => opp_compare (comparen_2 7 wy wx) | N2 wx, N10 wy => opp_compare (comparen_2 8 wy wx) | N2 wx, N11 wy => opp_compare (comparen_2 9 wy wx) | N2 wx, N12 wy => opp_compare (comparen_2 10 wy wx) | N2 wx, Nn n wy => opp_compare (compare_mn_1 w12 w2 W0 compare_2 (compare_12 W0) (comparen_2 10) (S n) wy wx) | N3 wx, N0 wy => comparen_0 3 wx wy | N3 wx, N1 wy => comparen_1 2 wx wy | N3 wx, N2 wy => comparen_2 1 wx wy | N3 wx, N3 wy => compare_3 wx wy | N3 wx, N4 wy => opp_compare (comparen_3 1 wy wx) | N3 wx, N5 wy => opp_compare (comparen_3 2 wy wx) | N3 wx, N6 wy => opp_compare (comparen_3 3 wy wx) | N3 wx, N7 wy => opp_compare (comparen_3 4 wy wx) | N3 wx, N8 wy => opp_compare (comparen_3 5 wy wx) | N3 wx, N9 wy => opp_compare (comparen_3 6 wy wx) | N3 wx, N10 wy => opp_compare (comparen_3 7 wy wx) | N3 wx, N11 wy => opp_compare (comparen_3 8 wy wx) | N3 wx, N12 wy => opp_compare (comparen_3 9 wy wx) | N3 wx, Nn n wy => opp_compare (compare_mn_1 w12 w3 W0 compare_3 (compare_12 W0) (comparen_3 9) (S n) wy wx) | N4 wx, N0 wy => comparen_0 4 wx wy | N4 wx, N1 wy => comparen_1 3 wx wy | N4 wx, N2 wy => comparen_2 2 wx wy | N4 wx, N3 wy => comparen_3 1 wx wy | N4 wx, N4 wy => compare_4 wx wy | N4 wx, N5 wy => opp_compare (comparen_4 1 wy wx) | N4 wx, N6 wy => opp_compare (comparen_4 2 wy wx) | N4 wx, N7 wy => opp_compare (comparen_4 3 wy wx) | N4 wx, N8 wy => opp_compare (comparen_4 4 wy wx) | N4 wx, N9 wy => opp_compare (comparen_4 5 wy wx) | N4 wx, N10 wy => opp_compare (comparen_4 6 wy wx) | N4 wx, N11 wy => opp_compare (comparen_4 7 wy wx) | N4 wx, N12 wy => opp_compare (comparen_4 8 wy wx) | N4 wx, Nn n wy => opp_compare (compare_mn_1 w12 w4 W0 compare_4 (compare_12 W0) (comparen_4 8) (S n) wy wx) | N5 wx, N0 wy => comparen_0 5 wx wy | N5 wx, N1 wy => comparen_1 4 wx wy | N5 wx, N2 wy => comparen_2 3 wx wy | N5 wx, N3 wy => comparen_3 2 wx wy | N5 wx, N4 wy => comparen_4 1 wx wy | N5 wx, N5 wy => compare_5 wx wy | N5 wx, N6 wy => opp_compare (comparen_5 1 wy wx) | N5 wx, N7 wy => opp_compare (comparen_5 2 wy wx) | N5 wx, N8 wy => opp_compare (comparen_5 3 wy wx) | N5 wx, N9 wy => opp_compare (comparen_5 4 wy wx) | N5 wx, N10 wy => opp_compare (comparen_5 5 wy wx) | N5 wx, N11 wy => opp_compare (comparen_5 6 wy wx) | N5 wx, N12 wy => opp_compare (comparen_5 7 wy wx) | N5 wx, Nn n wy => opp_compare (compare_mn_1 w12 w5 W0 compare_5 (compare_12 W0) (comparen_5 7) (S n) wy wx) | N6 wx, N0 wy => comparen_0 6 wx wy | N6 wx, N1 wy => comparen_1 5 wx wy | N6 wx, N2 wy => comparen_2 4 wx wy | N6 wx, N3 wy => comparen_3 3 wx wy | N6 wx, N4 wy => comparen_4 2 wx wy | N6 wx, N5 wy => comparen_5 1 wx wy | N6 wx, N6 wy => compare_6 wx wy | N6 wx, N7 wy => opp_compare (comparen_6 1 wy wx) | N6 wx, N8 wy => opp_compare (comparen_6 2 wy wx) | N6 wx, N9 wy => opp_compare (comparen_6 3 wy wx) | N6 wx, N10 wy => opp_compare (comparen_6 4 wy wx) | N6 wx, N11 wy => opp_compare (comparen_6 5 wy wx) | N6 wx, N12 wy => opp_compare (comparen_6 6 wy wx) | N6 wx, Nn n wy => opp_compare (compare_mn_1 w12 w6 W0 compare_6 (compare_12 W0) (comparen_6 6) (S n) wy wx) | N7 wx, N0 wy => comparen_0 7 wx wy | N7 wx, N1 wy => comparen_1 6 wx wy | N7 wx, N2 wy => comparen_2 5 wx wy | N7 wx, N3 wy => comparen_3 4 wx wy | N7 wx, N4 wy => comparen_4 3 wx wy | N7 wx, N5 wy => comparen_5 2 wx wy | N7 wx, N6 wy => comparen_6 1 wx wy | N7 wx, N7 wy => compare_7 wx wy | N7 wx, N8 wy => opp_compare (comparen_7 1 wy wx) | N7 wx, N9 wy => opp_compare (comparen_7 2 wy wx) | N7 wx, N10 wy => opp_compare (comparen_7 3 wy wx) | N7 wx, N11 wy => opp_compare (comparen_7 4 wy wx) | N7 wx, N12 wy => opp_compare (comparen_7 5 wy wx) | N7 wx, Nn n wy => opp_compare (compare_mn_1 w12 w7 W0 compare_7 (compare_12 W0) (comparen_7 5) (S n) wy wx) | N8 wx, N0 wy => comparen_0 8 wx wy | N8 wx, N1 wy => comparen_1 7 wx wy | N8 wx, N2 wy => comparen_2 6 wx wy | N8 wx, N3 wy => comparen_3 5 wx wy | N8 wx, N4 wy => comparen_4 4 wx wy | N8 wx, N5 wy => comparen_5 3 wx wy | N8 wx, N6 wy => comparen_6 2 wx wy | N8 wx, N7 wy => comparen_7 1 wx wy | N8 wx, N8 wy => compare_8 wx wy | N8 wx, N9 wy => opp_compare (comparen_8 1 wy wx) | N8 wx, N10 wy => opp_compare (comparen_8 2 wy wx) | N8 wx, N11 wy => opp_compare (comparen_8 3 wy wx) | N8 wx, N12 wy => opp_compare (comparen_8 4 wy wx) | N8 wx, Nn n wy => opp_compare (compare_mn_1 w12 w8 W0 compare_8 (compare_12 W0) (comparen_8 4) (S n) wy wx) | N9 wx, N0 wy => comparen_0 9 wx wy | N9 wx, N1 wy => comparen_1 8 wx wy | N9 wx, N2 wy => comparen_2 7 wx wy | N9 wx, N3 wy => comparen_3 6 wx wy | N9 wx, N4 wy => comparen_4 5 wx wy | N9 wx, N5 wy => comparen_5 4 wx wy | N9 wx, N6 wy => comparen_6 3 wx wy | N9 wx, N7 wy => comparen_7 2 wx wy | N9 wx, N8 wy => comparen_8 1 wx wy | N9 wx, N9 wy => compare_9 wx wy | N9 wx, N10 wy => opp_compare (comparen_9 1 wy wx) | N9 wx, N11 wy => opp_compare (comparen_9 2 wy wx) | N9 wx, N12 wy => opp_compare (comparen_9 3 wy wx) | N9 wx, Nn n wy => opp_compare (compare_mn_1 w12 w9 W0 compare_9 (compare_12 W0) (comparen_9 3) (S n) wy wx) | N10 wx, N0 wy => comparen_0 10 wx wy | N10 wx, N1 wy => comparen_1 9 wx wy | N10 wx, N2 wy => comparen_2 8 wx wy | N10 wx, N3 wy => comparen_3 7 wx wy | N10 wx, N4 wy => comparen_4 6 wx wy | N10 wx, N5 wy => comparen_5 5 wx wy | N10 wx, N6 wy => comparen_6 4 wx wy | N10 wx, N7 wy => comparen_7 3 wx wy | N10 wx, N8 wy => comparen_8 2 wx wy | N10 wx, N9 wy => comparen_9 1 wx wy | N10 wx, N10 wy => compare_10 wx wy | N10 wx, N11 wy => opp_compare (comparen_10 1 wy wx) | N10 wx, N12 wy => opp_compare (comparen_10 2 wy wx) | N10 wx, Nn n wy => opp_compare (compare_mn_1 w12 w10 W0 compare_10 (compare_12 W0) (comparen_10 2) (S n) wy wx) | N11 wx, N0 wy => comparen_0 11 wx wy | N11 wx, N1 wy => comparen_1 10 wx wy | N11 wx, N2 wy => comparen_2 9 wx wy | N11 wx, N3 wy => comparen_3 8 wx wy | N11 wx, N4 wy => comparen_4 7 wx wy | N11 wx, N5 wy => comparen_5 6 wx wy | N11 wx, N6 wy => comparen_6 5 wx wy | N11 wx, N7 wy => comparen_7 4 wx wy | N11 wx, N8 wy => comparen_8 3 wx wy | N11 wx, N9 wy => comparen_9 2 wx wy | N11 wx, N10 wy => comparen_10 1 wx wy | N11 wx, N11 wy => compare_11 wx wy | N11 wx, N12 wy => opp_compare (comparen_11 1 wy wx) | N11 wx, Nn n wy => opp_compare (compare_mn_1 w12 w11 W0 compare_11 (compare_12 W0) (comparen_11 1) (S n) wy wx) | N12 wx, N0 wy => comparen_0 12 wx wy | N12 wx, N1 wy => comparen_1 11 wx wy | N12 wx, N2 wy => comparen_2 10 wx wy | N12 wx, N3 wy => comparen_3 9 wx wy | N12 wx, N4 wy => comparen_4 8 wx wy | N12 wx, N5 wy => comparen_5 7 wx wy | N12 wx, N6 wy => comparen_6 6 wx wy | N12 wx, N7 wy => comparen_7 5 wx wy | N12 wx, N8 wy => comparen_8 4 wx wy | N12 wx, N9 wy => comparen_9 3 wx wy | N12 wx, N10 wy => comparen_10 2 wx wy | N12 wx, N11 wy => comparen_11 1 wx wy | N12 wx, N12 wy => compare_12 wx wy | N12 wx, Nn n wy => opp_compare (compare_mn_1 w12 w12 W0 compare_12 (compare_12 W0) (comparen_12 0) (S n) wy wx) | Nn n wx, N0 wy => compare_mn_1 w12 w0 w_0 compare_0 (compare_12 W0) (comparen_0 12) (S n) wx wy | Nn n wx, N1 wy => compare_mn_1 w12 w1 W0 compare_1 (compare_12 W0) (comparen_1 11) (S n) wx wy | Nn n wx, N2 wy => compare_mn_1 w12 w2 W0 compare_2 (compare_12 W0) (comparen_2 10) (S n) wx wy | Nn n wx, N3 wy => compare_mn_1 w12 w3 W0 compare_3 (compare_12 W0) (comparen_3 9) (S n) wx wy | Nn n wx, N4 wy => compare_mn_1 w12 w4 W0 compare_4 (compare_12 W0) (comparen_4 8) (S n) wx wy | Nn n wx, N5 wy => compare_mn_1 w12 w5 W0 compare_5 (compare_12 W0) (comparen_5 7) (S n) wx wy | Nn n wx, N6 wy => compare_mn_1 w12 w6 W0 compare_6 (compare_12 W0) (comparen_6 6) (S n) wx wy | Nn n wx, N7 wy => compare_mn_1 w12 w7 W0 compare_7 (compare_12 W0) (comparen_7 5) (S n) wx wy | Nn n wx, N8 wy => compare_mn_1 w12 w8 W0 compare_8 (compare_12 W0) (comparen_8 4) (S n) wx wy | Nn n wx, N9 wy => compare_mn_1 w12 w9 W0 compare_9 (compare_12 W0) (comparen_9 3) (S n) wx wy | Nn n wx, N10 wy => compare_mn_1 w12 w10 W0 compare_10 (compare_12 W0) (comparen_10 2) (S n) wx wy | Nn n wx, N11 wy => compare_mn_1 w12 w11 W0 compare_11 (compare_12 W0) (comparen_11 1) (S n) wx wy | Nn n wx, N12 wy => compare_mn_1 w12 w12 W0 compare_12 (compare_12 W0) (comparen_12 0) (S n) wx wy | Nn n wx, Nn m wy => match extend_to_max w12 n m wx wy with | inl wx' => let op := make_op m in op.(znz_compare) wx' wy | inr wy' => let op := make_op n in op.(znz_compare) wx wy' end end. Definition eq_bool x y := match compare x y with | Eq => true | _ => false end. Definition w0_mul_c := w0_op.(znz_mul_c). Definition w1_mul_c := w1_op.(znz_mul_c). Definition w2_mul_c := w2_op.(znz_mul_c). Definition w3_mul_c := w3_op.(znz_mul_c). Definition w4_mul_c := w4_op.(znz_mul_c). Definition w5_mul_c := w5_op.(znz_mul_c). Definition w6_mul_c := w6_op.(znz_mul_c). Definition w7_mul_c := w7_op.(znz_mul_c). Definition w8_mul_c := w8_op.(znz_mul_c). Definition w9_mul_c := w9_op.(znz_mul_c). Definition w10_mul_c := w10_op.(znz_mul_c). Definition w11_mul_c := w11_op.(znz_mul_c). Definition w12_mul_c := w12_op.(znz_mul_c). Definition w0_mul_add := Eval lazy beta delta [w_mul_add] in @w_mul_add w0 w_0 w0_succ w0_add_c w0_mul_c. Definition w1_mul_add := Eval lazy beta delta [w_mul_add] in @w_mul_add w1 W0 w1_succ w1_add_c w1_mul_c. Definition w2_mul_add := Eval lazy beta delta [w_mul_add] in @w_mul_add w2 W0 w2_succ w2_add_c w2_mul_c. Definition w3_mul_add := Eval lazy beta delta [w_mul_add] in @w_mul_add w3 W0 w3_succ w3_add_c w3_mul_c. Definition w4_mul_add := Eval lazy beta delta [w_mul_add] in @w_mul_add w4 W0 w4_succ w4_add_c w4_mul_c. Definition w5_mul_add := Eval lazy beta delta [w_mul_add] in @w_mul_add w5 W0 w5_succ w5_add_c w5_mul_c. Definition w6_mul_add := Eval lazy beta delta [w_mul_add] in @w_mul_add w6 W0 w6_succ w6_add_c w6_mul_c. Definition w7_mul_add := Eval lazy beta delta [w_mul_add] in @w_mul_add w7 W0 w7_succ w7_add_c w7_mul_c. Definition w8_mul_add := Eval lazy beta delta [w_mul_add] in @w_mul_add w8 W0 w8_succ w8_add_c w8_mul_c. Definition w9_mul_add := Eval lazy beta delta [w_mul_add] in @w_mul_add w9 W0 w9_succ w9_add_c w9_mul_c. Definition w10_mul_add := Eval lazy beta delta [w_mul_add] in @w_mul_add w10 W0 w10_succ w10_add_c w10_mul_c. Definition w11_mul_add := Eval lazy beta delta [w_mul_add] in @w_mul_add w11 W0 w11_succ w11_add_c w11_mul_c. Definition w12_mul_add := Eval lazy beta delta [w_mul_add] in @w_mul_add w12 W0 w12_succ w12_add_c w12_mul_c. Definition w0_mul_add_n1 := @gen_mul_add_n1 w0 w_0 w0_op.(znz_WW) w0_op.(znz_0W) w0_mul_add. Definition w1_mul_add_n1 := @gen_mul_add_n1 w1 W0 w1_op.(znz_WW) w1_op.(znz_0W) w1_mul_add. Definition w2_mul_add_n1 := @gen_mul_add_n1 w2 W0 w2_op.(znz_WW) w2_op.(znz_0W) w2_mul_add. Definition w3_mul_add_n1 := @gen_mul_add_n1 w3 W0 w3_op.(znz_WW) w3_op.(znz_0W) w3_mul_add. Definition w4_mul_add_n1 := @gen_mul_add_n1 w4 W0 w4_op.(znz_WW) w4_op.(znz_0W) w4_mul_add. Definition w5_mul_add_n1 := @gen_mul_add_n1 w5 W0 w5_op.(znz_WW) w5_op.(znz_0W) w5_mul_add. Definition w6_mul_add_n1 := @gen_mul_add_n1 w6 W0 w6_op.(znz_WW) w6_op.(znz_0W) w6_mul_add. Definition w7_mul_add_n1 := @gen_mul_add_n1 w7 W0 w7_op.(znz_WW) w7_op.(znz_0W) w7_mul_add. Definition w8_mul_add_n1 := @gen_mul_add_n1 w8 W0 w8_op.(znz_WW) w8_op.(znz_0W) w8_mul_add. Definition w9_mul_add_n1 := @gen_mul_add_n1 w9 W0 w9_op.(znz_WW) w9_op.(znz_0W) w9_mul_add. Definition w10_mul_add_n1 := @gen_mul_add_n1 w10 W0 w10_op.(znz_WW) w10_op.(znz_0W) w10_mul_add. Definition w11_mul_add_n1 := @gen_mul_add_n1 w11 W0 w11_op.(znz_WW) w11_op.(znz_0W) w11_mul_add. Definition w12_mul_add_n1 := @gen_mul_add_n1 w12 W0 w12_op.(znz_WW) w12_op.(znz_0W) w12_mul_add. Definition mul x y := match x, y with | N0 wx, N0 wy => reduce_1 (w0_mul_c wx wy) | N0 wx, N1 wy => if w0_eq0 wx then zero else let (w,r) := w0_mul_add_n1 1 wy wx w_0 in if w0_eq0 w then N1 r else N2 (WW (WW w_0 w) r) | N0 wx, N2 wy => if w0_eq0 wx then zero else let (w,r) := w0_mul_add_n1 2 wy wx w_0 in if w0_eq0 w then N2 r else N3 (WW (extend1 w0 (WW w_0 w)) r) | N0 wx, N3 wy => if w0_eq0 wx then zero else let (w,r) := w0_mul_add_n1 3 wy wx w_0 in if w0_eq0 w then N3 r else N4 (WW (extend2 w0 (WW w_0 w)) r) | N0 wx, N4 wy => if w0_eq0 wx then zero else let (w,r) := w0_mul_add_n1 4 wy wx w_0 in if w0_eq0 w then N4 r else N5 (WW (extend3 w0 (WW w_0 w)) r) | N0 wx, N5 wy => if w0_eq0 wx then zero else let (w,r) := w0_mul_add_n1 5 wy wx w_0 in if w0_eq0 w then N5 r else N6 (WW (extend4 w0 (WW w_0 w)) r) | N0 wx, N6 wy => if w0_eq0 wx then zero else let (w,r) := w0_mul_add_n1 6 wy wx w_0 in if w0_eq0 w then N6 r else N7 (WW (extend5 w0 (WW w_0 w)) r) | N0 wx, N7 wy => if w0_eq0 wx then zero else let (w,r) := w0_mul_add_n1 7 wy wx w_0 in if w0_eq0 w then N7 r else N8 (WW (extend6 w0 (WW w_0 w)) r) | N0 wx, N8 wy => if w0_eq0 wx then zero else let (w,r) := w0_mul_add_n1 8 wy wx w_0 in if w0_eq0 w then N8 r else N9 (WW (extend7 w0 (WW w_0 w)) r) | N0 wx, N9 wy => if w0_eq0 wx then zero else let (w,r) := w0_mul_add_n1 9 wy wx w_0 in if w0_eq0 w then N9 r else N10 (WW (extend8 w0 (WW w_0 w)) r) | N0 wx, N10 wy => if w0_eq0 wx then zero else let (w,r) := w0_mul_add_n1 10 wy wx w_0 in if w0_eq0 w then N10 r else N11 (WW (extend9 w0 (WW w_0 w)) r) | N0 wx, N11 wy => if w0_eq0 wx then zero else let (w,r) := w0_mul_add_n1 11 wy wx w_0 in if w0_eq0 w then N11 r else N12 (WW (extend10 w0 (WW w_0 w)) r) | N0 wx, N12 wy => if w0_eq0 wx then zero else let (w,r) := w0_mul_add_n1 12 wy wx w_0 in if w0_eq0 w then N12 r else Nn 0 (WW (extend11 w0 (WW w_0 w)) r) | N0 wx, Nn n wy => if w0_eq0 wx then zero else let (w,r) := gen_mul_add_mn1 w_0 (fun r => extend11 w0 (WW w_0 r)) w12_op.(znz_0W) w12_op.(znz_WW) (w0_mul_add_n1 12) (S n) wy wx w_0 in if w0_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (extend12 w0 (WW w_0 w))) r) | N1 wx, N0 wy => if w0_eq0 wy then zero else let (w,r) := w0_mul_add_n1 1 wx wy w_0 in if w0_eq0 w then N1 r else N2 (WW (WW w_0 w) r) | N1 wx, N1 wy => N2 (w1_mul_c wx wy) | N1 wx, N2 wy => let (w,r) := w1_mul_add_n1 1 wy wx W0 in if w1_eq0 w then N2 r else N3 (WW (extend1 w0 w) r) | N1 wx, N3 wy => let (w,r) := w1_mul_add_n1 2 wy wx W0 in if w1_eq0 w then N3 r else N4 (WW (extend2 w0 w) r) | N1 wx, N4 wy => let (w,r) := w1_mul_add_n1 3 wy wx W0 in if w1_eq0 w then N4 r else N5 (WW (extend3 w0 w) r) | N1 wx, N5 wy => let (w,r) := w1_mul_add_n1 4 wy wx W0 in if w1_eq0 w then N5 r else N6 (WW (extend4 w0 w) r) | N1 wx, N6 wy => let (w,r) := w1_mul_add_n1 5 wy wx W0 in if w1_eq0 w then N6 r else N7 (WW (extend5 w0 w) r) | N1 wx, N7 wy => let (w,r) := w1_mul_add_n1 6 wy wx W0 in if w1_eq0 w then N7 r else N8 (WW (extend6 w0 w) r) | N1 wx, N8 wy => let (w,r) := w1_mul_add_n1 7 wy wx W0 in if w1_eq0 w then N8 r else N9 (WW (extend7 w0 w) r) | N1 wx, N9 wy => let (w,r) := w1_mul_add_n1 8 wy wx W0 in if w1_eq0 w then N9 r else N10 (WW (extend8 w0 w) r) | N1 wx, N10 wy => let (w,r) := w1_mul_add_n1 9 wy wx W0 in if w1_eq0 w then N10 r else N11 (WW (extend9 w0 w) r) | N1 wx, N11 wy => let (w,r) := w1_mul_add_n1 10 wy wx W0 in if w1_eq0 w then N11 r else N12 (WW (extend10 w0 w) r) | N1 wx, N12 wy => let (w,r) := w1_mul_add_n1 11 wy wx W0 in if w1_eq0 w then N12 r else Nn 0 (WW (extend11 w0 w) r) | N1 wx, Nn n wy => let (w,r) := gen_mul_add_mn1 W0 (fun r => extend11 w0 r) w12_op.(znz_0W) w12_op.(znz_WW) (w1_mul_add_n1 11) (S n) wy wx W0 in if w1_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (extend12 w0 w)) r) | N2 wx, N0 wy => if w0_eq0 wy then zero else let (w,r) := w0_mul_add_n1 2 wx wy w_0 in if w0_eq0 w then N2 r else N3 (WW (extend1 w0 (WW w_0 w)) r) | N2 wx, N1 wy => let (w,r) := w1_mul_add_n1 1 wx wy W0 in if w1_eq0 w then N2 r else N3 (WW (extend1 w0 w) r) | N2 wx, N2 wy => N3 (w2_mul_c wx wy) | N2 wx, N3 wy => let (w,r) := w2_mul_add_n1 1 wy wx W0 in if w2_eq0 w then N3 r else N4 (WW (extend1 w1 w) r) | N2 wx, N4 wy => let (w,r) := w2_mul_add_n1 2 wy wx W0 in if w2_eq0 w then N4 r else N5 (WW (extend2 w1 w) r) | N2 wx, N5 wy => let (w,r) := w2_mul_add_n1 3 wy wx W0 in if w2_eq0 w then N5 r else N6 (WW (extend3 w1 w) r) | N2 wx, N6 wy => let (w,r) := w2_mul_add_n1 4 wy wx W0 in if w2_eq0 w then N6 r else N7 (WW (extend4 w1 w) r) | N2 wx, N7 wy => let (w,r) := w2_mul_add_n1 5 wy wx W0 in if w2_eq0 w then N7 r else N8 (WW (extend5 w1 w) r) | N2 wx, N8 wy => let (w,r) := w2_mul_add_n1 6 wy wx W0 in if w2_eq0 w then N8 r else N9 (WW (extend6 w1 w) r) | N2 wx, N9 wy => let (w,r) := w2_mul_add_n1 7 wy wx W0 in if w2_eq0 w then N9 r else N10 (WW (extend7 w1 w) r) | N2 wx, N10 wy => let (w,r) := w2_mul_add_n1 8 wy wx W0 in if w2_eq0 w then N10 r else N11 (WW (extend8 w1 w) r) | N2 wx, N11 wy => let (w,r) := w2_mul_add_n1 9 wy wx W0 in if w2_eq0 w then N11 r else N12 (WW (extend9 w1 w) r) | N2 wx, N12 wy => let (w,r) := w2_mul_add_n1 10 wy wx W0 in if w2_eq0 w then N12 r else Nn 0 (WW (extend10 w1 w) r) | N2 wx, Nn n wy => let (w,r) := w12_mul_add_n1 (S n) wy (extend10 w1 wx) W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | N3 wx, N0 wy => if w0_eq0 wy then zero else let (w,r) := w0_mul_add_n1 3 wx wy w_0 in if w0_eq0 w then N3 r else N4 (WW (extend2 w0 (WW w_0 w)) r) | N3 wx, N1 wy => let (w,r) := w1_mul_add_n1 2 wx wy W0 in if w1_eq0 w then N3 r else N4 (WW (extend2 w0 w) r) | N3 wx, N2 wy => let (w,r) := w2_mul_add_n1 1 wx wy W0 in if w2_eq0 w then N3 r else N4 (WW (extend1 w1 w) r) | N3 wx, N3 wy => N4 (w3_mul_c wx wy) | N3 wx, N4 wy => let (w,r) := w3_mul_add_n1 1 wy wx W0 in if w3_eq0 w then N4 r else N5 (WW (extend1 w2 w) r) | N3 wx, N5 wy => let (w,r) := w3_mul_add_n1 2 wy wx W0 in if w3_eq0 w then N5 r else N6 (WW (extend2 w2 w) r) | N3 wx, N6 wy => let (w,r) := w3_mul_add_n1 3 wy wx W0 in if w3_eq0 w then N6 r else N7 (WW (extend3 w2 w) r) | N3 wx, N7 wy => let (w,r) := w3_mul_add_n1 4 wy wx W0 in if w3_eq0 w then N7 r else N8 (WW (extend4 w2 w) r) | N3 wx, N8 wy => let (w,r) := w3_mul_add_n1 5 wy wx W0 in if w3_eq0 w then N8 r else N9 (WW (extend5 w2 w) r) | N3 wx, N9 wy => let (w,r) := w3_mul_add_n1 6 wy wx W0 in if w3_eq0 w then N9 r else N10 (WW (extend6 w2 w) r) | N3 wx, N10 wy => let (w,r) := w3_mul_add_n1 7 wy wx W0 in if w3_eq0 w then N10 r else N11 (WW (extend7 w2 w) r) | N3 wx, N11 wy => let (w,r) := w3_mul_add_n1 8 wy wx W0 in if w3_eq0 w then N11 r else N12 (WW (extend8 w2 w) r) | N3 wx, N12 wy => let (w,r) := w3_mul_add_n1 9 wy wx W0 in if w3_eq0 w then N12 r else Nn 0 (WW (extend9 w2 w) r) | N3 wx, Nn n wy => let (w,r) := w12_mul_add_n1 (S n) wy (extend9 w2 wx) W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | N4 wx, N0 wy => if w0_eq0 wy then zero else let (w,r) := w0_mul_add_n1 4 wx wy w_0 in if w0_eq0 w then N4 r else N5 (WW (extend3 w0 (WW w_0 w)) r) | N4 wx, N1 wy => let (w,r) := w1_mul_add_n1 3 wx wy W0 in if w1_eq0 w then N4 r else N5 (WW (extend3 w0 w) r) | N4 wx, N2 wy => let (w,r) := w2_mul_add_n1 2 wx wy W0 in if w2_eq0 w then N4 r else N5 (WW (extend2 w1 w) r) | N4 wx, N3 wy => let (w,r) := w3_mul_add_n1 1 wx wy W0 in if w3_eq0 w then N4 r else N5 (WW (extend1 w2 w) r) | N4 wx, N4 wy => N5 (w4_mul_c wx wy) | N4 wx, N5 wy => let (w,r) := w4_mul_add_n1 1 wy wx W0 in if w4_eq0 w then N5 r else N6 (WW (extend1 w3 w) r) | N4 wx, N6 wy => let (w,r) := w4_mul_add_n1 2 wy wx W0 in if w4_eq0 w then N6 r else N7 (WW (extend2 w3 w) r) | N4 wx, N7 wy => let (w,r) := w4_mul_add_n1 3 wy wx W0 in if w4_eq0 w then N7 r else N8 (WW (extend3 w3 w) r) | N4 wx, N8 wy => let (w,r) := w4_mul_add_n1 4 wy wx W0 in if w4_eq0 w then N8 r else N9 (WW (extend4 w3 w) r) | N4 wx, N9 wy => let (w,r) := w4_mul_add_n1 5 wy wx W0 in if w4_eq0 w then N9 r else N10 (WW (extend5 w3 w) r) | N4 wx, N10 wy => let (w,r) := w4_mul_add_n1 6 wy wx W0 in if w4_eq0 w then N10 r else N11 (WW (extend6 w3 w) r) | N4 wx, N11 wy => let (w,r) := w4_mul_add_n1 7 wy wx W0 in if w4_eq0 w then N11 r else N12 (WW (extend7 w3 w) r) | N4 wx, N12 wy => let (w,r) := w4_mul_add_n1 8 wy wx W0 in if w4_eq0 w then N12 r else Nn 0 (WW (extend8 w3 w) r) | N4 wx, Nn n wy => let (w,r) := w12_mul_add_n1 (S n) wy (extend8 w3 wx) W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | N5 wx, N0 wy => if w0_eq0 wy then zero else let (w,r) := w0_mul_add_n1 5 wx wy w_0 in if w0_eq0 w then N5 r else N6 (WW (extend4 w0 (WW w_0 w)) r) | N5 wx, N1 wy => let (w,r) := w1_mul_add_n1 4 wx wy W0 in if w1_eq0 w then N5 r else N6 (WW (extend4 w0 w) r) | N5 wx, N2 wy => let (w,r) := w2_mul_add_n1 3 wx wy W0 in if w2_eq0 w then N5 r else N6 (WW (extend3 w1 w) r) | N5 wx, N3 wy => let (w,r) := w3_mul_add_n1 2 wx wy W0 in if w3_eq0 w then N5 r else N6 (WW (extend2 w2 w) r) | N5 wx, N4 wy => let (w,r) := w4_mul_add_n1 1 wx wy W0 in if w4_eq0 w then N5 r else N6 (WW (extend1 w3 w) r) | N5 wx, N5 wy => N6 (w5_mul_c wx wy) | N5 wx, N6 wy => let (w,r) := w5_mul_add_n1 1 wy wx W0 in if w5_eq0 w then N6 r else N7 (WW (extend1 w4 w) r) | N5 wx, N7 wy => let (w,r) := w5_mul_add_n1 2 wy wx W0 in if w5_eq0 w then N7 r else N8 (WW (extend2 w4 w) r) | N5 wx, N8 wy => let (w,r) := w5_mul_add_n1 3 wy wx W0 in if w5_eq0 w then N8 r else N9 (WW (extend3 w4 w) r) | N5 wx, N9 wy => let (w,r) := w5_mul_add_n1 4 wy wx W0 in if w5_eq0 w then N9 r else N10 (WW (extend4 w4 w) r) | N5 wx, N10 wy => let (w,r) := w5_mul_add_n1 5 wy wx W0 in if w5_eq0 w then N10 r else N11 (WW (extend5 w4 w) r) | N5 wx, N11 wy => let (w,r) := w5_mul_add_n1 6 wy wx W0 in if w5_eq0 w then N11 r else N12 (WW (extend6 w4 w) r) | N5 wx, N12 wy => let (w,r) := w5_mul_add_n1 7 wy wx W0 in if w5_eq0 w then N12 r else Nn 0 (WW (extend7 w4 w) r) | N5 wx, Nn n wy => let (w,r) := w12_mul_add_n1 (S n) wy (extend7 w4 wx) W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | N6 wx, N0 wy => if w0_eq0 wy then zero else let (w,r) := w0_mul_add_n1 6 wx wy w_0 in if w0_eq0 w then N6 r else N7 (WW (extend5 w0 (WW w_0 w)) r) | N6 wx, N1 wy => let (w,r) := w1_mul_add_n1 5 wx wy W0 in if w1_eq0 w then N6 r else N7 (WW (extend5 w0 w) r) | N6 wx, N2 wy => let (w,r) := w2_mul_add_n1 4 wx wy W0 in if w2_eq0 w then N6 r else N7 (WW (extend4 w1 w) r) | N6 wx, N3 wy => let (w,r) := w3_mul_add_n1 3 wx wy W0 in if w3_eq0 w then N6 r else N7 (WW (extend3 w2 w) r) | N6 wx, N4 wy => let (w,r) := w4_mul_add_n1 2 wx wy W0 in if w4_eq0 w then N6 r else N7 (WW (extend2 w3 w) r) | N6 wx, N5 wy => let (w,r) := w5_mul_add_n1 1 wx wy W0 in if w5_eq0 w then N6 r else N7 (WW (extend1 w4 w) r) | N6 wx, N6 wy => N7 (w6_mul_c wx wy) | N6 wx, N7 wy => let (w,r) := w6_mul_add_n1 1 wy wx W0 in if w6_eq0 w then N7 r else N8 (WW (extend1 w5 w) r) | N6 wx, N8 wy => let (w,r) := w6_mul_add_n1 2 wy wx W0 in if w6_eq0 w then N8 r else N9 (WW (extend2 w5 w) r) | N6 wx, N9 wy => let (w,r) := w6_mul_add_n1 3 wy wx W0 in if w6_eq0 w then N9 r else N10 (WW (extend3 w5 w) r) | N6 wx, N10 wy => let (w,r) := w6_mul_add_n1 4 wy wx W0 in if w6_eq0 w then N10 r else N11 (WW (extend4 w5 w) r) | N6 wx, N11 wy => let (w,r) := w6_mul_add_n1 5 wy wx W0 in if w6_eq0 w then N11 r else N12 (WW (extend5 w5 w) r) | N6 wx, N12 wy => let (w,r) := w6_mul_add_n1 6 wy wx W0 in if w6_eq0 w then N12 r else Nn 0 (WW (extend6 w5 w) r) | N6 wx, Nn n wy => let (w,r) := w12_mul_add_n1 (S n) wy (extend6 w5 wx) W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | N7 wx, N0 wy => if w0_eq0 wy then zero else let (w,r) := w0_mul_add_n1 7 wx wy w_0 in if w0_eq0 w then N7 r else N8 (WW (extend6 w0 (WW w_0 w)) r) | N7 wx, N1 wy => let (w,r) := w1_mul_add_n1 6 wx wy W0 in if w1_eq0 w then N7 r else N8 (WW (extend6 w0 w) r) | N7 wx, N2 wy => let (w,r) := w2_mul_add_n1 5 wx wy W0 in if w2_eq0 w then N7 r else N8 (WW (extend5 w1 w) r) | N7 wx, N3 wy => let (w,r) := w3_mul_add_n1 4 wx wy W0 in if w3_eq0 w then N7 r else N8 (WW (extend4 w2 w) r) | N7 wx, N4 wy => let (w,r) := w4_mul_add_n1 3 wx wy W0 in if w4_eq0 w then N7 r else N8 (WW (extend3 w3 w) r) | N7 wx, N5 wy => let (w,r) := w5_mul_add_n1 2 wx wy W0 in if w5_eq0 w then N7 r else N8 (WW (extend2 w4 w) r) | N7 wx, N6 wy => let (w,r) := w6_mul_add_n1 1 wx wy W0 in if w6_eq0 w then N7 r else N8 (WW (extend1 w5 w) r) | N7 wx, N7 wy => N8 (w7_mul_c wx wy) | N7 wx, N8 wy => let (w,r) := w7_mul_add_n1 1 wy wx W0 in if w7_eq0 w then N8 r else N9 (WW (extend1 w6 w) r) | N7 wx, N9 wy => let (w,r) := w7_mul_add_n1 2 wy wx W0 in if w7_eq0 w then N9 r else N10 (WW (extend2 w6 w) r) | N7 wx, N10 wy => let (w,r) := w7_mul_add_n1 3 wy wx W0 in if w7_eq0 w then N10 r else N11 (WW (extend3 w6 w) r) | N7 wx, N11 wy => let (w,r) := w7_mul_add_n1 4 wy wx W0 in if w7_eq0 w then N11 r else N12 (WW (extend4 w6 w) r) | N7 wx, N12 wy => let (w,r) := w7_mul_add_n1 5 wy wx W0 in if w7_eq0 w then N12 r else Nn 0 (WW (extend5 w6 w) r) | N7 wx, Nn n wy => let (w,r) := w12_mul_add_n1 (S n) wy (extend5 w6 wx) W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | N8 wx, N0 wy => if w0_eq0 wy then zero else let (w,r) := w0_mul_add_n1 8 wx wy w_0 in if w0_eq0 w then N8 r else N9 (WW (extend7 w0 (WW w_0 w)) r) | N8 wx, N1 wy => let (w,r) := w1_mul_add_n1 7 wx wy W0 in if w1_eq0 w then N8 r else N9 (WW (extend7 w0 w) r) | N8 wx, N2 wy => let (w,r) := w2_mul_add_n1 6 wx wy W0 in if w2_eq0 w then N8 r else N9 (WW (extend6 w1 w) r) | N8 wx, N3 wy => let (w,r) := w3_mul_add_n1 5 wx wy W0 in if w3_eq0 w then N8 r else N9 (WW (extend5 w2 w) r) | N8 wx, N4 wy => let (w,r) := w4_mul_add_n1 4 wx wy W0 in if w4_eq0 w then N8 r else N9 (WW (extend4 w3 w) r) | N8 wx, N5 wy => let (w,r) := w5_mul_add_n1 3 wx wy W0 in if w5_eq0 w then N8 r else N9 (WW (extend3 w4 w) r) | N8 wx, N6 wy => let (w,r) := w6_mul_add_n1 2 wx wy W0 in if w6_eq0 w then N8 r else N9 (WW (extend2 w5 w) r) | N8 wx, N7 wy => let (w,r) := w7_mul_add_n1 1 wx wy W0 in if w7_eq0 w then N8 r else N9 (WW (extend1 w6 w) r) | N8 wx, N8 wy => N9 (w8_mul_c wx wy) | N8 wx, N9 wy => let (w,r) := w8_mul_add_n1 1 wy wx W0 in if w8_eq0 w then N9 r else N10 (WW (extend1 w7 w) r) | N8 wx, N10 wy => let (w,r) := w8_mul_add_n1 2 wy wx W0 in if w8_eq0 w then N10 r else N11 (WW (extend2 w7 w) r) | N8 wx, N11 wy => let (w,r) := w8_mul_add_n1 3 wy wx W0 in if w8_eq0 w then N11 r else N12 (WW (extend3 w7 w) r) | N8 wx, N12 wy => let (w,r) := w8_mul_add_n1 4 wy wx W0 in if w8_eq0 w then N12 r else Nn 0 (WW (extend4 w7 w) r) | N8 wx, Nn n wy => let (w,r) := w12_mul_add_n1 (S n) wy (extend4 w7 wx) W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | N9 wx, N0 wy => if w0_eq0 wy then zero else let (w,r) := w0_mul_add_n1 9 wx wy w_0 in if w0_eq0 w then N9 r else N10 (WW (extend8 w0 (WW w_0 w)) r) | N9 wx, N1 wy => let (w,r) := w1_mul_add_n1 8 wx wy W0 in if w1_eq0 w then N9 r else N10 (WW (extend8 w0 w) r) | N9 wx, N2 wy => let (w,r) := w2_mul_add_n1 7 wx wy W0 in if w2_eq0 w then N9 r else N10 (WW (extend7 w1 w) r) | N9 wx, N3 wy => let (w,r) := w3_mul_add_n1 6 wx wy W0 in if w3_eq0 w then N9 r else N10 (WW (extend6 w2 w) r) | N9 wx, N4 wy => let (w,r) := w4_mul_add_n1 5 wx wy W0 in if w4_eq0 w then N9 r else N10 (WW (extend5 w3 w) r) | N9 wx, N5 wy => let (w,r) := w5_mul_add_n1 4 wx wy W0 in if w5_eq0 w then N9 r else N10 (WW (extend4 w4 w) r) | N9 wx, N6 wy => let (w,r) := w6_mul_add_n1 3 wx wy W0 in if w6_eq0 w then N9 r else N10 (WW (extend3 w5 w) r) | N9 wx, N7 wy => let (w,r) := w7_mul_add_n1 2 wx wy W0 in if w7_eq0 w then N9 r else N10 (WW (extend2 w6 w) r) | N9 wx, N8 wy => let (w,r) := w8_mul_add_n1 1 wx wy W0 in if w8_eq0 w then N9 r else N10 (WW (extend1 w7 w) r) | N9 wx, N9 wy => N10 (w9_mul_c wx wy) | N9 wx, N10 wy => let (w,r) := w9_mul_add_n1 1 wy wx W0 in if w9_eq0 w then N10 r else N11 (WW (extend1 w8 w) r) | N9 wx, N11 wy => let (w,r) := w9_mul_add_n1 2 wy wx W0 in if w9_eq0 w then N11 r else N12 (WW (extend2 w8 w) r) | N9 wx, N12 wy => let (w,r) := w9_mul_add_n1 3 wy wx W0 in if w9_eq0 w then N12 r else Nn 0 (WW (extend3 w8 w) r) | N9 wx, Nn n wy => let (w,r) := w12_mul_add_n1 (S n) wy (extend3 w8 wx) W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | N10 wx, N0 wy => if w0_eq0 wy then zero else let (w,r) := w0_mul_add_n1 10 wx wy w_0 in if w0_eq0 w then N10 r else N11 (WW (extend9 w0 (WW w_0 w)) r) | N10 wx, N1 wy => let (w,r) := w1_mul_add_n1 9 wx wy W0 in if w1_eq0 w then N10 r else N11 (WW (extend9 w0 w) r) | N10 wx, N2 wy => let (w,r) := w2_mul_add_n1 8 wx wy W0 in if w2_eq0 w then N10 r else N11 (WW (extend8 w1 w) r) | N10 wx, N3 wy => let (w,r) := w3_mul_add_n1 7 wx wy W0 in if w3_eq0 w then N10 r else N11 (WW (extend7 w2 w) r) | N10 wx, N4 wy => let (w,r) := w4_mul_add_n1 6 wx wy W0 in if w4_eq0 w then N10 r else N11 (WW (extend6 w3 w) r) | N10 wx, N5 wy => let (w,r) := w5_mul_add_n1 5 wx wy W0 in if w5_eq0 w then N10 r else N11 (WW (extend5 w4 w) r) | N10 wx, N6 wy => let (w,r) := w6_mul_add_n1 4 wx wy W0 in if w6_eq0 w then N10 r else N11 (WW (extend4 w5 w) r) | N10 wx, N7 wy => let (w,r) := w7_mul_add_n1 3 wx wy W0 in if w7_eq0 w then N10 r else N11 (WW (extend3 w6 w) r) | N10 wx, N8 wy => let (w,r) := w8_mul_add_n1 2 wx wy W0 in if w8_eq0 w then N10 r else N11 (WW (extend2 w7 w) r) | N10 wx, N9 wy => let (w,r) := w9_mul_add_n1 1 wx wy W0 in if w9_eq0 w then N10 r else N11 (WW (extend1 w8 w) r) | N10 wx, N10 wy => N11 (w10_mul_c wx wy) | N10 wx, N11 wy => let (w,r) := w10_mul_add_n1 1 wy wx W0 in if w10_eq0 w then N11 r else N12 (WW (extend1 w9 w) r) | N10 wx, N12 wy => let (w,r) := w10_mul_add_n1 2 wy wx W0 in if w10_eq0 w then N12 r else Nn 0 (WW (extend2 w9 w) r) | N10 wx, Nn n wy => let (w,r) := w12_mul_add_n1 (S n) wy (extend2 w9 wx) W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | N11 wx, N0 wy => if w0_eq0 wy then zero else let (w,r) := w0_mul_add_n1 11 wx wy w_0 in if w0_eq0 w then N11 r else N12 (WW (extend10 w0 (WW w_0 w)) r) | N11 wx, N1 wy => let (w,r) := w1_mul_add_n1 10 wx wy W0 in if w1_eq0 w then N11 r else N12 (WW (extend10 w0 w) r) | N11 wx, N2 wy => let (w,r) := w2_mul_add_n1 9 wx wy W0 in if w2_eq0 w then N11 r else N12 (WW (extend9 w1 w) r) | N11 wx, N3 wy => let (w,r) := w3_mul_add_n1 8 wx wy W0 in if w3_eq0 w then N11 r else N12 (WW (extend8 w2 w) r) | N11 wx, N4 wy => let (w,r) := w4_mul_add_n1 7 wx wy W0 in if w4_eq0 w then N11 r else N12 (WW (extend7 w3 w) r) | N11 wx, N5 wy => let (w,r) := w5_mul_add_n1 6 wx wy W0 in if w5_eq0 w then N11 r else N12 (WW (extend6 w4 w) r) | N11 wx, N6 wy => let (w,r) := w6_mul_add_n1 5 wx wy W0 in if w6_eq0 w then N11 r else N12 (WW (extend5 w5 w) r) | N11 wx, N7 wy => let (w,r) := w7_mul_add_n1 4 wx wy W0 in if w7_eq0 w then N11 r else N12 (WW (extend4 w6 w) r) | N11 wx, N8 wy => let (w,r) := w8_mul_add_n1 3 wx wy W0 in if w8_eq0 w then N11 r else N12 (WW (extend3 w7 w) r) | N11 wx, N9 wy => let (w,r) := w9_mul_add_n1 2 wx wy W0 in if w9_eq0 w then N11 r else N12 (WW (extend2 w8 w) r) | N11 wx, N10 wy => let (w,r) := w10_mul_add_n1 1 wx wy W0 in if w10_eq0 w then N11 r else N12 (WW (extend1 w9 w) r) | N11 wx, N11 wy => N12 (w11_mul_c wx wy) | N11 wx, N12 wy => let (w,r) := w11_mul_add_n1 1 wy wx W0 in if w11_eq0 w then N12 r else Nn 0 (WW (extend1 w10 w) r) | N11 wx, Nn n wy => let (w,r) := w12_mul_add_n1 (S n) wy (extend1 w10 wx) W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | N12 wx, N0 wy => if w0_eq0 wy then zero else let (w,r) := w0_mul_add_n1 12 wx wy w_0 in if w0_eq0 w then N12 r else Nn 0 (WW (extend11 w0 (WW w_0 w)) r) | N12 wx, N1 wy => let (w,r) := w1_mul_add_n1 11 wx wy W0 in if w1_eq0 w then N12 r else Nn 0 (WW (extend11 w0 w) r) | N12 wx, N2 wy => let (w,r) := w2_mul_add_n1 10 wx wy W0 in if w2_eq0 w then N12 r else Nn 0 (WW (extend10 w1 w) r) | N12 wx, N3 wy => let (w,r) := w3_mul_add_n1 9 wx wy W0 in if w3_eq0 w then N12 r else Nn 0 (WW (extend9 w2 w) r) | N12 wx, N4 wy => let (w,r) := w4_mul_add_n1 8 wx wy W0 in if w4_eq0 w then N12 r else Nn 0 (WW (extend8 w3 w) r) | N12 wx, N5 wy => let (w,r) := w5_mul_add_n1 7 wx wy W0 in if w5_eq0 w then N12 r else Nn 0 (WW (extend7 w4 w) r) | N12 wx, N6 wy => let (w,r) := w6_mul_add_n1 6 wx wy W0 in if w6_eq0 w then N12 r else Nn 0 (WW (extend6 w5 w) r) | N12 wx, N7 wy => let (w,r) := w7_mul_add_n1 5 wx wy W0 in if w7_eq0 w then N12 r else Nn 0 (WW (extend5 w6 w) r) | N12 wx, N8 wy => let (w,r) := w8_mul_add_n1 4 wx wy W0 in if w8_eq0 w then N12 r else Nn 0 (WW (extend4 w7 w) r) | N12 wx, N9 wy => let (w,r) := w9_mul_add_n1 3 wx wy W0 in if w9_eq0 w then N12 r else Nn 0 (WW (extend3 w8 w) r) | N12 wx, N10 wy => let (w,r) := w10_mul_add_n1 2 wx wy W0 in if w10_eq0 w then N12 r else Nn 0 (WW (extend2 w9 w) r) | N12 wx, N11 wy => let (w,r) := w11_mul_add_n1 1 wx wy W0 in if w11_eq0 w then N12 r else Nn 0 (WW (extend1 w10 w) r) | N12 wx, N12 wy => Nn 0 (w12_mul_c wx wy) | N12 wx, Nn n wy => let (w,r) := w12_mul_add_n1 (S n) wy wx W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | Nn n wx, N0 wy => if w0_eq0 wy then zero else let (w,r) := gen_mul_add_mn1 w_0 (fun r => extend11 w0 (WW w_0 r)) w12_op.(znz_0W) w12_op.(znz_WW) (w0_mul_add_n1 12) (S n) wx wy w_0 in if w0_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (extend12 w0 (WW w_0 w))) r) | Nn n wx, N1 wy => let (w,r) := gen_mul_add_mn1 W0 (fun r => extend11 w0 r) w12_op.(znz_0W) w12_op.(znz_WW) (w1_mul_add_n1 11) (S n) wx wy W0 in if w1_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (extend12 w0 w)) r) | Nn n wx, N2 wy => let (w,r) := w12_mul_add_n1 (S n) wx (extend10 w1 wy) W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | Nn n wx, N3 wy => let (w,r) := w12_mul_add_n1 (S n) wx (extend9 w2 wy) W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | Nn n wx, N4 wy => let (w,r) := w12_mul_add_n1 (S n) wx (extend8 w3 wy) W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | Nn n wx, N5 wy => let (w,r) := w12_mul_add_n1 (S n) wx (extend7 w4 wy) W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | Nn n wx, N6 wy => let (w,r) := w12_mul_add_n1 (S n) wx (extend6 w5 wy) W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | Nn n wx, N7 wy => let (w,r) := w12_mul_add_n1 (S n) wx (extend5 w6 wy) W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | Nn n wx, N8 wy => let (w,r) := w12_mul_add_n1 (S n) wx (extend4 w7 wy) W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | Nn n wx, N9 wy => let (w,r) := w12_mul_add_n1 (S n) wx (extend3 w8 wy) W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | Nn n wx, N10 wy => let (w,r) := w12_mul_add_n1 (S n) wx (extend2 w9 wy) W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | Nn n wx, N11 wy => let (w,r) := w12_mul_add_n1 (S n) wx (extend1 w10 wy) W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | Nn n wx, N12 wy => let (w,r) := w12_mul_add_n1 (S n) wx wy W0 in if w12_eq0 w then Nn n r else Nn (S n) (WW (extend n w12 (WW W0 w)) r) | Nn n wx, Nn m wy => match extend_to_max w12 n m wx wy with | inl wx' => let op := make_op m in reduce_n (S m) (op.(znz_mul_c) wx' wy) | inr wy' => let op := make_op n in reduce_n (S n) (op.(znz_mul_c) wx wy') end end. Definition w0_square_c := w0_op.(znz_square_c). Definition w1_square_c := w1_op.(znz_square_c). Definition w2_square_c := w2_op.(znz_square_c). Definition w3_square_c := w3_op.(znz_square_c). Definition w4_square_c := w4_op.(znz_square_c). Definition w5_square_c := w5_op.(znz_square_c). Definition w6_square_c := w6_op.(znz_square_c). Definition w7_square_c := w7_op.(znz_square_c). Definition w8_square_c := w8_op.(znz_square_c). Definition w9_square_c := w9_op.(znz_square_c). Definition w10_square_c := w10_op.(znz_square_c). Definition w11_square_c := w11_op.(znz_square_c). Definition w12_square_c := w12_op.(znz_square_c). Definition square x := match x with | N0 wx => reduce_1 (w0_square_c wx) | N1 wx => N2 (w1_square_c wx) | N2 wx => N3 (w2_square_c wx) | N3 wx => N4 (w3_square_c wx) | N4 wx => N5 (w4_square_c wx) | N5 wx => N6 (w5_square_c wx) | N6 wx => N7 (w6_square_c wx) | N7 wx => N8 (w7_square_c wx) | N8 wx => N9 (w8_square_c wx) | N9 wx => N10 (w9_square_c wx) | N10 wx => N11 (w10_square_c wx) | N11 wx => N12 (w11_square_c wx) | N12 wx => Nn 0 (w12_square_c wx) | Nn n wx => let op := make_op n in Nn (S n) (op.(znz_square_c) wx) end. Fixpoint power_pos (x:t) (p:positive) {struct p} : t := match p with | xH => x | xO p => square (power_pos x p) | xI p => mul (square (power_pos x p)) x end. Definition w0_sqrt := w0_op.(znz_sqrt). Definition w1_sqrt := w1_op.(znz_sqrt). Definition w2_sqrt := w2_op.(znz_sqrt). Definition w3_sqrt := w3_op.(znz_sqrt). Definition w4_sqrt := w4_op.(znz_sqrt). Definition w5_sqrt := w5_op.(znz_sqrt). Definition w6_sqrt := w6_op.(znz_sqrt). Definition w7_sqrt := w7_op.(znz_sqrt). Definition w8_sqrt := w8_op.(znz_sqrt). Definition w9_sqrt := w9_op.(znz_sqrt). Definition w10_sqrt := w10_op.(znz_sqrt). Definition w11_sqrt := w11_op.(znz_sqrt). Definition w12_sqrt := w12_op.(znz_sqrt). Definition sqrt x := match x with | N0 wx => reduce_0 (w0_sqrt wx) | N1 wx => reduce_1 (w1_sqrt wx) | N2 wx => reduce_2 (w2_sqrt wx) | N3 wx => reduce_3 (w3_sqrt wx) | N4 wx => reduce_4 (w4_sqrt wx) | N5 wx => reduce_5 (w5_sqrt wx) | N6 wx => reduce_6 (w6_sqrt wx) | N7 wx => reduce_7 (w7_sqrt wx) | N8 wx => reduce_8 (w8_sqrt wx) | N9 wx => reduce_9 (w9_sqrt wx) | N10 wx => reduce_10 (w10_sqrt wx) | N11 wx => reduce_11 (w11_sqrt wx) | N12 wx => reduce_12 (w12_sqrt wx) | Nn n wx => let op := make_op n in reduce_n n (op.(znz_sqrt) wx) end. Definition w0_div_gt := w0_op.(znz_div_gt). Definition w1_div_gt := w1_op.(znz_div_gt). Definition w2_div_gt := w2_op.(znz_div_gt). Definition w3_div_gt := w3_op.(znz_div_gt). Definition w4_div_gt := w4_op.(znz_div_gt). Definition w5_div_gt := w5_op.(znz_div_gt). Definition w6_div_gt := w6_op.(znz_div_gt). Definition w7_div_gt := w7_op.(znz_div_gt). Definition w8_div_gt := w8_op.(znz_div_gt). Definition w9_div_gt := w9_op.(znz_div_gt). Definition w10_div_gt := w10_op.(znz_div_gt). Definition w11_div_gt := w11_op.(znz_div_gt). Definition w12_div_gt := w12_op.(znz_div_gt). Definition w0_divn1 := gen_divn1 w0_op.(znz_digits) w0_op.(znz_0) w0_op.(znz_WW) w0_op.(znz_head0) w0_op.(znz_add_mul_div) w0_op.(znz_div21). Definition w1_divn1 := gen_divn1 w1_op.(znz_digits) w1_op.(znz_0) w1_op.(znz_WW) w1_op.(znz_head0) w1_op.(znz_add_mul_div) w1_op.(znz_div21). Definition w2_divn1 := gen_divn1 w2_op.(znz_digits) w2_op.(znz_0) w2_op.(znz_WW) w2_op.(znz_head0) w2_op.(znz_add_mul_div) w2_op.(znz_div21). Definition w3_divn1 := gen_divn1 w3_op.(znz_digits) w3_op.(znz_0) w3_op.(znz_WW) w3_op.(znz_head0) w3_op.(znz_add_mul_div) w3_op.(znz_div21). Definition w4_divn1 := gen_divn1 w4_op.(znz_digits) w4_op.(znz_0) w4_op.(znz_WW) w4_op.(znz_head0) w4_op.(znz_add_mul_div) w4_op.(znz_div21). Definition w5_divn1 := gen_divn1 w5_op.(znz_digits) w5_op.(znz_0) w5_op.(znz_WW) w5_op.(znz_head0) w5_op.(znz_add_mul_div) w5_op.(znz_div21). Definition w6_divn1 := gen_divn1 w6_op.(znz_digits) w6_op.(znz_0) w6_op.(znz_WW) w6_op.(znz_head0) w6_op.(znz_add_mul_div) w6_op.(znz_div21). Definition w7_divn1 := gen_divn1 w7_op.(znz_digits) w7_op.(znz_0) w7_op.(znz_WW) w7_op.(znz_head0) w7_op.(znz_add_mul_div) w7_op.(znz_div21). Definition w8_divn1 := gen_divn1 w8_op.(znz_digits) w8_op.(znz_0) w8_op.(znz_WW) w8_op.(znz_head0) w8_op.(znz_add_mul_div) w8_op.(znz_div21). Definition w9_divn1 := gen_divn1 w9_op.(znz_digits) w9_op.(znz_0) w9_op.(znz_WW) w9_op.(znz_head0) w9_op.(znz_add_mul_div) w9_op.(znz_div21). Definition w10_divn1 := gen_divn1 w10_op.(znz_digits) w10_op.(znz_0) w10_op.(znz_WW) w10_op.(znz_head0) w10_op.(znz_add_mul_div) w10_op.(znz_div21). Definition w11_divn1 := gen_divn1 w11_op.(znz_digits) w11_op.(znz_0) w11_op.(znz_WW) w11_op.(znz_head0) w11_op.(znz_add_mul_div) w11_op.(znz_div21). Definition w12_divn1 := gen_divn1 w12_op.(znz_digits) w12_op.(znz_0) w12_op.(znz_WW) w12_op.(znz_head0) w12_op.(znz_add_mul_div) w12_op.(znz_div21). Definition div_gt x y := match x, y with | N0 wx, N0 wy => let (q, r):= w0_div_gt wx wy in (reduce_0 q, reduce_0 r) | N0 wx, N1 wy => let wx':= GenBase.extend w0_op.(znz_0W) 0 wx in let (q, r):= w1_div_gt wx' wy in (reduce_1 q, reduce_1 r) | N0 wx, N2 wy => let wx':= GenBase.extend w0_op.(znz_0W) 1 wx in let (q, r):= w2_div_gt wx' wy in (reduce_2 q, reduce_2 r) | N0 wx, N3 wy => let wx':= GenBase.extend w0_op.(znz_0W) 2 wx in let (q, r):= w3_div_gt wx' wy in (reduce_3 q, reduce_3 r) | N0 wx, N4 wy => let wx':= GenBase.extend w0_op.(znz_0W) 3 wx in let (q, r):= w4_div_gt wx' wy in (reduce_4 q, reduce_4 r) | N0 wx, N5 wy => let wx':= GenBase.extend w0_op.(znz_0W) 4 wx in let (q, r):= w5_div_gt wx' wy in (reduce_5 q, reduce_5 r) | N0 wx, N6 wy => let wx':= GenBase.extend w0_op.(znz_0W) 5 wx in let (q, r):= w6_div_gt wx' wy in (reduce_6 q, reduce_6 r) | N0 wx, N7 wy => let wx':= GenBase.extend w0_op.(znz_0W) 6 wx in let (q, r):= w7_div_gt wx' wy in (reduce_7 q, reduce_7 r) | N0 wx, N8 wy => let wx':= GenBase.extend w0_op.(znz_0W) 7 wx in let (q, r):= w8_div_gt wx' wy in (reduce_8 q, reduce_8 r) | N0 wx, N9 wy => let wx':= GenBase.extend w0_op.(znz_0W) 8 wx in let (q, r):= w9_div_gt wx' wy in (reduce_9 q, reduce_9 r) | N0 wx, N10 wy => let wx':= GenBase.extend w0_op.(znz_0W) 9 wx in let (q, r):= w10_div_gt wx' wy in (reduce_10 q, reduce_10 r) | N0 wx, N11 wy => let wx':= GenBase.extend w0_op.(znz_0W) 10 wx in let (q, r):= w11_div_gt wx' wy in (reduce_11 q, reduce_11 r) | N0 wx, N12 wy => let wx':= GenBase.extend w0_op.(znz_0W) 11 wx in let (q, r):= w12_div_gt wx' wy in (reduce_12 q, reduce_12 r) | N0 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w0_op.(znz_0W) 12 wx) in let (q, r):= (make_op n).(znz_div_gt) wx' wy in (reduce_n n q, reduce_n n r) | N1 wx, N0 wy => let (q, r):= w0_divn1 1 wx wy in (reduce_1 q, reduce_0 r) | N1 wx, N1 wy => let (q, r):= w1_div_gt wx wy in (reduce_1 q, reduce_1 r) | N1 wx, N2 wy => let wx':= GenBase.extend w1_op.(znz_0W) 0 wx in let (q, r):= w2_div_gt wx' wy in (reduce_2 q, reduce_2 r) | N1 wx, N3 wy => let wx':= GenBase.extend w1_op.(znz_0W) 1 wx in let (q, r):= w3_div_gt wx' wy in (reduce_3 q, reduce_3 r) | N1 wx, N4 wy => let wx':= GenBase.extend w1_op.(znz_0W) 2 wx in let (q, r):= w4_div_gt wx' wy in (reduce_4 q, reduce_4 r) | N1 wx, N5 wy => let wx':= GenBase.extend w1_op.(znz_0W) 3 wx in let (q, r):= w5_div_gt wx' wy in (reduce_5 q, reduce_5 r) | N1 wx, N6 wy => let wx':= GenBase.extend w1_op.(znz_0W) 4 wx in let (q, r):= w6_div_gt wx' wy in (reduce_6 q, reduce_6 r) | N1 wx, N7 wy => let wx':= GenBase.extend w1_op.(znz_0W) 5 wx in let (q, r):= w7_div_gt wx' wy in (reduce_7 q, reduce_7 r) | N1 wx, N8 wy => let wx':= GenBase.extend w1_op.(znz_0W) 6 wx in let (q, r):= w8_div_gt wx' wy in (reduce_8 q, reduce_8 r) | N1 wx, N9 wy => let wx':= GenBase.extend w1_op.(znz_0W) 7 wx in let (q, r):= w9_div_gt wx' wy in (reduce_9 q, reduce_9 r) | N1 wx, N10 wy => let wx':= GenBase.extend w1_op.(znz_0W) 8 wx in let (q, r):= w10_div_gt wx' wy in (reduce_10 q, reduce_10 r) | N1 wx, N11 wy => let wx':= GenBase.extend w1_op.(znz_0W) 9 wx in let (q, r):= w11_div_gt wx' wy in (reduce_11 q, reduce_11 r) | N1 wx, N12 wy => let wx':= GenBase.extend w1_op.(znz_0W) 10 wx in let (q, r):= w12_div_gt wx' wy in (reduce_12 q, reduce_12 r) | N1 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w1_op.(znz_0W) 11 wx) in let (q, r):= (make_op n).(znz_div_gt) wx' wy in (reduce_n n q, reduce_n n r) | N2 wx, N0 wy => let (q, r):= w0_divn1 2 wx wy in (reduce_2 q, reduce_0 r) | N2 wx, N1 wy => let (q, r):= w1_divn1 1 wx wy in (reduce_2 q, reduce_1 r) | N2 wx, N2 wy => let (q, r):= w2_div_gt wx wy in (reduce_2 q, reduce_2 r) | N2 wx, N3 wy => let wx':= GenBase.extend w2_op.(znz_0W) 0 wx in let (q, r):= w3_div_gt wx' wy in (reduce_3 q, reduce_3 r) | N2 wx, N4 wy => let wx':= GenBase.extend w2_op.(znz_0W) 1 wx in let (q, r):= w4_div_gt wx' wy in (reduce_4 q, reduce_4 r) | N2 wx, N5 wy => let wx':= GenBase.extend w2_op.(znz_0W) 2 wx in let (q, r):= w5_div_gt wx' wy in (reduce_5 q, reduce_5 r) | N2 wx, N6 wy => let wx':= GenBase.extend w2_op.(znz_0W) 3 wx in let (q, r):= w6_div_gt wx' wy in (reduce_6 q, reduce_6 r) | N2 wx, N7 wy => let wx':= GenBase.extend w2_op.(znz_0W) 4 wx in let (q, r):= w7_div_gt wx' wy in (reduce_7 q, reduce_7 r) | N2 wx, N8 wy => let wx':= GenBase.extend w2_op.(znz_0W) 5 wx in let (q, r):= w8_div_gt wx' wy in (reduce_8 q, reduce_8 r) | N2 wx, N9 wy => let wx':= GenBase.extend w2_op.(znz_0W) 6 wx in let (q, r):= w9_div_gt wx' wy in (reduce_9 q, reduce_9 r) | N2 wx, N10 wy => let wx':= GenBase.extend w2_op.(znz_0W) 7 wx in let (q, r):= w10_div_gt wx' wy in (reduce_10 q, reduce_10 r) | N2 wx, N11 wy => let wx':= GenBase.extend w2_op.(znz_0W) 8 wx in let (q, r):= w11_div_gt wx' wy in (reduce_11 q, reduce_11 r) | N2 wx, N12 wy => let wx':= GenBase.extend w2_op.(znz_0W) 9 wx in let (q, r):= w12_div_gt wx' wy in (reduce_12 q, reduce_12 r) | N2 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w2_op.(znz_0W) 10 wx) in let (q, r):= (make_op n).(znz_div_gt) wx' wy in (reduce_n n q, reduce_n n r) | N3 wx, N0 wy => let (q, r):= w0_divn1 3 wx wy in (reduce_3 q, reduce_0 r) | N3 wx, N1 wy => let (q, r):= w1_divn1 2 wx wy in (reduce_3 q, reduce_1 r) | N3 wx, N2 wy => let (q, r):= w2_divn1 1 wx wy in (reduce_3 q, reduce_2 r) | N3 wx, N3 wy => let (q, r):= w3_div_gt wx wy in (reduce_3 q, reduce_3 r) | N3 wx, N4 wy => let wx':= GenBase.extend w3_op.(znz_0W) 0 wx in let (q, r):= w4_div_gt wx' wy in (reduce_4 q, reduce_4 r) | N3 wx, N5 wy => let wx':= GenBase.extend w3_op.(znz_0W) 1 wx in let (q, r):= w5_div_gt wx' wy in (reduce_5 q, reduce_5 r) | N3 wx, N6 wy => let wx':= GenBase.extend w3_op.(znz_0W) 2 wx in let (q, r):= w6_div_gt wx' wy in (reduce_6 q, reduce_6 r) | N3 wx, N7 wy => let wx':= GenBase.extend w3_op.(znz_0W) 3 wx in let (q, r):= w7_div_gt wx' wy in (reduce_7 q, reduce_7 r) | N3 wx, N8 wy => let wx':= GenBase.extend w3_op.(znz_0W) 4 wx in let (q, r):= w8_div_gt wx' wy in (reduce_8 q, reduce_8 r) | N3 wx, N9 wy => let wx':= GenBase.extend w3_op.(znz_0W) 5 wx in let (q, r):= w9_div_gt wx' wy in (reduce_9 q, reduce_9 r) | N3 wx, N10 wy => let wx':= GenBase.extend w3_op.(znz_0W) 6 wx in let (q, r):= w10_div_gt wx' wy in (reduce_10 q, reduce_10 r) | N3 wx, N11 wy => let wx':= GenBase.extend w3_op.(znz_0W) 7 wx in let (q, r):= w11_div_gt wx' wy in (reduce_11 q, reduce_11 r) | N3 wx, N12 wy => let wx':= GenBase.extend w3_op.(znz_0W) 8 wx in let (q, r):= w12_div_gt wx' wy in (reduce_12 q, reduce_12 r) | N3 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w3_op.(znz_0W) 9 wx) in let (q, r):= (make_op n).(znz_div_gt) wx' wy in (reduce_n n q, reduce_n n r) | N4 wx, N0 wy => let (q, r):= w0_divn1 4 wx wy in (reduce_4 q, reduce_0 r) | N4 wx, N1 wy => let (q, r):= w1_divn1 3 wx wy in (reduce_4 q, reduce_1 r) | N4 wx, N2 wy => let (q, r):= w2_divn1 2 wx wy in (reduce_4 q, reduce_2 r) | N4 wx, N3 wy => let (q, r):= w3_divn1 1 wx wy in (reduce_4 q, reduce_3 r) | N4 wx, N4 wy => let (q, r):= w4_div_gt wx wy in (reduce_4 q, reduce_4 r) | N4 wx, N5 wy => let wx':= GenBase.extend w4_op.(znz_0W) 0 wx in let (q, r):= w5_div_gt wx' wy in (reduce_5 q, reduce_5 r) | N4 wx, N6 wy => let wx':= GenBase.extend w4_op.(znz_0W) 1 wx in let (q, r):= w6_div_gt wx' wy in (reduce_6 q, reduce_6 r) | N4 wx, N7 wy => let wx':= GenBase.extend w4_op.(znz_0W) 2 wx in let (q, r):= w7_div_gt wx' wy in (reduce_7 q, reduce_7 r) | N4 wx, N8 wy => let wx':= GenBase.extend w4_op.(znz_0W) 3 wx in let (q, r):= w8_div_gt wx' wy in (reduce_8 q, reduce_8 r) | N4 wx, N9 wy => let wx':= GenBase.extend w4_op.(znz_0W) 4 wx in let (q, r):= w9_div_gt wx' wy in (reduce_9 q, reduce_9 r) | N4 wx, N10 wy => let wx':= GenBase.extend w4_op.(znz_0W) 5 wx in let (q, r):= w10_div_gt wx' wy in (reduce_10 q, reduce_10 r) | N4 wx, N11 wy => let wx':= GenBase.extend w4_op.(znz_0W) 6 wx in let (q, r):= w11_div_gt wx' wy in (reduce_11 q, reduce_11 r) | N4 wx, N12 wy => let wx':= GenBase.extend w4_op.(znz_0W) 7 wx in let (q, r):= w12_div_gt wx' wy in (reduce_12 q, reduce_12 r) | N4 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w4_op.(znz_0W) 8 wx) in let (q, r):= (make_op n).(znz_div_gt) wx' wy in (reduce_n n q, reduce_n n r) | N5 wx, N0 wy => let (q, r):= w0_divn1 5 wx wy in (reduce_5 q, reduce_0 r) | N5 wx, N1 wy => let (q, r):= w1_divn1 4 wx wy in (reduce_5 q, reduce_1 r) | N5 wx, N2 wy => let (q, r):= w2_divn1 3 wx wy in (reduce_5 q, reduce_2 r) | N5 wx, N3 wy => let (q, r):= w3_divn1 2 wx wy in (reduce_5 q, reduce_3 r) | N5 wx, N4 wy => let (q, r):= w4_divn1 1 wx wy in (reduce_5 q, reduce_4 r) | N5 wx, N5 wy => let (q, r):= w5_div_gt wx wy in (reduce_5 q, reduce_5 r) | N5 wx, N6 wy => let wx':= GenBase.extend w5_op.(znz_0W) 0 wx in let (q, r):= w6_div_gt wx' wy in (reduce_6 q, reduce_6 r) | N5 wx, N7 wy => let wx':= GenBase.extend w5_op.(znz_0W) 1 wx in let (q, r):= w7_div_gt wx' wy in (reduce_7 q, reduce_7 r) | N5 wx, N8 wy => let wx':= GenBase.extend w5_op.(znz_0W) 2 wx in let (q, r):= w8_div_gt wx' wy in (reduce_8 q, reduce_8 r) | N5 wx, N9 wy => let wx':= GenBase.extend w5_op.(znz_0W) 3 wx in let (q, r):= w9_div_gt wx' wy in (reduce_9 q, reduce_9 r) | N5 wx, N10 wy => let wx':= GenBase.extend w5_op.(znz_0W) 4 wx in let (q, r):= w10_div_gt wx' wy in (reduce_10 q, reduce_10 r) | N5 wx, N11 wy => let wx':= GenBase.extend w5_op.(znz_0W) 5 wx in let (q, r):= w11_div_gt wx' wy in (reduce_11 q, reduce_11 r) | N5 wx, N12 wy => let wx':= GenBase.extend w5_op.(znz_0W) 6 wx in let (q, r):= w12_div_gt wx' wy in (reduce_12 q, reduce_12 r) | N5 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w5_op.(znz_0W) 7 wx) in let (q, r):= (make_op n).(znz_div_gt) wx' wy in (reduce_n n q, reduce_n n r) | N6 wx, N0 wy => let (q, r):= w0_divn1 6 wx wy in (reduce_6 q, reduce_0 r) | N6 wx, N1 wy => let (q, r):= w1_divn1 5 wx wy in (reduce_6 q, reduce_1 r) | N6 wx, N2 wy => let (q, r):= w2_divn1 4 wx wy in (reduce_6 q, reduce_2 r) | N6 wx, N3 wy => let (q, r):= w3_divn1 3 wx wy in (reduce_6 q, reduce_3 r) | N6 wx, N4 wy => let (q, r):= w4_divn1 2 wx wy in (reduce_6 q, reduce_4 r) | N6 wx, N5 wy => let (q, r):= w5_divn1 1 wx wy in (reduce_6 q, reduce_5 r) | N6 wx, N6 wy => let (q, r):= w6_div_gt wx wy in (reduce_6 q, reduce_6 r) | N6 wx, N7 wy => let wx':= GenBase.extend w6_op.(znz_0W) 0 wx in let (q, r):= w7_div_gt wx' wy in (reduce_7 q, reduce_7 r) | N6 wx, N8 wy => let wx':= GenBase.extend w6_op.(znz_0W) 1 wx in let (q, r):= w8_div_gt wx' wy in (reduce_8 q, reduce_8 r) | N6 wx, N9 wy => let wx':= GenBase.extend w6_op.(znz_0W) 2 wx in let (q, r):= w9_div_gt wx' wy in (reduce_9 q, reduce_9 r) | N6 wx, N10 wy => let wx':= GenBase.extend w6_op.(znz_0W) 3 wx in let (q, r):= w10_div_gt wx' wy in (reduce_10 q, reduce_10 r) | N6 wx, N11 wy => let wx':= GenBase.extend w6_op.(znz_0W) 4 wx in let (q, r):= w11_div_gt wx' wy in (reduce_11 q, reduce_11 r) | N6 wx, N12 wy => let wx':= GenBase.extend w6_op.(znz_0W) 5 wx in let (q, r):= w12_div_gt wx' wy in (reduce_12 q, reduce_12 r) | N6 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w6_op.(znz_0W) 6 wx) in let (q, r):= (make_op n).(znz_div_gt) wx' wy in (reduce_n n q, reduce_n n r) | N7 wx, N0 wy => let (q, r):= w0_divn1 7 wx wy in (reduce_7 q, reduce_0 r) | N7 wx, N1 wy => let (q, r):= w1_divn1 6 wx wy in (reduce_7 q, reduce_1 r) | N7 wx, N2 wy => let (q, r):= w2_divn1 5 wx wy in (reduce_7 q, reduce_2 r) | N7 wx, N3 wy => let (q, r):= w3_divn1 4 wx wy in (reduce_7 q, reduce_3 r) | N7 wx, N4 wy => let (q, r):= w4_divn1 3 wx wy in (reduce_7 q, reduce_4 r) | N7 wx, N5 wy => let (q, r):= w5_divn1 2 wx wy in (reduce_7 q, reduce_5 r) | N7 wx, N6 wy => let (q, r):= w6_divn1 1 wx wy in (reduce_7 q, reduce_6 r) | N7 wx, N7 wy => let (q, r):= w7_div_gt wx wy in (reduce_7 q, reduce_7 r) | N7 wx, N8 wy => let wx':= GenBase.extend w7_op.(znz_0W) 0 wx in let (q, r):= w8_div_gt wx' wy in (reduce_8 q, reduce_8 r) | N7 wx, N9 wy => let wx':= GenBase.extend w7_op.(znz_0W) 1 wx in let (q, r):= w9_div_gt wx' wy in (reduce_9 q, reduce_9 r) | N7 wx, N10 wy => let wx':= GenBase.extend w7_op.(znz_0W) 2 wx in let (q, r):= w10_div_gt wx' wy in (reduce_10 q, reduce_10 r) | N7 wx, N11 wy => let wx':= GenBase.extend w7_op.(znz_0W) 3 wx in let (q, r):= w11_div_gt wx' wy in (reduce_11 q, reduce_11 r) | N7 wx, N12 wy => let wx':= GenBase.extend w7_op.(znz_0W) 4 wx in let (q, r):= w12_div_gt wx' wy in (reduce_12 q, reduce_12 r) | N7 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w7_op.(znz_0W) 5 wx) in let (q, r):= (make_op n).(znz_div_gt) wx' wy in (reduce_n n q, reduce_n n r) | N8 wx, N0 wy => let (q, r):= w0_divn1 8 wx wy in (reduce_8 q, reduce_0 r) | N8 wx, N1 wy => let (q, r):= w1_divn1 7 wx wy in (reduce_8 q, reduce_1 r) | N8 wx, N2 wy => let (q, r):= w2_divn1 6 wx wy in (reduce_8 q, reduce_2 r) | N8 wx, N3 wy => let (q, r):= w3_divn1 5 wx wy in (reduce_8 q, reduce_3 r) | N8 wx, N4 wy => let (q, r):= w4_divn1 4 wx wy in (reduce_8 q, reduce_4 r) | N8 wx, N5 wy => let (q, r):= w5_divn1 3 wx wy in (reduce_8 q, reduce_5 r) | N8 wx, N6 wy => let (q, r):= w6_divn1 2 wx wy in (reduce_8 q, reduce_6 r) | N8 wx, N7 wy => let (q, r):= w7_divn1 1 wx wy in (reduce_8 q, reduce_7 r) | N8 wx, N8 wy => let (q, r):= w8_div_gt wx wy in (reduce_8 q, reduce_8 r) | N8 wx, N9 wy => let wx':= GenBase.extend w8_op.(znz_0W) 0 wx in let (q, r):= w9_div_gt wx' wy in (reduce_9 q, reduce_9 r) | N8 wx, N10 wy => let wx':= GenBase.extend w8_op.(znz_0W) 1 wx in let (q, r):= w10_div_gt wx' wy in (reduce_10 q, reduce_10 r) | N8 wx, N11 wy => let wx':= GenBase.extend w8_op.(znz_0W) 2 wx in let (q, r):= w11_div_gt wx' wy in (reduce_11 q, reduce_11 r) | N8 wx, N12 wy => let wx':= GenBase.extend w8_op.(znz_0W) 3 wx in let (q, r):= w12_div_gt wx' wy in (reduce_12 q, reduce_12 r) | N8 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w8_op.(znz_0W) 4 wx) in let (q, r):= (make_op n).(znz_div_gt) wx' wy in (reduce_n n q, reduce_n n r) | N9 wx, N0 wy => let (q, r):= w0_divn1 9 wx wy in (reduce_9 q, reduce_0 r) | N9 wx, N1 wy => let (q, r):= w1_divn1 8 wx wy in (reduce_9 q, reduce_1 r) | N9 wx, N2 wy => let (q, r):= w2_divn1 7 wx wy in (reduce_9 q, reduce_2 r) | N9 wx, N3 wy => let (q, r):= w3_divn1 6 wx wy in (reduce_9 q, reduce_3 r) | N9 wx, N4 wy => let (q, r):= w4_divn1 5 wx wy in (reduce_9 q, reduce_4 r) | N9 wx, N5 wy => let (q, r):= w5_divn1 4 wx wy in (reduce_9 q, reduce_5 r) | N9 wx, N6 wy => let (q, r):= w6_divn1 3 wx wy in (reduce_9 q, reduce_6 r) | N9 wx, N7 wy => let (q, r):= w7_divn1 2 wx wy in (reduce_9 q, reduce_7 r) | N9 wx, N8 wy => let (q, r):= w8_divn1 1 wx wy in (reduce_9 q, reduce_8 r) | N9 wx, N9 wy => let (q, r):= w9_div_gt wx wy in (reduce_9 q, reduce_9 r) | N9 wx, N10 wy => let wx':= GenBase.extend w9_op.(znz_0W) 0 wx in let (q, r):= w10_div_gt wx' wy in (reduce_10 q, reduce_10 r) | N9 wx, N11 wy => let wx':= GenBase.extend w9_op.(znz_0W) 1 wx in let (q, r):= w11_div_gt wx' wy in (reduce_11 q, reduce_11 r) | N9 wx, N12 wy => let wx':= GenBase.extend w9_op.(znz_0W) 2 wx in let (q, r):= w12_div_gt wx' wy in (reduce_12 q, reduce_12 r) | N9 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w9_op.(znz_0W) 3 wx) in let (q, r):= (make_op n).(znz_div_gt) wx' wy in (reduce_n n q, reduce_n n r) | N10 wx, N0 wy => let (q, r):= w0_divn1 10 wx wy in (reduce_10 q, reduce_0 r) | N10 wx, N1 wy => let (q, r):= w1_divn1 9 wx wy in (reduce_10 q, reduce_1 r) | N10 wx, N2 wy => let (q, r):= w2_divn1 8 wx wy in (reduce_10 q, reduce_2 r) | N10 wx, N3 wy => let (q, r):= w3_divn1 7 wx wy in (reduce_10 q, reduce_3 r) | N10 wx, N4 wy => let (q, r):= w4_divn1 6 wx wy in (reduce_10 q, reduce_4 r) | N10 wx, N5 wy => let (q, r):= w5_divn1 5 wx wy in (reduce_10 q, reduce_5 r) | N10 wx, N6 wy => let (q, r):= w6_divn1 4 wx wy in (reduce_10 q, reduce_6 r) | N10 wx, N7 wy => let (q, r):= w7_divn1 3 wx wy in (reduce_10 q, reduce_7 r) | N10 wx, N8 wy => let (q, r):= w8_divn1 2 wx wy in (reduce_10 q, reduce_8 r) | N10 wx, N9 wy => let (q, r):= w9_divn1 1 wx wy in (reduce_10 q, reduce_9 r) | N10 wx, N10 wy => let (q, r):= w10_div_gt wx wy in (reduce_10 q, reduce_10 r) | N10 wx, N11 wy => let wx':= GenBase.extend w10_op.(znz_0W) 0 wx in let (q, r):= w11_div_gt wx' wy in (reduce_11 q, reduce_11 r) | N10 wx, N12 wy => let wx':= GenBase.extend w10_op.(znz_0W) 1 wx in let (q, r):= w12_div_gt wx' wy in (reduce_12 q, reduce_12 r) | N10 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w10_op.(znz_0W) 2 wx) in let (q, r):= (make_op n).(znz_div_gt) wx' wy in (reduce_n n q, reduce_n n r) | N11 wx, N0 wy => let (q, r):= w0_divn1 11 wx wy in (reduce_11 q, reduce_0 r) | N11 wx, N1 wy => let (q, r):= w1_divn1 10 wx wy in (reduce_11 q, reduce_1 r) | N11 wx, N2 wy => let (q, r):= w2_divn1 9 wx wy in (reduce_11 q, reduce_2 r) | N11 wx, N3 wy => let (q, r):= w3_divn1 8 wx wy in (reduce_11 q, reduce_3 r) | N11 wx, N4 wy => let (q, r):= w4_divn1 7 wx wy in (reduce_11 q, reduce_4 r) | N11 wx, N5 wy => let (q, r):= w5_divn1 6 wx wy in (reduce_11 q, reduce_5 r) | N11 wx, N6 wy => let (q, r):= w6_divn1 5 wx wy in (reduce_11 q, reduce_6 r) | N11 wx, N7 wy => let (q, r):= w7_divn1 4 wx wy in (reduce_11 q, reduce_7 r) | N11 wx, N8 wy => let (q, r):= w8_divn1 3 wx wy in (reduce_11 q, reduce_8 r) | N11 wx, N9 wy => let (q, r):= w9_divn1 2 wx wy in (reduce_11 q, reduce_9 r) | N11 wx, N10 wy => let (q, r):= w10_divn1 1 wx wy in (reduce_11 q, reduce_10 r) | N11 wx, N11 wy => let (q, r):= w11_div_gt wx wy in (reduce_11 q, reduce_11 r) | N11 wx, N12 wy => let wx':= GenBase.extend w11_op.(znz_0W) 0 wx in let (q, r):= w12_div_gt wx' wy in (reduce_12 q, reduce_12 r) | N11 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w11_op.(znz_0W) 1 wx) in let (q, r):= (make_op n).(znz_div_gt) wx' wy in (reduce_n n q, reduce_n n r) | N12 wx, N0 wy => let (q, r):= w0_divn1 12 wx wy in (reduce_12 q, reduce_0 r) | N12 wx, N1 wy => let (q, r):= w1_divn1 11 wx wy in (reduce_12 q, reduce_1 r) | N12 wx, N2 wy => let (q, r):= w2_divn1 10 wx wy in (reduce_12 q, reduce_2 r) | N12 wx, N3 wy => let (q, r):= w3_divn1 9 wx wy in (reduce_12 q, reduce_3 r) | N12 wx, N4 wy => let (q, r):= w4_divn1 8 wx wy in (reduce_12 q, reduce_4 r) | N12 wx, N5 wy => let (q, r):= w5_divn1 7 wx wy in (reduce_12 q, reduce_5 r) | N12 wx, N6 wy => let (q, r):= w6_divn1 6 wx wy in (reduce_12 q, reduce_6 r) | N12 wx, N7 wy => let (q, r):= w7_divn1 5 wx wy in (reduce_12 q, reduce_7 r) | N12 wx, N8 wy => let (q, r):= w8_divn1 4 wx wy in (reduce_12 q, reduce_8 r) | N12 wx, N9 wy => let (q, r):= w9_divn1 3 wx wy in (reduce_12 q, reduce_9 r) | N12 wx, N10 wy => let (q, r):= w10_divn1 2 wx wy in (reduce_12 q, reduce_10 r) | N12 wx, N11 wy => let (q, r):= w11_divn1 1 wx wy in (reduce_12 q, reduce_11 r) | N12 wx, N12 wy => let (q, r):= w12_div_gt wx wy in (reduce_12 q, reduce_12 r) | N12 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w12_op.(znz_0W) 0 wx) in let (q, r):= (make_op n).(znz_div_gt) wx' wy in (reduce_n n q, reduce_n n r) | Nn n wx, N0 wy => let wy':= GenBase.extend w0_op.(znz_0W) 11 wy in let (q, r):= w12_divn1 (S n) wx wy' in (reduce_n n q, reduce_12 r) | Nn n wx, N1 wy => let wy':= GenBase.extend w1_op.(znz_0W) 10 wy in let (q, r):= w12_divn1 (S n) wx wy' in (reduce_n n q, reduce_12 r) | Nn n wx, N2 wy => let wy':= GenBase.extend w2_op.(znz_0W) 9 wy in let (q, r):= w12_divn1 (S n) wx wy' in (reduce_n n q, reduce_12 r) | Nn n wx, N3 wy => let wy':= GenBase.extend w3_op.(znz_0W) 8 wy in let (q, r):= w12_divn1 (S n) wx wy' in (reduce_n n q, reduce_12 r) | Nn n wx, N4 wy => let wy':= GenBase.extend w4_op.(znz_0W) 7 wy in let (q, r):= w12_divn1 (S n) wx wy' in (reduce_n n q, reduce_12 r) | Nn n wx, N5 wy => let wy':= GenBase.extend w5_op.(znz_0W) 6 wy in let (q, r):= w12_divn1 (S n) wx wy' in (reduce_n n q, reduce_12 r) | Nn n wx, N6 wy => let wy':= GenBase.extend w6_op.(znz_0W) 5 wy in let (q, r):= w12_divn1 (S n) wx wy' in (reduce_n n q, reduce_12 r) | Nn n wx, N7 wy => let wy':= GenBase.extend w7_op.(znz_0W) 4 wy in let (q, r):= w12_divn1 (S n) wx wy' in (reduce_n n q, reduce_12 r) | Nn n wx, N8 wy => let wy':= GenBase.extend w8_op.(znz_0W) 3 wy in let (q, r):= w12_divn1 (S n) wx wy' in (reduce_n n q, reduce_12 r) | Nn n wx, N9 wy => let wy':= GenBase.extend w9_op.(znz_0W) 2 wy in let (q, r):= w12_divn1 (S n) wx wy' in (reduce_n n q, reduce_12 r) | Nn n wx, N10 wy => let wy':= GenBase.extend w10_op.(znz_0W) 1 wy in let (q, r):= w12_divn1 (S n) wx wy' in (reduce_n n q, reduce_12 r) | Nn n wx, N11 wy => let wy':= GenBase.extend w11_op.(znz_0W) 0 wy in let (q, r):= w12_divn1 (S n) wx wy' in (reduce_n n q, reduce_12 r) | Nn n wx, N12 wy => let wy':= wy in let (q, r):= w12_divn1 (S n) wx wy' in (reduce_n n q, reduce_12 r) | Nn n wx, Nn m wy => match extend_to_max w12 n m wx wy with | inl wx' => let (q, r):= (make_op m).(znz_div) wx' wy in (reduce_n m q, reduce_n m r) | inr wy' => let (q, r):= (make_op n).(znz_div) wx wy' in (reduce_n n q, reduce_n n r) end end. Definition div_eucl x y := match compare x y with | Eq => (one, zero) | Lt => (zero, x) | Gt => div_gt x y end. Definition div x y := fst (div_eucl x y). Definition w0_mod_gt := w0_op.(znz_mod_gt). Definition w1_mod_gt := w1_op.(znz_mod_gt). Definition w2_mod_gt := w2_op.(znz_mod_gt). Definition w3_mod_gt := w3_op.(znz_mod_gt). Definition w4_mod_gt := w4_op.(znz_mod_gt). Definition w5_mod_gt := w5_op.(znz_mod_gt). Definition w6_mod_gt := w6_op.(znz_mod_gt). Definition w7_mod_gt := w7_op.(znz_mod_gt). Definition w8_mod_gt := w8_op.(znz_mod_gt). Definition w9_mod_gt := w9_op.(znz_mod_gt). Definition w10_mod_gt := w10_op.(znz_mod_gt). Definition w11_mod_gt := w11_op.(znz_mod_gt). Definition w12_mod_gt := w12_op.(znz_mod_gt). Definition w0_modn1 := gen_modn1 w0_op.(znz_digits) w0_op.(znz_0) w0_op.(znz_head0) w0_op.(znz_add_mul_div) w0_op.(znz_div21). Definition w1_modn1 := gen_modn1 w1_op.(znz_digits) w1_op.(znz_0) w1_op.(znz_head0) w1_op.(znz_add_mul_div) w1_op.(znz_div21). Definition w2_modn1 := gen_modn1 w2_op.(znz_digits) w2_op.(znz_0) w2_op.(znz_head0) w2_op.(znz_add_mul_div) w2_op.(znz_div21). Definition w3_modn1 := gen_modn1 w3_op.(znz_digits) w3_op.(znz_0) w3_op.(znz_head0) w3_op.(znz_add_mul_div) w3_op.(znz_div21). Definition w4_modn1 := gen_modn1 w4_op.(znz_digits) w4_op.(znz_0) w4_op.(znz_head0) w4_op.(znz_add_mul_div) w4_op.(znz_div21). Definition w5_modn1 := gen_modn1 w5_op.(znz_digits) w5_op.(znz_0) w5_op.(znz_head0) w5_op.(znz_add_mul_div) w5_op.(znz_div21). Definition w6_modn1 := gen_modn1 w6_op.(znz_digits) w6_op.(znz_0) w6_op.(znz_head0) w6_op.(znz_add_mul_div) w6_op.(znz_div21). Definition w7_modn1 := gen_modn1 w7_op.(znz_digits) w7_op.(znz_0) w7_op.(znz_head0) w7_op.(znz_add_mul_div) w7_op.(znz_div21). Definition w8_modn1 := gen_modn1 w8_op.(znz_digits) w8_op.(znz_0) w8_op.(znz_head0) w8_op.(znz_add_mul_div) w8_op.(znz_div21). Definition w9_modn1 := gen_modn1 w9_op.(znz_digits) w9_op.(znz_0) w9_op.(znz_head0) w9_op.(znz_add_mul_div) w9_op.(znz_div21). Definition w10_modn1 := gen_modn1 w10_op.(znz_digits) w10_op.(znz_0) w10_op.(znz_head0) w10_op.(znz_add_mul_div) w10_op.(znz_div21). Definition w11_modn1 := gen_modn1 w11_op.(znz_digits) w11_op.(znz_0) w11_op.(znz_head0) w11_op.(znz_add_mul_div) w11_op.(znz_div21). Definition w12_modn1 := gen_modn1 w12_op.(znz_digits) w12_op.(znz_0) w12_op.(znz_head0) w12_op.(znz_add_mul_div) w12_op.(znz_div21). Definition mod_gt x y := match x, y with | N0 wx, N0 wy => reduce_0 (w0_mod_gt wx wy) | N0 wx, N1 wy => let wx':= GenBase.extend w0_op.(znz_0W) 0 wx in reduce_1 (w1_mod_gt wx' wy) | N0 wx, N2 wy => let wx':= GenBase.extend w0_op.(znz_0W) 1 wx in reduce_2 (w2_mod_gt wx' wy) | N0 wx, N3 wy => let wx':= GenBase.extend w0_op.(znz_0W) 2 wx in reduce_3 (w3_mod_gt wx' wy) | N0 wx, N4 wy => let wx':= GenBase.extend w0_op.(znz_0W) 3 wx in reduce_4 (w4_mod_gt wx' wy) | N0 wx, N5 wy => let wx':= GenBase.extend w0_op.(znz_0W) 4 wx in reduce_5 (w5_mod_gt wx' wy) | N0 wx, N6 wy => let wx':= GenBase.extend w0_op.(znz_0W) 5 wx in reduce_6 (w6_mod_gt wx' wy) | N0 wx, N7 wy => let wx':= GenBase.extend w0_op.(znz_0W) 6 wx in reduce_7 (w7_mod_gt wx' wy) | N0 wx, N8 wy => let wx':= GenBase.extend w0_op.(znz_0W) 7 wx in reduce_8 (w8_mod_gt wx' wy) | N0 wx, N9 wy => let wx':= GenBase.extend w0_op.(znz_0W) 8 wx in reduce_9 (w9_mod_gt wx' wy) | N0 wx, N10 wy => let wx':= GenBase.extend w0_op.(znz_0W) 9 wx in reduce_10 (w10_mod_gt wx' wy) | N0 wx, N11 wy => let wx':= GenBase.extend w0_op.(znz_0W) 10 wx in reduce_11 (w11_mod_gt wx' wy) | N0 wx, N12 wy => let wx':= GenBase.extend w0_op.(znz_0W) 11 wx in reduce_12 (w12_mod_gt wx' wy) | N0 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w0_op.(znz_0W) 12 wx) in reduce_n n ((make_op n).(znz_mod_gt) wx' wy) | N1 wx, N0 wy => reduce_0 (w0_modn1 1 wx wy) | N1 wx, N1 wy => reduce_1 (w1_mod_gt wx wy) | N1 wx, N2 wy => let wx':= GenBase.extend w1_op.(znz_0W) 0 wx in reduce_2 (w2_mod_gt wx' wy) | N1 wx, N3 wy => let wx':= GenBase.extend w1_op.(znz_0W) 1 wx in reduce_3 (w3_mod_gt wx' wy) | N1 wx, N4 wy => let wx':= GenBase.extend w1_op.(znz_0W) 2 wx in reduce_4 (w4_mod_gt wx' wy) | N1 wx, N5 wy => let wx':= GenBase.extend w1_op.(znz_0W) 3 wx in reduce_5 (w5_mod_gt wx' wy) | N1 wx, N6 wy => let wx':= GenBase.extend w1_op.(znz_0W) 4 wx in reduce_6 (w6_mod_gt wx' wy) | N1 wx, N7 wy => let wx':= GenBase.extend w1_op.(znz_0W) 5 wx in reduce_7 (w7_mod_gt wx' wy) | N1 wx, N8 wy => let wx':= GenBase.extend w1_op.(znz_0W) 6 wx in reduce_8 (w8_mod_gt wx' wy) | N1 wx, N9 wy => let wx':= GenBase.extend w1_op.(znz_0W) 7 wx in reduce_9 (w9_mod_gt wx' wy) | N1 wx, N10 wy => let wx':= GenBase.extend w1_op.(znz_0W) 8 wx in reduce_10 (w10_mod_gt wx' wy) | N1 wx, N11 wy => let wx':= GenBase.extend w1_op.(znz_0W) 9 wx in reduce_11 (w11_mod_gt wx' wy) | N1 wx, N12 wy => let wx':= GenBase.extend w1_op.(znz_0W) 10 wx in reduce_12 (w12_mod_gt wx' wy) | N1 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w1_op.(znz_0W) 11 wx) in reduce_n n ((make_op n).(znz_mod_gt) wx' wy) | N2 wx, N0 wy => reduce_0 (w0_modn1 2 wx wy) | N2 wx, N1 wy => reduce_1 (w1_modn1 1 wx wy) | N2 wx, N2 wy => reduce_2 (w2_mod_gt wx wy) | N2 wx, N3 wy => let wx':= GenBase.extend w2_op.(znz_0W) 0 wx in reduce_3 (w3_mod_gt wx' wy) | N2 wx, N4 wy => let wx':= GenBase.extend w2_op.(znz_0W) 1 wx in reduce_4 (w4_mod_gt wx' wy) | N2 wx, N5 wy => let wx':= GenBase.extend w2_op.(znz_0W) 2 wx in reduce_5 (w5_mod_gt wx' wy) | N2 wx, N6 wy => let wx':= GenBase.extend w2_op.(znz_0W) 3 wx in reduce_6 (w6_mod_gt wx' wy) | N2 wx, N7 wy => let wx':= GenBase.extend w2_op.(znz_0W) 4 wx in reduce_7 (w7_mod_gt wx' wy) | N2 wx, N8 wy => let wx':= GenBase.extend w2_op.(znz_0W) 5 wx in reduce_8 (w8_mod_gt wx' wy) | N2 wx, N9 wy => let wx':= GenBase.extend w2_op.(znz_0W) 6 wx in reduce_9 (w9_mod_gt wx' wy) | N2 wx, N10 wy => let wx':= GenBase.extend w2_op.(znz_0W) 7 wx in reduce_10 (w10_mod_gt wx' wy) | N2 wx, N11 wy => let wx':= GenBase.extend w2_op.(znz_0W) 8 wx in reduce_11 (w11_mod_gt wx' wy) | N2 wx, N12 wy => let wx':= GenBase.extend w2_op.(znz_0W) 9 wx in reduce_12 (w12_mod_gt wx' wy) | N2 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w2_op.(znz_0W) 10 wx) in reduce_n n ((make_op n).(znz_mod_gt) wx' wy) | N3 wx, N0 wy => reduce_0 (w0_modn1 3 wx wy) | N3 wx, N1 wy => reduce_1 (w1_modn1 2 wx wy) | N3 wx, N2 wy => reduce_2 (w2_modn1 1 wx wy) | N3 wx, N3 wy => reduce_3 (w3_mod_gt wx wy) | N3 wx, N4 wy => let wx':= GenBase.extend w3_op.(znz_0W) 0 wx in reduce_4 (w4_mod_gt wx' wy) | N3 wx, N5 wy => let wx':= GenBase.extend w3_op.(znz_0W) 1 wx in reduce_5 (w5_mod_gt wx' wy) | N3 wx, N6 wy => let wx':= GenBase.extend w3_op.(znz_0W) 2 wx in reduce_6 (w6_mod_gt wx' wy) | N3 wx, N7 wy => let wx':= GenBase.extend w3_op.(znz_0W) 3 wx in reduce_7 (w7_mod_gt wx' wy) | N3 wx, N8 wy => let wx':= GenBase.extend w3_op.(znz_0W) 4 wx in reduce_8 (w8_mod_gt wx' wy) | N3 wx, N9 wy => let wx':= GenBase.extend w3_op.(znz_0W) 5 wx in reduce_9 (w9_mod_gt wx' wy) | N3 wx, N10 wy => let wx':= GenBase.extend w3_op.(znz_0W) 6 wx in reduce_10 (w10_mod_gt wx' wy) | N3 wx, N11 wy => let wx':= GenBase.extend w3_op.(znz_0W) 7 wx in reduce_11 (w11_mod_gt wx' wy) | N3 wx, N12 wy => let wx':= GenBase.extend w3_op.(znz_0W) 8 wx in reduce_12 (w12_mod_gt wx' wy) | N3 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w3_op.(znz_0W) 9 wx) in reduce_n n ((make_op n).(znz_mod_gt) wx' wy) | N4 wx, N0 wy => reduce_0 (w0_modn1 4 wx wy) | N4 wx, N1 wy => reduce_1 (w1_modn1 3 wx wy) | N4 wx, N2 wy => reduce_2 (w2_modn1 2 wx wy) | N4 wx, N3 wy => reduce_3 (w3_modn1 1 wx wy) | N4 wx, N4 wy => reduce_4 (w4_mod_gt wx wy) | N4 wx, N5 wy => let wx':= GenBase.extend w4_op.(znz_0W) 0 wx in reduce_5 (w5_mod_gt wx' wy) | N4 wx, N6 wy => let wx':= GenBase.extend w4_op.(znz_0W) 1 wx in reduce_6 (w6_mod_gt wx' wy) | N4 wx, N7 wy => let wx':= GenBase.extend w4_op.(znz_0W) 2 wx in reduce_7 (w7_mod_gt wx' wy) | N4 wx, N8 wy => let wx':= GenBase.extend w4_op.(znz_0W) 3 wx in reduce_8 (w8_mod_gt wx' wy) | N4 wx, N9 wy => let wx':= GenBase.extend w4_op.(znz_0W) 4 wx in reduce_9 (w9_mod_gt wx' wy) | N4 wx, N10 wy => let wx':= GenBase.extend w4_op.(znz_0W) 5 wx in reduce_10 (w10_mod_gt wx' wy) | N4 wx, N11 wy => let wx':= GenBase.extend w4_op.(znz_0W) 6 wx in reduce_11 (w11_mod_gt wx' wy) | N4 wx, N12 wy => let wx':= GenBase.extend w4_op.(znz_0W) 7 wx in reduce_12 (w12_mod_gt wx' wy) | N4 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w4_op.(znz_0W) 8 wx) in reduce_n n ((make_op n).(znz_mod_gt) wx' wy) | N5 wx, N0 wy => reduce_0 (w0_modn1 5 wx wy) | N5 wx, N1 wy => reduce_1 (w1_modn1 4 wx wy) | N5 wx, N2 wy => reduce_2 (w2_modn1 3 wx wy) | N5 wx, N3 wy => reduce_3 (w3_modn1 2 wx wy) | N5 wx, N4 wy => reduce_4 (w4_modn1 1 wx wy) | N5 wx, N5 wy => reduce_5 (w5_mod_gt wx wy) | N5 wx, N6 wy => let wx':= GenBase.extend w5_op.(znz_0W) 0 wx in reduce_6 (w6_mod_gt wx' wy) | N5 wx, N7 wy => let wx':= GenBase.extend w5_op.(znz_0W) 1 wx in reduce_7 (w7_mod_gt wx' wy) | N5 wx, N8 wy => let wx':= GenBase.extend w5_op.(znz_0W) 2 wx in reduce_8 (w8_mod_gt wx' wy) | N5 wx, N9 wy => let wx':= GenBase.extend w5_op.(znz_0W) 3 wx in reduce_9 (w9_mod_gt wx' wy) | N5 wx, N10 wy => let wx':= GenBase.extend w5_op.(znz_0W) 4 wx in reduce_10 (w10_mod_gt wx' wy) | N5 wx, N11 wy => let wx':= GenBase.extend w5_op.(znz_0W) 5 wx in reduce_11 (w11_mod_gt wx' wy) | N5 wx, N12 wy => let wx':= GenBase.extend w5_op.(znz_0W) 6 wx in reduce_12 (w12_mod_gt wx' wy) | N5 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w5_op.(znz_0W) 7 wx) in reduce_n n ((make_op n).(znz_mod_gt) wx' wy) | N6 wx, N0 wy => reduce_0 (w0_modn1 6 wx wy) | N6 wx, N1 wy => reduce_1 (w1_modn1 5 wx wy) | N6 wx, N2 wy => reduce_2 (w2_modn1 4 wx wy) | N6 wx, N3 wy => reduce_3 (w3_modn1 3 wx wy) | N6 wx, N4 wy => reduce_4 (w4_modn1 2 wx wy) | N6 wx, N5 wy => reduce_5 (w5_modn1 1 wx wy) | N6 wx, N6 wy => reduce_6 (w6_mod_gt wx wy) | N6 wx, N7 wy => let wx':= GenBase.extend w6_op.(znz_0W) 0 wx in reduce_7 (w7_mod_gt wx' wy) | N6 wx, N8 wy => let wx':= GenBase.extend w6_op.(znz_0W) 1 wx in reduce_8 (w8_mod_gt wx' wy) | N6 wx, N9 wy => let wx':= GenBase.extend w6_op.(znz_0W) 2 wx in reduce_9 (w9_mod_gt wx' wy) | N6 wx, N10 wy => let wx':= GenBase.extend w6_op.(znz_0W) 3 wx in reduce_10 (w10_mod_gt wx' wy) | N6 wx, N11 wy => let wx':= GenBase.extend w6_op.(znz_0W) 4 wx in reduce_11 (w11_mod_gt wx' wy) | N6 wx, N12 wy => let wx':= GenBase.extend w6_op.(znz_0W) 5 wx in reduce_12 (w12_mod_gt wx' wy) | N6 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w6_op.(znz_0W) 6 wx) in reduce_n n ((make_op n).(znz_mod_gt) wx' wy) | N7 wx, N0 wy => reduce_0 (w0_modn1 7 wx wy) | N7 wx, N1 wy => reduce_1 (w1_modn1 6 wx wy) | N7 wx, N2 wy => reduce_2 (w2_modn1 5 wx wy) | N7 wx, N3 wy => reduce_3 (w3_modn1 4 wx wy) | N7 wx, N4 wy => reduce_4 (w4_modn1 3 wx wy) | N7 wx, N5 wy => reduce_5 (w5_modn1 2 wx wy) | N7 wx, N6 wy => reduce_6 (w6_modn1 1 wx wy) | N7 wx, N7 wy => reduce_7 (w7_mod_gt wx wy) | N7 wx, N8 wy => let wx':= GenBase.extend w7_op.(znz_0W) 0 wx in reduce_8 (w8_mod_gt wx' wy) | N7 wx, N9 wy => let wx':= GenBase.extend w7_op.(znz_0W) 1 wx in reduce_9 (w9_mod_gt wx' wy) | N7 wx, N10 wy => let wx':= GenBase.extend w7_op.(znz_0W) 2 wx in reduce_10 (w10_mod_gt wx' wy) | N7 wx, N11 wy => let wx':= GenBase.extend w7_op.(znz_0W) 3 wx in reduce_11 (w11_mod_gt wx' wy) | N7 wx, N12 wy => let wx':= GenBase.extend w7_op.(znz_0W) 4 wx in reduce_12 (w12_mod_gt wx' wy) | N7 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w7_op.(znz_0W) 5 wx) in reduce_n n ((make_op n).(znz_mod_gt) wx' wy) | N8 wx, N0 wy => reduce_0 (w0_modn1 8 wx wy) | N8 wx, N1 wy => reduce_1 (w1_modn1 7 wx wy) | N8 wx, N2 wy => reduce_2 (w2_modn1 6 wx wy) | N8 wx, N3 wy => reduce_3 (w3_modn1 5 wx wy) | N8 wx, N4 wy => reduce_4 (w4_modn1 4 wx wy) | N8 wx, N5 wy => reduce_5 (w5_modn1 3 wx wy) | N8 wx, N6 wy => reduce_6 (w6_modn1 2 wx wy) | N8 wx, N7 wy => reduce_7 (w7_modn1 1 wx wy) | N8 wx, N8 wy => reduce_8 (w8_mod_gt wx wy) | N8 wx, N9 wy => let wx':= GenBase.extend w8_op.(znz_0W) 0 wx in reduce_9 (w9_mod_gt wx' wy) | N8 wx, N10 wy => let wx':= GenBase.extend w8_op.(znz_0W) 1 wx in reduce_10 (w10_mod_gt wx' wy) | N8 wx, N11 wy => let wx':= GenBase.extend w8_op.(znz_0W) 2 wx in reduce_11 (w11_mod_gt wx' wy) | N8 wx, N12 wy => let wx':= GenBase.extend w8_op.(znz_0W) 3 wx in reduce_12 (w12_mod_gt wx' wy) | N8 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w8_op.(znz_0W) 4 wx) in reduce_n n ((make_op n).(znz_mod_gt) wx' wy) | N9 wx, N0 wy => reduce_0 (w0_modn1 9 wx wy) | N9 wx, N1 wy => reduce_1 (w1_modn1 8 wx wy) | N9 wx, N2 wy => reduce_2 (w2_modn1 7 wx wy) | N9 wx, N3 wy => reduce_3 (w3_modn1 6 wx wy) | N9 wx, N4 wy => reduce_4 (w4_modn1 5 wx wy) | N9 wx, N5 wy => reduce_5 (w5_modn1 4 wx wy) | N9 wx, N6 wy => reduce_6 (w6_modn1 3 wx wy) | N9 wx, N7 wy => reduce_7 (w7_modn1 2 wx wy) | N9 wx, N8 wy => reduce_8 (w8_modn1 1 wx wy) | N9 wx, N9 wy => reduce_9 (w9_mod_gt wx wy) | N9 wx, N10 wy => let wx':= GenBase.extend w9_op.(znz_0W) 0 wx in reduce_10 (w10_mod_gt wx' wy) | N9 wx, N11 wy => let wx':= GenBase.extend w9_op.(znz_0W) 1 wx in reduce_11 (w11_mod_gt wx' wy) | N9 wx, N12 wy => let wx':= GenBase.extend w9_op.(znz_0W) 2 wx in reduce_12 (w12_mod_gt wx' wy) | N9 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w9_op.(znz_0W) 3 wx) in reduce_n n ((make_op n).(znz_mod_gt) wx' wy) | N10 wx, N0 wy => reduce_0 (w0_modn1 10 wx wy) | N10 wx, N1 wy => reduce_1 (w1_modn1 9 wx wy) | N10 wx, N2 wy => reduce_2 (w2_modn1 8 wx wy) | N10 wx, N3 wy => reduce_3 (w3_modn1 7 wx wy) | N10 wx, N4 wy => reduce_4 (w4_modn1 6 wx wy) | N10 wx, N5 wy => reduce_5 (w5_modn1 5 wx wy) | N10 wx, N6 wy => reduce_6 (w6_modn1 4 wx wy) | N10 wx, N7 wy => reduce_7 (w7_modn1 3 wx wy) | N10 wx, N8 wy => reduce_8 (w8_modn1 2 wx wy) | N10 wx, N9 wy => reduce_9 (w9_modn1 1 wx wy) | N10 wx, N10 wy => reduce_10 (w10_mod_gt wx wy) | N10 wx, N11 wy => let wx':= GenBase.extend w10_op.(znz_0W) 0 wx in reduce_11 (w11_mod_gt wx' wy) | N10 wx, N12 wy => let wx':= GenBase.extend w10_op.(znz_0W) 1 wx in reduce_12 (w12_mod_gt wx' wy) | N10 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w10_op.(znz_0W) 2 wx) in reduce_n n ((make_op n).(znz_mod_gt) wx' wy) | N11 wx, N0 wy => reduce_0 (w0_modn1 11 wx wy) | N11 wx, N1 wy => reduce_1 (w1_modn1 10 wx wy) | N11 wx, N2 wy => reduce_2 (w2_modn1 9 wx wy) | N11 wx, N3 wy => reduce_3 (w3_modn1 8 wx wy) | N11 wx, N4 wy => reduce_4 (w4_modn1 7 wx wy) | N11 wx, N5 wy => reduce_5 (w5_modn1 6 wx wy) | N11 wx, N6 wy => reduce_6 (w6_modn1 5 wx wy) | N11 wx, N7 wy => reduce_7 (w7_modn1 4 wx wy) | N11 wx, N8 wy => reduce_8 (w8_modn1 3 wx wy) | N11 wx, N9 wy => reduce_9 (w9_modn1 2 wx wy) | N11 wx, N10 wy => reduce_10 (w10_modn1 1 wx wy) | N11 wx, N11 wy => reduce_11 (w11_mod_gt wx wy) | N11 wx, N12 wy => let wx':= GenBase.extend w11_op.(znz_0W) 0 wx in reduce_12 (w12_mod_gt wx' wy) | N11 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w11_op.(znz_0W) 1 wx) in reduce_n n ((make_op n).(znz_mod_gt) wx' wy) | N12 wx, N0 wy => reduce_0 (w0_modn1 12 wx wy) | N12 wx, N1 wy => reduce_1 (w1_modn1 11 wx wy) | N12 wx, N2 wy => reduce_2 (w2_modn1 10 wx wy) | N12 wx, N3 wy => reduce_3 (w3_modn1 9 wx wy) | N12 wx, N4 wy => reduce_4 (w4_modn1 8 wx wy) | N12 wx, N5 wy => reduce_5 (w5_modn1 7 wx wy) | N12 wx, N6 wy => reduce_6 (w6_modn1 6 wx wy) | N12 wx, N7 wy => reduce_7 (w7_modn1 5 wx wy) | N12 wx, N8 wy => reduce_8 (w8_modn1 4 wx wy) | N12 wx, N9 wy => reduce_9 (w9_modn1 3 wx wy) | N12 wx, N10 wy => reduce_10 (w10_modn1 2 wx wy) | N12 wx, N11 wy => reduce_11 (w11_modn1 1 wx wy) | N12 wx, N12 wy => reduce_12 (w12_mod_gt wx wy) | N12 wx, Nn n wy => let wx':= extend n w12 (GenBase.extend w12_op.(znz_0W) 0 wx) in reduce_n n ((make_op n).(znz_mod_gt) wx' wy) | Nn n wx, N0 wy => let wy':= GenBase.extend w0_op.(znz_0W) 11 wy in reduce_12 (w12_modn1 (S n) wx wy') | Nn n wx, N1 wy => let wy':= GenBase.extend w1_op.(znz_0W) 10 wy in reduce_12 (w12_modn1 (S n) wx wy') | Nn n wx, N2 wy => let wy':= GenBase.extend w2_op.(znz_0W) 9 wy in reduce_12 (w12_modn1 (S n) wx wy') | Nn n wx, N3 wy => let wy':= GenBase.extend w3_op.(znz_0W) 8 wy in reduce_12 (w12_modn1 (S n) wx wy') | Nn n wx, N4 wy => let wy':= GenBase.extend w4_op.(znz_0W) 7 wy in reduce_12 (w12_modn1 (S n) wx wy') | Nn n wx, N5 wy => let wy':= GenBase.extend w5_op.(znz_0W) 6 wy in reduce_12 (w12_modn1 (S n) wx wy') | Nn n wx, N6 wy => let wy':= GenBase.extend w6_op.(znz_0W) 5 wy in reduce_12 (w12_modn1 (S n) wx wy') | Nn n wx, N7 wy => let wy':= GenBase.extend w7_op.(znz_0W) 4 wy in reduce_12 (w12_modn1 (S n) wx wy') | Nn n wx, N8 wy => let wy':= GenBase.extend w8_op.(znz_0W) 3 wy in reduce_12 (w12_modn1 (S n) wx wy') | Nn n wx, N9 wy => let wy':= GenBase.extend w9_op.(znz_0W) 2 wy in reduce_12 (w12_modn1 (S n) wx wy') | Nn n wx, N10 wy => let wy':= GenBase.extend w10_op.(znz_0W) 1 wy in reduce_12 (w12_modn1 (S n) wx wy') | Nn n wx, N11 wy => let wy':= GenBase.extend w11_op.(znz_0W) 0 wy in reduce_12 (w12_modn1 (S n) wx wy') | Nn n wx, N12 wy => let wy':= wy in reduce_12 (w12_modn1 (S n) wx wy') | Nn n wx, Nn m wy => match extend_to_max w12 n m wx wy with | inl wx' => reduce_n m ((make_op m).(znz_mod_gt) wx' wy) | inr wy' => reduce_n n ((make_op n).(znz_mod_gt) wx wy') end end. Definition modulo x y := match compare x y with | Eq => zero | Lt => x | Gt => mod_gt x y end. Definition digits x := match x with | N0 _ => w0_op.(znz_digits) | N1 _ => w1_op.(znz_digits) | N2 _ => w2_op.(znz_digits) | N3 _ => w3_op.(znz_digits) | N4 _ => w4_op.(znz_digits) | N5 _ => w5_op.(znz_digits) | N6 _ => w6_op.(znz_digits) | N7 _ => w7_op.(znz_digits) | N8 _ => w8_op.(znz_digits) | N9 _ => w9_op.(znz_digits) | N10 _ => w10_op.(znz_digits) | N11 _ => w11_op.(znz_digits) | N12 _ => w12_op.(znz_digits) | Nn n _ => (make_op n).(znz_digits) end. Definition gcd_gt_body a b cont := match compare b zero with | Gt => let r := mod_gt a b in match compare r zero with | Gt => cont r (mod_gt b r) | _ => b end | _ => a end. Fixpoint gcd_gt (p:positive) (cont:t->t->t) (a b:t) {struct p} : t := gcd_gt_body a b (fun a b => match p with | xH => cont a b | xO p => gcd_gt p (gcd_gt p cont) a b | xI p => gcd_gt p (gcd_gt p cont) a b end). Definition gcd_cont a b := match compare one b with | Eq => one | _ => a end. Definition gcd a b := match compare a b with | Eq => a | Lt => gcd_gt (digits b) gcd_cont b a | Gt => gcd_gt (digits a) gcd_cont a b end. Definition of_pos x := let h := nat_of_P (pheight x) in match h with | O => reduce_0 (snd (w0_op.(znz_of_pos) x)) | (S O) => reduce_1 (snd (w1_op.(znz_of_pos) x)) | (S (S O)) => reduce_2 (snd (w2_op.(znz_of_pos) x)) | (S (S (S O))) => reduce_3 (snd (w3_op.(znz_of_pos) x)) | (S (S (S (S O)))) => reduce_4 (snd (w4_op.(znz_of_pos) x)) | (S (S (S (S (S O))))) => reduce_5 (snd (w5_op.(znz_of_pos) x)) | (S (S (S (S (S (S O)))))) => reduce_6 (snd (w6_op.(znz_of_pos) x)) | (S (S (S (S (S (S (S O))))))) => reduce_7 (snd (w7_op.(znz_of_pos) x)) | (S (S (S (S (S (S (S (S O)))))))) => reduce_8 (snd (w8_op.(znz_of_pos) x)) | (S (S (S (S (S (S (S (S (S O))))))))) => reduce_9 (snd (w9_op.(znz_of_pos) x)) | (S (S (S (S (S (S (S (S (S (S O)))))))))) => reduce_10 (snd (w10_op.(znz_of_pos) x)) | (S (S (S (S (S (S (S (S (S (S (S O))))))))))) => reduce_11 (snd (w11_op.(znz_of_pos) x)) | (S (S (S (S (S (S (S (S (S (S (S (S O)))))))))))) => reduce_12 (snd (w12_op.(znz_of_pos) x)) | _ => let n := minus h 13 in reduce_n n (snd ((make_op n).(znz_of_pos) x)) end. Definition of_N x := match x with | BinNat.N0 => zero | Npos p => of_pos p end. Definition to_Z x := match x with | N0 wx => w0_op.(znz_to_Z) wx | N1 wx => w1_op.(znz_to_Z) wx | N2 wx => w2_op.(znz_to_Z) wx | N3 wx => w3_op.(znz_to_Z) wx | N4 wx => w4_op.(znz_to_Z) wx | N5 wx => w5_op.(znz_to_Z) wx | N6 wx => w6_op.(znz_to_Z) wx | N7 wx => w7_op.(znz_to_Z) wx | N8 wx => w8_op.(znz_to_Z) wx | N9 wx => w9_op.(znz_to_Z) wx | N10 wx => w10_op.(znz_to_Z) wx | N11 wx => w11_op.(znz_to_Z) wx | N12 wx => w12_op.(znz_to_Z) wx | Nn n wx => (make_op n).(znz_to_Z) wx end. End Make. coqprime-8.18/src/Coqprime/num/Nbasic.v000066400000000000000000000062041451023060700200240ustar00rootroot00000000000000Require Import ZArith. Require Import Basic_type. Definition zn2z_word_comm : forall w n, zn2z (word w n) = word (zn2z w) n. fix zn2z_word_comm 2. intros w n; case n. reflexivity. intros n0;simpl. case (zn2z_word_comm w n0). reflexivity. Defined. Fixpoint extend (n:nat) {struct n} : forall w:Set, zn2z w -> word w (S n) := match n return forall w:Set, zn2z w -> word w (S n) with | O => fun w x => x | S m => let aux := extend m in fun w x => WW W0 (aux w x) end. Section ExtendMax. Variable w:Set. Definition Tmax n m := ( {p:nat| word (word w n) p = word w m} + {p:nat| word (word w m) p = word w n})%type. Definition max : forall n m, Tmax n m. fix max 1;intros n. case n. intros m;left;exists m;exact (refl_equal (word w m)). intros n0 m;case m. right;exists (S n0);exact (refl_equal (word w (S n0))). intros m0;case (max n0 m0);intros H;case H;intros p Heq. left;exists p;simpl. case (zn2z_word_comm (word w n0) p). case Heq. exact (refl_equal (zn2z (word (word w n0) p))). right;exists p;simpl. case (zn2z_word_comm (word w m0) p). case Heq. exact (refl_equal (zn2z (word (word w m0) p))). Defined. Definition extend_to_max : forall n m (x:zn2z (word w n)) (y:zn2z (word w m)), (zn2z (word w m) + zn2z (word w n))%type. intros n m x y. case (max n m);intros (p, Heq). left; case Heq;exact (extend p (word w n) x). right;case Heq;exact (extend p (word w m) y). Defined. End ExtendMax. Section Reduce. Variable w : Set. Variable nT : Set. Variable N0 : nT. Variable eq0 : w -> bool. Variable reduce_n : w -> nT. Variable zn2z_to_Nt : zn2z w -> nT. Definition reduce_n1 (x:zn2z w) := match x with | W0 => N0 | WW xh xl => if eq0 xh then reduce_n xl else zn2z_to_Nt x end. End Reduce. Section ReduceRec. Variable w : Set. Variable nT : Set. Variable N0 : nT. Variable reduce_1n : zn2z w -> nT. Variable c : forall n, word w (S n) -> nT. Fixpoint reduce_n (n:nat) : word w (S n) -> nT := match n return word w (S n) -> nT with | O => reduce_1n | S m => fun x => match x with | W0 => N0 | WW xh xl => match xh with | W0 => @reduce_n m xl | _ => @c (S m) x end end end. End ReduceRec. Definition opp_compare cmp := match cmp with | Lt => Gt | Eq => Eq | Gt => Lt end. Section CompareRec. Variable wm w : Set. Variable w_0 : w. Variable compare : w -> w -> comparison. Variable compare0_m : wm -> comparison. Variable compare_m : wm -> w -> comparison. Fixpoint compare0_mn (n:nat) : word wm n -> comparison := match n return word wm n -> comparison with | 0 => compare0_m | S m => fun x => match x with | W0 => Eq | WW xh xl => match compare0_mn m xh with | Eq => compare0_mn m xl | r => Lt end end end. Fixpoint compare_mn_1 (n:nat) : word wm n -> w -> comparison := match n return word wm n -> w -> comparison with | 0 => compare_m | S m => fun x y => match x with | W0 => compare w_0 y | WW xh xl => match compare0_mn m xh with | Eq => compare_mn_1 m xl y | r => Gt end end end. End CompareRec. coqprime-8.18/src/Coqprime/num/Pock.v000066400000000000000000001021531451023060700175210ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Require Import List. Require Import ZArith. Require Import Zorder. Require Import ZCAux. Require Import LucasLehmer. Require Import Pocklington. Require Import ZArith Znumtheory Zpow_facts. Require Import CyclicAxioms Cyclic63 Int63Compat. From Bignums Require Import DoubleCyclic BigN. Require Import Pmod. Require Import Mod_op. Require Import W. Require Import Lucas. Require Export PocklingtonCertificat. Require Import NEll. Import CyclicAxioms DoubleType DoubleBase List. Open Scope Z_scope. Section test. Variable w: univ_of_cycles. Variable w_op: ZnZ.Ops w. Variable op_spec: ZnZ.Specs w_op. Variable p: positive. Variable b: w. Notation "[| x |]" := (ZnZ.to_Z x) (at level 0, x at level 99). Hypothesis b_pos: 0 < [|b|]. Variable m_op: mod_op w. Variable m_op_spec: mod_spec w_op b m_op. Open Scope positive_scope. Open Scope P_scope. Let pow := m_op.(power_mod). Let times := m_op.(mul_mod). Let pred:= m_op.(pred_mod). (* [fold_pow_mod a [q1,_;...;qn,_]] b = a ^(q1*...*qn) mod b *) (* invariant a mod N = a *) Definition fold_pow_mod (a: w) l := fold_left (fun a' (qp:positive*positive) => pow a' (fst qp)) l a. Lemma fold_pow_mod_spec : forall l (a:w), ([|a|] < [|b|])%Z -> [|fold_pow_mod a l|] = ([|a|]^(mkProd' l) mod [|b|])%Z. intros l; unfold fold_pow_mod; elim l; simpl fold_left; simpl mkProd'; auto; clear l. intros a H; rewrite Zpower_1_r; rewrite Zmod_small; auto with zarith. case (ZnZ.spec_to_Z a); auto with zarith. intros (p1, q1) l Rec a H. case (ZnZ.spec_to_Z a); auto with zarith; intros U1 U2. rewrite Rec. rewrite m_op_spec.(power_mod_spec) with (t := [|a|]); auto with zarith. rewrite <- Zpower_mod. rewrite times_Zmult; rewrite Zpower_mult; auto with zarith. apply Z.le_lt_trans with (2 := H); auto with zarith. rewrite Zmod_small; auto with zarith. rewrite m_op_spec.(power_mod_spec) with (t := [|a|]); auto with zarith. match goal with |- context[(?X mod ?Y)%Z] => case (Z_mod_lt X Y); auto with zarith end. rewrite Zmod_small; auto with zarith. Qed. Fixpoint all_pow_mod (prod a: w) (l:dec_prime) {struct l}: w*w := match l with | nil => (prod,a) | (q,_) :: l => let m := pred (fold_pow_mod a l) in all_pow_mod (times prod m) (pow a q) l end. Lemma snd_all_pow_mod : forall l (prod a :w), ([|a|] < [|b|])%Z -> [|snd (all_pow_mod prod a l)|] = ([|a|]^(mkProd' l) mod [|b|])%Z. intros l; elim l; simpl all_pow_mod; simpl mkProd'; simpl snd; clear l. intros _ a H; rewrite Zpower_1_r; auto with zarith. rewrite Zmod_small; auto with zarith. case (ZnZ.spec_to_Z a); auto with zarith. intros (p1, q1) l Rec prod a H. case (ZnZ.spec_to_Z a); auto with zarith; intros U1 U2. rewrite Rec; auto with zarith. rewrite m_op_spec.(power_mod_spec) with (t := [|a|]); auto with zarith. rewrite <- Zpower_mod. rewrite times_Zmult; rewrite Zpower_mult; auto with zarith. apply Z.le_lt_trans with (2 := H); auto with zarith. rewrite Zmod_small; auto with zarith. rewrite m_op_spec.(power_mod_spec) with (t := [|a|]); auto with zarith. match goal with |- context[(?X mod ?Y)%Z] => case (Z_mod_lt X Y); auto with zarith end. rewrite Zmod_small; auto with zarith. Qed. Lemma fold_aux : forall a N l prod, (fold_left (fun (r : Z) (k : positive * positive) => r * (a ^(N / fst k) - 1) mod [|b|]) l (prod mod [|b|]) mod [|b|] = fold_left (fun (r : Z) (k : positive * positive) => r * (a^(N / fst k) - 1)) l prod mod [|b|])%Z. induction l;simpl;intros. rewrite Zmod_mod; auto with zarith. rewrite <- IHl; auto with zarith. rewrite Zmult_mod; auto with zarith. rewrite Zmod_mod; auto with zarith. rewrite <- Zmult_mod; auto with zarith. Qed. Lemma fst_all_pow_mod : forall l (a:w) (R:positive) (prod A :w), [|prod|] = ([|prod|] mod [|b|])%Z -> [|A|] = ([|a|]^R mod [|b|])%Z -> [|fst (all_pow_mod prod A l)|] = ((fold_left (fun r (k:positive*positive) => (r * ([|a|] ^ (R* mkProd' l / (fst k)) - 1))) l [|prod|]) mod [|b|])%Z. intros l; elim l; simpl all_pow_mod; simpl fold_left; simpl fst; auto with zarith; clear l. intros (p1,q1) l Rec; simpl fst. intros a R prod A H1 H2. assert (F: (0 <= [|A|] < [|b|])%Z). rewrite H2. match goal with |- context[(?X mod ?Y)%Z] => case (Z_mod_lt X Y); auto with zarith end. assert (F1: ((fun x => x = x mod [|b|])%Z [|fold_pow_mod A l|])). rewrite Zmod_small; auto. rewrite fold_pow_mod_spec; auto with zarith. match goal with |- context[(?X mod ?Y)%Z] => case (Z_mod_lt X Y); auto with zarith end. assert (F2: ((fun x => x = x mod [|b|])%Z [|pred (fold_pow_mod A l)|])). rewrite Zmod_small; auto. rewrite(fun x => m_op_spec.(pred_mod_spec) x [|x|]); auto with zarith. match goal with |- context[(?X mod ?Y)%Z] => case (Z_mod_lt X Y); auto with zarith end. rewrite (Rec a (R * p1)%positive); auto with zarith. rewrite(fun x y => m_op_spec.(mul_mod_spec) x y [|x|] [|y|]); auto with zarith. rewrite(fun x => m_op_spec.(pred_mod_spec) x [|x|]); auto with zarith. rewrite fold_pow_mod_spec; auto with zarith. rewrite H2. repeat rewrite Zpos_mult. repeat rewrite times_Zmult. repeat rewrite <- Zmult_assoc. apply sym_equal; rewrite <- fold_aux; auto with zarith. apply sym_equal; rewrite <- fold_aux; auto with zarith. eq_tac; auto. match goal with |- context[fold_left ?x _ _] => apply f_equal2 with (f := fold_left x); auto with zarith end. rewrite Zmod_mod; auto with zarith. rewrite (Zmult_comm R); repeat rewrite <- Zmult_assoc; rewrite (Zmult_comm p1); rewrite Z_div_mult; auto with zarith. repeat rewrite (Zmult_mod [|prod|]);auto with zmisc. eq_tac; [idtac | eq_tac]; auto. eq_tac; auto. rewrite Zmod_mod; auto. repeat rewrite (fun x => Zminus_mod x 1); auto with zarith. eq_tac; auto; eq_tac; auto. rewrite Zmult_comm; rewrite <- Zpower_mod; auto with zmisc. rewrite Zpower_mult; auto with zarith. rewrite Zmod_mod; auto with zarith. rewrite Zmod_small; auto. rewrite(fun x y => m_op_spec.(mul_mod_spec) x y [|x|] [|y|]); auto with zarith. match goal with |- context[(?X mod ?Y)%Z] => case (Z_mod_lt X Y); auto with zarith end. rewrite(fun x => m_op_spec.(power_mod_spec) x [|x|]); auto with zarith. apply trans_equal with ([|A|] ^ p1 mod [|b|])%Z; auto. rewrite H2. rewrite Zpos_mult_morphism; rewrite Zpower_mult; auto with zarith. rewrite <- Zpower_mod; auto with zarith. rewrite Zmod_small; auto. Qed. Fixpoint pow_mod_pred (a:w) (l:dec_prime) {struct l} : w := match l with | nil => a | (q, p)::l => if (p ?= 1) then pow_mod_pred a l else let a' := iter_pos _ (fun x => pow x q) a (Pos.pred p) in pow_mod_pred a' l end. Lemma iter_pow_mod_spec : forall q p a, [|a|] = ([|a|] mod [|b|])%Z -> ([|iter_pos _ (fun x => pow x q) a p|] = [|a|]^q^p mod [|b|])%Z. intros q1 p1; elim p1; simpl iter_pos; clear p1. intros p1 Rec a Ha. rewrite(fun x => m_op_spec.(power_mod_spec) x [|x|]). repeat rewrite Rec. 2, 4: auto with zarith. match goal with |- (Zpower_pos ?X ?Y mod ?Z = _)%Z => apply trans_equal with (X ^ Y mod Z)%Z; auto end. rewrite <- Zpower_mod by auto with zmisc. rewrite <- Zpower_mult by auto with zmisc. rewrite <- Zpower_mod by auto with zmisc. rewrite <- Zpower_mult by auto with zarith zmisc. eq_tac; auto. eq_tac; auto. rewrite Zpos_xI. assert (tmp: forall x, (2 * x = x + x)%Z) by auto with zarith; rewrite tmp; clear tmp. repeat rewrite Zpower_exp by auto with zarith. rewrite Zpower_1_r; try ring; auto with misc. rewrite Zmod_mod; auto with zarith. rewrite Rec. rewrite Zmod_mod. reflexivity. rewrite Rec by auto with zmisc. rewrite Zmod_mod; auto with zarith. intros p1 Rec a Ha. repeat rewrite Rec. 2, 4: auto with zarith. rewrite <- Zpower_mod by auto with zmisc. rewrite <- Zpower_mult by auto with zmisc. eq_tac; auto. eq_tac; auto. rewrite Zpos_xO. assert (tmp: forall x, (2 * x = x + x)%Z) by auto with zarith; rewrite tmp; clear tmp. repeat rewrite Zpower_exp; auto with zarith. rewrite Zmod_mod; auto with zarith. intros a Ha; rewrite Zpower_1_r. rewrite(fun x => m_op_spec.(power_mod_spec) x [|x|]); auto with zarith. Qed. Lemma pow_mod_pred_spec : forall l a, ([|a|] = [|a|] mod [|b|] -> [|pow_mod_pred a l|] = [|a|]^(mkProd_pred l) mod [|b|])%Z. intros l; elim l; simpl pow_mod_pred; simpl mkProd_pred; clear l. intros; rewrite Zpower_1_r; auto with zarith. intros (p1,q1) l Rec a H; simpl snd; simpl fst. case (q1 ?= 1)%P; auto with zarith. rewrite Rec; auto. rewrite iter_pow_mod_spec; auto with zarith. rewrite times_Zmult; rewrite pow_Zpower. rewrite <- Zpower_mod; auto with zarith. rewrite Zpower_mult; auto with zarith. rewrite Zmod_small; auto with zarith. rewrite iter_pow_mod_spec; auto with zarith. match goal with |- context[(?X mod ?Y)%Z] => case (Z_mod_lt X Y); auto with zarith end. Qed. End test. Require Import Bits. Definition test_pock N a dec sqrt := if (2 ?< N) then let Nm1 := Pos.pred N in let F1 := mkProd dec in match (Nm1 / F1)%P with | (Npos R1, N0) => if is_odd R1 then if is_even F1 then if (1 ?< a) then let (s,r') := (R1 / (xO F1))%P in match r' with | Npos r => if (a ?< N) then let op := cmk_op (Peano.pred (nat_of_P (get_height 63 (plength N)))) in let wN := znz_of_Z op (Zpos N) in let wa := znz_of_Z op (Zpos a) in let w1 := znz_of_Z op 1 in let mod_op := make_mod_op op wN in let pow := mod_op.(power_mod) in let ttimes := mod_op.(mul_mod) in let pred:= mod_op.(pred_mod) in let gcd:= ZnZ.gcd in let A := pow_mod_pred _ mod_op (pow wa R1) dec in match all_pow_mod _ mod_op w1 A dec with | (p, aNm1) => match ZnZ.to_Z aNm1 with (Zpos xH) => match ZnZ.to_Z (gcd p wN) with (Zpos xH) => if check_s_r s r sqrt then (N ?< (times ((times ((xO F1)+r+1) F1) + r) F1) + 1) else false | _ => false end | _ => false end end else false | _ => false end else false else false else false | _=> false end else false. Lemma test_pock_correct : forall N a dec sqrt, (forall k, In k dec -> prime (Zpos (fst k))) -> test_pock N a dec sqrt = true -> prime N. unfold test_pock;intros N a dec sqrt H. match goal with |- context[if ?x then _ else _] => case_eq x; intros If1; auto end. 2: intros; discriminate. match goal with H: (?X ?< ?Y) = true |- _ => generalize (is_lt_spec X Y); rewrite H; clear H; intros H end. generalize (div_eucl_spec (Pos.pred N) (mkProd dec)); destruct ((Pos.pred N) / (mkProd dec))%P as (R1,n). simpl fst; simpl snd; intros (H1, H2). destruct R1 as [ |R1]. intros; discriminate. destruct n. 2: intros; discriminate. match goal with |- context[if ?x then _ else _] => case_eq x; intros If2; auto end. assert (If0: Zodd R1). apply is_odd_Zodd; auto. clear If2; rename If0 into If2. 2: intros; discriminate. match goal with |- context[if ?x then _ else _] => case_eq x; intros If3; auto end. assert (If0: Zeven (mkProd dec)). apply is_even_Zeven; auto. clear If3; rename If0 into If3. 2: intros; discriminate. match goal with |- context[if ?x then _ else _] => case_eq x; intros If4; auto end. match goal with H: (?X ?< ?Y) = true |- _ => generalize (is_lt_spec X Y); rewrite H; clear H; intros H end. 2: intros; discriminate. generalize (div_eucl_spec R1 (xO (mkProd dec))); destruct ((R1 / xO (mkProd dec))%P) as (s,r'); simpl fst; simpl snd; intros (H3, H4). destruct r' as [ |r]. intros; discriminate. match goal with |- context[if ?x then _ else _] => case_eq x; intros If5; auto end. match goal with H: (?X ?< ?Y) = true |- _ => generalize (is_lt_spec X Y); rewrite H; clear H; intros H end. 2: intros; discriminate. set (bb := Peano.pred (nat_of_P (get_height 63 (plength N)))). set (w_op := cmk_op bb). assert (op_spec: ZnZ.Specs w_op). unfold bb, w_op; apply cmk_spec; auto. assert (F0: N < DoubleType.base (ZnZ.digits w_op)). apply Z.lt_le_trans with (1 := plength_correct N). unfold w_op, DoubleType.base. rewrite cmk_op_digits. apply Zpower_le_monotone; split; auto with zarith. generalize (get_height_correct 63 (plength N)); unfold bb. set (p := plength N). replace (Z_of_nat (Peano.pred (nat_of_P (get_height 63 p)))) with ((Zpos (get_height 63 p) - 1) ). auto with zarith. rewrite <- Nat.sub_1_r; rewrite inj_minus1. rewrite <- Zpos_eq_Z_of_nat_o_nat_of_P; auto with zarith. generalize (lt_O_nat_of_P (get_height 63 p)); auto with zarith. assert (F1: ZnZ.to_Z (ZnZ.of_Z N) = N). rewrite ZnZ.of_Z_correct; auto with zarith. assert (F2: 1 < ZnZ.to_Z (ZnZ.of_Z N)). rewrite F1; auto with zarith. assert (F3: 0 < ZnZ.to_Z (ZnZ.of_Z N)); auto with zarith. assert (F4: ZnZ.to_Z (ZnZ.of_Z a) = a). rewrite ZnZ.of_Z_correct; auto with zarith. assert (F5: ZnZ.to_Z (ZnZ.of_Z 1) = 1). rewrite ZnZ.of_Z_correct; auto with zarith. assert (F6: N - 1 = (R1 * mkProd_pred dec)%positive * mkProd' dec). rewrite Zpos_mult. rewrite <- Zmult_assoc; rewrite mkProd_pred_mkProd. simpl in H1; rewrite Zpos_mult in H1; rewrite <- H1; rewrite Ppred_Zminus; auto with zarith. assert (m_spec: mod_spec w_op (znz_of_Z w_op N) (make_mod_op w_op (znz_of_Z w_op N))). apply make_mod_spec; auto with zarith. match goal with |- context[all_pow_mod ?x ?y ?z ?t ?u] => generalize (fst_all_pow_mod x w_op op_spec _ F3 _ m_spec u (znz_of_Z w_op a) (R1*mkProd_pred dec) z t); generalize (snd_all_pow_mod x w_op op_spec _ F3 _ m_spec u z t); fold bb w_op; case (all_pow_mod x y z t u); simpl fst; simpl snd end. intros prod aNm1; intros H5 H6. case_eq (ZnZ.to_Z aNm1). intros; discriminate. 2: intros; discriminate. intros p; case p; clear p. intros; discriminate. intros; discriminate. intros If6. case_eq (ZnZ.to_Z (ZnZ.gcd prod (znz_of_Z w_op N))). intros; discriminate. 2: intros; discriminate. intros p; case p; clear p. intros; discriminate. intros; discriminate. intros If7. match goal with |- context[if ?x then _ else _] => case_eq x; intros If8; auto end. 2: intros; discriminate. intros If9. match goal with H: (?X ?< ?Y) = true |- _ => generalize (is_lt_spec X Y); rewrite H; clear H; intros H end. assert (U1: N - 1 = mkProd dec * R1). rewrite <- Ppred_Zminus in H1 by auto with zarith. rewrite H1; simpl. repeat rewrite Zpos_mult; auto with zarith. assert (HH:Z_of_N s = R1 / (2 * mkProd dec) /\ Zpos r = R1 mod (2 * mkProd dec)). apply mod_unique with (2 * mkProd dec); [auto with zarith | | ]. apply Z_mod_lt; auto with zarith. rewrite <- Z_div_mod_eq_full. rewrite H3. rewrite (Zpos_xO (mkProd dec)). simpl Z_of_N; ring. case HH; clear HH; intros HH1 HH2. apply PocklingtonExtra with (F1:=mkProd dec) (R1:=R1) (m:=1). 2: auto with zmisc zarith. 2: auto with zmisc zarith. 2: auto with zmisc zarith. 2: auto with zmisc zarith. 3: auto with zmisc zarith. 3: auto with zmisc zarith. case (Zle_lt_or_eq 1 (mkProd dec)); auto with zarith. simpl in H2; auto with zarith. intros HH; contradict If3; rewrite <- HH. apply Zodd_not_Zeven; red; auto. intros p; case p; clear p. intros HH; contradict HH. apply not_prime_0. 2: intros p (V1, _); contradict V1; apply Zle_not_lt; red; simpl; intros; discriminate. intros p Hprime Hdec; exists (Zpos a);repeat split. auto with zarith. apply trans_equal with (2 := If6). rewrite H5. rewrite pow_mod_pred_spec with (2 := m_spec). 2: auto with zarith. rewrite F1. rewrite m_spec.(power_mod_spec) with (t := a). change (znz_of_Z w_op a) with (ZnZ.of_Z a). change (znz_of_Z w_op N) with (ZnZ.of_Z N). rewrite F1; rewrite F4. rewrite <- Zpower_mod; [idtac| auto with zarith]. rewrite <- Zpower_mult; [idtac|auto with zarith |auto with zarith]. rewrite mkProd_pred_mkProd. rewrite U1; rewrite Zmult_comm. rewrite Zpower_mult; [idtac|auto with zarith| auto with zarith]. rewrite <- Zpower_mod; auto with zarith. change (znz_of_Z w_op a) with (ZnZ.of_Z a). change (znz_of_Z w_op N) with (ZnZ.of_Z N). rewrite F1; rewrite F4; rewrite Zmod_small; auto with zarith. rewrite Zmod_small; auto with zarith. rewrite m_spec.(power_mod_spec) with (t := a). match goal with |- context[?X mod ?Y] => case (Z_mod_lt X Y); auto with zarith end. change (znz_of_Z w_op a) with (ZnZ.of_Z a). change (znz_of_Z w_op N) with (ZnZ.of_Z N). rewrite F1; rewrite F4; rewrite Zmod_small; auto with zarith. rewrite pow_mod_pred_spec with (2 := m_spec). 2: auto with zarith. match goal with |- context[?X mod ?Y] => case (Z_mod_lt X Y); auto with zarith end. rewrite Zmod_small; auto with zarith. rewrite m_spec.(power_mod_spec) with (t := a). match goal with |- context[?X mod ?Y] => case (Z_mod_lt X Y); auto with zarith end. change (znz_of_Z w_op a) with (ZnZ.of_Z a). change (znz_of_Z w_op N) with (ZnZ.of_Z N). rewrite F1; rewrite F4; rewrite Zmod_small; auto with zarith. match type of H6 with _ -> _ -> ?X => assert (tmp: X); [apply H6 | clear H6; rename tmp into H6] end. rewrite F1. change (znz_of_Z w_op 1) with (ZnZ.of_Z 1). rewrite F5; rewrite Zmod_small; auto with zarith. rewrite pow_mod_pred_spec with (2 := m_spec). 2: auto with zarith. change (znz_of_Z w_op a) with (ZnZ.of_Z a). change (znz_of_Z w_op N) with (ZnZ.of_Z N). repeat (rewrite F1 || rewrite F4). rewrite m_spec.(power_mod_spec) with (t := a). change (znz_of_Z w_op a) with (ZnZ.of_Z a). change (znz_of_Z w_op N) with (ZnZ.of_Z N). repeat (rewrite F1 || rewrite F4). rewrite Zpos_mult; rewrite <- Zpower_mod. 2: auto with zarith. rewrite Zpower_mult; auto with zarith. change (znz_of_Z w_op a) with (ZnZ.of_Z a). change (znz_of_Z w_op N) with (ZnZ.of_Z N). repeat (rewrite F1 || rewrite F4). rewrite Zmod_small; auto with zarith. change (znz_of_Z w_op a) with (ZnZ.of_Z a). change (znz_of_Z w_op N) with (ZnZ.of_Z N). repeat (rewrite F1 || rewrite F4). rewrite Zmod_small; auto with zarith. rewrite (power_mod_spec m_spec) with (t := a). match goal with |- context[?X mod ?Y] => case (Z_mod_lt X Y) end. 1: auto with zarith. change (znz_of_Z w_op a) with (ZnZ.of_Z a). change (znz_of_Z w_op N) with (ZnZ.of_Z N). repeat (rewrite F1 || rewrite F4); auto. rewrite Zmod_small; [auto with zarith|idtac]. change (znz_of_Z w_op N) with (ZnZ.of_Z N); auto with zarith. change (znz_of_Z w_op a) with (ZnZ.of_Z a) in H6. change (znz_of_Z w_op N) with (ZnZ.of_Z N) in H6. change (znz_of_Z w_op 1) with (ZnZ.of_Z 1) in H6. rewrite F5 in H6; rewrite F1 in H6; rewrite F4 in H6. case in_mkProd_prime_div_in with (3 := Hdec); auto. intros p1 Hp1. rewrite <- F6 in H6. apply Zis_gcd_gcd; auto with zarith. change (rel_prime (a ^ ((N - 1) / p) - 1) N). match type of H6 with _ = ?X mod _ => apply rel_prime_div with (p := X); auto with zarith end. apply rel_prime_mod_rev; auto with zarith. red. pattern 1 at 4; rewrite <- If7; rewrite <- H6. pattern N at 2; rewrite <- F1. apply ZnZ.spec_gcd; auto with zarith. assert (foldtmp: forall (A B: Set) (f: A -> B -> A) (P: A -> Prop) l a b, In b l -> (forall x, P (f x b)) -> (forall x y, P x -> P (f x y)) -> P (fold_left f l a)). assert (foldtmp0: forall (A B: Set) (f: A -> B -> A) (P: A -> Prop) l a, P a -> (forall x y, P x -> P (f x y)) -> P (fold_left f l a)). intros A B f P l; elim l; simpl; auto. intros A B f P l; elim l; simpl; auto. intros a1 b HH; case HH. intros a1 l1 Rec a2 b [V|V] V1 V2; subst; auto. apply foldtmp0; auto. apply Rec with (b := b); auto with zarith. match goal with |- context [fold_left ?f _ _] => apply (foldtmp _ _ f (fun k => Z.divide (a ^ ((N - 1) / p) - 1) k)) with (b := (p, p1)); auto with zarith end. rewrite <- HH2. clear F0; match goal with H: ?X < ?Y |- ?X < ?Z => replace Z with Y; auto end. repeat (rewrite Zpos_plus || rewrite Zpos_mult || rewrite times_Zmult). rewrite Zpos_xO; ring. rewrite <- HH1; rewrite <- HH2. apply check_s_r_correct with sqrt; auto. Qed. (* Simple version of pocklington for primo *) Definition test_spock N a dec := if (2 ?< N) then let Nm1 := Pos.pred N in let F1 := mkProd dec in match (Nm1 / F1)%P with | (Npos R1, N0) => if (1 ?< a) then if (a ?< N) then if (N ?< F1 * F1) then let op := cmk_op (Peano.pred (nat_of_P (get_height 63 (plength N)))) in let wN := znz_of_Z op (Zpos N) in let wa := znz_of_Z op (Zpos a) in let w1 := znz_of_Z op 1 in let mod_op := make_mod_op op wN in let pow := mod_op.(power_mod) in let ttimes := mod_op.(mul_mod) in let pred:= mod_op.(pred_mod) in let gcd:= ZnZ.gcd in let A := pow_mod_pred _ mod_op (pow wa R1) dec in match all_pow_mod _ mod_op w1 A dec with | (p, aNm1) => match ZnZ.to_Z aNm1 with (Zpos xH) => match ZnZ.to_Z (gcd p wN) with (Zpos xH) => true | _ => false end | _ => false end end else false else false else false | _=> false end else false. Lemma test_spock_correct : forall N a dec, (forall k, In k dec -> prime (Zpos (fst k))) -> test_spock N a dec = true -> prime N. unfold test_spock;intros N a dec H. match goal with |- context[if ?x then _ else _] => case_eq x; intros If1; auto end. 2: intros; discriminate. match goal with H: (?X ?< ?Y) = true |- _ => generalize (is_lt_spec X Y); rewrite H; clear H; intros H end. generalize (div_eucl_spec (Pos.pred N) (mkProd dec)); destruct ((Pos.pred N) / (mkProd dec))%P as (R1,n). simpl fst; simpl snd; intros (H1, H2). destruct R1 as [ |R1]. intros; discriminate. destruct n. 2: intros; discriminate. match goal with |- context[if ?x then _ else _] => case_eq x; intros If2; auto end. match goal with H: (?X ?< ?Y) = true |- _ => generalize (is_lt_spec X Y); rewrite H; clear H; intros H end. 2: intros; discriminate. (* set (bb := pred (nat_of_P (get_height 63 (plength N)))). set (w_op := cmk_op bb). assert (op_spec: znz_spec w_op). unfold bb, w_op; apply cmk_spec; auto. assert (F0: N < Basic_type.base (znz_digits w_op)). apply Z.lt_le_trans with (1 := plength_correct N). unfold w_op, Basic_type.base. rewrite cmk_op_digits. apply Zpower_le_monotone; split; auto with zarith. generalize (get_height_correct 63 (plength N)); unfold bb. set (p := plength N). replace (Z_of_nat (pred (nat_of_P (get_height 63 p)))) with ((Zpos (get_height 63 p) - 1) ); auto with zarith. rewrite pred_of_minus; rewrite inj_minus1; auto with zarith. rewrite <- Zpos_eq_Z_of_nat_o_nat_of_P; auto with zarith. generalize (lt_O_nat_of_P (get_height 63 p)); auto with zarith. *) set (bb := Peano.pred (nat_of_P (get_height 63 (plength N)))). set (w_op := cmk_op bb). assert (op_spec: ZnZ.Specs w_op). unfold bb, w_op; apply cmk_spec; auto. match goal with |- context[if ?x then _ else _] => case_eq x; intros If3; auto end. match goal with H: (?X ?< ?Y) = true |- _ => generalize (is_lt_spec X Y); rewrite H; clear H; intros H end. match goal with |- context[if ?x then _ else _] => case_eq x; intros If4; auto end. match goal with H: (?X ?< ?Y) = true |- _ => generalize (is_lt_spec X Y); rewrite H; clear H; intros H end. assert (F0: N < DoubleType.base (ZnZ.digits w_op)). apply Z.lt_le_trans with (1 := plength_correct N). unfold w_op, DoubleType.base. rewrite cmk_op_digits. apply Zpower_le_monotone; split; auto with zarith. generalize (get_height_correct 63 (plength N)); unfold bb. set (p := plength N). replace (Z_of_nat (Peano.pred (nat_of_P (get_height 63 p)))) with ((Zpos (get_height 63 p) - 1) ). auto with zarith. rewrite <- Nat.sub_1_r; rewrite inj_minus1. rewrite <- Zpos_eq_Z_of_nat_o_nat_of_P; auto with zarith. generalize (lt_O_nat_of_P (get_height 63 p)); auto with zarith. assert (F1: ZnZ.to_Z (ZnZ.of_Z N) = N). rewrite ZnZ.of_Z_correct; auto with zarith. assert (F2: 1 < ZnZ.to_Z (ZnZ.of_Z N)). rewrite F1; auto with zarith. assert (F3: 0 < ZnZ.to_Z (ZnZ.of_Z N)); auto with zarith. assert (F4: ZnZ.to_Z (ZnZ.of_Z a) = a). rewrite ZnZ.of_Z_correct; auto with zarith. assert (F5: ZnZ.to_Z (ZnZ.of_Z 1) = 1). rewrite ZnZ.of_Z_correct; auto with zarith. assert (F6: N - 1 = (R1 * mkProd_pred dec)%positive * mkProd' dec). rewrite Zpos_mult. rewrite <- Zmult_assoc; rewrite mkProd_pred_mkProd. simpl in H1; rewrite Zpos_mult in H1; rewrite <- H1; rewrite Ppred_Zminus; auto with zarith. assert (m_spec: mod_spec w_op (znz_of_Z w_op N) (make_mod_op w_op (znz_of_Z w_op N))). apply make_mod_spec; auto with zarith. match goal with |- context[all_pow_mod ?x ?y ?z ?t ?u] => generalize (fst_all_pow_mod x w_op op_spec _ F3 _ m_spec u (znz_of_Z w_op a) (R1*mkProd_pred dec) z t); generalize (snd_all_pow_mod x w_op op_spec _ F3 _ m_spec u z t); fold bb w_op; case (all_pow_mod x y z t u); simpl fst; simpl snd end. 2: intros; discriminate. intros prod aNm1; intros H5 H6. case_eq (ZnZ.to_Z aNm1). intros; discriminate. 2: intros; discriminate. intros p; case p; clear p. intros; discriminate. intros; discriminate. intros If5. case_eq (ZnZ.to_Z (ZnZ.gcd prod (znz_of_Z w_op N))). intros; discriminate. 2: intros; discriminate. intros p; case p; clear p. intros; discriminate. intros; discriminate. intros If6 _. assert (U1: N - 1 = mkProd dec * R1). rewrite <- Ppred_Zminus in H1 by auto with zarith. rewrite H1; simpl. repeat rewrite Zpos_mult; auto with zarith. apply PocklingtonCorollary1 with (F1:=mkProd dec) (R1:=R1). case (Zle_lt_or_eq 1 (mkProd dec)). simpl in H2; auto with zarith. easy. intros HH; contradict If4; rewrite Zpos_mult_morphism; rewrite <- HH. apply Zle_not_lt; auto with zarith. 1-3: auto with zmisc zarith. intros p; case p; clear p. intros HH; contradict HH. apply not_prime_0. 2: intros p (V1, _); contradict V1; apply Zle_not_lt; red; simpl; intros; discriminate. intros p Hprime Hdec; exists (Zpos a);repeat split; auto with zarith. apply trans_equal with (2 := If5). rewrite H5. rewrite pow_mod_pred_spec with (2 := m_spec). 2: auto with zarith. rewrite F1. rewrite m_spec.(power_mod_spec) with (t := a). change (znz_of_Z w_op N) with (ZnZ.of_Z N). change (znz_of_Z w_op a) with (ZnZ.of_Z a). rewrite F1; rewrite F4. rewrite <- Zpower_mod;[idtac | auto with zarith]. rewrite <- Zpower_mult;[idtac|auto with zarith|auto with zarith]. rewrite mkProd_pred_mkProd. rewrite U1; rewrite Zmult_comm. rewrite Zpower_mult; [idtac|auto with zarith|auto with zarith]. rewrite <- Zpower_mod; auto with zarith. change (znz_of_Z w_op N) with (ZnZ.of_Z N). change (znz_of_Z w_op a) with (ZnZ.of_Z a). rewrite F1; rewrite F4; rewrite Zmod_small; auto with zarith. change (znz_of_Z w_op N) with (ZnZ.of_Z N). change (znz_of_Z w_op a) with (ZnZ.of_Z a). rewrite Zmod_small; auto with zarith. rewrite m_spec.(power_mod_spec) with (t := a). match goal with |- context[?X mod ?Y] => case (Z_mod_lt X Y); auto with zarith end. change (znz_of_Z w_op N) with (ZnZ.of_Z N). change (znz_of_Z w_op a) with (ZnZ.of_Z a). rewrite F1; rewrite F4; rewrite Zmod_small; auto with zarith. rewrite pow_mod_pred_spec with (2 := m_spec); auto with zarith. match goal with |- context[?X mod ?Y] => case (Z_mod_lt X Y); auto with zarith end. rewrite Zmod_small; auto with zarith. rewrite m_spec.(power_mod_spec) with (t := a). match goal with |- context[?X mod ?Y] => case (Z_mod_lt X Y); auto with zarith end. change (znz_of_Z w_op N) with (ZnZ.of_Z N). change (znz_of_Z w_op a) with (ZnZ.of_Z a). rewrite F1; rewrite F4; rewrite Zmod_small; auto with zarith. match type of H6 with _ -> _ -> ?X => assert (tmp: X); [apply H6 | clear H6; rename tmp into H6] end. rewrite F1. change (znz_of_Z w_op 1) with (ZnZ.of_Z 1). rewrite F5; rewrite Zmod_small; auto with zarith. rewrite pow_mod_pred_spec with (2 := m_spec); auto with zarith. change (znz_of_Z w_op N) with (ZnZ.of_Z N). change (znz_of_Z w_op a) with (ZnZ.of_Z a). repeat (rewrite F1 || rewrite F4). rewrite m_spec.(power_mod_spec) with (t := a); auto with zarith. change (znz_of_Z w_op N) with (ZnZ.of_Z N). repeat (rewrite F1 || rewrite F4). rewrite Zpos_mult; rewrite <- Zpower_mod; auto with zarith. rewrite Zpower_mult; auto with zarith. change (znz_of_Z w_op N) with (ZnZ.of_Z N). repeat (rewrite F1 || rewrite F4). rewrite Zmod_small; auto with zarith. rewrite Zmod_small; auto with zarith. rewrite m_spec.(power_mod_spec) with (t := a). match goal with |- context[?X mod ?Y] => case (Z_mod_lt X Y); auto with zarith end. change (znz_of_Z w_op N) with (ZnZ.of_Z N). change (znz_of_Z w_op a) with (ZnZ.of_Z a). repeat (rewrite F1 || rewrite F4). rewrite Zmod_small; auto with zarith. change (znz_of_Z w_op N) with (ZnZ.of_Z N) in H6. change (znz_of_Z w_op a) with (ZnZ.of_Z a) in H6. change (znz_of_Z w_op 1) with (ZnZ.of_Z 1) in H6. rewrite F5 in H6; rewrite F1 in H6; rewrite F4 in H6. case in_mkProd_prime_div_in with (3 := Hdec); auto. intros p1 Hp1. rewrite <- F6 in H6. apply Zis_gcd_gcd; auto with zarith. change (rel_prime (a ^ ((N - 1) / p) - 1) N). match type of H6 with _ = ?X mod _ => apply rel_prime_div with (p := X); auto with zarith end. apply rel_prime_mod_rev; auto with zarith. red. pattern 1 at 4; rewrite <- If6; rewrite <- H6. pattern N at 2; rewrite <- F1. apply ZnZ.spec_gcd; auto with zarith. assert (foldtmp: forall (A B: Set) (f: A -> B -> A) (P: A -> Prop) l a b, In b l -> (forall x, P (f x b)) -> (forall x y, P x -> P (f x y)) -> P (fold_left f l a)). assert (foldtmp0: forall (A B: Set) (f: A -> B -> A) (P: A -> Prop) l a, P a -> (forall x y, P x -> P (f x y)) -> P (fold_left f l a)). intros A B f P l; elim l; simpl; auto. intros A B f P l; elim l; simpl; auto. intros a1 b HH; case HH. intros a1 l1 Rec a2 b [V|V] V1 V2; subst; auto. apply foldtmp0; auto. apply Rec with (b := b); auto with zarith. match goal with |- context [fold_left ?f _ _] => apply (foldtmp _ _ f (fun k => Z.divide (a ^ ((N - 1) / p) - 1) k)) with (b := (p, p1)); auto with zarith end. intros; discriminate. Qed. Fixpoint test_Certif (lc : Certif) : bool := match lc with | nil => true | (Proof_certif _ _) :: lc => test_Certif lc | (Lucas_certif n p) :: lc => let xx := test_Certif lc in if xx then let yy := gt2 p in if yy then match p with Zpos p1 => let zz := Mp p in match zz with | Zpos n' => if (n ?= n')%P then let tt := lucas p1 in match tt with | Z0 => true | _ => false end else false | _ => false end | _ => false end else false else false | (Pock_certif n a dec sqrt) :: lc => let xx := test_pock n a dec sqrt in if xx then let yy := all_in lc dec in (if yy then test_Certif lc else false) else false | (SPock_certif n a dec) :: lc => let xx :=test_spock n a dec in if xx then let yy := all_in lc dec in (if yy then test_Certif lc else false) else false | (Ell_certif n ss l a b x y) :: lc => let xx := ell_test n ss l a b x y in if xx then let yy := all_in lc l in if yy then test_Certif lc else false else false end. Lemma test_Certif_In_Prime : forall lc, test_Certif lc = true -> forall c, In c lc -> prime (nprim c). intros lc; elim lc; simpl; auto. intros _ c H; case H. intros a; case a; simpl; clear a lc. intros N p l Rec H c [H1 | H1]; subst; auto with arith. intros n p l; case (test_Certif l); auto with zarith. 2: intros; discriminate. intros H H1 c [H2 | H2]; subst; auto with arith. simpl nprim. generalize H1; clear H1. case_eq (gt2 p). 2: intros; discriminate. case p; clear p; try (intros; discriminate; fail). unfold gt2; intros p H1. match goal with H: (?X ?< ?Y) = true |- _ => generalize (is_lt_spec X Y); rewrite H; clear H; intros H end. unfold Mp; case_eq (2 ^ p -1); try (intros; discriminate; fail). intros p1 Hp1. case_eq (n ?= p1)%P; try rewrite <- Hp1. 2: intros; discriminate. intros H2. match goal with H: (?X ?= ?Y)%P = true |- _ => generalize (is_eq_eq _ _ H); clear H; intros H end. generalize (lucas_prime H1); rewrite Hp1; rewrite <- H2. case (lucas p); try (intros; discriminate; fail); auto. intros N a d p l H. generalize (test_pock_correct N a d p). case (test_pock N a d p); auto. 2: intros; discriminate. generalize (all_in_In l d). case (all_in l d). 2: intros; discriminate. intros H1 H2 H3 c [H4 | H4]; subst; simpl; auto. apply H2; auto. intros k Hk. case H1 with (2 := Hk); auto. intros x (Hx1, Hx2); rewrite Hx2; auto. intros N a d l H. generalize (test_spock_correct N a d). case test_spock; auto. 2: intros; discriminate. generalize (all_in_In l d). case (all_in l d). 2: intros; discriminate. intros H1 H2 H3 c [H4 | H4]; subst; simpl; auto. apply H2; auto. intros k Hk. case H1 with (2 := Hk); auto. intros x (Hx1, Hx2); rewrite Hx2; auto. intros N S l A B x y l1. generalize (all_in_In l1 l). generalize (ell_test_correct N S l A B x y). case ell_test. case all_in; auto. intros H1 H2 H3 H4 c [H5 | H5]; try subst c; simpl; auto. apply H1. intros p Hp; case (H2 (refl_equal true) p); auto. intros x1 (Hx1, Hx2); rewrite Hx2; auto. intros; discriminate. intros; discriminate. Qed. Lemma Pocklington_refl : forall c lc, test_Certif (c::lc) = true -> prime (nprim c). Proof. intros c lc Heq;apply test_Certif_In_Prime with (c::lc);trivial;simpl;auto. Qed. coqprime-8.18/src/Coqprime/num/W.v000066400000000000000000000142151451023060700170340ustar00rootroot00000000000000 (*************************************************************) (* This file is distributed under the terms of the *) (* GNU Lesser General Public License Version 2.1 *) (*************************************************************) (* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *) (*************************************************************) Set Implicit Arguments. Require Import CyclicAxioms Cyclic63 Int63Compat. From Bignums Require Import DoubleCyclic BigN. Require Import ZArith ZCAux Mod_op. (* ** Type of words ** *) (* Make the words *) Definition mk_word: forall (w: Type) (n:nat), Type. fix mk_word 2. intros w n; case n; simpl. exact int. intros n1; exact (zn2z (mk_word w n1)). Defined. (* Make the op *) Fixpoint mk_op (w : univ_of_cycles) (op : ZnZ.Ops w) (n : nat) {struct n} : ZnZ.Ops (word w n) := match n return (ZnZ.Ops (word w n)) with | O => op | S n1 => mk_zn2z_ops_karatsuba (mk_op op n1) end. Theorem mk_op_digits: forall (w:univ_of_cycles) (op: ZnZ.Ops w) n, (Zpos (ZnZ.digits (mk_op op n)) = 2 ^ Z_of_nat n * Zpos (ZnZ.digits op))%Z. intros w op n; elim n; simpl mk_op; auto; clear n. intros n Rec; simpl ZnZ.digits. rewrite Zpos_xO; rewrite Rec. rewrite Zmult_assoc; apply f_equal2 with (f := Zmult); auto. rewrite inj_S; unfold Z.succ; rewrite Zplus_comm. rewrite Zpower_exp; auto with zarith. Qed. Theorem digits_pos: forall (w:univ_of_cycles) (op: ZnZ.Ops w) n, (1 < Zpos (ZnZ.digits op) -> 1 < Zpos (ZnZ.digits (mk_op op n)))%Z. intros w op n H. rewrite mk_op_digits. rewrite <- (Zmult_1_r 1). apply Z.le_lt_trans with (2 ^ (Z_of_nat n) * 1)%Z. apply Zmult_le_compat_r;[ | auto with zarith]. rewrite <- (Zpower_0_r 2). apply Zpower_le_monotone; auto with zarith. apply Zmult_lt_compat_l; auto with zarith. Qed. Fixpoint mk_spec (w : univ_of_cycles) (op : ZnZ.Ops w) (op_spec : ZnZ.Specs op) (H: (1 < Zpos (ZnZ.digits op))%Z) (n : nat) {struct n} : ZnZ.Specs (mk_op op n) := match n return (ZnZ.Specs (mk_op op n)) with | O => op_spec | S n1 => @mk_zn2z_specs_karatsuba (word w n1) (mk_op op n1) (* (digits_pos op n1 H) *) (mk_spec op_spec H n1) end. (* ** Operators ** *) Definition w63_1_op := mk_zn2z_ops int_ops. Definition w63_2_op := mk_zn2z_ops w63_1_op. Definition w63_3_op := mk_zn2z_ops w63_2_op. Definition w63_4_op := mk_zn2z_ops_karatsuba w63_3_op. Definition w63_5_op := mk_zn2z_ops_karatsuba w63_4_op. Definition w63_6_op := mk_zn2z_ops_karatsuba w63_5_op. Definition w63_7_op := mk_zn2z_ops_karatsuba w63_6_op. Definition w63_8_op := mk_zn2z_ops_karatsuba w63_7_op. Definition w63_9_op := mk_zn2z_ops_karatsuba w63_8_op. Definition w63_10_op := mk_zn2z_ops_karatsuba w63_9_op. Definition w63_11_op := mk_zn2z_ops_karatsuba w63_10_op. Definition w63_12_op := mk_zn2z_ops_karatsuba w63_11_op. Definition w63_13_op := mk_zn2z_ops_karatsuba w63_12_op. Definition w63_14_op := mk_zn2z_ops_karatsuba w63_13_op. Definition cmk_op: forall (n: nat), ZnZ.Ops (word int n). intros n; case n; clear n. exact int_ops. intros n; case n; clear n. exact w63_1_op. intros n; case n; clear n. exact w63_2_op. intros n; case n; clear n. exact w63_3_op. intros n; case n; clear n. exact w63_4_op. intros n; case n; clear n. exact w63_5_op. intros n; case n; clear n. exact w63_6_op. intros n; case n; clear n. exact w63_7_op. intros n; case n; clear n. exact w63_8_op. intros n; case n; clear n. exact w63_9_op. intros n; case n; clear n. exact w63_10_op. intros n; case n; clear n. exact w63_11_op. intros n; case n; clear n. exact w63_12_op. intros n; case n; clear n. exact w63_13_op. intros n; case n; clear n. exact w63_14_op. intros n. match goal with |- context[S ?X] => exact (mk_op int_ops (S X)) end. Defined. Definition cmk_spec: forall n, ZnZ.Specs (cmk_op n). assert (S1: ZnZ.Specs w63_1_op). unfold w63_1_op; apply mk_zn2z_specs; auto with zarith. exact int_specs. assert (S2: ZnZ.Specs w63_2_op). unfold w63_2_op; apply mk_zn2z_specs; auto with zarith. assert (S3: ZnZ.Specs w63_3_op). unfold w63_3_op; apply mk_zn2z_specs; auto with zarith. assert (S4: ZnZ.Specs w63_4_op). unfold w63_4_op; apply mk_zn2z_specs_karatsuba; auto with zarith. assert (S5: ZnZ.Specs w63_5_op). unfold w63_5_op; apply mk_zn2z_specs_karatsuba; auto with zarith. assert (S6: ZnZ.Specs w63_6_op). unfold w63_6_op; apply mk_zn2z_specs_karatsuba; auto with zarith. assert (S7: ZnZ.Specs w63_7_op). unfold w63_7_op; apply mk_zn2z_specs_karatsuba; auto with zarith. assert (S8: ZnZ.Specs w63_8_op). unfold w63_8_op; apply mk_zn2z_specs_karatsuba; auto with zarith. assert (S9: ZnZ.Specs w63_9_op). unfold w63_9_op; apply mk_zn2z_specs_karatsuba; auto with zarith. assert (S10: ZnZ.Specs w63_10_op). unfold w63_10_op; apply mk_zn2z_specs_karatsuba; auto with zarith. assert (S11: ZnZ.Specs w63_11_op). unfold w63_11_op; apply mk_zn2z_specs_karatsuba; auto with zarith. assert (S12: ZnZ.Specs w63_12_op). unfold w63_12_op; apply mk_zn2z_specs_karatsuba; auto with zarith. assert (S13: ZnZ.Specs w63_13_op). unfold w63_13_op; apply mk_zn2z_specs_karatsuba; auto with zarith. assert (S14: ZnZ.Specs w63_14_op). unfold w63_14_op; apply mk_zn2z_specs_karatsuba; auto with zarith. intros n; case n; clear n. exact int_specs. intros n; case n; clear n. exact S1. intros n; case n; clear n. exact S2. intros n; case n; clear n. exact S3. intros n; case n; clear n. exact S4. intros n; case n; clear n. exact S5. intros n; case n; clear n. exact S6. intros n; case n; clear n. exact S7. intros n; case n; clear n. exact S8. intros n; case n; clear n. exact S9. intros n; case n; clear n. exact S10. intros n; case n; clear n. exact S11. intros n; case n; clear n. exact S12. intros n; case n; clear n. exact S13. intros n; case n; clear n. exact S14. intro n. simpl cmk_op. repeat match goal with |- ZnZ.Specs (mk_zn2z_ops_karatsuba ?X) => generalize (@mk_zn2z_specs_karatsuba _ X); intros tmp; apply tmp; clear tmp; auto with zarith end. (* apply digits_pos. *) auto with zarith. apply mk_spec. exact int_specs. auto with zarith. Defined. Theorem cmk_op_digits: forall n, (Zpos (ZnZ.digits (cmk_op n)) = 2 ^ (Z_of_nat n) * 63)%Z. do 15 (intros n; case n; clear n; [try reflexivity | idtac]). intros n; unfold cmk_op; lazy beta. rewrite mk_op_digits; auto. Qed. coqprime-8.18/src/Coqprime/num/extraction/000077500000000000000000000000001451023060700206145ustar00rootroot00000000000000coqprime-8.18/src/Coqprime/num/extraction/.depend000066400000000000000000000117161451023060700220620ustar00rootroot00000000000000basic_type.cmo: zpower.cmi binPos.cmi binInt.cmi basic_type.cmi basic_type.cmx: zpower.cmx binPos.cmx binInt.cmx basic_type.cmi binInt.cmo: datatypes.cmi binPos.cmi binNat.cmi binInt.cmi binInt.cmx: datatypes.cmx binPos.cmx binNat.cmx binInt.cmi binNat.cmo: datatypes.cmi binPos.cmi binNat.cmi binNat.cmx: datatypes.cmx binPos.cmx binNat.cmi binPos.cmo: peano.cmi datatypes.cmi binPos.cmi binPos.cmx: peano.cmx datatypes.cmx binPos.cmi datatypes.cmo: datatypes.cmi datatypes.cmx: datatypes.cmi genBase.cmo: datatypes.cmi binPos.cmi binInt.cmi basic_type.cmi genBase.cmi genBase.cmx: datatypes.cmx binPos.cmx binInt.cmx basic_type.cmx genBase.cmi genDivn1.cmo: genBase.cmi datatypes.cmi binPos.cmi binNat.cmi basic_type.cmi \ genDivn1.cmi genDivn1.cmx: genBase.cmx datatypes.cmx binPos.cmx binNat.cmx basic_type.cmx \ genDivn1.cmi genLift.cmo: datatypes.cmi binPos.cmi binNat.cmi basic_type.cmi genLift.cmi genLift.cmx: datatypes.cmx binPos.cmx binNat.cmx basic_type.cmx genLift.cmi genSqrt.cmo: genBase.cmi datatypes.cmi binPos.cmi binNat.cmi basic_type.cmi \ genSqrt.cmi genSqrt.cmx: genBase.cmx datatypes.cmx binPos.cmx binNat.cmx basic_type.cmx \ genSqrt.cmi genWord.cmo: znZ.cmi zn2Z.cmi datatypes.cmi binPos.cmi binNat.cmi binInt.cmi \ basic_type.cmi genWord.cmi genWord.cmx: znZ.cmx zn2Z.cmx datatypes.cmx binPos.cmx binNat.cmx binInt.cmx \ basic_type.cmx genWord.cmi logic.cmo: logic.cmi logic.cmx: logic.cmi lucas.cmo: zpower.cmi znZ.cmi zmisc.cmi mod_op.cmi datatypes.cmi binPos.cmi \ binInt.cmi lucas.cmi lucas.cmx: zpower.cmx znZ.cmx zmisc.cmx mod_op.cmx datatypes.cmx binPos.cmx \ binInt.cmx lucas.cmi mod_op.cmo: znZ.cmi genLift.cmi datatypes.cmi binPos.cmi binNat.cmi \ basic_type.cmi mod_op.cmi mod_op.cmx: znZ.cmx genLift.cmx datatypes.cmx binPos.cmx binNat.cmx \ basic_type.cmx mod_op.cmi peano.cmo: datatypes.cmi peano.cmi peano.cmx: datatypes.cmx peano.cmi testlucas.cmo: zpower.cmi znZ.cmi zn2Z.cmi zmisc.cmi w64C.cmo w31C.cmo \ mod_op.cmi datatypes.cmi binPos.cmi binNat.cmi binInt.cmi basic_type.cmi testlucas.cmx: zpower.cmx znZ.cmx zn2Z.cmx zmisc.cmx w64C.cmx w31C.cmx \ mod_op.cmx datatypes.cmx binPos.cmx binNat.cmx binInt.cmx basic_type.cmx w31C.cmo: zpower.cmi znZ.cmi zn2Z.cmi zmisc.cmi mod_op.cmi datatypes.cmi \ binPos.cmi binNat.cmi binInt.cmi basic_type.cmi w31C.cmx: zpower.cmx znZ.cmx zn2Z.cmx zmisc.cmx mod_op.cmx datatypes.cmx \ binPos.cmx binNat.cmx binInt.cmx basic_type.cmx w31.cmo: zpower.cmi znZ.cmi zmisc.cmi mod_op.cmi genWord.cmi datatypes.cmi \ binPos.cmi binNat.cmi binInt.cmi basic_type.cmi w31.cmx: zpower.cmx znZ.cmx zmisc.cmx mod_op.cmx genWord.cmx datatypes.cmx \ binPos.cmx binNat.cmx binInt.cmx basic_type.cmx w64C.cmo: zpower.cmi znZ.cmi zn2Z.cmi zmisc.cmi mod_op.cmi datatypes.cmi \ binPos.cmi binNat.cmi binInt.cmi basic_type.cmi w64C.cmx: zpower.cmx znZ.cmx zn2Z.cmx zmisc.cmx mod_op.cmx datatypes.cmx \ binPos.cmx binNat.cmx binInt.cmx basic_type.cmx w64.cmo: zpower.cmi znZ.cmi zn2Z.cmi zmisc.cmi mod_op.cmi genWord.cmi \ datatypes.cmi binPos.cmi binNat.cmi binInt.cmi basic_type.cmi w64.cmx: zpower.cmx znZ.cmx zn2Z.cmx zmisc.cmx mod_op.cmx genWord.cmx \ datatypes.cmx binPos.cmx binNat.cmx binInt.cmx basic_type.cmx zmisc.cmo: datatypes.cmi binPos.cmi binInt.cmi zmisc.cmi zmisc.cmx: datatypes.cmx binPos.cmx binInt.cmx zmisc.cmi zn2Z.cmo: znZ.cmi genSqrt.cmi genDivn1.cmi genBase.cmi datatypes.cmi \ binPos.cmi binNat.cmi basic_type.cmi zn2Z.cmi zn2Z.cmx: znZ.cmx genSqrt.cmx genDivn1.cmx genBase.cmx datatypes.cmx \ binPos.cmx binNat.cmx basic_type.cmx zn2Z.cmi znZ.cmo: datatypes.cmi binPos.cmi binNat.cmi binInt.cmi basic_type.cmi \ znZ.cmi znZ.cmx: datatypes.cmx binPos.cmx binNat.cmx binInt.cmx basic_type.cmx \ znZ.cmi zpower.cmo: zmisc.cmi logic.cmi datatypes.cmi binPos.cmi binInt.cmi \ zpower.cmi zpower.cmx: zmisc.cmx logic.cmx datatypes.cmx binPos.cmx binInt.cmx \ zpower.cmi basic_type.cmi: zpower.cmi binPos.cmi binInt.cmi binInt.cmi: datatypes.cmi binPos.cmi binNat.cmi binNat.cmi: datatypes.cmi binPos.cmi binPos.cmi: peano.cmi datatypes.cmi genBase.cmi: datatypes.cmi binPos.cmi binInt.cmi basic_type.cmi genDivn1.cmi: genBase.cmi datatypes.cmi binPos.cmi binNat.cmi basic_type.cmi genLift.cmi: datatypes.cmi binPos.cmi binNat.cmi basic_type.cmi genSqrt.cmi: genBase.cmi datatypes.cmi binPos.cmi binNat.cmi basic_type.cmi genWord.cmi: znZ.cmi zn2Z.cmi datatypes.cmi binPos.cmi binNat.cmi binInt.cmi \ basic_type.cmi lucas.cmi: zpower.cmi znZ.cmi zmisc.cmi mod_op.cmi datatypes.cmi binPos.cmi \ binInt.cmi mod_op.cmi: znZ.cmi genLift.cmi datatypes.cmi binPos.cmi binNat.cmi \ basic_type.cmi peano.cmi: datatypes.cmi zmisc.cmi: datatypes.cmi binPos.cmi binInt.cmi zn2Z.cmi: znZ.cmi genSqrt.cmi genDivn1.cmi genBase.cmi datatypes.cmi \ binPos.cmi binNat.cmi basic_type.cmi znZ.cmi: datatypes.cmi binPos.cmi binNat.cmi binInt.cmi basic_type.cmi zpower.cmi: zmisc.cmi logic.cmi datatypes.cmi binPos.cmi binInt.cmi coqprime-8.18/src/Coqprime/num/extraction/Makefile000066400000000000000000000020511451023060700222520ustar00rootroot00000000000000OCAMLC=ocamlc OCAMLOPT=ocamlopt OCAMLDEP=ocamldep OCAMLLIB=eval ocamlc -where GENML = datatypes.ml logic.ml peano.ml \ binPos.ml binNat.ml binInt.ml \ zmisc.ml zpower.ml basic_type.ml \ genBase.ml genDivn1.ml genSqrt.ml genLift.ml \ znZ.ml zn2Z.ml genWord.ml mod_op.ml GENMLI=$(GENML:.ml=.mli) MLSOURCES=$(GENML) w31C.ml w64C.ml testlucas.ml CMX=$(MLSOURCES:.ml=.cmx) CM0=$(MLSOURCES:.ml=.cmo) testlucas: $(CMX) uint31C.o uint64C.o $(OCAMLOPT) -o testlucas nums.cmxa uint31C.o uint64C.o $(CMX) testlucas.byte: $(CM0) uint31C.o uint64C.o $(OCAMLC) -o testlucas.byte nums.cma -custom uint31C.o uint64C.o $(CM0) uint31C.o: uint31C.c $(OCAMLOPT) -c uint31C.c uint64C.o: uint64C.c $(OCAMLOPT) -c uint64C.c clean_gen: rm -f $(GENML) $(GENMLI) *~ clean_comp: rm -f test31C test64 *.cmi *.cmx *.o *~ *~ clean: clean_gen clean_comp .SUFFIXES: .ml .mli .cmo .cmi .cmx .ml.cmo: $(OCAMLC) -c $< .mli.cmi: $(OCAMLC) -c $< .ml.cmx: $(OCAMLOPT) -c $< depend: $(OCAMLDEP) *.ml *.mli > .depend include .depend coqprime-8.18/src/Coqprime/num/extraction/coq_gc.h000066400000000000000000000036711451023060700222270ustar00rootroot00000000000000/***********************************************************************/ /* */ /* Coq Compiler */ /* */ /* Benjamin Gregoire, projets Logical and Cristal */ /* INRIA Rocquencourt */ /* */ /* */ /***********************************************************************/ #ifndef _COQ_CAML_GC_ #define _COQ_CAML_GC_ #include "caml/mlvalues.h" #include "caml/alloc.h" typedef void (*scanning_action) (value, value *); CAMLextern char *young_ptr; CAMLextern char *young_limit; CAMLextern void (*scan_roots_hook) (scanning_action); CAMLextern void minor_collection (void); #define Caml_white (0 << 8) #define Caml_black (3 << 8) #define Make_header(wosize, tag, color) \ (((header_t) (((header_t) (wosize) << 10) \ + (color) \ + (tag_t) (tag))) \ ) #define Alloc_small(result, wosize, tag) do{ \ young_ptr -= Bhsize_wosize (wosize); \ if (young_ptr < young_limit){ \ young_ptr += Bhsize_wosize (wosize); \ minor_collection (); \ young_ptr -= Bhsize_wosize (wosize); \ } \ Hd_hp (young_ptr) = Make_header ((wosize), (tag), Caml_black); \ (result) = Val_hp (young_ptr); \ }while(0) #endif /*_COQ_CAML_GC_ */ coqprime-8.18/src/Coqprime/num/extraction/extract.v000066400000000000000000000005251451023060700224570ustar00rootroot00000000000000Require Import GenWord. Require Import Mod_op. Require Import Lucas. Unset Extraction Optimize. Unset Extraction AutoInline. Recursive Extraction Library GenWord. Recursive Extraction Library Mod_op. Recursive Extraction Library Lucas. coqtop -I ../ -I ../../Tactic -I ../../N -I ../../Z -I ../../PrimalityTest -I ../../List -I ../W/W8 coqprime-8.18/src/Coqprime/num/extraction/lucas.ml000066400000000000000000000013651451023060700222620ustar00rootroot00000000000000open BinInt open BinPos open Datatypes open Mod_op open Zmisc open ZnZ open Zpower (** val znz_of_Z : 'a1 znz_op -> coq_Z -> 'a1 **) let znz_of_Z op = function | Z0 -> op.znz_0 | Zpos p -> snd (op.znz_of_pos p) | Zneg p -> op.znz_0 (** val lucastest : 'a1 znz_op -> positive -> coq_Z **) let lucastest op p = let b = znz_of_Z op (coq_Zminus (coq_Zpower (Zpos (Coq_xO Coq_xH)) (Zpos p)) (Zpos Coq_xH)) in let mod_op = make_mod_op op b in let w2 = op.znz_add op.znz_1 op.znz_1 in let w4 = op.znz_add w2 w2 in let square_m2 = let square = fun x -> mod_op.square_mod x in let sub = fun x x0 -> mod_op.sub_mod x x0 in (fun x -> sub (square x) w2) in op.znz_to_Z (iter_pos (coq_Pminus p (Coq_xO Coq_xH)) square_m2 w4) coqprime-8.18/src/Coqprime/num/extraction/lucas.mli000066400000000000000000000002601451023060700224240ustar00rootroot00000000000000open BinInt open BinPos open Datatypes open Mod_op open Zmisc open ZnZ open Zpower val znz_of_Z : 'a1 znz_op -> coq_Z -> 'a1 val lucastest : 'a1 znz_op -> positive -> coq_Z coqprime-8.18/src/Coqprime/num/extraction/testlucas.ml000066400000000000000000000065111451023060700231600ustar00rootroot00000000000000open Datatypes open BinPos open BinNat open BinInt open Zpower open Zmisc open Basic_type open ZnZ open Zn2Z open Mod_op open W31C open W64C let znz_of_Z op = function | Z0 -> op.znz_0 | Zpos p -> snd (op.znz_of_pos p) | Zneg p -> op.znz_0 (** val lucastest : 'a1 znz_op -> positive -> coq_Z **) let lucastest op p = let b = znz_of_Z op (coq_Zminus (coq_Zpower (Zpos (Coq_xO Coq_xH)) (Zpos p)) (Zpos Coq_xH)) in let mod_op = make_mod_op op b in let w2 = op.znz_add op.znz_1 op.znz_1 in let w4 = op.znz_add w2 w2 in let square_m2 = let square = mod_op.square_mod in let sub = mod_op.sub_mod in fun x -> sub (square x) w2 in let t = Sys.time () in let res = iter_pos (coq_Pminus p (Coq_xO Coq_xH)) square_m2 w4 in let time = Sys.time () -. t in Format.print_string "Finished in "; Format.print_float time; (match op.znz_compare op.znz_0 res with | Eq -> Format.print_string "s, result is 0\n" | _ -> Format.print_string "s, result is not 0\n"); Format.print_flush() let mlucastest op p = let b = znz_of_Z op (coq_Zminus (coq_Zpower (Zpos (Coq_xO Coq_xH)) (Zpos p)) (Zpos Coq_xH)) in let mod_op = mmake_mod_op op b p (coq_Pminus (Coq_xO op.znz_digits) p) in let w2 = op.znz_add op.znz_1 op.znz_1 in let w4 = op.znz_add w2 w2 in let square_m2 = let square = mod_op.square_mod in let sub = mod_op.sub_mod in fun x -> sub (square x) w2 in let t = Sys.time () in let res = iter_pos (coq_Pminus p (Coq_xO Coq_xH)) square_m2 w4 in let time = Sys.time () -. t in Format.print_string "Finished in "; Format.print_float time; (match op.znz_compare op.znz_0 res with | Eq -> Format.print_string "s, result is 0\n" | _ -> Format.print_string "s, result is not 0\n"); Format.print_flush() let bi_lucastest p = let b = Big_int.pred_big_int (Big_int.power_int_positive_int 2 p) in let square_m2 x = Big_int.mod_big_int (Big_int.sub_big_int(Big_int.square_big_int x)(Big_int.big_int_of_int 2)) b in let t = Sys.time () in let res = iter_pos (coq_Pminus (uint_to_pos p) (Coq_xO Coq_xH)) square_m2 (Big_int.big_int_of_int 4) in let time = Sys.time () -. t in Format.print_string "Finished in "; Format.print_float time; if Big_int.eq_big_int res Big_int.zero_big_int then Format.print_string "s, result is 0\n" else Format.print_string "s, result is not 0\n"; Format.print_flush() let _ = mlucastest w31_7_op (uint_to_pos 3217) let mk_test op31 op64 n = Format.printf "test mersenne %i\n" n; print_string "w31C : "; mlucastest op31 (uint_to_pos n); print_string "w64C : "; mlucastest op64 (uint_to_pos n); print_string "Big_int : "; bi_lucastest n; print_string "\n\n" let _ = mk_test w31_3_op w64_1_op 127 let _ = mk_test w31_5_op w64_4_op 521 let _ = mk_test w31_5_op w64_4_op 607 let _ = mk_test w31_6_op w64_5_op 1279 let _ = mk_test w31_7_op w64_6_op 2203 let _ = mk_test w31_7_op w64_6_op 2281 let _ = mk_test w31_7_op w64_6_op 3217 let _ = mk_test w31_8_op w64_7_op 4253 let _ = mk_test w31_8_op w64_7_op 4423 let _ = mk_test w31_9_op w64_8_op 9689 let _ = mk_test w31_9_op w64_8_op 9941 let _ = mk_test w31_9_op w64_8_op 11213 let _ = mk_test w31_10_op w64_9_op 19937 let _ = mk_test w31_10_op w64_9_op 21701 let _ = mk_test w31_10_op w64_9_op 23209 let _ = mk_test w31_11_op w64_10_op 44497 coqprime-8.18/src/Coqprime/num/extraction/uint31C.c000066400000000000000000000057011451023060700222110ustar00rootroot00000000000000#include "caml/config.h" #include "caml/alloc.h" #include "caml/memory.h" #include "caml/mlvalues.h" #define Eq (Val_int(0)) #define Lt (Val_int(1)) #define Gt (Val_int(2)) #define Coq_true (Val_int(0)) #define Coq_false (Val_int(1)) #define Alloc_small(res, n, tag) (res = caml_alloc_small(n, tag)) #define Make_C0(res, v) do { \ Alloc_small(res, 1, 0); \ Field(res, 0) = v; \ } while(0) #define Make_C1(res, v) do { \ Alloc_small(res, 1, 1); \ Field(res, 0) = v; \ } while(0) \ #define UWtype unsigned long #define UWsize 32 #define UWhalfsize (UWsize/2) #define __ll_highpart(x) (((UWtype)(x))>> UWhalfsize) #define __ll_lowpart(x) (((UWtype)(x)) & 0xFFFF) #define __ll_B (1 << UWhalfsize) CAMLprim value uint_compare(value x, value y) { unsigned long ux, uy; ux = ((unsigned long)x); uy = ((unsigned long)y); if (ux < uy) return Lt; else if (ux == uy) return Eq; else return Gt; } CAMLprim value uint_add_c (value x, value y) { value res, _r; _r =(value)((long)x + (long)y -1); if (((UWtype)_r) < ((UWtype)x)) Make_C1(res,_r); else Make_C0(res, _r); return res; } CAMLprim value uint_add_carry_c (value x, value y) { value res, _r; _r =(value)((long)x + (long)y + 1); if (((UWtype)_r) <= ((UWtype)x)) Make_C1(res,_r); else Make_C0(res, _r); return res; } CAMLprim value uint_sub_c(value x, value y) { value res, _r; _r =(value) ((long)x - (long) y + 1); if ((UWtype)x < (UWtype)_r) Make_C1(res, _r); else Make_C0(res, _r); return res; } CAMLprim value uint_sub_carry_c(value x, value y) { value res, _r; _r = (value)((long)x - (long)y - 1); if ((UWtype)x <= (UWtype)_r) Make_C1(res, _r); else Make_C0(res,_r); return res; } CAMLprim value uint_mul_c (value u, value v) { uint64 x, y, z; value res; x = (uint64) (Unsigned_long_val(u)); y = (uint64) (((UWtype)v) ^ 1); z = x * y; if (z == 0) res = Val_long(0); else { Alloc_small(res, 2, 0); Field(res, 0) = Val_long((uint32)(z >> 32)); Field(res, 1) = (value) (((uint32)(z & (((uint64)1 << 32) - 1))) | 1); } return res; } CAMLprim value uint_div21(value v1, value v0, value vd) { uint64 x, y, q, r; value res; x = (uint64) (Unsigned_long_val(v1)) << 32 | (uint64) (((UWtype)v0) ^ 1); y = (uint64) (((UWtype)vd) ^ 1); q = x / y; r = x - y * q; Alloc_small(res, 2, 0); Field(res, 0) = Val_long((uint32)q); Field(res, 1) = (value)((uint32)r | 1); return res; } CAMLprim value uint_div_eucl(value x, value y) { value res; unsigned long ux, uy, uq, ur; ux =Unsigned_long_val(x); uy = Unsigned_long_val(y); uq = ux / uy; ur = ux % uy; Alloc_small(res, 2, 0); Field(res, 0) = Val_long(uq); Field(res, 1) = Val_long(ur); return res; } CAMLprim value uint_mod(value x, value y) { unsigned long ux, uy; ux =Unsigned_long_val(x); uy = Unsigned_long_val(y); return Val_long (ux % uy); } coqprime-8.18/src/Coqprime/num/extraction/uint64C.c000066400000000000000000000116561451023060700222250ustar00rootroot00000000000000#include "caml/config.h" #include "caml/alloc.h" #include "caml/memory.h" #include "caml/mlvalues.h" #define Eq (Val_int(0)) #define Lt (Val_int(1)) #define Gt (Val_int(2)) #define Coq_true (Val_int(0)) #define Coq_false (Val_int(1)) #define Alloc_small(res, n, tag) (res = caml_alloc_small(n, tag)) #define UWtype uint64 #define UWsize 64 #define __ll_B ((UWtype)1 << (UWsize / 2)) #define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1)) #define __ll_highpart(t) ((UWtype) (t) >> (UWsize / 2)) CAMLprim value uint64_compare(value vx, value vy) { UWtype x, y; x = (UWtype)Int64_val(vx); y = (UWtype)Int64_val(vy); if ((UWtype)x < (UWtype)y) return Lt; else if ((UWtype)x > (UWtype)y) return Gt; else return Eq; } CAMLprim value uint64_add_c (value vx, value vy) { CAMLparam0(); CAMLlocal2(res, r); UWtype x, y, _r; x = (UWtype)Int64_val(vx); y = (UWtype)Int64_val(vy); _r = x + y; r = caml_copy_int64(_r); if ((UWtype)_r < (UWtype)x) Alloc_small(res, 1, 1); else Alloc_small(res, 1, 0); Field(res, 0) = r; CAMLreturn(res); } CAMLprim value uint64_add_carry_c (value vx, value vy) { CAMLparam0(); CAMLlocal2(res, r); UWtype x, y, _r; x = (UWtype)Int64_val(vx); y = (UWtype)Int64_val(vy); _r = x + y + (UWtype)1; r = caml_copy_int64(_r); if ((UWtype)_r <= (UWtype)x) Alloc_small(res, 1, 1); else Alloc_small(res, 1, 0); Field(res, 0) = r; CAMLreturn(res); } CAMLprim value uint64_sub_c (value vx, value vy) { CAMLparam0(); CAMLlocal2(res, r); UWtype x, y, _r; x = (UWtype)Int64_val(vx); y = (UWtype)Int64_val(vy); _r = x - y; r = caml_copy_int64(_r); if ((UWtype)x < (UWtype)_r) Alloc_small(res, 1, 1); else Alloc_small(res, 1, 0); Field(res, 0) = r; CAMLreturn(res); } CAMLprim value uint64_sub_carry_c (value vx, value vy) { CAMLparam0(); CAMLlocal2(res, r); UWtype x, y, _r; x = (UWtype)Int64_val(vx); y = (UWtype)Int64_val(vy); _r = x - y - (UWtype)1; r = caml_copy_int64(_r); if ((UWtype)x <= (UWtype)_r) Alloc_small(res, 1, 1); else Alloc_small(res, 1, 0); Field(res, 0) = r; CAMLreturn(res); } CAMLprim value uint64_mul_c (value vu, value vv) { CAMLparam0(); CAMLlocal3(res, H, L); UWtype u, v, h, l; UWtype __x0, __x1, __x2, __x3; UWtype __ul, __vl, __uh, __vh; u = Int64_val(vu); v = Int64_val(vv); if (u == (UWtype)0 && v == (UWtype)0) CAMLreturn (Val_int(0)); __ul = __ll_lowpart(u); __uh = __ll_highpart(u); __vl = __ll_lowpart (v); __vh = __ll_highpart (v); __x0 = (UWtype) __ul * __vl; __x1 = (UWtype) __ul * __vh; __x2 = (UWtype) __uh * __vl; __x3 = (UWtype) __uh * __vh; __x1 += __ll_highpart (__x0); /* this can't give carry */ __x1 += __x2; /* but this indeed can */ if (__x1 < __x2) /* did we get it? */ __x3 += __ll_B; /* yes, add it in the proper pos. */ h = __x3 + __ll_highpart (__x1); l = ((__x1 << (UWsize / 2)) + __ll_lowpart (__x0)); H = caml_copy_int64(h); L = caml_copy_int64(l); Alloc_small(res, 2, 0); Field(res, 0) = H; Field(res, 1) = L; CAMLreturn(res); } CAMLprim value uint64_div21(value v1, value v0, value vd) { CAMLparam0(); CAMLlocal3(res, Q, R); UWtype q, r, n1, n0, d; UWtype __d1, __d0, __q1, __q0, __r1, __r0, __m; d = (UWtype)Int64_val(vd); n0 = (UWtype)Int64_val(v0); n1 = (UWtype)Int64_val(v1); /* start GMP code */ __d1 = __ll_highpart (d); __d0 = __ll_lowpart (d); __q1 = (n1) / __d1; __r1 = (n1) - __q1 * __d1; __m = (UWtype) __q1 * __d0; __r1 = (__r1 << (UWsize /2)) | __ll_highpart (n0); if (__r1 < __m) { __q1--, __r1 += (d); if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */ if (__r1 < __m) __q1--, __r1 += (d); } __r1 -= __m; __q0 = __r1 / __d1; __r0 = __r1 - __q0 * __d1; __m = (UWtype) __q0 * __d0; __r0 = (__r0 << (UWsize /2)) | __ll_lowpart (n0); if (__r0 < __m) { __q0--, __r0 += (d); if (__r0 >= (d)) if (__r0 < __m) __q0--, __r0 += (d); } __r0 -= __m; q = (UWtype) (__q1 << ( UWsize / 2)) | __q0; r = __r0; /* end GMP code */ Q = caml_copy_int64(q); R = caml_copy_int64(r); Alloc_small(res, 2, 0); Field(res, 0) = Q; Field(res, 1) = R; CAMLreturn(res); } CAMLprim value uint64_div_eucl(value vx, value vy) { CAMLparam0(); CAMLlocal3(res, Q, R); UWtype x, y, q, r; x = (UWtype)Int64_val(vx); y = (UWtype)Int64_val(vy); q = x / y; r = x % y; Q = caml_copy_int64(q); R = caml_copy_int64(r); Alloc_small(res, 2, 0); Field(res, 0) = Q; Field(res, 1) = R; CAMLreturn(res); } CAMLprim value uint64_mod(value vx, value vy) { UWtype x, y, r; x = (UWtype)Int64_val(vx); y = (UWtype)Int64_val(vy); r = x % y; return caml_copy_int64(r); } coqprime-8.18/src/Coqprime/num/extraction/w31C.ml000066400000000000000000000146561451023060700216770ustar00rootroot00000000000000open Datatypes open BinPos open BinNat open BinInt open Zpower open Zmisc open Basic_type open ZnZ open Zn2Z open Mod_op type uint = int external uint_compare : uint -> uint -> comparison = "uint_compare" external uint_add_c : uint -> uint -> uint carry = "uint_add_c" external uint_add_carry_c : uint -> uint -> uint carry = "uint_add_carry_c" external uint_sub_c : uint -> uint -> uint carry = "uint_sub_c" external uint_sub_carry_c : uint -> uint -> uint carry = "uint_sub_carry_c" external uint_mul_c : uint -> uint -> uint zn2z = "uint_mul_c" external uint_div21 : uint -> uint -> uint -> (uint,uint) prod = "uint_div21" external uint_div_eucl : uint -> uint -> (uint,uint) prod = "uint_div_eucl" external uint_mod : uint -> uint -> uint = "uint_mod" let rec uint_gcd a b = if b == 0 then a else uint_gcd b (uint_mod a b) let rec uint_to_pos x = let y = x/2 in if y = 0 then Coq_xH else if x mod 2 = 0 then Coq_xO (uint_to_pos y) else Coq_xI (uint_to_pos y) let rec pow2_to_pos x = if x <= 0 then Coq_xH else Coq_xO (pow2_to_pos (x-1)) let pow_2_30 = pow2_to_pos 30 let digits = uint_to_pos 31 let to_Z x = match x with | x when x > 0 -> Zpos (uint_to_pos x) | x when x = 0 -> Z0 | x -> Zpos (coq_Pplus pow_2_30 (uint_to_pos (0x40000000 lxor x))) let of_pos p = let rec aux p n = if n = 0 then Coq_pair(Npos p, 1) else match p with | Coq_xH -> Coq_pair(N0, 1) | Coq_xO p -> begin match aux p (n-1) with | Coq_pair(n,w) -> Coq_pair(n, w lsl 1) end | Coq_xI p -> begin match aux p (n-1) with | Coq_pair(n,w) -> Coq_pair(n, (w lsl 1) lor 1) end in aux p 31 let to_N x = if x = 0 then N0 else Npos (uint_to_pos x) let head0 x = let rec aux x p = if p >= 31 then 31 else if x land 0x40000000 = 0 then aux (x lsl 1) (p+1) else p in to_N (aux x 0) let coq_lsl x p = match of_pos p with | Coq_pair(_,_p) -> x lsl _p let coq_lsr x p = match of_pos p with | Coq_pair(_,_p) -> x lsr _p let uint_WW h l = if h == 0 && l == 0 then W0 else WW(h,l) let uint_W0 h = if h == 0 then W0 else WW(h,0) let uint_0W l = if l == 0 then W0 else WW(0,l) let uint_add_mul_div p x y = let Coq_pair(_,_p) = of_pos p in (x lsl _p) + (y lsr (31 - _p)) let uint_pos_mod p x = let Coq_pair(_, _p) = of_pos p in let q = 31 - _p in (x lsl q) lsr q let two30 = Big_int.power_int_positive_int 2 30 let two31 = Big_int.power_int_positive_int 2 31 let two32 = Big_int.power_int_positive_int 2 32 let big_int_of_uint x = if x < 0 then Big_int.add_big_int two30 (Big_int.big_int_of_int (x lxor 0x40000000)) else Big_int.big_int_of_int x let uint_of_big_int x = if Big_int.lt_big_int x two30 then Big_int.int_of_big_int x else Big_int.int_of_big_int (Big_int.sub_big_int x two31) let uint_sqrt2 x y = let n = Big_int.add_big_int (Big_int.mult_big_int (big_int_of_uint x) two31) (big_int_of_uint y) in let sqrt = Big_int.sqrt_big_int n in let r = Big_int.sub_big_int n (Big_int.square_big_int sqrt) in let cr = if Big_int.lt_big_int r two31 then C0(uint_of_big_int r) else C1(uint_of_big_int (Big_int.sub_big_int r two32)) in Coq_pair(uint_of_big_int sqrt, cr) let uint_sqrt x = let _x = big_int_of_uint x in let sqrt = Big_int.sqrt_big_int _x in uint_of_big_int sqrt let uint_is_even x = if x lsl 30 = 0 then Coq_true else Coq_false let w31_0_op = { znz_digits = digits; znz_to_Z = to_Z; znz_of_pos = of_pos; znz_head0 = head0; znz_0 = 0; znz_1 = 1; znz_Bm1 = -1; znz_WW = uint_WW; znz_W0 = uint_W0; znz_0W = uint_0W; znz_compare = uint_compare; znz_eq0 = (fun x -> if x == 0 then Coq_true else Coq_false); znz_opp_c = (fun x -> if x == 0 then C0 0 else C1 (-x)); znz_opp = (fun x -> -x); znz_opp_carry = (fun x -> -x - 1); znz_succ_c = (fun x -> if x == -1 then C1 0 else C0 (x+1)); znz_add_c = uint_add_c; znz_add_carry_c = uint_add_carry_c; znz_succ = (fun x -> x + 1); znz_add = (fun x y-> x + y); znz_add_carry = (fun x y -> x + y + 1); znz_pred_c = (fun x -> if x == 0 then C1 (-1) else C0 (x-1)); znz_sub_c = uint_sub_c; znz_sub_carry_c = uint_sub_carry_c; znz_pred = (fun x -> x - 1); znz_sub = (fun x y-> x - y); znz_sub_carry = (fun x y -> x - y - 1); znz_mul_c = uint_mul_c; znz_mul = (fun x y -> x * y); znz_square_c = (fun x -> uint_mul_c x x); znz_div21 = uint_div21; znz_div_gt = uint_div_eucl; znz_div = uint_div_eucl; znz_mod_gt = uint_mod; znz_mod = uint_mod; znz_gcd_gt = uint_gcd; znz_gcd = uint_gcd; znz_add_mul_div = uint_add_mul_div; znz_pos_mod = uint_pos_mod; znz_is_even = uint_is_even; znz_sqrt2 = uint_sqrt2; znz_sqrt = uint_sqrt } let w31_1_op = mk_zn2z_op w31_0_op let w31_2_op = mk_zn2z_op w31_1_op let w31_3_op = mk_zn2z_op_karatsuba w31_2_op let w31_4_op = mk_zn2z_op_karatsuba w31_3_op let w31_5_op = mk_zn2z_op_karatsuba w31_4_op let w31_6_op = mk_zn2z_op_karatsuba w31_5_op let w31_7_op = mk_zn2z_op_karatsuba w31_6_op let w31_8_op = mk_zn2z_op_karatsuba w31_7_op let w31_9_op = mk_zn2z_op_karatsuba w31_8_op let w31_10_op = mk_zn2z_op_karatsuba w31_9_op let w31_11_op = mk_zn2z_op_karatsuba w31_10_op let w31_12_op = mk_zn2z_op_karatsuba w31_11_op let w31_13_op = mk_zn2z_op_karatsuba w31_12_op let w31_14_op = mk_zn2z_op_karatsuba w31_13_op (* 1 62 2 124 3 248 4 496 5 992 6 1984 7 3968 8 7936 9 15872 10 31744 11 63488 12 126976 13 253952 14 507904 *) let ww_of_BI w_WW w_of_BI x = if Big_int.eq_big_int x Big_int.zero_big_int then x, W0 else let ql, l = w_of_BI x in let qh, h = w_of_BI ql in qh, w_WW h l let w31_0_of_BI x = let q, r = Big_int.quomod_big_int x two31 in q, uint_of_big_int r let w31_1_of_BI = ww_of_BI w31_0_op.znz_WW w31_0_of_BI let w31_2_of_BI = ww_of_BI w31_1_op.znz_WW w31_1_of_BI let w31_3_of_BI = ww_of_BI w31_2_op.znz_WW w31_2_of_BI let w31_4_of_BI = ww_of_BI w31_3_op.znz_WW w31_3_of_BI let w31_5_of_BI = ww_of_BI w31_4_op.znz_WW w31_4_of_BI let w31_6_of_BI = ww_of_BI w31_5_op.znz_WW w31_5_of_BI let w31_7_of_BI = ww_of_BI w31_6_op.znz_WW w31_6_of_BI let w31_8_of_BI = ww_of_BI w31_7_op.znz_WW w31_7_of_BI let w31_9_of_BI = ww_of_BI w31_8_op.znz_WW w31_8_of_BI let w31_10_of_BI = ww_of_BI w31_9_op.znz_WW w31_9_of_BI let w31_11_of_BI = ww_of_BI w31_10_op.znz_WW w31_10_of_BI let w31_12_of_BI = ww_of_BI w31_11_op.znz_WW w31_11_of_BI let w31_13_of_BI = ww_of_BI w31_12_op.znz_WW w31_12_of_BI let w31_14_of_BI = ww_of_BI w31_13_op.znz_WW w31_13_of_BI coqprime-8.18/src/Coqprime/num/extraction/w64C.ml000066400000000000000000000170461451023060700217010ustar00rootroot00000000000000open Datatypes open BinPos open BinNat open BinInt open Zpower open Zmisc open Basic_type open ZnZ open Zn2Z open Mod_op type uint64 = int64 external uint64_compare : uint64 -> uint64 -> comparison = "uint64_compare" external uint64_add_c : uint64 -> uint64 -> uint64 carry = "uint64_add_c" external uint64_add_carry_c : uint64 -> uint64 -> uint64 carry = "uint64_add_carry_c" external uint64_sub_c : uint64 -> uint64 -> uint64 carry = "uint64_sub_c" external uint64_sub_carry_c : uint64 -> uint64 -> uint64 carry = "uint64_sub_carry_c" external uint64_mul_c : uint64 -> uint64 -> uint64 zn2z = "uint64_mul_c" external uint64_div21 : uint64 -> uint64 -> uint64 -> (uint64,uint64) prod = "uint64_div21" external uint64_div_eucl : uint64 -> uint64 -> (uint64,uint64) prod = "uint64_div_eucl" external uint64_mod : uint64 -> uint64 -> uint64 = "uint64_mod" let uint64_eq0 x = x == Int64.zero || x = Int64.zero let rec uint64_gcd a b = if uint64_eq0 b then a else uint64_gcd b (uint64_mod a b) let rec uint64_to_pos x = let y = Int64.shift_right_logical x 1 in if uint64_eq0 y then Coq_xH else let r = Int64.sub x (Int64.shift_left y 1) in if uint64_eq0 r then Coq_xO (uint64_to_pos y) else Coq_xI (uint64_to_pos y) let rec pow2_to_pos x = if x <= 0 then Coq_xH else Coq_xO (pow2_to_pos (x-1)) let pow_2_63 = pow2_to_pos 63 let digits = uint64_to_pos (Int64.of_int 64) let ui64_pow2_63 = Int64.shift_left Int64.one 63 let to_Z x = match Int64.compare x Int64.zero with | s when s > 0 -> Zpos (uint64_to_pos x) | s when s = 0 -> Z0 | _ -> let xl = Int64.logxor ui64_pow2_63 x in Zpos (coq_Pplus pow_2_63 (uint64_to_pos xl)) let of_pos p = let rec aux p count = if count = 0 then Coq_pair(Npos p, Int64.one) else match p with | Coq_xH -> Coq_pair(N0, Int64.one) | Coq_xO p -> begin match aux p (count-1) with | Coq_pair(n,w) -> Coq_pair(n, Int64.shift_left w 1) end | Coq_xI p -> begin match aux p (count-1) with | Coq_pair(n,w) -> let w' =Int64.shift_left w 1 in Coq_pair(n, Int64.logor w' Int64.one) end in aux p 64 let int_of_pos p = let rec aux p count = if count = 0 then Coq_pair(Npos p, 1) else match p with | Coq_xH -> Coq_pair(N0, 1) | Coq_xO p -> begin match aux p (count-1) with | Coq_pair(n,w) -> Coq_pair(n, w lsl 1) end | Coq_xI p -> begin match aux p (count-1) with | Coq_pair(n,w) -> let w' = w lsl 1 in Coq_pair(n, w' lor 1) end in aux p 31 let to_N x = if uint64_eq0 x then N0 else Npos (uint64_to_pos x) let rec uint_to_pos x = let y = x/2 in if y = 0 then Coq_xH else if x mod 2 = 0 then Coq_xO (uint_to_pos y) else Coq_xI (uint_to_pos y) let int_to_N x = if x = 0 then N0 else Npos (uint_to_pos x) let head0 x = let rec aux x p = if p >= 64 then 64 else if uint64_eq0 (Int64.logand x ui64_pow2_63) then aux (Int64.shift_left x 1) (p+1) else p in int_to_N (aux x 0) let uint64_add_mul_div p x y = match int_of_pos p with | Coq_pair(_,_p) -> Int64.logor (Int64.shift_left x _p) (Int64.shift_right_logical y (64 -_p)) let uint64_WW h l = if uint64_eq0 h && uint64_eq0 l then W0 else WW(h,l) let uint64_W0 h = if uint64_eq0 h then W0 else WW(h, Int64.zero) let uint64_0W l = if uint64_eq0 l then W0 else WW(Int64.zero,l) let uint64_pos_mod p x = let Coq_pair(_,n) = int_of_pos p in let diff = 64 - n in Int64.shift_right_logical (Int64.shift_left x diff) diff let uint64_sqrt2 x y = raise Not_found let uint64_sqrt x = raise Not_found let uint64_is_even x = raise Not_found let w64_0_op = { znz_digits = digits; znz_to_Z = to_Z; znz_of_pos = of_pos; znz_head0 = head0; znz_0 = Int64.zero; znz_1 = Int64.one; znz_Bm1 = Int64.minus_one; znz_WW = uint64_WW; znz_W0 = uint64_W0; znz_0W = uint64_0W; znz_compare = uint64_compare; znz_eq0 = (fun x -> if uint64_eq0 x then Coq_true else Coq_false); znz_opp_c = (fun x -> if uint64_eq0 x then C0 Int64.zero else C1 (Int64.neg x)); znz_opp = Int64.neg; znz_opp_carry = (fun x -> Int64.pred (Int64.neg x)); znz_succ_c = (fun x -> if x = Int64.minus_one then C1 Int64.zero else C0 (Int64.add x Int64.one)); znz_add_c = uint64_add_c; znz_add_carry_c = uint64_add_carry_c; znz_succ = Int64.succ; znz_add = Int64.add; znz_add_carry = (fun x y -> Int64.succ (Int64.add x y)); znz_pred_c = (fun x -> if uint64_eq0 x then C1 (Int64.minus_one) else C0 (Int64.pred x)); znz_sub_c = uint64_sub_c; znz_sub_carry_c = uint64_sub_carry_c; znz_pred = Int64.pred; znz_sub = Int64.sub; znz_sub_carry = (fun x y -> Int64.pred (Int64.sub x y)); znz_mul_c = uint64_mul_c; znz_mul = Int64.mul; znz_square_c = (fun x -> uint64_mul_c x x); znz_div21 = uint64_div21; znz_div_gt = uint64_div_eucl; znz_div = uint64_div_eucl; znz_mod_gt = uint64_mod; znz_mod = uint64_mod; znz_gcd_gt = uint64_gcd; znz_gcd = uint64_gcd; znz_add_mul_div = uint64_add_mul_div; znz_pos_mod = uint64_pos_mod; znz_is_even = uint64_is_even; znz_sqrt2 = uint64_sqrt2; znz_sqrt = uint64_sqrt } let w64_1_op = mk_zn2z_op w64_0_op let w64_2_op = mk_zn2z_op w64_1_op let w64_3_op = mk_zn2z_op_karatsuba w64_2_op let w64_4_op = mk_zn2z_op_karatsuba w64_3_op let w64_5_op = mk_zn2z_op_karatsuba w64_4_op let w64_6_op = mk_zn2z_op_karatsuba w64_5_op let w64_7_op = mk_zn2z_op_karatsuba w64_6_op let w64_8_op = mk_zn2z_op_karatsuba w64_7_op let w64_9_op = mk_zn2z_op_karatsuba w64_8_op let w64_10_op = mk_zn2z_op_karatsuba w64_9_op let w64_11_op = mk_zn2z_op_karatsuba w64_10_op let w64_12_op = mk_zn2z_op_karatsuba w64_11_op let w64_13_op = mk_zn2z_op_karatsuba w64_12_op let w64_14_op = mk_zn2z_op_karatsuba w64_13_op (* 1 128 2 256 3 512 4 1024 5 2048 6 4096 7 8192 8 16384 9 32768 10 65536 11 131072 12 262144 13 524288 14 1048576 *) let ww_of_BI w_WW w_of_BI x = if Big_int.eq_big_int x Big_int.zero_big_int then x, W0 else let ql, l = w_of_BI x in let qh, h = w_of_BI ql in qh, w_WW h l let two64 = Big_int.power_int_positive_int 2 64 let two16 = Big_int.power_int_positive_int 2 16 let uint64_of_4 r4 r3 r2 r1 = let x4 = Int64.of_int r4 in let x3 = Int64.add (Int64.shift_left x4 16) (Int64.of_int r3) in let x2 = Int64.add (Int64.shift_left x3 16) (Int64.of_int r2) in Int64.add (Int64.shift_left x2 16) (Int64.of_int r1) let w64_0_of_BI x = let q1, r1 = Big_int.quomod_big_int x two16 in let q2, r2 = Big_int.quomod_big_int q1 two16 in let q3, r3 = Big_int.quomod_big_int q2 two16 in let q4, r4 = Big_int.quomod_big_int q3 two16 in q4, uint64_of_4 (Big_int.int_of_big_int r4) (Big_int.int_of_big_int r3) (Big_int.int_of_big_int r2) (Big_int.int_of_big_int r1) let w64_1_of_BI = ww_of_BI w64_0_op.znz_WW w64_0_of_BI let w64_2_of_BI = ww_of_BI w64_1_op.znz_WW w64_1_of_BI let w64_3_of_BI = ww_of_BI w64_2_op.znz_WW w64_2_of_BI let w64_4_of_BI = ww_of_BI w64_3_op.znz_WW w64_3_of_BI let w64_5_of_BI = ww_of_BI w64_4_op.znz_WW w64_4_of_BI let w64_6_of_BI = ww_of_BI w64_5_op.znz_WW w64_5_of_BI let w64_7_of_BI = ww_of_BI w64_6_op.znz_WW w64_6_of_BI let w64_8_of_BI = ww_of_BI w64_7_op.znz_WW w64_7_of_BI let w64_9_of_BI = ww_of_BI w64_8_op.znz_WW w64_8_of_BI let w64_10_of_BI = ww_of_BI w64_9_op.znz_WW w64_9_of_BI let w64_11_of_BI = ww_of_BI w64_10_op.znz_WW w64_10_of_BI let w64_12_of_BI = ww_of_BI w64_11_op.znz_WW w64_11_of_BI let w64_13_of_BI = ww_of_BI w64_12_op.znz_WW w64_12_of_BI let w64_14_of_BI = ww_of_BI w64_13_op.znz_WW w64_13_of_BI coqprime-8.18/src/Coqprime/num/genN.ml000066400000000000000000000672121451023060700176650ustar00rootroot00000000000000open Format let size = 3 let sizeaux = 1 let t = "t" let c = "N" (******* Start Printing ********) let basename = "N" let print_header fmt l = let l = "ZArith"::"Basic_type"::"ZnZ"::"Zn2Z"::"Nbasic"::"GenMul":: "GenDivn1"::"Lucas"::l in List.iter (fun s -> fprintf fmt "Require Import %s.\n" s) l; fprintf fmt "\n" let start_file post l = let outname = basename^post^".v" in let fd = try Unix.openfile outname [Unix.O_WRONLY;Unix.O_CREAT;Unix.O_TRUNC] 0o640 with _ -> print_string ("can not open file "^outname^"\n"); exit 1 in let out = Unix.out_channel_of_descr fd in set_binary_mode_out out false; let fmt = formatter_of_out_channel out in print_header fmt l; fmt (****** Print types *******) let print_Make () = let fmt = start_file "Make" [] in fprintf fmt "Module Type W0Type.\n"; fprintf fmt " Parameter w : Set.\n"; fprintf fmt " Parameter w_op : znz_op w.\n"; fprintf fmt " Parameter w_spec : znz_spec w_op.\n"; fprintf fmt "End W0Type.\n"; fprintf fmt "\n"; fprintf fmt "Module Make (W0:W0Type).\n"; fprintf fmt " Import W0.\n"; fprintf fmt "\n"; fprintf fmt " Definition w0 := W0.w.\n"; for i = 1 to size do fprintf fmt " Definition w%i := zn2z w%i.\n" i (i-1) done; fprintf fmt "\n"; fprintf fmt " Definition w0_op := W0.w_op.\n"; for i = 1 to 3 do fprintf fmt " Definition w%i_op := mk_zn2z_op w%i_op.\n" i (i-1) done; for i = 4 to size + 3 do fprintf fmt " Definition w%i_op := mk_zn2z_op_karatsuba w%i_op.\n" i (i-1) done; fprintf fmt "\n"; fprintf fmt " Section Make_op.\n"; fprintf fmt " Variable mk : forall w', znz_op w' -> znz_op (zn2z w').\n"; fprintf fmt "\n"; fprintf fmt " Fixpoint make_op_aux (n:nat) : znz_op (word w%i (S n)):=\n" size; fprintf fmt " match n return znz_op (word w%i (S n)) with\n" size; fprintf fmt " | O => w%i_op\n" (size+1); fprintf fmt " | S n1 =>\n"; fprintf fmt " match n1 return znz_op (word w%i (S (S n1))) with\n" size; fprintf fmt " | O => w%i_op\n" (size+2); fprintf fmt " | S n2 =>\n"; fprintf fmt " match n2 return znz_op (word w%i (S (S (S n2)))) with\n" size; fprintf fmt " | O => w%i_op\n" (size+3); fprintf fmt " | S n3 => mk _ (mk _ (mk _ (make_op_aux n3)))\n"; fprintf fmt " end\n"; fprintf fmt " end\n"; fprintf fmt " end.\n"; fprintf fmt "\n"; fprintf fmt " End Make_op.\n"; fprintf fmt "\n"; fprintf fmt " Definition make_op := make_op_aux mk_zn2z_op_karatsuba.\n"; fprintf fmt "\n"; fprintf fmt " Inductive %s_ : Set :=\n" t; for i = 0 to size do fprintf fmt " | %s%i : w%i -> %s_\n" c i i t done; fprintf fmt " | %sn : forall n, word w%i (S n) -> %s_.\n" c size t; fprintf fmt "\n"; fprintf fmt " Definition %s := %s_.\n" t t; fprintf fmt "\n"; fprintf fmt " Definition w_0 := w0_op.(znz_0).\n"; fprintf fmt "\n"; for i = 0 to size do fprintf fmt " Definition one%i := w%i_op.(znz_1).\n" i i done; fprintf fmt "\n"; fprintf fmt " Definition zero := %s0 w_0.\n" c; fprintf fmt " Definition one := %s0 one0.\n" c; fprintf fmt "\n"; (* Successor function *) for i = 0 to size do fprintf fmt " Definition w%i_succ_c := w%i_op.(znz_succ_c).\n" i i done; fprintf fmt "\n"; for i = 0 to size do fprintf fmt " Definition w%i_succ := w%i_op.(znz_succ).\n" i i done; fprintf fmt "\n"; fprintf fmt " Definition succ x :=\n"; fprintf fmt " match x with\n"; for i = 0 to size-1 do fprintf fmt " | %s%i wx =>\n" c i; fprintf fmt " match w%i_succ_c wx with\n" i; fprintf fmt " | C0 r => %s%i r\n" c i; fprintf fmt " | C1 r => %s%i (WW one%i r)\n" c (i+1) i; fprintf fmt " end\n"; done; fprintf fmt " | %s%i wx =>\n" c size; fprintf fmt " match w%i_succ_c wx with\n" size; fprintf fmt " | C0 r => %s%i r\n" c size; fprintf fmt " | C1 r => %sn 0 (WW one%i r)\n" c size ; fprintf fmt " end\n"; fprintf fmt " | %sn n wx =>\n" c; fprintf fmt " let op := make_op n in\n"; fprintf fmt " match op.(znz_succ_c) wx with\n"; fprintf fmt " | C0 r => %sn n r\n" c; fprintf fmt " | C1 r => %sn (S n) (WW op.(znz_1) r)\n" c; fprintf fmt " end\n"; fprintf fmt " end.\n"; fprintf fmt "\n"; for i = 1 to size do fprintf fmt " Definition extend%i :=\n" i; fprintf fmt " Eval lazy beta zeta iota delta [extend]in extend %i.\n" i done; fprintf fmt "\n"; for i = 0 to size do fprintf fmt " Definition w%i_eq0 := w%i_op.(znz_eq0).\n" i i done; fprintf fmt "\n"; for i = 0 to size do fprintf fmt " Definition w%i_0W := w%i_op.(znz_0W).\n" i i done; fprintf fmt "\n"; fprintf fmt " Definition w0_WW := w0_op.(znz_WW).\n"; fprintf fmt "\n"; (* Addition *) for i = 0 to size do fprintf fmt " Definition w%i_add_c := w%i_op.(znz_add_c).\n" i i done; fprintf fmt "\n"; (* fprintf fmt " Definition add_c_1_0 x y :=\n"; fprintf fmt " match x with\n"; fprintf fmt " | W0 => C0 (w0_0W y)\n"; fprintf fmt " | WW xh xl => fprintf fmt " match w1_add_c xl y with\n"; fprintf fmt " | C0 rl => C0 (WW xh rl)\n"; fprintf fmt " | C1 rl =>\n"; fprintf fmt " match w1_succ_c xh with\n"; fprintf fmt " | C0 rh => C0 (WW rh rl)\n"; fprintf fmt " | C1 rh => C1 (w0_WW rh rl)\n"; fprintf fmt " end\n"; fprintf fmt " end\n"; fprintf fmt " end.\n"; fprintf fmt "\n"; for i = 1 to size do fprintf fmt " Definition add_c_n_%i :=\n" i; fprintf fmt " add_c_smn1 w%i *) for i = 0 to size do fprintf fmt " Definition w%i_add x y :=\n" i; fprintf fmt " match w%i_add_c x y with\n" i; fprintf fmt " | C0 r => %s%i r\n" c i; fprintf fmt " | C1 r => "; if i < size then fprintf fmt "%s%i (WW one%i r)\n" c (i+1) i else fprintf fmt "%sn 0 (WW one%i r)\n" c size; fprintf fmt " end.\n" done; fprintf fmt " Definition addn n (x y : word w%i (S n)) :=\n" size; fprintf fmt " let op := make_op n in\n"; fprintf fmt " match op.(znz_add_c) x y with\n"; fprintf fmt " | C0 r => %sn n r\n" c; fprintf fmt " | C1 r => %sn (S n) (WW op.(znz_1) r)" c; fprintf fmt " end.\n"; fprintf fmt "\n"; fprintf fmt " Definition add x y :=\n"; fprintf fmt " match x, y with\n"; fprintf fmt " | %s0 wx, %s0 wy => w0_add wx wy \n" c c; for j = 1 to size do fprintf fmt " | %s0 wx, %s%i wy =>\n" c c j; fprintf fmt " if w0_eq0 wx then y else w%i_add " j; if j = 1 then fprintf fmt "(WW w_0 wx) wy\n" else fprintf fmt "(extend%i w0 (WW w_0 wx)) wy\n" (j-1) done; fprintf fmt " | %s0 wx, %sn n wy =>\n" c c; fprintf fmt " if w0_eq0 wx then y\n"; fprintf fmt " else addn n (extend n w%i (extend%i w0 (WW w_0 wx))) wy\n" size size; for i = 1 to size do fprintf fmt " | %s%i wx, %s0 wy =>\n" c i c; fprintf fmt " if w0_eq0 wy then x else w%i_add wx " i; if i = 1 then fprintf fmt "(WW w_0 wy)\n" else fprintf fmt "(extend%i w0 (WW w_0 wy))\n" (i-1); for j = 1 to size do fprintf fmt " | %s%i wx, %s%i wy => " c i c j; if i < j then fprintf fmt "w%i_add (extend%i w%i wx) wy\n" j (j-i) (i-1) else if i = j then fprintf fmt "w%i_add wx wy\n" j else fprintf fmt "w%i_add wx (extend%i w%i wy)\n" i (i-j) (j-1) done; fprintf fmt " | %s%i wx, %sn n wy => addn n (extend n w%i (extend%i w%i wx)) wy\n" c i c size (size-i+1) (i-1) done; fprintf fmt " | %sn n wx, %s0 wy =>\n" c c; fprintf fmt " if w0_eq0 wy then x\n"; fprintf fmt " else addn n wx (extend n w%i (extend%i w0 (WW w_0 wy)))\n" size size; for j = 1 to size do fprintf fmt " | %sn n wx, %s%i wy => addn n wx (extend n w%i (extend%i w%i wy))\n" c c j size (size-j+1) (j-1); done; fprintf fmt " | %sn n wx, %sn m wy =>\n" c c; fprintf fmt " match extend_to_max w%i n m wx wy with\n" size; fprintf fmt " | inl wx' => addn m wx' wy\n"; fprintf fmt " | inr wy' => addn n wx wy'\n"; fprintf fmt " end\n"; fprintf fmt " end.\n"; fprintf fmt "\n"; fprintf fmt " Definition reduce_0 (x:w) := %s0 x.\n" c; fprintf fmt " Definition reduce_1 :=\n"; fprintf fmt " Eval lazy beta iota delta[reduce_n1] in\n"; fprintf fmt " reduce_n1 _ _ zero w0_eq0 %s0 %s1.\n" c c; for i = 2 to size do fprintf fmt " Definition reduce_%i :=\n" i; fprintf fmt " Eval lazy beta iota delta[reduce_n1] in\n"; fprintf fmt " reduce_n1 _ _ zero w%i_eq0 reduce_%i %s%i.\n" (i-1) (i-1) c i done; fprintf fmt " Definition reduce_%i :=\n" (size+1); fprintf fmt " Eval lazy beta iota delta[reduce_n1] in\n"; fprintf fmt " reduce_n1 _ _ zero w%i_eq0 reduce_%i (%sn 0).\n" size size c; fprintf fmt " Definition reduce_n n := \n"; fprintf fmt " Eval lazy beta iota delta[reduce_n] in\n"; fprintf fmt " reduce_n _ _ zero reduce_%i %sn n.\n" (size + 1) c; fprintf fmt "\n"; (* Predecessor *) for i = 0 to size do fprintf fmt " Definition w%i_pred_c := w%i_op.(znz_pred_c).\n" i i done; fprintf fmt "\n"; fprintf fmt " Definition pred x :=\n"; fprintf fmt " match x with\n"; for i = 0 to size do fprintf fmt " | %s%i wx =>\n" c i; fprintf fmt " match w%i_pred_c wx with\n" i; fprintf fmt " | C0 r => reduce_%i r\n" i; fprintf fmt " | C1 r => zero\n"; fprintf fmt " end\n"; done; fprintf fmt " | %sn n wx =>\n" c; fprintf fmt " let op := make_op n in\n"; fprintf fmt " match op.(znz_pred_c) wx with\n"; fprintf fmt " | C0 r => reduce_n n r\n"; fprintf fmt " | C1 r => zero\n"; fprintf fmt " end\n"; fprintf fmt " end.\n"; fprintf fmt "\n"; (* Substraction *) fprintf fmt "\n"; for i = 0 to size do fprintf fmt " Definition w%i_sub_c := w%i_op.(znz_sub_c).\n" i i done; fprintf fmt "\n"; for i = 0 to size do fprintf fmt " Definition w%i_sub x y :=\n" i; fprintf fmt " match w%i_sub_c x y with\n" i; fprintf fmt " | C0 r => reduce_%i r\n" i; fprintf fmt " | C1 r => zero\n"; fprintf fmt " end.\n" done; fprintf fmt "\n"; fprintf fmt " Definition subn n (x y : word w%i (S n)) :=\n" size; fprintf fmt " let op := make_op n in\n"; fprintf fmt " match op.(znz_sub_c) x y with\n"; fprintf fmt " | C0 r => %sn n r\n" c; fprintf fmt " | C1 r => %sn (S n) (WW op.(znz_1) r)" c; fprintf fmt " end.\n"; fprintf fmt "\n"; fprintf fmt " Definition sub x y :=\n"; fprintf fmt " match x, y with\n"; fprintf fmt " | %s0 wx, %s0 wy => w0_sub wx wy \n" c c; for j = 1 to size do fprintf fmt " | %s0 wx, %s%i wy =>\n" c c j; fprintf fmt " if w0_eq0 wx then zero else w%i_sub " j; if j = 1 then fprintf fmt "(WW w_0 wx) wy\n" else fprintf fmt "(extend%i w0 (WW w_0 wx)) wy\n" (j-1) done; fprintf fmt " | %s0 wx, %sn n wy =>\n" c c; fprintf fmt " if w0_eq0 wx then zero\n"; fprintf fmt " else subn n (extend n w%i (extend%i w0 (WW w_0 wx))) wy\n" size size; for i = 1 to size do fprintf fmt " | %s%i wx, %s0 wy =>" c i c; fprintf fmt "\n if w0_eq0 wy then x\n"; fprintf fmt " else w%i_sub wx " i; if i = 1 then fprintf fmt "(WW w_0 wy)\n" else fprintf fmt "(extend%i w0 (WW w_0 wy))\n" (i-1); for j = 1 to size do fprintf fmt " | %s%i wx, %s%i wy => " c i c j; if i < j then fprintf fmt "w%i_sub (extend%i w%i wx) wy\n" j (j-i) (i-1) else if i = j then fprintf fmt "w%i_sub wx wy\n" j else fprintf fmt "w%i_sub wx (extend%i w%i wy)\n" i (i-j) (j-1) done; fprintf fmt " | %s%i wx, %sn n wy => subn n (extend n w%i (extend%i w%i wx)) wy\n" c i c size (size-i+1) (i-1) done; fprintf fmt " | %sn n wx, %s0 wy =>\n" c c; fprintf fmt " if w0_eq0 wy then x\n"; fprintf fmt " else subn n wx (extend n w%i (extend%i w0 (WW w_0 wy)))\n" size size; for j = 1 to size do fprintf fmt " | %sn n wx, %s%i wy => subn n wx (extend n w%i (extend%i w%i wy))\n" c c j size (size-j+1) (j-1); done; fprintf fmt " | %sn n wx, %sn m wy =>\n" c c; fprintf fmt " match extend_to_max w%i n m wx wy with\n" size; fprintf fmt " | inl wx' => subn m wx' wy\n"; fprintf fmt " | inr wy' => subn n wx wy'\n"; fprintf fmt " end\n"; fprintf fmt " end.\n"; fprintf fmt "\n"; for i = 0 to size do fprintf fmt " Definition compare_%i := w%i_op.(znz_compare).\n" i i; fprintf fmt " Definition comparen_%i :=\n" i; let s0 = if i = 0 then "w_0" else "W0" in fprintf fmt " compare_mn_1 w%i w%i %s compare_%i (compare_%i %s) compare_%i.\n" i i s0 i i s0 i done; fprintf fmt "\n"; (* Comparison *) fprintf fmt " Definition compare x y :=\n"; fprintf fmt " match x, y with\n"; for i = 0 to size do for j = 0 to size do fprintf fmt " | %s%i wx, %s%i wy => " c i c j; if i < j then fprintf fmt "opp_compare (comparen_%i %i wy wx)\n" i (j-i) else if i = j then fprintf fmt "compare_%i wx wy\n" i else fprintf fmt "comparen_%i %i wx wy\n" j (i-j) done; let s0 = if i = 0 then "w_0" else "W0" in fprintf fmt " | %s%i wx, %sn n wy =>\n" c i c; fprintf fmt " opp_compare (compare_mn_1 w%i w%i %s " size i s0; fprintf fmt "compare_%i (compare_%i W0) (comparen_%i %i) (S n) wy wx)\n" i size i (size - i) done; for j = 0 to size do let s0 = if j = 0 then "w_0" else "W0" in fprintf fmt " | %sn n wx, %s%i wy =>\n" c c j; fprintf fmt " compare_mn_1 w%i w%i %s " size j s0; fprintf fmt "compare_%i (compare_%i W0) (comparen_%i %i) (S n) wx wy\n" j size j (size - j) done; fprintf fmt " | %sn n wx, %sn m wy =>\n" c c; fprintf fmt " match extend_to_max w%i n m wx wy with\n" size; fprintf fmt " | inl wx' => let op := make_op m in op.(znz_compare) wx' wy \n"; fprintf fmt " | inr wy' => let op := make_op n in op.(znz_compare) wx wy' \n"; fprintf fmt " end\n"; fprintf fmt " end.\n"; fprintf fmt "\n"; fprintf fmt " Definition eq_bool x y :=\n"; fprintf fmt " match compare x y with\n"; fprintf fmt " | Eq => true\n"; fprintf fmt " | _ => false\n"; fprintf fmt " end.\n"; fprintf fmt "\n"; (* Multiplication *) for i = 0 to size do fprintf fmt " Definition w%i_mul_c := w%i_op.(znz_mul_c).\n" i i done; fprintf fmt "\n"; for i = 0 to size do let s0 = if i = 0 then "w_0" else "W0" in fprintf fmt " Definition w%i_mul_add :=\n" i; fprintf fmt " Eval lazy beta delta [w_mul_add] in\n"; fprintf fmt " %sw_mul_add w%i %s w%i_succ w%i_add_c w%i_mul_c.\n" "@" i s0 i i i done; fprintf fmt "\n"; for i = 0 to size do let s0 = if i = 0 then "w_0" else "W0" in fprintf fmt " Definition w%i_mul_add_n1 :=\n" i; fprintf fmt " %sgen_mul_add_n1 w%i %s w%i_op.(znz_WW) w%i_0W w%i_mul_add.\n" "@" i s0 i i i done; fprintf fmt "\n"; fprintf fmt " Definition mul x y :=\n"; fprintf fmt " match x, y with\n"; fprintf fmt " | %s0 wx, %s0 wy =>\n" c c; fprintf fmt " reduce_1 (w0_mul_c wx wy)\n"; for j = 1 to size do fprintf fmt " | %s0 wx, %s%i wy =>\n" c c j; fprintf fmt " if w0_eq0 wx then zero\n"; fprintf fmt " else\n"; fprintf fmt " let (w,r) := w0_mul_add_n1 %i wy wx w_0 in\n" j; fprintf fmt " if w0_eq0 w then %s%i r\n" c j; if j = 1 then fprintf fmt " else %s2 (WW (WW w_0 w) r)\n" c else if j = size then fprintf fmt " else %sn 0 (WW (extend%i w0 (WW w_0 w)) r)\n" c (size-1) else fprintf fmt " else %s%i (WW (extend%i w0 (WW w_0 w)) r)\n" c (j+1) (j-1) done; fprintf fmt " | %s0 wx, %sn n wy =>\n" c c; fprintf fmt " if w0_eq0 wx then zero\n"; fprintf fmt " else\n"; fprintf fmt " let (w,r) := w%i_mul_add_n1 (S n) wy " size; fprintf fmt "(extend%i w0 (WW w_0 wx)) W0 in\n" (size - 1); fprintf fmt " if w%i_eq0 w then %sn n r\n" size c; fprintf fmt " else %sn (S n) (WW (extend n w%i (WW W0 w)) r)\n" c size; for i = 1 to size do fprintf fmt " | %s%i wx, %s0 wy =>\n" c i c; fprintf fmt " if w0_eq0 wy then zero\n"; fprintf fmt " else\n"; fprintf fmt " let (w,r) := w0_mul_add_n1 %i wx wy w_0 in\n" i; fprintf fmt " if w0_eq0 w then %s%i r\n" c i; if i = 1 then fprintf fmt " else %s2 (WW (WW w_0 w) r)\n" c else if i = size then fprintf fmt " else %sn 0 (WW (extend%i w0 (WW w_0 w)) r)\n" c (size-1) else fprintf fmt " else %s%i (WW (extend%i w0 (WW w_0 w)) r)\n" c (i+1) (i-1); for j = 1 to size do fprintf fmt " | %s%i wx, %s%i wy =>\n" c i c j; if i = j then begin if i = size then fprintf fmt " %sn 0 (w%i_mul_c wx wy)\n" c i else fprintf fmt " %s%i (w%i_mul_c wx wy)\n" c (i+1) i end else begin let min,max, wmin, wmax = if i < j then i, j, "wx", "wy" else j, i, "wy", "wx" in fprintf fmt " let (w,r) := w%i_mul_add_n1 %i %s %s W0 in\n" min (max-min) wmax wmin; fprintf fmt " if w%i_eq0 w then %s%i r\n" min c max; fprintf fmt " else "; if max = size then fprintf fmt "%sn 0 " c else fprintf fmt "%s%i " c (max+1); fprintf fmt "(WW (extend%i w%i w) r)\n" (max - min) (min-1); end done; fprintf fmt " | %s%i wx, %sn n wy =>\n" c i c; fprintf fmt " let (w,r) := w%i_mul_add_n1 (S n) wy " size; if i = size then fprintf fmt "wx W0 in\n" else fprintf fmt "(extend%i w%i wx) W0 in\n" (size - i) (i-1); fprintf fmt " if w%i_eq0 w then %sn n r\n" size c; fprintf fmt " else %sn (S n) (WW (extend n w%i (WW W0 w)) r)\n" c size done; fprintf fmt " | %sn n wx, %s0 wy =>\n" c c; fprintf fmt " if w0_eq0 wy then zero\n"; fprintf fmt " else\n"; fprintf fmt " let (w,r) := w%i_mul_add_n1 (S n) wx " size; fprintf fmt "(extend%i w0 (WW w_0 wy)) W0 in\n" (size - 1); fprintf fmt " if w%i_eq0 w then %sn n r\n" size c; fprintf fmt " else %sn (S n) (WW (extend n w%i (WW W0 w)) r)\n" c size; for j = 1 to size do fprintf fmt " | %sn n wx, %s%i wy =>\n" c c j; fprintf fmt " let (w,r) := w%i_mul_add_n1 (S n) wx " size; if j = size then fprintf fmt "wy W0 in\n" else fprintf fmt "(extend%i w%i wy) W0 in\n" (size - j) (j-1); fprintf fmt " if w%i_eq0 w then %sn n r\n" size c; fprintf fmt " else %sn (S n) (WW (extend n w%i (WW W0 w)) r)\n" c size done; fprintf fmt " | %sn n wx, %sn m wy =>\n" c c; fprintf fmt " match extend_to_max w%i n m wx wy with\n" size; fprintf fmt " | inl wx' =>\n"; fprintf fmt " let op := make_op m in\n"; fprintf fmt " reduce_n (S m) (op.(znz_mul_c) wx' wy)\n"; fprintf fmt " | inr wy' =>\n"; fprintf fmt " let op := make_op n in\n"; fprintf fmt " reduce_n (S n) (op.(znz_mul_c) wx wy')\n"; fprintf fmt " end\n"; fprintf fmt " end.\n"; fprintf fmt "\n"; (* Square *) for i = 0 to size do fprintf fmt " Definition w%i_square_c := w%i_op.(znz_square_c).\n" i i done; fprintf fmt "\n"; fprintf fmt " Definition square x :=\n"; fprintf fmt " match x with\n"; fprintf fmt " | %s0 wx => reduce_1 (w0_square_c wx)\n" c; for i = 1 to size - 1 do fprintf fmt " | %s%i wx => %s%i (w%i_square_c wx)\n" c i c (i+1) i done; fprintf fmt " | %s%i wx => %sn 0 (w%i_square_c wx)\n" c size c size; fprintf fmt " | %sn n wx =>\n" c; fprintf fmt " let op := make_op n in\n"; fprintf fmt " %sn (S n) (op.(znz_square_c) wx)\n" c; fprintf fmt " end.\n"; fprintf fmt "\n"; fprintf fmt " Fixpoint power_pos (x:%s) (p:positive) {struct p} : %s :=\n" t t; fprintf fmt " match p with\n"; fprintf fmt " | xH => x\n"; fprintf fmt " | xO p => square (power_pos x p)\n"; fprintf fmt " | xI p => mul (square (power_pos x p)) x\n"; fprintf fmt " end.\n"; fprintf fmt "\n"; (* Square root *) for i = 0 to size do fprintf fmt " Definition w%i_sqrt := w%i_op.(znz_sqrt).\n" i i done; fprintf fmt "\n"; fprintf fmt " Definition sqrt x :=\n"; fprintf fmt " match x with\n"; for i = 0 to size do fprintf fmt " | %s%i wx => reduce_%i (w%i_sqrt wx)\n" c i i i; done; fprintf fmt " | %sn n wx =>\n" c; fprintf fmt " let op := make_op n in\n"; fprintf fmt " reduce_n n (op.(znz_sqrt) wx)\n"; fprintf fmt " end.\n"; fprintf fmt "\n"; (* Division *) for i = 0 to size do fprintf fmt " Definition w%i_div_gt := w%i_op.(znz_div_gt).\n" i i done; fprintf fmt "\n"; for i = 0 to size do fprintf fmt " Definition w%i_divn1 :=\n" i; fprintf fmt " gen_divn1 w%i_op.(znz_digits) w%i_op.(znz_0)\n" i i; fprintf fmt " w%i_op.(znz_WW) w%i_op.(znz_head0)\n" i i; fprintf fmt " w%i_op.(znz_add_mul_div) w%i_op.(znz_div21).\n" i i done; fprintf fmt "\n"; fprintf fmt " Definition div_gt x y :=\n"; fprintf fmt " match x, y with\n"; for i = 0 to size do for j = 0 to size do fprintf fmt " | %s%i wx, %s%i wy =>" c i c j; if i = j then fprintf fmt " let (q, r):= w%i_div_gt wx wy in (reduce_%i q, reduce_%i r)\n" i i i else if i > j then fprintf fmt " let (q, r):= w%i_divn1 %i wx wy in (reduce_%i q, reduce_%i r)\n" j (i-j) i j else begin (* i < j *) fprintf fmt "\n let wx':= GenBase.extend w%i_0W %i wx in\n" i (j-i-1); fprintf fmt " let (q, r):= w%i_div_gt wx' wy in\n" j; fprintf fmt " (reduce_%i q, reduce_%i r)\n" j j; end done; fprintf fmt " | %s%i wx, %sn n wy =>\n" c i c; fprintf fmt " let wx':= extend n w%i (GenBase.extend w%i_0W %i wx) in\n" size i (size-i); fprintf fmt " let (q, r):= (make_op n).(znz_div_gt) wx' wy in\n"; fprintf fmt " (reduce_n n q, reduce_n n r)\n"; done; for j = 0 to size do fprintf fmt " | %sn n wx, %s%i wy =>\n" c c j; if j < size then fprintf fmt " let wy':= GenBase.extend w%i_0W %i wy in\n" j (size-j-1) else fprintf fmt " let wy':= wy in\n"; fprintf fmt " let (q, r):= w%i_divn1 (S n) wx wy' in\n" size; fprintf fmt " (reduce_n n q, reduce_%i r)\n" size done; fprintf fmt " | %sn n wx, %sn m wy =>\n" c c; fprintf fmt " match extend_to_max w%i n m wx wy with\n" size; fprintf fmt " | inl wx' =>\n"; fprintf fmt " let (q, r):= (make_op m).(znz_div) wx' wy in\n"; fprintf fmt " (reduce_n m q, reduce_n m r)\n"; fprintf fmt " | inr wy' =>\n"; fprintf fmt " let (q, r):= (make_op n).(znz_div) wx wy' in\n"; fprintf fmt " (reduce_n n q, reduce_n n r)\n"; fprintf fmt " end\n"; fprintf fmt " end.\n"; fprintf fmt "\n"; fprintf fmt " Definition div_eucl x y :=\n"; fprintf fmt " match compare x y with\n"; fprintf fmt " | Eq => (one, zero)\n"; fprintf fmt " | Lt => (zero, x)\n"; fprintf fmt " | Gt => div_gt x y\n"; fprintf fmt " end.\n"; fprintf fmt "\n"; fprintf fmt " Definition div x y := fst (div_eucl x y).\n"; fprintf fmt "\n"; (* Modulo *) for i = 0 to size do fprintf fmt " Definition w%i_mod_gt := w%i_op.(znz_mod_gt).\n" i i done; fprintf fmt "\n"; for i = 0 to size do fprintf fmt " Definition w%i_modn1 :=\n" i; fprintf fmt " gen_modn1 w%i_op.(znz_digits) w%i_op.(znz_0)\n" i i; fprintf fmt " w%i_op.(znz_head0) w%i_op.(znz_add_mul_div) w%i_op.(znz_div21).\n" i i i done; fprintf fmt "\n"; fprintf fmt " Definition mod_gt x y :=\n"; fprintf fmt " match x, y with\n"; for i = 0 to size do for j = 0 to size do fprintf fmt " | %s%i wx, %s%i wy =>" c i c j; if i = j then fprintf fmt " reduce_%i (w%i_mod_gt wx wy)\n" i i else if i > j then fprintf fmt " reduce_%i (w%i_modn1 %i wx wy)\n" j j (i-j) else begin (* i < j *) fprintf fmt "\n let wx':= GenBase.extend w%i_0W %i wx in\n" i (j-i-1); fprintf fmt " reduce_%i (w%i_mod_gt wx' wy)\n" j j; end done; fprintf fmt " | %s%i wx, %sn n wy =>\n" c i c; fprintf fmt " let wx':= extend n w%i (GenBase.extend w%i_0W %i wx) in\n" size i (size-i); fprintf fmt " reduce_n n ((make_op n).(znz_mod_gt) wx' wy)\n"; done; for j = 0 to size do fprintf fmt " | %sn n wx, %s%i wy =>\n" c c j; if j < size then fprintf fmt " let wy':= GenBase.extend w%i_0W %i wy in\n" j (size-j-1) else fprintf fmt " let wy':= wy in\n"; fprintf fmt " reduce_%i (w%i_modn1 (S n) wx wy')\n" size size; done; fprintf fmt " | %sn n wx, %sn m wy =>\n" c c; fprintf fmt " match extend_to_max w%i n m wx wy with\n" size; fprintf fmt " | inl wx' =>\n"; fprintf fmt " reduce_n m ((make_op m).(znz_mod_gt) wx' wy)\n"; fprintf fmt " | inr wy' =>\n"; fprintf fmt " reduce_n n ((make_op n).(znz_mod_gt) wx wy')\n"; fprintf fmt " end\n"; fprintf fmt " end.\n"; fprintf fmt "\n"; fprintf fmt " Definition modulo x y := \n"; fprintf fmt " match compare x y with\n"; fprintf fmt " | Eq => zero\n"; fprintf fmt " | Lt => x\n"; fprintf fmt " | Gt => mod_gt x y\n"; fprintf fmt " end.\n"; fprintf fmt "\n"; (* Definition du gcd *) fprintf fmt " Definition digits x :=\n"; fprintf fmt " match x with\n"; for i = 0 to size do fprintf fmt " | %s%i _ => w%i_op.(znz_digits)\n" c i i; done; fprintf fmt " | %sn n _ => (make_op n).(znz_digits)\n" c; fprintf fmt " end.\n"; fprintf fmt "\n"; fprintf fmt " Definition gcd_gt_body a b cont :=\n"; fprintf fmt " match compare b zero with\n"; fprintf fmt " | Gt =>\n"; fprintf fmt " let r := mod_gt a b in\n"; fprintf fmt " match compare r zero with\n"; fprintf fmt " | Gt => cont r (mod_gt b r)\n"; fprintf fmt " | _ => b\n"; fprintf fmt " end\n"; fprintf fmt " | _ => a\n"; fprintf fmt " end.\n"; fprintf fmt "\n"; fprintf fmt " Fixpoint gcd_gt (p:positive) (cont:%s->%s->%s) (a b:%s) {struct p} : %s :=\n" t t t t t; fprintf fmt " gcd_gt_body a b\n"; fprintf fmt " (fun a b =>\n"; fprintf fmt " match p with\n"; fprintf fmt " | xH => cont a b\n"; fprintf fmt " | xO p => gcd_gt p (gcd_gt p cont) a b\n"; fprintf fmt " | xI p => gcd_gt p (gcd_gt p cont) a b\n"; fprintf fmt " end).\n"; fprintf fmt "\n"; fprintf fmt " Definition gcd_cont a b :=\n"; fprintf fmt " match compare one b with\n"; fprintf fmt " | Eq => one\n"; fprintf fmt " | _ => a\n"; fprintf fmt " end.\n"; fprintf fmt "\n"; fprintf fmt " Definition gcd a b :=\n"; fprintf fmt " match compare a b with\n"; fprintf fmt " | Eq => a\n"; fprintf fmt " | Lt => gcd_gt (digits b) gcd_cont b a\n"; fprintf fmt " | Gt => gcd_gt (digits a) gcd_cont a b\n"; fprintf fmt " end.\n"; fprintf fmt "\n"; fprintf fmt " Definition of_pos x :=\n"; fprintf fmt " let h := nat_of_P (pheight x) in\n"; fprintf fmt " match h with\n"; let rec print_S s fmt i = if i = 0 then fprintf fmt "%s" s else fprintf fmt "(S %a)" (print_S s) (i-1) in for i = 0 to size do fprintf fmt " | "; print_S "O" fmt i; fprintf fmt " => %s%i (snd (w%i_op.(znz_of_pos) x))\n" "reduce_" i i done; fprintf fmt " | _ =>\n"; fprintf fmt " let n := minus h %i in\n" (size+1); fprintf fmt " %sn n (snd ((make_op n).(znz_of_pos) x))\n" "reduce_"; fprintf fmt " end.\n"; fprintf fmt "\n"; fprintf fmt " Definition of_N x :=\n"; fprintf fmt " match x with\n"; fprintf fmt " | BinNat.N0 => zero\n"; fprintf fmt " | Npos p => of_pos p\n"; fprintf fmt " end.\n"; fprintf fmt "\n"; fprintf fmt " Definition to_Z x :=\n"; fprintf fmt " match x with\n"; for i = 0 to size do fprintf fmt " | %s%i wx => w%i_op.(znz_to_Z) wx\n" c i i done; fprintf fmt " | %sn n wx => (make_op n).(znz_to_Z) wx\n" c; fprintf fmt " end.\n"; fprintf fmt "\n"; fprintf fmt "End Make.\n"; fprintf fmt "\n"; pp_print_flush fmt () let _ = print_Make () coqprime-8.18/src/Coqprime/num/montgomery.v000066400000000000000000001341201451023060700210240ustar00rootroot00000000000000Require Import List ZArith Znumtheory Uint63 Cyclic63. (* We are going to implement modular arithmetic with montgomery reduction *) Definition number := list int. Definition nhead (n : number) := match n with cons i _ => i | _ => 0%uint63 end. Definition ntail (n : number) : number := match n with cons _ t => t | _ => @nil _ end. Open Scope uint63_scope. Fixpoint positive_aux_to_num (p : positive) (i j : int) : number := match p with | xH => (i + j) :: nil | xO p1 => let i1 := 2 * i in match i1 ?= 0 with | Gt => positive_aux_to_num p1 i1 j | _ => j :: positive_aux_to_num p1 1 0 end | xI p1 => let i1 := 2 * i in let j1 := i + j in match i1 ?= 0 with | Gt => positive_aux_to_num p1 i1 j1 | _ => j1 :: positive_aux_to_num p1 1 0 end end. Definition positive_to_num (p : positive) : number := positive_aux_to_num p 1 0. Definition Z_to_num z := match z with | Zpos p => positive_to_num p | _ => nil end. Eval vm_compute in positive_to_num 31415926535897932384626433. Eval vm_compute in positive_to_num 2147483648. Local Notation wB := Uint63.wB. Definition m_to_Z (n : number) := fold_right (fun i r => to_Z i + wB * r )%Z 0%Z n. Notation "[ a ]" := (m_to_Z a). Eval vm_compute in [positive_to_num 31415926535897932384626433]. Lemma to_Z_nil : [nil] = 0%Z. Proof. auto. Qed. Lemma to_Z_cons a l : ([a::l] = to_Z a + wB * [l])%Z. Proof. auto. Qed. Lemma to_Z_head_tail n : [n] = [nhead n :: ntail n]. Proof. unfold nhead, ntail; case n; auto. Qed. Ltac nrom := repeat rewrite to_Z_nil; repeat rewrite to_Z_cons; try change (to_Z 0) with 0%Z; try change (to_Z 1) with 1%Z; try change (to_Z 2) with 2%Z; try change (to_Z max_int) with (wB - 1)%Z; try change (2^ Z_of_nat size)%Z with wB. Lemma Zpower_nat_0 x : Zpower_nat x 0 = 1%Z. Proof. auto. Qed. Lemma Zpower_nat_S x n : Zpower_nat x (S n) = (x * Zpower_nat x n)%Z. Proof. auto. Qed. Lemma Zpower_nat_pos u n : (0 < u -> 0 < Zpower_nat u n)%Z. Proof. intros Hu. induction n. reflexivity. rewrite Zpower_nat_S. apply Zmult_lt_0_compat; assumption. Qed. Lemma Zpower_base_pos n : (0 < Zpower_nat wB n)%Z. Proof. apply Zpower_nat_pos; auto with zarith; red; auto. Qed. Lemma Zpower_nat_le_compat u n m : (0 < u)%Z -> (n <= m)%nat -> (Zpower_nat u n <= Zpower_nat u m)%Z. Proof. intros Hu; generalize m; clear m; induction n as [ | n Hrec]; auto with zarith. intros [ | m]; repeat rewrite Zpower_nat_S; try rewrite Zpower_nat_0; auto with zarith. intros _; change 1%Z with (1 * 1)%Z; apply Zmult_le_compat; auto with zarith. generalize (Zpower_nat_pos _ m Hu); auto with zarith. intros [ | m]; repeat rewrite Zpower_nat_S; try rewrite Zpower_nat_0; auto with zarith. Qed. Lemma Zpower_nat_lt_compat u n m : (1 < u)%Z -> (n < m)%nat -> (Zpower_nat u n < Zpower_nat u m)%Z. Proof. intros Hu; generalize m; clear m; induction n as [ | n Hrec]; auto with zarith. intros [ | m]; repeat rewrite Zpower_nat_S; try rewrite Zpower_nat_0; auto with zarith. intros _; apply Z.lt_le_trans with (u * 1)%Z; auto with zarith. assert (Hv: (0 < u)%Z); auto with zarith. generalize (Zpower_nat_pos _ m Hv); auto with zarith. intros [ | m]; repeat rewrite Zpower_nat_S; try rewrite Zpower_nat_0; auto with zarith. intros HH. apply Zmult_lt_compat_l; auto with zarith. Qed. Lemma Zpower_nat_le_reg u n m : (1 < u)%Z -> (Zpower_nat u n <= Zpower_nat u m)%Z -> (n <= m)%nat . Proof. intros Hu; generalize m; clear m; induction n as [ | n Hrec]; auto with zarith. intros [ | m]; repeat rewrite Zpower_nat_S; try rewrite Zpower_nat_0. intros Hv; contradict Hv; apply Zlt_not_le. apply Z.lt_le_trans with (u * 1)%Z; auto with zarith. assert (HH: (0 < u)%Z); auto with zarith. assert (HH1:= Zpower_nat_pos u n HH); auto with zarith. intros Hv; assert (n <= m)%nat; auto with arith. apply Hrec; apply Zmult_le_reg_r with u; auto with zarith; repeat rewrite <- (Zmult_comm u); auto. Qed. Lemma Zpower_nat_lt_reg u n m : (1 < u)%Z -> (Zpower_nat u n < Zpower_nat u m)%Z -> (n < m)%nat . Proof. intros Hu; generalize m; clear m; induction n as [ | n Hrec]; auto with zarith. intros [ | m]; repeat rewrite Zpower_nat_S; try rewrite Zpower_nat_0; auto with zarith. intros [ | m]; repeat rewrite Zpower_nat_S; try rewrite Zpower_nat_0; auto with zarith. intros Hv; contradict Hv; apply Zle_not_lt. apply Z.le_trans with (u * 1)%Z; auto with zarith. assert (HH: (0 < u)%Z); auto with zarith. assert (HH1:= Zpower_nat_pos u n HH); auto with zarith. intros Hv; assert (n < m)%nat; auto with arith. apply Hrec; apply Zmult_lt_reg_r with u; auto with zarith; repeat rewrite <- (Zmult_comm u); auto. Qed. Lemma positive_to_Z p : [positive_to_num p] = Zpos p. Proof. assert (Hi0: (forall i n, to_Z i = Zpower_nat 2 n -> match 2 * i ?= 0 with | Eq => n = 62%nat | Lt => False | Gt => to_Z (2 * i) = Zpower_nat 2 (S n) end)). intros i n Hi. assert (n < 63)%nat. case (to_Z_bounded i); nrom; rewrite Hi; intros Hi1 Hi2. apply Zpower_nat_lt_reg with 2%Z; auto with zarith. assert (HH1: (0 < 2)%Z); auto with zarith. assert (HH2 := Zpower_nat_pos _ (S n) HH1). rewrite compare_spec; case Z.compare_spec. rewrite mul_spec; nrom. rewrite Hi, <- Zpower_nat_S; auto with zarith. assert (H30 : (n <= 62)%nat) by auto with zarith. apply Nat.lt_eq_cases in H30; case H30; auto with zarith; intros HH3. rewrite Zmod_small; auto with zarith. split; auto with zarith. change Uint63.wB with (Zpower_nat 2 63); apply Zpower_nat_lt_compat; auto with zarith. intros HH; contradict HH. case (to_Z_bounded (2 * i)); nrom; auto with zarith. rewrite mul_spec; nrom; rewrite Hi, <- Zpower_nat_S; auto with zarith. assert (H62 : (n <= 62)%nat) by auto with arith. apply Nat.lt_eq_cases in H62; case H62; auto with zarith; intros HH3'. rewrite Zmod_small; nrom; auto with zarith. split; auto with zarith. change Uint63.wB with (Zpower_nat 2 63); apply Zpower_nat_lt_compat; auto with zarith. rewrite HH3', Z_mod_same; auto with zarith. apply Z.lt_gt; auto with zarith. assert (Hij: (forall i j n, to_Z i = Zpower_nat 2 n -> to_Z j < to_Z i -> to_Z (i + j) = to_Z i + to_Z j)%Z). intros i j n Hi Hj. rewrite add_spec, Zmod_small; auto; nrom. case (to_Z_bounded i); case (to_Z_bounded j); nrom; intros H1j H2j H1i H2i; split; auto with zarith. assert (n < 63)%nat. apply Zpower_nat_lt_reg with 2%Z; auto with zarith. rewrite <- Hi; auto with zarith. apply Z.lt_le_trans with (Zpower_nat 2 (S n)). rewrite Zpower_nat_S, <-Hi; auto with zarith. change Uint63.wB with (Zpower_nat 2 63). apply Zpower_nat_le_compat; auto with zarith. assert (H: forall p1 i j n, to_Z i = Zpower_nat 2 n -> (to_Z j < to_Z i -> m_to_Z (positive_aux_to_num p1 i j) = Zpos p1 * to_Z i + to_Z j)%Z). induction p1 as [p1 Hrec| p1 Hrec| ]; simpl positive_aux_to_num; intros i j n Hi Hj. generalize (Hi0 i n Hi); rewrite compare_spec; case Z.compare_spec; nrom. intros Hto_Z Hn; rewrite (Hij i j n), Hi, Hn; auto with zarith. rewrite (Hrec 1 0 0%nat); nrom; auto with zarith. rewrite Zpos_xI; change wB with (2 * Zpower_nat 2 62)%Z; ring. generalize (to_Z_bounded (2 * i)); auto with zarith. intros HH H2i; rewrite (Hrec _ _ (S n)); auto with zarith. rewrite Zpos_xI, H2i, (Hij i j n), Hi, Zpower_nat_S by auto with zarith. ring. rewrite (Hij i j n), H2i, Zpower_nat_S, <- Hi; auto with zarith. generalize (Hi0 i n Hi); rewrite compare_spec; case Z.compare_spec; nrom. intros HH Hn; rewrite Hi, Hn; auto with zarith. rewrite (Hrec 1 0 0%nat); nrom; auto with zarith. rewrite Zpos_xO; change wB with (2 * Zpower_nat 2 62)%Z; ring. generalize (to_Z_bounded (2 * i)); auto with zarith. intros HH H2i; rewrite (Hrec _ _ (S n)); auto with zarith. rewrite Zpos_xO, H2i, Hi, Zpower_nat_S by auto with zarith. ring. case (to_Z_bounded i); intros Hi1 H2. rewrite H2i, Zpower_nat_S, <- Hi; auto with zarith. rewrite to_Z_cons, (Hij i j n); nrom; auto with zarith. unfold positive_to_num. rewrite (H _ _ _ 0%nat); [|auto with zarith|]. nrom; ring. nrom; auto with zarith. Qed. Lemma to_Z_pos n : (0 <= [n])%Z. Proof. induction n as [ | a n Hrec]; nrom; auto with zarith. case (to_Z_bounded a); intros Ha1 Ha2; auto with zarith. Qed. Lemma num_to_Z z : (0 <= z)%Z -> [Z_to_num z] = z. Proof. destruct z as [|p|p]; intros Hp. auto with zarith. apply positive_to_Z. contradict Hp; auto with zarith. Qed. Lemma add_cp a b : match (a + b) ?= a with | Lt => (to_Z (a + b) = to_Z a + to_Z b - Uint63.wB)%Z | _ => (to_Z (a + b) = to_Z a + to_Z b)%Z end. Proof. case (to_Z_bounded a); nrom; intros Ha1 Ha2. case (to_Z_bounded b); nrom; intros Hb1 Hb2. case (to_Z_bounded (a + b)); nrom; intros Hab1 Hab2. assert (H2ab: (to_Z a + to_Z b < 2 * Uint63.wB)%Z); auto with zarith. case (Zle_or_lt Uint63.wB (to_Z a + to_Z b)); intros H1ab. assert (He: (to_Z(a + b) = to_Z a + to_Z b - Uint63.wB)%Z). rewrite <- (fun x y => Zmod_small (x - y) Uint63.wB); auto with zarith. rewrite Zminus_mod, Z_mod_same_full, Zminus_0_r, Zmod_mod, <- add_spec; auto. rewrite compare_spec; case Z.compare_spec; nrom; intros Hc; auto with zarith. assert (He: (to_Z(a + b) = to_Z a + to_Z b)%Z). rewrite add_spec, Zmod_small; auto with zarith. rewrite compare_spec; case Z.compare_spec; nrom; intros Hc; auto with zarith. Qed. Lemma add1_cp a : match (1 + a) ?= 0 with | Eq => (to_Z a = Uint63.wB - 1)%Z | _ => (to_Z (1 + a) = 1 + to_Z a)%Z end. Proof. case (to_Z_bounded a); case (to_Z_bounded (1 + a)); generalize (add_cp 1 a); rewrite compare_spec; case Z.compare_spec; rewrite compare_spec; case Z.compare_spec; nrom; auto with zarith. Qed. Lemma add2_cp a b : match (1 + (a + b)) ?= a with | Gt => (to_Z (1 + (a + b)) = to_Z a + to_Z b + 1)%Z | _ => (to_Z (1 + (a + b)) = to_Z a + to_Z b + 1 - Uint63.wB)%Z end. Proof. case (to_Z_bounded a); nrom; intros Ha1 Ha2. case (to_Z_bounded b); nrom; intros Hb1 Hb2. case (to_Z_bounded (a + b)); nrom; intros Hab1 Hab2. case (to_Z_bounded (1 + (a + b))); nrom; intros H1ab1 H1ab2. generalize (add_cp 1 (a + b)) (add_cp a b); do 2 (rewrite compare_spec; case Z.compare_spec); nrom; intros H1 H2; lazy zeta; rewrite compare_spec; case Z.compare_spec; nrom; auto with zarith. Qed. Fixpoint incr_num (n: number): number := match n with | nil => 1 :: nil | a::n1 => let c := 1 + a in match c ?= 0 with | Eq => 0 :: incr_num n1 | _ => c :: n1 end end. Notation "a .+1" := (incr_num a) (at level 0). Lemma incr_correct n : ([n.+1] = [n] + 1)%Z. Proof. induction n as [ | a n Hrec]; nrom; auto. unfold incr_num; fold incr_num. generalize (add1_cp a); rewrite compare_spec; case Z.compare_spec; nrom; intros HH H; rewrite H; try rewrite Hrec; try ring. Qed. Fixpoint add_num (n1 n2 : number) := match n1 with | nil => n2 | a :: n3 => match n2 with | nil => n1 | b :: n4 => let c := a + b in match c ?= a with | Lt => c :: add1_num n3 n4 | _ => c :: add_num n3 n4 end end end with add1_num (n1 n2 : number) := match n1 with | nil => incr_num n2 | a :: n3 => match n2 with | nil => incr_num n1 | b :: n4 => let c := (1 + (a + b)) in match c ?= a with | Gt => c :: add_num n3 n4 | _ => c :: add1_num n3 n4 end end end. Notation "a + b" := (add_num a b). Notation "a +1 b" := (add1_num a b) (at level 40). Lemma add_add1_correct m n : [m + n] = ([m] + [n])%Z /\ [m +1 n] = ([m] + [n] + 1)%Z. Proof. generalize n; clear n. induction m as [ | a m Hrec]; nrom; auto. intros n; simpl; rewrite incr_correct; auto. intros n; destruct n as [ | b n]. unfold add_num; fold add_num; unfold add1_num; fold add1_num; rewrite incr_correct; auto with zarith. split. change ((a :: m) + (b :: n)) with (let c := (a + b)%uint63 in match c ?= a with | Lt => c::add1_num m n | _ => c::add_num m n end). lazy zeta; generalize (add_cp a b); rewrite compare_spec; case Z.compare_spec; nrom; intros HH H; case (Hrec n); intros H1 H2; try rewrite H; try rewrite H1; try rewrite H2; ring. change ((a :: m) +1 (b :: n)) with (let c := (1 + (a + b))%uint63 in match c ?= a with | Gt => c::add_num m n | _ => c::add1_num m n end). lazy zeta; generalize (add2_cp a b); rewrite compare_spec; case Z.compare_spec; nrom; intros HH H1; case (Hrec n); intros Hr1 Hr2; rewrite H1; (rewrite Hr1 || rewrite Hr2); ring. Qed. Lemma add_correct m n : [m + n] = ([m] + [n])%Z. Proof. case (add_add1_correct m n); auto. Qed. Lemma add1_correct m n : [m +1 n] = ([m] + [n] + 1)%Z. Proof. case (add_add1_correct m n); auto. Qed. Fixpoint zerop_num (n: number) := match n with | nil => true | a::n1 => match a ?= 0 with | Eq => zerop_num n1 | _ => false end end. Lemma zerop_correct n : if zerop_num n then [n] = 0%Z else [n] <> 0%Z. Proof. induction n as [ | a n Hrec]. simpl; auto. case (to_Z_bounded a); nrom; intros Ha1 Ha2. unfold zerop_num; fold zerop_num. rewrite compare_spec; case Z.compare_spec; nrom. 2: auto with zarith. generalize Hrec; case zerop_num. intros H1 H2; rewrite H1, H2; ring. intros H1 H2; rewrite H2. rewrite Zplus_0_l; intros HH; case (Zmult_integral _ _ HH); auto with zarith. generalize (to_Z_pos n); intros H1 H2 H3. enough (0 < to_Z a + wB * [n])%Z by auto with zarith. apply Z.lt_le_trans with (to_Z a). auto with zarith. assert (0 <= wB * [n])%Z; auto with zarith. Qed. Fixpoint cpr_num (n1 n2: number) res := match n1 with | nil => if zerop_num n2 then res else Lt | a :: n3 => match n2 with | nil => if zerop_num n1 then res else Gt | b :: n4 => let res1 := match a ?= b with | Eq => res | v => v end in cpr_num n3 n4 res1 end end. Lemma base_lexi_order a b n1 n2 wB : (0 <= a < wB -> 0 <= b < wB -> match a + wB * n1 ?= b + wB * n2 with | Eq => a = b /\ n1 = n2 | Lt => n1 < n2 \/ (n1 = n2 /\ a < b) | Gt => n2 < n1 \/ (n1 = n2 /\ b < a) end)%Z. Proof. intros (Ha1, Ha2) (Hb1, Hb2). case Z.compare_spec; intros HH. case (Zle_or_lt n1 n2); intros H1. case (Zle_lt_or_eq _ _ H1); clear H1; intros H1; auto. assert (HH1: (wB + wB * (n2 - n1 -1) = (a - b))%Z). replace a with ((a + wB * n1) - wB * n1)%Z by ring. rewrite HH; ring. assert (Hu: (0 <= wB * (n2 - n1 - 1))%Z); auto with zarith. split; auto. replace a with ((a + wB * n1) - wB * n1)%Z by ring. rewrite HH, H1; ring. assert (wB + wB * (n1 - n2 -1) = (b - a))%Z. replace b with ((b + wB * n2) - wB * n2)%Z by ring. rewrite <-HH; ring. assert (Hu: (0 <= wB * (n1 - n2 - 1))%Z); auto with zarith. case (Zle_or_lt n2 n1); intros H1; auto. case (Zle_lt_or_eq _ _ H1); clear H1; intros H1; auto. assert (0 <= wB * (n1 - n2 - 1))%Z by auto with zarith. enough (wB + wB * (n1 - n2 -1) < (b - a))%Z by auto with zarith. repeat rewrite Zmult_minus_distr_l; rewrite Zmult_1_r; auto with zarith. rewrite H1 in HH; auto with zarith. case (Zle_or_lt n1 n2); intros H1; auto. case (Zle_lt_or_eq _ _ H1); clear H1; intros H1; auto. assert (0 <= wB * (n2 - n1 - 1))%Z by auto with zarith. enough (wB + wB * (n2 - n1 -1) < (a - b))%Z by auto with zarith. repeat rewrite Zmult_minus_distr_l; rewrite Zmult_1_r; auto with zarith. rewrite H1 in HH; auto with zarith. Qed. Lemma cpr_correct n1 n2 res : match ([n1] ?= [n2])%Z with | Lt => cpr_num n1 n2 res = Lt | Gt => cpr_num n1 n2 res = Gt | Eq => cpr_num n1 n2 res = res end. Proof. generalize n2 res; clear n2 res. induction n1 as [ | a n1 Hrec]. intros n2 res; simpl cpr_num; nrom. generalize (to_Z_pos n2); case Z.compare_spec; auto with zarith; generalize (zerop_correct n2); case zerop_num; auto with zarith; intros H1 H2 H3; contradict H1; auto with zarith. intros [ | b n2]. intros res; unfold cpr_num. generalize (to_Z_pos (a::n1)); case Z.compare_spec; auto with zarith; generalize (zerop_correct (a::n1)); case zerop_num; auto with zarith; nrom; intros H1 H2 H3; contradict H1; auto with zarith. intros res; unfold cpr_num; fold cpr_num. set (v := (match a ?= b with Eq => res | _ => a ?= b end)). generalize (base_lexi_order _ _ [n1] [n2] _ (to_Z_bounded a) (to_Z_bounded b)); nrom; case Z.compare. intros (HH, HH0). unfold v; rewrite compare_spec; case Z.compare_spec; nrom; intros HH2; try (contradict HH2; auto with zarith; fail). generalize (Hrec n2 res); case Z.compare_spec; auto; intros HH3; contradict HH3; auto with zarith. intros [HH2 | (HH2, HH3)]. generalize (Hrec n2 v); rewrite HH2; unfold v; rewrite compare_spec; case Z.compare_spec; auto. generalize (Hrec n2 v); rewrite HH2; unfold v. rewrite Z.compare_refl. rewrite compare_spec; case Z.compare_spec; auto with zarith ; intros HH; contradict HH; auto with zarith. intros [HH2 | (HH2, HH3)]. generalize (Hrec n2 v); case Z.compare_spec; auto with zarith. intros HH; contradict HH2; auto with zarith. intros HH; contradict HH2; auto with zarith. unfold v; rewrite compare_spec; case Z.compare_spec; auto. generalize (Hrec n2 v); rewrite HH2, Z.compare_refl. unfold v; rewrite compare_spec; case Z.compare_spec; auto. intros HH4; contradict HH3; auto with zarith. intros HH4; contradict HH3; auto with zarith. Qed. Definition cp_num n1 n2 := cpr_num n1 n2 Eq. Inductive CpSpec (i j : number) : comparison -> Prop := CpSpecEq : [i] = [j] -> CpSpec i j Eq | CpSpecLt : ([i] < [j])%Z -> CpSpec i j Lt | CpSpecGt : ([j] < [i])%Z -> CpSpec i j Gt. Lemma cp_spec i j : CpSpec i j (cp_num i j). Proof. generalize (cpr_correct i j Eq). unfold cp_num; case Z.compare_spec; intros H1 H2; rewrite H2; constructor; auto. Qed. Fixpoint eq_num (n1 n2: number) := match n1 with | nil => zerop_num n2 | a :: n3 => match n2 with | nil => zerop_num n1 | b :: n4 => match a ?= b with | Eq => eq_num n3 n4 | _ => false end end end. Lemma eq_correct n1 n2 : if eq_num n1 n2 then [n1] = [n2]%Z else [n1] <> [n2]%Z. Proof. generalize n2; clear n2. induction n1 as [ | a n1 Hrec]. intros n2; generalize (zerop_correct n2); simpl; case zerop_num; auto. case (to_Z_bounded a); nrom; intros Ha1 Ha2. intros [ |b n2]; unfold eq_num; fold eq_num; nrom. generalize (zerop_correct (a::n1)); simpl; case zerop_num; auto. rewrite compare_spec; case Z.compare_spec; nrom; intros H1; try ( intros HH; generalize (base_lexi_order _ _ [n1] [n2] _ (to_Z_bounded a) (to_Z_bounded b)); nrom; rewrite HH, Z.compare_refl; intros (H3,H4); contradict H1; auto with zarith). generalize (Hrec n2); case eq_num; intros H2. apply Zcompare_Eq_eq; generalize (base_lexi_order _ _ [n1] [n2] _ (to_Z_bounded a) (to_Z_bounded b)); nrom; case Z.compare; auto. intros [H3 | (H3, H4)]; contradict H3; auto with zarith. intros [H3 | (H3, H4)]; contradict H3; auto with zarith. intros HH; generalize (base_lexi_order _ _ [n1] [n2] _ (to_Z_bounded a) (to_Z_bounded b)); nrom; rewrite HH, Z.compare_refl; intros (H3,H4); case H2; auto. Qed. Fixpoint decr_num (n: number): number := match n with | nil => 1 :: nil | a :: n1 => match a ?= 0 with | Eq => max_int :: decr_num n1 | _ => (a - 1) :: n1 end end. Notation "a .-1" := (decr_num a) (at level 0). Lemma decr_correct n : (0 < [n])%Z -> ([n.-1] = [n] - 1)%Z. Proof. induction n as [ | a n Hrec]; nrom. auto with zarith. unfold decr_num; fold decr_num. case (to_Z_bounded a); nrom; intros Ha1 Ha2. rewrite compare_spec; case Z.compare_spec; nrom; try rewrite spec_Bm1; nrom. 2: auto with zarith. intros H1 H2; rewrite H1 in H2 |- *; rewrite Hrec; auto with zarith; try ring. apply Zmult_lt_0_reg_r with wB; auto with zarith. rewrite Zmult_comm; auto with zarith. intros H1 H2. rewrite sub_spec; nrom. rewrite Zmod_small; auto with zarith. Qed. Fixpoint sub_num (n1 n2 : number) := match n1 with | nil => nil | a :: n3 => match n2 with | nil => n1 | b :: n4 => let c := a - b in match c ?= a with | Gt => c :: sub1_num n3 n4 | _ => c :: sub_num n3 n4 end end end with sub1_num (n1 n2 : number) := match n1 with | nil => nil | a :: n3 => match n2 with | nil => decr_num n1 | b :: n4 => let c := (a - (1 + b)) in match c ?= a with | Lt => c :: sub_num n3 n4 | _ => c :: sub1_num n3 n4 end end end. Notation "a - b" := (sub_num a b). Notation "a -1 b" := (sub1_num a b) (at level 40). Lemma sub_cp a b : match (a - b) ?= a with | Gt => (to_Z (a - b) = to_Z a - to_Z b + wB)%Z | _ => (to_Z (a - b) = to_Z a - to_Z b)%Z end. Proof. case (to_Z_bounded a); nrom; intros Ha1 Ha2. case (to_Z_bounded b); nrom; intros Hb1 Hb2. case (to_Z_bounded (a - b)); nrom; intros Hab1 Hab2. assert (H1ab: (to_Z a - to_Z b < wB)%Z); auto with zarith. case (Zle_or_lt 0 (to_Z a - to_Z b)); intros Hab. assert (He: (to_Z(a - b) = to_Z a - to_Z b)%Z). rewrite sub_spec, Zmod_small; auto with zarith. rewrite compare_spec; case Z.compare_spec; intros Hc; auto with zarith. assert (He: (to_Z(a - b) = to_Z a - to_Z b + wB)%Z). rewrite <- (fun x y => Zmod_small (x + y) wB); auto with zarith. rewrite Zplus_mod, Z_mod_same_full, Zplus_0_r, Zmod_mod, <- sub_spec; auto. rewrite compare_spec; case Z.compare_spec; intros Hc; auto with zarith. Qed. Lemma sub1_cp a b : match (a - (1 + b)) ?= a with | Lt => (to_Z (a - (1 + b)) = to_Z a - (1 + to_Z b))%Z | _ => (to_Z (a - (1 + b)) = to_Z a - (1 + to_Z b) + wB)%Z end. Proof. case (to_Z_bounded a); nrom; intros Ha1 Ha2. case (to_Z_bounded b); nrom; intros Hb1 Hb2. case (to_Z_bounded (1 + b)); nrom; intros H1b1 H1b2. case (to_Z_bounded (a - (1 + b))); nrom; intros Hab1 Hab2. case (Zle_lt_or_eq (1 + to_Z b) wB); auto with zarith; intros Hb3; try( rewrite compare_spec; case Z.compare_spec; intros Hc; auto with zarith; generalize Hc; rewrite sub_spec, add_spec; nrom; rewrite Hb3, Z_mod_same_full, Zminus_0_r, Zmod_small; auto with zarith). assert (H1b: to_Z (1 + b) = (to_Z b + 1)%Z). rewrite add_spec, Zmod_small; nrom; auto with zarith. assert (H1ab: (to_Z a - to_Z (1 + b) < wB)%Z); auto with zarith. case (Zle_or_lt 0 (to_Z a - to_Z (1 + b))); intros Hab. assert (He: (to_Z(a - (1 + b)) = to_Z a - to_Z b - 1)%Z). rewrite sub_spec, Zmod_small; nrom; auto with zarith. rewrite compare_spec; case Z.compare_spec; intros Hc; auto with zarith. assert (He: (to_Z(a - (1 + b)) = to_Z a - to_Z b - 1 + wB)%Z). rewrite <- (fun x y => Zmod_small (x + y) wB); auto with zarith. rewrite Zplus_mod, Z_mod_same_full, Zplus_0_r, Zmod_mod; auto with zarith. rewrite sub_spec, H1b; nrom; apply f_equal2 with (f := Z.modulo); auto with zarith. rewrite compare_spec; case Z.compare_spec; intros Hc; auto with zarith. Qed. Lemma sub_sub1_correct m n : (([n] <= [m])%Z -> [m - n] = ([m] - [n])%Z) /\ ([n] < [m] -> [m -1 n] = [m] - (1 + [n]))%Z. Proof. generalize n; clear n. induction m as [ | a m Hrec]; nrom; auto. intros n; induction n as [ | b n Hrec]; unfold sub_num, sub1_num; fold sub_num; fold sub1_num; nrom; auto with zarith. generalize (to_Z_pos (b::n)); nrom; auto with zarith. intros n; destruct n as [ | b n]; unfold sub_num, sub1_num; fold sub_num; fold sub1_num; nrom; auto with zarith. split; intros H1; auto with zarith. rewrite decr_correct; auto with zarith. split; intros H1. case (Hrec n); intros H2 H3. assert (H4: ([n] <= [m])%Z). generalize (base_lexi_order _ _ [n] [m] _ (to_Z_bounded b) (to_Z_bounded a)); nrom; case (Zle_lt_or_eq _ _ H1); intros H4. red in H4; rewrite H4; auto with zarith. rewrite H4, Z.compare_refl; auto with zarith. generalize (sub_cp a b); rewrite compare_spec; case Z.compare_spec; nrom; intros HH0 HH1; rewrite HH1; try rewrite H2; auto; try ring. rewrite H3; try ring. case (Zle_lt_or_eq _ _ H4); intros H5; auto. rewrite H5 in H1 |- *. generalize (base_lexi_order _ _ [m] [m] _ (to_Z_bounded b) (to_Z_bounded a)); nrom. assert (H6: (to_Z a < to_Z b)%Z). case (Zle_or_lt (to_Z b) (to_Z a)); intros H6; auto. generalize HH1; rewrite sub_spec; nrom. case (to_Z_bounded a); nrom; intros Ha1 Ha2; case (to_Z_bounded b); nrom; intros Hb1 Hb2; rewrite Zmod_small; auto with zarith. case (Zle_lt_or_eq _ _ H1); intros H7. red in H7; rewrite H7; auto with zarith. rewrite H7, Z.compare_refl; auto with zarith. generalize (base_lexi_order _ _ [n] [m] _ (to_Z_bounded b) (to_Z_bounded a)); nrom. red in H1; rewrite H1. intros [H2 | (H2, H3)]. case (Hrec n); intros H3 H4. generalize (sub1_cp a b); rewrite compare_spec; case Z.compare_spec; nrom; intros HH0 HH1; rewrite HH1; try rewrite H3; try rewrite H4; auto with zarith; try ring. assert (Ha: (to_Z (a - (1 + b)) < to_Z a)%Z). case (to_Z_bounded a); nrom; intros H1a H2a. case (to_Z_bounded b); nrom; intros H1b _. rewrite sub_spec, Zmod_small; nrom; auto with zarith; rewrite add_spec, Zmod_small; nrom; auto with zarith. rewrite compare_spec; case Z.compare_spec; auto with zarith. intros _; case (Hrec n); intros H4 _; nrom. rewrite H4; auto with zarith. case (to_Z_bounded a); nrom; intros H1a H2a; case (to_Z_bounded b); nrom; intros H1b _; rewrite sub_spec, Zmod_small; nrom; auto with zarith; rewrite add_spec, Zmod_small; nrom; auto with zarith; try ring. Qed. Lemma sub_correct m n : ([n] <= [m])%Z -> [m - n] = ([m] - [n])%Z. Proof. intros H; case (sub_sub1_correct m n); auto with zarith. Qed. Lemma sub1_correct m n : ([n] < [m])%Z -> [m -1 n] = ([m] - [n] - 1)%Z. Proof. intros H; case (sub_sub1_correct m n); auto with zarith. Qed. Definition add_mod p m n := let res := m + n in match cp_num res p with | Lt => res | _ => res - p end. Lemma add_mod_correct p m n : (0 <= [m] < [p] -> 0 <= [n] < [p] -> [add_mod p m n] = ([m] + [n]) mod [p])%Z. Proof. intros H1 H2; unfold add_mod. case cp_spec; rewrite add_correct; intros H3; try rewrite sub_correct; try rewrite add_correct; auto with zarith. rewrite H3, Z_mod_same_full; auto with zarith. rewrite Zmod_small; auto with zarith. rewrite <-(fun x y => (Zmod_small (x - y) [p])); auto with zarith. rewrite Zminus_mod, Z_mod_same_full, Zminus_0_r, Zmod_mod; auto. Qed. Lemma add_mod_bound p m n : (0 <= [m] < [p] -> 0 <= [n] < [p] -> 0 <= [add_mod p m n] < [p])%Z. Proof. intros H1 H2; rewrite add_mod_correct; auto. apply Z_mod_lt; auto with zarith. Qed. Definition sub_mod p m n := match cp_num m n with | Lt => (p + m) - n | _ => m - n end. Lemma sub_mod_correct p m n : (0 <= [m] < [p] -> 0 <= [n] < [p] -> [sub_mod p m n] = ([m] - [n]) mod [p])%Z. Proof. intros H1 H2; unfold sub_mod. case cp_spec; intros H3. rewrite H3, Zminus_diag, Zmod_0_l, sub_correct, H3; auto with zarith. rewrite sub_correct; rewrite add_correct; auto with zarith. rewrite <-(fun x y => (Zmod_small (x - y) [p])); auto with zarith. rewrite Zminus_mod, Zplus_mod, Z_mod_same_full, Zplus_0_l, Zmod_mod, <- Zminus_mod; auto. rewrite Zmod_small, sub_correct; auto with zarith. Qed. Lemma sub_mod_bound p m n : (0 <= [m] < [p] -> 0 <= [n] < [p] -> 0 <= [sub_mod p m n] < [p])%Z. Proof. intros H1 H2; rewrite sub_mod_correct; auto. apply Z_mod_lt; auto with zarith. Qed. Definition amd (A: Type) (a b c: int) (f: int -> int -> A): A := match a *c b with | W0 => f c 0 | WW resh resl => let u := (resl + c)%uint63 in match u ?= resl with | Lt => f u (succ resh) | _ => f u resh end end. Fixpoint amd_num (a b: int) (n: number): number := match n with | nil => b :: nil | c::n1 => amd _ a c b (fun xl xh => xl :: amd_num a xh n1) end. Lemma amd_correct a b n : [amd_num a b n] = (to_Z a * [n] + to_Z b)%Z. Proof. generalize a b; clear a b; induction n as [ | c n1 Hrec]; intros a b; unfold amd_num; fold amd_num; nrom; nrom. ring. unfold amd; generalize (mulc_WW_spec a c); nrom. case (a *c c); simpl zn2z_to_Z. nrom; rewrite Hrec, to_Z_0; repeat rewrite Zmult_plus_distr_l. intros H; ring_simplify; rewrite <-H; ring. intros xh xl Hx; generalize (add_cp xl b); case (_ ?= _); intros H1; nrom; rewrite H1, Hrec; repeat rewrite Zmult_plus_distr_r; rewrite <- Hx; try ring. replace (to_Z (succ xh)) with (to_Z xh + 1)%Z; try ring. case (to_Z_bounded a); nrom; intros H1a H2a. case (to_Z_bounded c); nrom; intros H1c H2c. case (to_Z_bounded xl); nrom; intros H1xl H2xl. rewrite succ_spec, Zmod_small; nrom; auto with zarith. case (to_Z_bounded xh); nrom; intros H1xh H2xh; split; auto with zarith. assert (HH: (to_Z a * to_Z c <= (wB - 1) * (wB - 1))%Z). apply Zmult_le_compat; auto with zarith. replace ((wB - 1) * (wB - 1))%Z with (1 + wB * (wB - 2) )%Z in HH;try ring. rewrite <-Hx, Zmult_comm, Zplus_comm in HH. assert (HH1: (0 <= 1 < wB)%Z); case (to_Z_bounded 1); nrom; auto with zarith. generalize (base_lexi_order (to_Z xl) 1 (to_Z xh) (wB - 2) wB (to_Z_bounded xl) HH1). case (Zle_lt_or_eq _ _ HH); intros HH2. red in HH2; rewrite HH2; auto with zarith. rewrite HH2, Z.compare_refl; auto with zarith. Qed. Definition scal_num (a : int) (n : number) : number := amd_num a 0 n. Lemma scal_correct a n : [scal_num a n] = (to_Z a * [n])%Z. Proof. unfold scal_num; rewrite amd_correct; nrom; ring. Qed. Fixpoint prod_num (m n : number) : number := match n with | nil => nil | a :: n1 => match scal_num a m with | nil => 0 :: prod_num m n1 | b :: n2 => b :: add_num n2 (prod_num m n1) end end. Lemma prod_correct m n : [prod_num m n] = ([m] * [n])%Z. Proof. induction n as [ | a n Hrec]; unfold prod_num; fold prod_num. nrom; ring. generalize (scal_correct a m); case scal_num; nrom. rewrite Hrec; intros HH. rewrite Zmult_plus_distr_r, (Zmult_comm [m]), (Zmult_comm [m]), <-HH; ring. intros i l; nrom; intros HH. rewrite add_correct, Hrec, Zmult_plus_distr_r, Zplus_assoc, HH; ring. Qed. Fixpoint exp_num (m : number) (n : nat) : number := match n with | O => 1 :: nil | S n1 => prod_num m (exp_num m n1) end. Lemma exp_correct m n: [exp_num m n] = Zpower_nat [m] n. Proof. induction n as [ | n Hrec]; unfold exp_num; fold exp_num. nrom; nrom; unfold Zpower_nat; simpl; auto. change (S n) with (1 + n)%nat; rewrite Zpower_nat_is_exp. rewrite prod_correct, Hrec; change (Zpower_nat [m] 1) with ([m] * 1)%Z. ring. Qed. Definition shift_num (t : number) : number := match t with nil => nil | a :: t1 => t1 end. Lemma shift_correct t : [shift_num t] = ([t] / wB)%Z. Proof. destruct t as [ | a t]; unfold shift_num; nrom. rewrite Zdiv_0_l; auto. case (to_Z_bounded a); nrom; intros H1a H2a. rewrite Zmult_comm, Z_div_plus_full; auto with zarith. rewrite Zdiv_small; auto with zarith. Qed. Section Reduce. Variable M : number. Variable m' : int. Hypothesis Hmm' : (to_Z (nhead M * m') = wB - 1)%Z. Lemma M_pos : (0 < [M])%Z. Proof. rewrite to_Z_head_tail. nrom; case (to_Z_bounded (nhead M)); nrom; intros H1a H2a. case (Zle_lt_or_eq _ _ H1a); intros H3a. assert (Hms := to_Z_pos (ntail M)). apply Z.lt_le_trans with (to_Z (nhead M) + wB * 0)%Z; auto with zarith. generalize Hmm'; rewrite mul_spec; nrom. rewrite <-H3a, Zmult_0_l, Zmod_0_l; auto with zarith. simpl; auto with zarith. Qed. Fixpoint reduce_aux_num (n : nat) (t : number) := match n with | O => t | S n1 => match t with | nil => t | a :: _ => reduce_aux_num n1 (shift_num (add_num t (scal_num (a * m') M))) end end. Lemma reduce_aux_step a t : ((to_Z a + wB * [t] + to_Z (a * m') * [M]) / wB * wB = to_Z a + wB * [t] + to_Z (a * m') * [M])%Z. Proof. case (to_Z_bounded a); nrom; intros H1a H2a. rewrite (to_Z_head_tail M); nrom. set (m := nhead M); set (ms := ntail M). replace (to_Z a + wB * [t] + to_Z (a * m') * (to_Z m + wB * [ms]))%Z with ((to_Z a + to_Z (a * m') * to_Z m) + ([t] + to_Z (a * m') * [ms]) * wB)%Z; try ring. rewrite Z_div_plus_full; auto with zarith. set (v := (to_Z a + to_Z (a * m') * to_Z m)%Z). assert (HH: (v / wB * wB = v)%Z). rewrite (Z_div_mod_eq_full v wB); auto with zarith. rewrite (Zmult_comm wB), Z_div_plus_full_l; auto with zarith. assert (HH: (v mod wB = 0)%Z); auto with zarith. unfold v; rewrite mul_spec; nrom. rewrite Zplus_mod, Zmult_mod, Zmod_mod, <- Zmult_mod, <- Zmult_assoc, Zmult_mod. unfold m. generalize Hmm'; rewrite mul_spec; nrom; intros HH1; rewrite (Zmult_comm (to_Z m')), HH1. rewrite (Zmult_mod (to_Z a mod wB)), Zmod_mod, <- Zmult_mod, <- Zplus_mod. replace (to_Z a + to_Z a * (wB - 1))%Z with (to_Z a * wB)%Z; try ring. rewrite Z_mod_mult; auto. rewrite Zmult_plus_distr_l, HH, Zdiv_0_l, Zmult_0_l, <-HH, Zmult_comm, <- Z_div_mod_eq_full; auto with zarith. rewrite Zmult_plus_distr_l, HH; unfold v. nrom; ring. Qed. Lemma reduce_aux_correct n t : ([reduce_aux_num n t] * (Zpower_nat wB n) mod [M] = [t] mod [M])%Z. Proof. generalize t; clear t. induction n as [ | n Hrec]; intros t. assert (HH := to_Z_pos t). simpl reduce_aux_num; repeat rewrite Zpower_nat_0; repeat rewrite Zmult_1_r; auto. repeat rewrite Zpower_nat_S. simpl reduce_aux_num; case t. nrom; rewrite Zmod_small, Zmult_0_l; auto with zarith. rewrite Zmult_0_l; auto with zarith. generalize M_pos; auto with zarith. intros a t1. rewrite (Zmult_comm wB), Zmult_assoc, Zmult_mod, Hrec, <- Zmult_mod, shift_correct, add_correct, scal_correct. nrom. rewrite reduce_aux_step, Zplus_mod, Z_mod_mult, Zplus_0_r, Zmod_mod; auto. Qed. Lemma reduce_aux_le n t : ([t] < [M] * (Zpower_nat wB n) -> [reduce_aux_num n t] < 2 * [M])%Z . Proof. intros Ht. assert (HH: (exists U, [reduce_aux_num n t] * Zpower_nat wB n = [t] + U * [M] /\ 0 <= U < Zpower_nat wB n)%Z). generalize t; clear t Ht; induction n as [ | n Hrec]; intros t. assert (HM := to_Z_pos M). simpl reduce_aux_num; repeat rewrite Zpower_nat_0; repeat rewrite Zmult_1_r; auto with zarith. exists 0%Z; auto with zarith. repeat rewrite Zpower_nat_S. assert (HH2 := Zpower_base_pos n). simpl reduce_aux_num; case t; nrom. exists 0%Z; split. auto with zarith. split. auto with zarith. apply Zmult_lt_0_compat. 2: assumption. red; auto. intros a t1; nrom. case (Hrec (shift_num (add_num (a :: t1) (scal_num (a * m') M)))). intros U (H1U, H2U); exists (to_Z(a * m') + wB * U)%Z; split. rewrite (Zmult_comm wB), Zmult_assoc, H1U, shift_correct, add_correct, scal_correct; nrom. rewrite Zmult_plus_distr_l, reduce_aux_step; ring. case (to_Z_bounded (a * m')); nrom; intros H1am H2am. split. auto with zarith. apply Z.lt_le_trans with (wB + wB * U)%Z. auto with zarith. replace (wB * Zpower_nat wB n)%Z with (wB + wB * (Zpower_nat wB n - 1))%Z by ring; auto with zarith. apply Zmult_gt_0_lt_reg_r with (1 := Z.lt_gt _ _ (Zpower_base_pos n)). case HH; intros U (H1U, H2U). rewrite H1U. assert (U * [M] < [M] * Zpower_nat wB n)%Z. rewrite Zmult_comm; apply Zmult_gt_0_lt_compat_l. apply Z.lt_gt; apply M_pos. auto with zarith. replace (2 * [M] * Zpower_nat wB n)%Z with ([M] * Zpower_nat wB n + [M] * Zpower_nat wB n)%Z; auto with zarith; ring. Qed. Definition reduce_num (n : nat) (t : number) : number := let res := reduce_aux_num n t in match cp_num res M with | Lt => res | _ => sub_num res M end. Lemma reduce_correct n t : ([reduce_num n t] * (Zpower_nat wB n) mod [M] = [t] mod [M])%Z. Proof. assert (H:= M_pos). assert (HH:= reduce_aux_correct n t). unfold reduce_num; case cp_spec; intros HH1; auto with zarith; rewrite sub_correct, Zmult_minus_distr_r; auto with zarith. rewrite (Zmult_comm [M]); unfold Zminus. rewrite Zopp_mult_distr_l, Z_mod_plus; auto with zarith. rewrite (Zmult_comm [M]); unfold Zminus. rewrite Zopp_mult_distr_l, Z_mod_plus; auto with zarith. Qed. Lemma reduce_bound n t : ([t] < [M] * (Zpower_nat wB n) -> 0 <= [reduce_num n t] < [M])%Z. Proof. intros Ht; split. apply to_Z_pos. assert (HH := reduce_aux_le _ _ Ht). unfold reduce_num; case cp_spec; intros HH1; auto with zarith; rewrite sub_correct; auto with zarith. Qed. Definition T n := reduce_num n (1%uint63::nil). Lemma Tn_correct n : ([T n] * (Zpower_nat wB n) mod [M] = 1 mod[M])%Z. Proof. unfold T; rewrite reduce_correct; nrom; nrom. rewrite Zmult_0_r, Zplus_0_r; auto with zarith. Qed. Lemma eq_Tn_correct a b n : ((a * Zpower_nat wB n) mod [M] = (b * Zpower_nat wB n) mod [M] -> a mod [M] = b mod [M])%Z. Proof. intros H. assert (HH: ((a - b) mod [M] = 0)%Z). rewrite <- (Zmult_1_r (a - b)), Zmult_mod, <- (Tn_correct n), <- Zmult_mod, (Zmult_comm [T n]), Zmult_assoc, Zmult_minus_distr_r, Zmult_mod, Zminus_mod, H, <- Zminus_mod, <- Zmult_mod, Zminus_diag, Zmult_0_l, Zmod_0_l; auto. replace a with (b + (a - b))%Z; try ring. rewrite Zplus_mod, HH, Zplus_0_r, Zmod_mod; auto. Qed. Fixpoint reduce_amd_aux_num (n : nat) (t1 t2 res : number) {struct n} := match n with | O => add_num res (prod_num t1 t2) | S n1 => match t1 with | nil => reduce_aux_num n res | a :: t3 => let res1 := add_num res (scal_num a t2) in match res1 with | nil => reduce_amd_aux_num n1 t3 t2 nil | b :: _ => reduce_amd_aux_num n1 t3 t2 (shift_num (add_num res1 (scal_num (b * m') M))) end end end. Lemma reduce_amd_aux_correct n t1 t2 res : (([reduce_amd_aux_num n t1 t2 res] * Zpower_nat wB n) mod [M] = ([t1] * [t2] + [res]) mod [M])%Z. Proof. generalize t1 t2 res; clear t1 t2 res. induction n as [ |n1 Hrec]; intros t1 t2 res; unfold reduce_amd_aux_num; fold reduce_amd_aux_num. rewrite Zpower_nat_0, Zmult_1_r, add_correct, prod_correct, Zplus_comm; auto. destruct t1 as [ | a t3]; nrom. rewrite Zmult_0_l, Zplus_0_l, reduce_aux_correct; auto. set (v := add_num res (scal_num a t2)). assert (Hv: [v] = ([res] + to_Z a * [t2])%Z). unfold v; rewrite add_correct, scal_correct; auto. generalize Hv; destruct v as [ | b v1]; nrom; clear Hv; intros Hv. rewrite Zpower_nat_S, (Zmult_comm wB), Zmult_assoc, Zmult_mod, Hrec. nrom; rewrite Zplus_0_r, <- Zmult_mod. apply f_equal2 with (f := Z.modulo); auto. rewrite <- Zminus_0_r, Hv; ring. rewrite Zpower_nat_S, (Zmult_comm wB), Zmult_assoc, Zmult_mod, Hrec. rewrite <- Zmult_mod, shift_correct, add_correct, scal_correct; nrom. rewrite Zmult_plus_distr_l, reduce_aux_step. rewrite Zplus_assoc, Z_mod_plus_full. apply f_equal2 with (f := Z.modulo); auto. rewrite Hv; ring. Qed. Lemma reduce_amd_aux_le n t1 t2 res : ([t1] < Zpower_nat wB n -> [t2] < [M] -> [res] < 2 * [M] - 1 -> [reduce_amd_aux_num n t1 t2 res] < 2 * [M])%Z. Proof. generalize t1 t2 res; clear t1 t2 res. induction n as [ |n1 Hrec]; intros t1 t2 res; unfold reduce_amd_aux_num; fold reduce_amd_aux_num. rewrite Zpower_nat_0; intros H1t1 Ht2 Hres. assert (H2t1 := to_Z_pos t1). rewrite add_correct, prod_correct. replace [t1] with 0%Z; auto with zarith. destruct t1 as [ | a t3]. intros _ Ht2 Hres. apply reduce_aux_le. apply Z.lt_le_trans with (1 := Hres). apply Z.le_trans with (2 * [M])%Z; auto with zarith. rewrite Zmult_comm. apply Zmult_le_compat_l. apply Z.le_trans with wB; try (red; discriminate). rewrite <- (Zmult_1_r wB) at 1; rewrite Zpower_nat_S. apply Zmult_le_compat_l. generalize (Zpower_base_pos n1); auto with zarith. red; discriminate. apply Zlt_le_weak; apply M_pos. nrom; intros Ht3 Ht2 Hres. set (v := add_num res (scal_num a t2)). assert (Hv: [v] = ([res] + to_Z a * [t2])%Z). unfold v; rewrite add_correct, scal_correct; auto. generalize Hv; destruct v as [ | b v1]; nrom; clear Hv; intros Hv. apply Hrec; auto with zarith. apply Zmult_lt_reg_r with wB; auto with zarith; try (red; auto; fail). repeat rewrite <- (Zmult_comm wB); apply Z.le_lt_trans with (2 := Ht3). case (to_Z_bounded a); auto with zarith. nrom; generalize M_pos; auto with zarith. apply Hrec; auto with zarith. apply Zmult_lt_reg_r with wB; auto with zarith; try (red; auto; fail). repeat rewrite <- (Zmult_comm wB); apply Z.le_lt_trans with (2 := Ht3). case (to_Z_bounded a); auto with zarith. rewrite shift_correct, add_correct, scal_correct; nrom. rewrite Hv. apply Zdiv_lt_upper_bound; try (red; auto; fail); auto with zarith. repeat apply Zplus_le_0_compat; repeat apply Zmult_le_0_compat; try apply to_Z_pos; try (red; discriminate). case (to_Z_bounded a); nrom; intros H1a H2a. case (to_Z_bounded (b * m')); nrom; intros H1bm H2bm. apply Z.le_lt_trans with (((2 * [M] - 2) + (wB - 1) * ([M] - 1) + (wB - 1) * [M])%Z). repeat apply Zplus_le_compat; auto with zarith. apply Zmult_le_compat; auto with zarith. apply to_Z_pos. apply Zmult_le_compat; auto with zarith. apply Zlt_le_weak; apply M_pos. ring_simplify; auto with zarith. Qed. Definition reduce_mult_num (n: nat) (t1 t2 : number) := let res := reduce_amd_aux_num n t1 t2 nil in match cp_num res M with | Lt => res | _ => sub_num res M end. Lemma reduce_mult_correct n t1 t2 : ([reduce_mult_num n t1 t2] * (Zpower_nat wB n) mod [M] = ([t1] * [t2]) mod [M])%Z. Proof. assert (H:= M_pos). generalize (reduce_amd_aux_correct n t1 t2 nil). nrom; rewrite Zplus_0_r; intros HH. unfold reduce_mult_num; case cp_spec; intros HH1; auto with zarith; rewrite sub_correct, Zmult_minus_distr_r; auto with zarith. rewrite (Zmult_comm [M]); unfold Zminus. rewrite Zopp_mult_distr_l, Z_mod_plus; auto with zarith. rewrite (Zmult_comm [M]); unfold Zminus. rewrite Zopp_mult_distr_l, Z_mod_plus; auto with zarith. Qed. Lemma reduce_mult_bound n t1 t2 : ([t1] < Zpower_nat wB n -> [t2] < [M] -> 0 <= [reduce_mult_num n t1 t2] < [M])%Z. Proof. intros Ht1 Ht2; split. apply to_Z_pos. assert (Hres: ([nil] < 2 * [M] - 1)%Z). nrom; generalize M_pos; auto with zarith. assert (HH := reduce_amd_aux_le _ _ _ _ Ht1 Ht2 Hres). unfold reduce_mult_num; case cp_spec; intros HH1; auto with zarith; rewrite sub_correct; auto with zarith. Qed. Definition r_square n := Z_to_num ((Zpower_nat wB n * Zpower_nat wB n) mod [M]). Lemma r_square_lt n : (0 <= [r_square n] < [M])%Z. Proof. unfold r_square. rewrite num_to_Z; auto with zarith. apply Z_mod_lt; auto with zarith. apply Z.lt_gt; apply M_pos. case (Z_mod_lt (Zpower_nat wB n * Zpower_nat wB n) [M]); auto with zarith. apply Z.lt_gt; apply M_pos. Qed. Definition encode n z : number := reduce_mult_num n (Z_to_num (z mod [M])) (r_square n). Definition decode n m := [reduce_num n m]. Variable n : nat. Hypothesis M_small : ([M] < Zpower_nat wB n)%Z. Let HF0 := M_pos. Let HF1: (0 <= (Zpower_nat wB n * Zpower_nat wB n) mod [M])%Z. Proof. case (Z.mod_pos_bound (Zpower_nat wB n * Zpower_nat wB n) [M]); auto with zarith. Qed. Lemma reduce_bound_small t : (0 <= [t] < [M] -> 0 <= [reduce_num n t] < [M])%Z. Proof. intros Ht; apply reduce_bound. case Ht; intros _ Ht1; apply Z.lt_le_trans with (1 := Ht1). rewrite <-(Zmult_1_r [M]) at 1. apply Zmult_le_compat_l; auto with zarith. Qed. Hint Resolve reduce_bound_small add_mod_bound sub_mod_bound : core. Lemma reduce_mult_bound_small t1 t2 : (0 <= [t1] < [M] -> 0 <= [t2] < [M] -> 0 <= [reduce_mult_num n t1 t2] < [M])%Z. Proof. intros Ht1 Ht2; apply reduce_mult_bound; auto with zarith. Qed. Hint Resolve reduce_mult_bound_small : core. Lemma encode_correct z : (0 <= z < [M] -> [encode n z] = (z * Zpower_nat wB n) mod [M])%Z. Proof. intros Hz. unfold encode; rewrite Zmod_small; auto with zarith. rewrite <-(Zmod_small _ [M]); auto with zarith. apply (eq_Tn_correct _ _ n). rewrite reduce_mult_correct. unfold r_square. rewrite !num_to_Z; auto with zarith. rewrite Zmult_mod, Zmod_mod, <-Zmult_mod, Zmult_assoc; auto with zarith. apply reduce_mult_bound_small; auto with zarith. rewrite num_to_Z; auto with zarith. unfold r_square. rewrite num_to_Z; auto with zarith. apply Z_mod_lt; auto with zarith. Qed. Lemma encode_bound z : (0 <= z < [M] -> 0 <= [encode n z] < [M])%Z. Proof. intros Hz. rewrite encode_correct; auto with zarith. apply Z_mod_lt; auto with zarith. Qed. Hint Resolve encode_bound : core. Lemma decode_encode p : (0 <= p < [M])%Z -> decode n (encode n p) = p. Proof. intros Hp. unfold decode, encode. assert (F1 : (0 <= [Z_to_num (p mod [M])] < [M])%Z). rewrite num_to_Z; auto with zarith. rewrite Zmod_small; auto with zarith. case (Z.mod_pos_bound p [M]); auto with zarith. assert (F2: ([Z_to_num (p mod [M])] < Zpower_nat wB n)%Z). apply (Z.lt_trans _ [M]); auto with zarith. assert (F3: ([r_square n] < [M])%Z). case (r_square_lt n); auto. generalize (reduce_mult_bound _ _ _ F2 F3); intros F4. rewrite <-(Zmod_small p [M]); auto with zarith. rewrite <-(Zmod_small _ [M]). apply (eq_Tn_correct _ _ n). rewrite reduce_correct. apply (eq_Tn_correct _ _ n). rewrite reduce_mult_correct. unfold r_square. rewrite !num_to_Z; auto with zarith. rewrite Zmod_mod, <-Zmult_mod, Zmult_assoc; auto. case (Z.mod_pos_bound (Zpower_nat wB n * Zpower_nat wB n) [M]); auto with zarith. case (Z.mod_pos_bound (p mod [M]) [M]); auto with zarith. case (Z.mod_pos_bound p [M]); auto with zarith. intros; apply reduce_bound_small. rewrite Zmod_mod; auto with zarith. Qed. Lemma decode_encode_add p1 p2 : (0 <= p1 < [M])%Z -> (0 <= p2 < [M])%Z -> decode n (add_mod M (encode n p1) (encode n p2)) = ((p1 + p2) mod [M])%Z. Proof. intros Hp1 Hp2. rewrite <-(Zmod_small _ [M]). apply (eq_Tn_correct _ _ n). unfold decode; rewrite reduce_correct. rewrite add_mod_correct; auto with zarith. rewrite !encode_correct; auto with zarith. rewrite <-Zplus_mod, Zmod_mod, Zmult_plus_distr_l; auto with zarith. unfold decode; auto with zarith. Qed. Lemma decode_encode_sub p1 p2 : (0 <= p1 < [M])%Z -> (0 <= p2 < [M])%Z -> decode n (sub_mod M (encode n p1) (encode n p2)) = ((p1 - p2) mod [M])%Z. Proof. intros Hp1 Hp2. rewrite <-(Zmod_small _ [M]). apply (eq_Tn_correct _ _ n). unfold decode; rewrite reduce_correct. rewrite sub_mod_correct; auto with zarith. rewrite !encode_correct; auto with zarith. rewrite <-Zminus_mod, Zmod_mod, Zmult_minus_distr_r; auto with zarith. unfold decode; auto with zarith. Qed. Lemma decode_encode_mult p1 p2 : (0 <= p1 < [M])%Z -> (0 <= p2 < [M])%Z -> decode n (reduce_mult_num n (encode n p1) (encode n p2)) = ((p1 * p2) mod [M])%Z. Proof. intros Hp1 Hp2. rewrite <-(Zmod_small _ [M]). apply (eq_Tn_correct _ _ n). unfold decode; rewrite reduce_correct. apply (eq_Tn_correct _ _ n). rewrite reduce_mult_correct. rewrite !encode_correct by auto with zarith. rewrite <-Zmult_mod. apply f_equal2 with (f := Z.modulo). ring. reflexivity. unfold decode; auto with zarith. Qed. End Reduce.