Re: [isabelle-dev] Remaining uses of Proof General?
On 25 Jul 2014, at 10:23 am, Makarius makar...@sketis.net wrote: Oddly, people are still seen using 'find_theorems' etc. inlined into the source text. That was an intermediate approach from several years ago. If it is still used today, what are the remaining resons for it? Not having to touch the mouse is the main reason for me why I still use thm, find_theorems, sledgehammer etc commands. Cheers, Gerwin The information in this e-mail may be confidential and subject to legal professional privilege and/or copyright. National ICT Australia Limited accepts no liability for any damage caused by this email or its attachments. ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 25 Jul 2014, Gerwin Klein wrote: On 25 Jul 2014, at 10:23 am, Makarius makar...@sketis.net wrote: Oddly, people are still seen using 'find_theorems' etc. inlined into the source text. That was an intermediate approach from several years ago. If it is still used today, what are the remaining resons for it? Not having to touch the mouse is the main reason for me why I still use thm, find_theorems, sledgehammer etc commands. Does that actually refer to Isabelle2014-RC0, or some older version? I have reworked the focus handling such that the panels that require some input move the focus in the right spot. It should be also possible to define some keyboard shotcurts to activate the panel in question. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On 25 Jul 2014, at 11:20 am, Makarius makar...@sketis.net wrote: On Fri, 25 Jul 2014, Gerwin Klein wrote: On 25 Jul 2014, at 10:23 am, Makarius makar...@sketis.net wrote: Oddly, people are still seen using 'find_theorems' etc. inlined into the source text. That was an intermediate approach from several years ago. If it is still used today, what are the remaining resons for it? Not having to touch the mouse is the main reason for me why I still use thm, find_theorems, sledgehammer etc commands. Does that actually refer to Isabelle2014-RC0, or some older version? My motivation (keyboard-only use) is the same for both. I have reworked the focus handling such that the panels that require some input move the focus in the right spot. It should be also possible to define some keyboard shotcurts to activate the panel in question. Yes, but typing find_theorems is fast, esp with completion and needs no further setup or visual context switching. I don’t actually have any problem with either option, I’m just finding myself using the explicit diagnostic commands still fairly often instead of the panels because of that. For demos, I use the panels much more often. Cheers, Gerwin The information in this e-mail may be confidential and subject to legal professional privilege and/or copyright. National ICT Australia Limited accepts no liability for any damage caused by this email or its attachments. ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Sun, 29 Jun 2014, Cezary Kaliszyk wrote: Hi Makarius, On Thu, Jun 26, 2014 at 11:08 PM, Makarius makar...@sketis.net wrote: At the moment (06599233e54e) there are no remaining uses of Proof General to the best of my knowledge. If anybody has counter-examples they should be put on the table for discussion. I am using Isabelle via ProofGeneral on a server without X. I do not know of a way to run JEdit without X. Some of my uses of Isabelle need as much as 100GB memory (and I also make use of the parallelization to much more CPUs than my laptop has), so I need to work sshed to the server. There is no way to run jEdit without graphical display: it is a GUI application. I remember myself using Proof General Emacs in TTY mode 10-15 years ago, but stopped that eventually, because it did not display all relevant information. So I count this mode of working as mere nostalgy. The actual requirement here is to use a local display with a remote server machine for the heavy work of the prover. Proof General used to have a rsh connection for that, but I wonder if it still works in current versions. Today one would probably make an ssh connection between a local Isabelle/jEdit front-end and a remote prover process back-end, within Isabelle/Scala. That is somehow possible, but I avoided spending time on it so far for lack of practical relevance: hardly anybody ever pointed out this known omission in the last 5 years. Thus it got close to the bottom on the TODO list. Another approach is to use a remote display protocol, and run the full Prover IDE remotely. This does not quite work for X11, though, since that protocol is hardly usable for remote displays today, and Java/AWT/Swing applications are particularly bad. Since I know 1-2 other people with the same problem, one could spend some time to work out a solution: a contemporary way to have a remote display connection that works with a remote Prover IDE. The main areas to look are RDP or VNC, not X11. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
Hi Makarius, On Thu, Jun 26, 2014 at 11:08 PM, Makarius makar...@sketis.net wrote: At the moment (06599233e54e) there are no remaining uses of Proof General to the best of my knowledge. If anybody has counter-examples they should be put on the table for discussion. I am using Isabelle via ProofGeneral on a server without X. I do not know of a way to run JEdit without X. Some of my uses of Isabelle need as much as 100GB memory (and I also make use of the parallelization to much more CPUs than my laptop has), so I need to work sshed to the server. Cheers, Cezary Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev -- Cezary Kaliszyk, University of Innsbruck, http://cl-informatik.uibk.ac.at/~cek/ ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On 27.06.2014 23:47, Makarius wrote: Just a side remark: in the repository version we are talking about, and thus the coming release, ML in auxiliary files works smoothly and often better than the ML blocks, because the file gets its own ML mode. For ML files, I occasionally had the problem that hovering would not work. It usually recovered after some time. I haven't been able to pin it down to a certain situation yet. The file in question has around 400-500 lines. I /think/, this refers to d3d91422f4 (haven't worked enough with later revisions yet). It might be coincidence, but I haven't encountered this behaviour with ML blocks yet. -- Lars ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On 27.06.2014 07:52, John Wickerson wrote: Moreover, I would like an incremental search, but there is probably a jEdit pluging somewhere? (Probably with the same problems of entering non-ASCII characters) There is already an incremental search, but by default it has no keyboard shortcut. Myself, I have re-bound Ctrl-F to Incremental Search Bar, and am quite happy with that. (This is in jEdit's Global Options, then Shortcuts.) I'm pretty sure this is bound to Alt-, by default. -- Lars ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 27 Jun 2014, Peter Lammich wrote: I have compiled a list of problems that I encountered during my work. OK, I will go through it one by one to eliminate them -- either by pointing out known ways how to do it in Isabelle/jEdit, or by fine-tuning the system in this stage before the release. Power users of Isabelle/jEdit are encouraged to contribute their own expertise, while keeping in mind that we are presently on a particular repository snapshot context. Some general things are better discussed separately on isabelle-users; there will be also a follow-up thread next week for Isabelle2014-RC0 where a broader audience can participte. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 27 Jun 2014, Peter Lammich wrote: My overall impression is that Isabelle/jEdit is usable but much less mature than PG: It does not scale well to large projects, and tends to be unstable. It has many cool advanced features, but lacks important basic ones. Better reverse all that, just to simplify your life. There might be technological fine points, but the big problems are phsychological ones. You need to leave PG behind and adopt a quite different system. However, in my opinion, Isabelle/jEdit is approaching a level of maturity required for production use, once the user knows about its deficits and how to avoid them. That is also a tautology: PG has tons of deficits, but working around them has become second nature to long-term users. In Isabelle/jEdit you need to get used to different behaviour, and make yourself productive with it. *Any* system is just crap, but in different ways. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 27 Jun 2014, Peter Lammich wrote: SCALABILITY STABILITY: * Isabelle/jEdit gets really slow and unresponsive when many files are loaded (you have to wait seconds for a keystroke to show its effect). As all prerequisite theories (not in an image) are automatically loaded, this is unavoidable. In PG, it's no problem to load a theory with many prerequisites, nor to have many buffers open simultaneously. NOTE: This problem could be solved in my case by 1) giving jEdit a ridiculously large amount of heap space (4Gb) and, 2) using images for prerequisite theories. There is a conceptual difference here: PG edits only a single file, but the Prover IDE a whole project. This usually works, if the resources that are available on current hardware is actually used. A JVM heap space of 4 GB is not ridiculously large, but perfectly normal -- a cheap high-end laptop as at least 8 GB. On my 5 years old workstation, I use 4-8 GB JVM heap routinely. The l4.verified project has reported 16 GB of JVM heap requirements, which I would call quite reasonable for such a large thing. If there are remaining resource problems, they need to be backed-up by proper experimental data: hardware parameters, Poly/ML memory options, JVM memory options, concrete examples etc. It does not make sense to use Isabelle/jEdit in a way that PG was used 10 years ago, concerning these important side-conditions. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 27 Jun 2014, Peter Lammich wrote: * Isabelle/jEdit does not scale to large files. Error markers on the right side are only displayed for a context around the current cursor position. There seems to be no way to jump to the error position. If the error happens to be displayed as a red bar on the right side of the editor area, pixel-accurate mousing is required to jump to the error, and not to a position dozens of lines away. This needs more specific information about the experimental setup. What means large? Where were the errors coming from? The so-called text overview column is indeed a performance bottle-neck. It is restricted by default to a portion of the text buffer, to avoid problems with real-time rendering of exessivley large files. See also the system option jedit_text_overview_limit -- its default value 65536 is some kind of insider-joke. You can try to enlarge that a bit, depending on your hardware performance. That clickable area is convenient, but not strictly necessary. It is absent in PG anyway. Whenever the Prover IDE outputs an error message, e.g. in tooltips or the Output panel, it includes the source position information, *if* that is available. In the repository versions we are talking about here, there is a \here symbol that is rendered as a Unicode house (for home position). It replaces the textual representation from the past TTY era: (line 42 of file foo). That symbol can be used as hyperlink using the normal PIDE idioms. If the latter is missing, their might be a problem with the tool that emitted the error message. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 27 Jun 2014, Peter Lammich wrote: * Isabelle/jEdit seems to be quite unstable. Within one week, it happened several (3 or 4) times that the whole thing just became unresponsive, and had to be restarted to continue work. In PG, those things happen perhaps once in a month. The default guess is that the JVM has too little heap space. You have called 4 GB unreasonably large before, which is an indication that your defaults are far too low. If problems happen again with 4-8 GB JVM heap, you should describe what really happens, with clear experimental setup. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 27 Jun 2014, Peter Lammich wrote: * Isabelle/jEdit does not support highlighting of paranthesis in the output window (it does work in PG!). This is an essential feature to read bigger goal states. Moreover, the output buffer does not support middle-mouse-button copy-and-paste on my ubuntu-box, while it perfectly works in the editor window. PG uses Emacs with its everything is a buffer model; Isabelle/jEdit uses jEdit + Java/AWT/Swing, with slightly different side-conditions. Both have sometimes advantages, and sometimes disadvantages. The middle-mouse-button is an ancient X11 idiom that no other platform knows, and Swing does not support it. The jEdit guys have retrofitted that ocasionally useful idiom to the standard jEdit text area, but it is absent in regular Swing GUI components. You get other benefits from the more standard and less Unix/X11-centric approach in jEdit; it just needs more practice to discover the wealth jEdit features. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 27 Jun 2014, Peter Lammich wrote: * Long list of warnings, e.g. duplicate simp rule, or tracing messages produced by a method appear before the subgoals in the output, and thus makes them inaccessible without lots of scrolling. This feature is a real flow-stopper when exploring proofs. In PG, it is possible to have separate buffers for the goal-state, the tracing, and the warning messages, thus you always see the current subgoal you are working on without scrolling down some buffer every time. Just a few hints: * Regular messages (writeln, warning, error) also appear in the squiggly rendering of the sources, to be hovered over and inspected without scrolling *the* Output. There is in fact no reason to have just one (or two or three) focal points for certain printed results, like in TTY / PG. * Tracing is a different topic -- it was never really sorted out satisfactorily in the history of PG. More than 1 year ago, Lars Hupel made some efforts for modernized tracing in PIDE, but it got seriously encumbered by PG legacy. It still needs to be revisited just before the Isabelle2014, to see if it can be made ready for prime time. I don't see any show-stoppers here. Just more potential for refinements, when PG is discarded. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
That clickable area is convenient, but not strictly necessary. It is absent in PG anyway. Whenever the Prover IDE outputs an error message, e.g. in tooltips or the Output panel, it includes the source position information, *if* that is available. The problem is, that I cannot make the output panel display the error message, or get a tooltip on the error message, without *first* locating its position in the editor window!? Following example: Slightly change the simpset, and try to load $AFP/Automatic_Refinement/Lib/Misc.thy, a 4400 lines beast. Change the simpset so that it fails somewhere in the middle of the theory. I only see a red mark in the theory-panel, but how do I navigate to the error location? In PG, I actually saw file-name/line-number/error-message. In Isabelle/jEdit, the only way I know is to open the file, hope that the text-overview column displays the error already, and try a precise mouse-click to get to the location. If the error-column does not display the error, because it is not within the limit, I have to scroll through the file manually. So am I missing some feature here that makes the workflow Navigate to an error in a theory file simpler? -- Peter ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
The default guess is that the JVM has too little heap space. You have called 4 GB unreasonably large before, which is an indication that your defaults are far too low. OK, I'll try more on my 8Gb machine ... or upgrade my machine. If problems happen again with 4-8 GB JVM heap, you should describe what really happens, with clear experimental setup. Giving a clear experimental setup is a real problem for errors that appear nondeterministically. ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 27 Jun 2014, Peter Lammich wrote: * If sledgehammer (both over panel and as command) is running, further processing of the file is blocked/very slow. Thus, it is not possible to run sledgehammer and, in parallel, continue exploration to find your own proof. In PG, parallel sledgehammering works, and I used it extensively. In Isabelle/jEdit I now think twice before I invoke sledgehammer, because it just interrupts my workflow and I have to wait for it to finish staring at the sledgehammer-window and doing nothing. This sounds like some serious performance problem, and requires proper reports on your hardware and system parameters. In Isabelle2014 the Sledgehammer integration is in its third generation. It is supposed to work without problems. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 27 Jun 2014, Peter Lammich wrote: * Isabelle/jEdit cannot open a theory-file without processing it. This is in particular a problem when porting stuff and opening the original version of the same file to look something up. Even worse: Once opened, you cannot close the file again, and it will remain in the theory panel (with an error marker) until you quit jEdit. You can in principle switch off the continous checking, e.g. in the Theories panel. Slight inconveniences and potential for improvements remain, but this is no show stopper as far as I can tell. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 27 Jun 2014, Peter Lammich wrote: Moreover, I would like an incremental search, but there is probably a jEdit pluging somewhere? (Probably with the same problems of entering non-ASCII characters) Other people have given some hints already. You should also take the time to *print* and *read* the original jEdit user's guide, e.g. see http://www.jedit.org/index.php?page=docs. It is a very powerful editor, and Emacs looks really awkward compared to it. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fr, 2014-06-27 at 13:58 +0200, Makarius wrote: On Fri, 27 Jun 2014, Peter Lammich wrote: * Long list of warnings, e.g. duplicate simp rule, or tracing messages produced by a method appear before the subgoals in the output, and thus makes them inaccessible without lots of scrolling. This feature is a real flow-stopper when exploring proofs. In PG, it is possible to have separate buffers for the goal-state, the tracing, and the warning messages, thus you always see the current subgoal you are working on without scrolling down some buffer every time. Just a few hints: * Regular messages (writeln, warning, error) also appear in the squiggly rendering of the sources, to be hovered over and inspected without scrolling *the* Output. There is in fact no reason to have just one (or two or three) focal points for certain printed results, like in TTY / PG. * Tracing is a different topic -- it was never really sorted out satisfactorily in the history of PG. More than 1 year ago, Lars Hupel made some efforts for modernized tracing in PIDE, but it got seriously encumbered by PG legacy. It still needs to be revisited just before the Isabelle2014, to see if it can be made ready for prime time. I don't see any show-stoppers here. Just more potential for refinements, when PG is discarded. These hints do not adress the problem! During proving, I want to see the goal state in first place, not the errors/warnings/etc. If I have to use the mouse and scroll down to the goal state every time I change something, this really interrupts the working flow during proof development. Once I have finished the proof, I am interested in the error and warning messages, and really appreciate the tooltips on the squiggly lines. -- Peter ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 27 Jun 2014, Peter Lammich wrote: * When theories have inconsistent file/theory name, you will only find the error by stepwise going back the chain of bad theory - errors, file by file. This is simply tedious. In PG, you got a backtrace in the output, and could immediately identify the broken file. I need to postpone this, to see if there is anything significant behind it. There are indeed slight inconveniences in re-arranging theory file names, but I did not see much of that in the past few years of routine use of Isabelle/jEdit (e.g. for Isabelle + AFP maintenance). Note that the Theories panel is the main point to look over a whole project, to see its status -- assuming that the basic project structure is right. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 27 Jun 2014, Peter Lammich wrote: * Auto-Completion does not really work. You have to decide for a completion delay. If you choose it too short, some completions will not appear at all. If you choose it too long, it interrupts your typing flow when entering special characters. In PG, there is no context-sensitive completion at all ... the one in jedit is actually not usable without tolerating .5sec completion delay on every special character you want to type) Moreover, the completion mechanism for entering special characters seems not to be as mature as the one in PG was: When entering sequences that should be completed, e.g., \lambda, this only works if there are no characters behind. All in all, I am typing significantly more to enter special characters than I did in PG. This belongs to the long completion thread we've had some weeks ago. You do need to change your practices of typing. Moreover you do need to find completion options that work for you. There might be even some kind of retro legacy setup that imitates old PG behaviour to some extent, but I leave it to others to find this out. I can only say that I am myself typing less and less in recent years, but I am biased, since I know many fine-points of how it really works. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 27 Jun 2014, Peter Lammich wrote: * Disappearing Proofs in PG is a really nice feature to keep overview, in particular in larger files. In PG, I used it heavily. There is nothing similar in Isabelle/jEdit. Code-folding can be used to a certain extent, but it cannot handle apply-style proofs, and is not applied automatically as in PG. Moreover, code-folding still seems not to work properly: Sometimes, fold-markers simply do not appear, sometimes they appear at completely wrong places. I'm not sure whether this is a non-deterministic effect, or depends on some garbage text at the end of the theory file. jEdit has some fold support, but the Isabelle/jEdit version of it is still in the adhoc state of 2010, i.e. very basic and hardly usable. I tried again for the coming release to make more of this work, but I got entangled into too many other problems. This is also the reason, why I have started to spend signigicant time to make a clear slate, and eliminate the remaining uses of Proof General first. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 27 Jun 2014, Peter Lammich wrote: If problems happen again with 4-8 GB JVM heap, you should describe what really happens, with clear experimental setup. Giving a clear experimental setup is a real problem for errors that appear nondeterministically. The first thing is to describe the starting conditions: * Precise CPU model + memory size * Operating system * ML options (heap size, threads) * JVM options (heap size) The second thing to point the the examples that were used, and give some hints about the concrete situation. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 27 Jun 2014, Peter Lammich wrote: * Regular messages (writeln, warning, error) also appear in the squiggly rendering of the sources, to be hovered over and inspected without scrolling *the* Output. There is in fact no reason to have just one (or two or three) focal points for certain printed results, like in TTY / PG. * Tracing is a different topic -- it was never really sorted out satisfactorily in the history of PG. More than 1 year ago, Lars Hupel made some efforts for modernized tracing in PIDE, but it got seriously encumbered by PG legacy. It still needs to be revisited just before the Isabelle2014, to see if it can be made ready for prime time. I don't see any show-stoppers here. Just more potential for refinements, when PG is discarded. These hints do not adress the problem! During proving, I want to see the goal state in first place, not the errors/warnings/etc. If I have to use the mouse and scroll down to the goal state every time I change something, this really interrupts the working flow during proof development. We should look at this together at VSL 2014, such that I see how your present workflow works. PG has forced a certain model onto the proof assistant in 1998, and I adapted to that faithfully in 1999, without ever understanding the real policies. This caused many problems, and in PIDE there is hardly anything about such policies: all messages are appended in some canonical order produced by the system. As I have pointed out in my presentation at TUM last december, I would like to see some kind of Preview of such document state information eventually. But that is music the future, as Florian Haftmann would say. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 27 Jun 2014, Makarius wrote: On Fri, 27 Jun 2014, Peter Lammich wrote: * If sledgehammer (both over panel and as command) is running, further processing of the file is blocked/very slow. Thus, it is not possible to run sledgehammer and, in parallel, continue exploration to find your own proof. In PG, parallel sledgehammering works, and I used it extensively. In Isabelle/jEdit I now think twice before I invoke sledgehammer, because it just interrupts my workflow and I have to wait for it to finish staring at the sledgehammer-window and doing nothing. This sounds like some serious performance problem, and requires proper reports on your hardware and system parameters. In Isabelle2014 the Sledgehammer integration is in its third generation. It is supposed to work without problems. This appears to be again one of these problems are kept secret situation that has made Isabelle2013-1 a failure, and left many questions after Isabelle2013-2 if the Isabelle release process still works. It is important to note that I don't have any first-hand access to power users who do serious testing. I do depend on proper problem reports, beyond there is a bug, it does not work. Otherwise we need to stop making Isabelle releases. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fr, 2014-06-27 at 14:22 +0200, Makarius wrote: On Fri, 27 Jun 2014, Peter Lammich wrote: If problems happen again with 4-8 GB JVM heap, you should describe what really happens, with clear experimental setup. Giving a clear experimental setup is a real problem for errors that appear nondeterministically. The first thing is to describe the starting conditions: * Precise CPU model + memory size vendor_id : GenuineIntel cpu family : 6 model : 42 model name : Intel(R) Core(TM) i7-2720QM CPU @ 2.20GHz stepping: 7 microcode : 0x1a cpu MHz : 2194.940 cache size : 6144 KB physical id : 0 siblings: 8 core id : 0 cpu cores : 4 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid bogomips: 4389.88 clflush size: 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: + 8Gb of memory, 8Gb of swap space * Operating system Distributor ID: Ubuntu Description:Ubuntu 12.04.4 LTS Release:12.04 Codename: precise * ML options (heap size, threads) ML_IDENTIFIER=polyml-5.5.2_x86-linux POLYML_HOME=/home/lammich/.isabelle/contrib/polyml-5.5.2 ML_SYSTEM=polyml-5.5.2 ML_PLATFORM=x86-linux ML_OPTIONS=-H 500 ISABELLE_POLYML=true * JVM options (heap size) JEDIT_JAVA_OPTIONS=-Xms2048m -Xmx4096m -Xss4m I also attached the output of isabelle getenv -a The second thing to point the the examples that were used, and give some hints about the concrete situation. I will try to remember those if it occurs next. By the way, another Isabelle/jEdit user at our chair pointed out a workaround if things seem to be frozen: Just go the beginning of the current file and make a change there ... this usually wakes up the IDE again. -- Peter LC_PAPER=de_DE.UTF-8 ISABELLE_TMP_PREFIX=/tmp/isabelle-lammich CVC3_REMOTE_SOLVER=cvc3 SSH_AGENT_PID=1991 LC_ADDRESS=de_DE.UTF-8 LC_MONETARY=de_DE.UTF-8 ISABELLE_ATP=/home/lammich/devel/Isabelle-devel/src/HOL/Tools/ATP ML_IDENTIFIER=polyml-5.5.2_x86-linux ISABELLE_FONTS=/home/lammich/devel/Isabelle-devel/lib/fonts/IsabelleText.ttf:/home/lammich/devel/Isabelle-devel/lib/fonts/IsabelleTextBold.ttf JEDIT_HOME=/home/lammich/devel/Isabelle-devel/src/Tools/jEdit Z3_NEW_SOLVER=/home/lammich/.isabelle/contrib/z3-4.3.2pre-1/x86_64-linux/z3 GPG_AGENT_INFO=/tmp/keyring-my6CuJ/gpg:0:1 JEDIT_SYSTEM_OPTIONS=-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dapple.laf.useScreenMenuBar=true -Dapple.awt.application.name=Isabelle MIRABELLE_THEORY=Main EXEC_PROCESS=/home/lammich/.isabelle/contrib/exec_process-1.0.3/x86_64-linux/exec_process KODKODI_PLATFORM=x86-linux SHELL=/bin/bash TERM=xterm ISABELLE_BUILD_JAVA_OPTIONS=-Xmx1024m -Xss1m XDG_SESSION_COOKIE=e98a42690e78d743ed7935360007-1403084616.517570-346887857 ISABELLE_IDENTIFIER= ISABELLE_COMPONENTS_MISSING= ISABELLE_JDK_HOME=/home/lammich/.isabelle/contrib/jdk-8u5/x86_64-linux ISABELLE_MAKEINDEX=makeindex Z3_NEW_HOME=/home/lammich/.isabelle/contrib/z3-4.3.2pre-1/x86_64-linux ISABELLE_PROCESS=/home/lammich/devel/Isabelle-devel/bin/isabelle_process Z3_NEW_INSTALLED=yes ISABELLE_JAVA_EXT=/home/lammich/.isabelle/contrib/jdk-8u5/x86_64-linux/jre/lib/ext LC_NUMERIC=de_DE.UTF-8 WINDOWID=67827196 ISABELLE_DOCS_RELEASE_NOTES=ANNOUNCE:README:NEWS:COPYRIGHT:CONTRIBUTORS:contrib/README:README_REPOSITORY MIRABELLE_TIMEOUT=30 GNOME_KEYRING_CONTROL=/tmp/keyring-my6CuJ ISABELLE_BIBTEX=bibtex DVI_VIEWER=xdg-open Z3_REMOTE_SOLVER=z3 REPLY= ISABELLE_SETTINGS_PRESENT=true ISABELLE_BUILD_OPTIONS= MUTABELLE_IMPORT_THEORY=Complex_Main POLYML_HOME=/home/lammich/.isabelle/contrib/polyml-5.5.2 Z3_COMPONENT=/home/lammich/.isabelle/contrib/z3-3.2-1 GTK_MODULES=canberra-gtk-module:canberra-gtk-module ISABELLE_PLATFORM_FAMILY=linux ISABELLE_SLEDGEHAMMER_MASH=/home/lammich/devel/Isabelle-devel/src/HOL/Tools/Sledgehammer/MaSh ISABELLE_PATH=/home/lammich/.isabelle/heaps:/home/lammich/devel/Isabelle-devel/heaps USER=lammich ML_SYSTEM=polyml-5.5.2 LC_TELEPHONE=de_DE.UTF-8
Re: [isabelle-dev] Remaining uses of Proof General?
Some more explanations on the meta-model of this thread: * We have about 1 week left on isabelle-dev, to discuss whatever might prevent using Isabelle/jEdit smoothly, and why people fall-back on PG as a reflex. * Then there will be Isabelle2014-RC0, as a published release candidate, but *without* forking the Isabelle repository yet. The same question and discussion will continue on isabelle-users, for that version, and as anticipation for Isabelle2014. * Then there will be VSL 2014 at Vienna, with the Isabelle workshop, ITP, UITP and more. I am myself around 13..18-Jul-2014 (inclusive interval). People can show me things personally, to see where the remaining snags are. * Then we are heading towards the Isabelle2014 release, with the normal Isabelle2014-RC1 and *with* forked repository, shortly after the ITP/UITP week of VSL. People who are staying themselves longer at VSL and are involved in the Isabelle2014 lift-off need to keep this in mind: after the fork changes need to be sent to me, not pushed onto the main Isabelle repository. Some time after the release fork, we can look again what the present answer to the ultimate question is: Are there remaining uses of Proof General, or is Isabelle2014 the last release that supports it? (Hopefully not: Is Isabelle2014 the last release ever?) The Isar TTY loop and its Proof General add-on has become a big burden in recent years -- both are essentially legacy. So it is worth spending extra time to deal with this seriously. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 27 Jun 2014, Peter Lammich wrote: * Writing tools in ML (ML-blocks in thy-file) Just a side remark: in the repository version we are talking about, and thus the coming release, ML in auxiliary files works smoothly and often better than the ML blocks, because the file gets its own ML mode. There is nothing wrong about ML blocks, just an equal balance between 'ML' and 'ML_file' to choose whatever fits best the size of the ML code module. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
This is a reminder that this thread is still open, until the end of next week when the question will be moved to isabelle-users, with the appearance of Isabelle2014-RC0 (that will be published from the running repository *without* a repository fork yet). At the moment (06599233e54e) there are no remaining uses of Proof General to the best of my knowledge. If anybody has counter-examples they should be put on the table for discussion. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
Hi all. I have given Isabelle/jEdit another try and worked with it for almost two weeks, on different tasks: * Porting the CAVA afp entries (depending on 300 theory files) from 2013-2 to devel. * Formalizations and proof development (The standard usage) * Writing tools in ML (ML-blocks in thy-file) I have compiled a list of problems that I encountered during my work. I have added descriptions to how PG solved these problems. The problem report here refers to Isabelle version 2ccd6820f74e. My overall impression is that Isabelle/jEdit is usable but much less mature than PG: It does not scale well to large projects, and tends to be unstable. It has many cool advanced features, but lacks important basic ones. However, in my opinion, Isabelle/jEdit is approaching a level of maturity required for production use, once the user knows about its deficits and how to avoid them. I will continue using Isabelle/jEdit for a few more weeks, hoping that a few more basic features will be added/fixed before the next release ... SCALABILITY STABILITY: * Isabelle/jEdit gets really slow and unresponsive when many files are loaded (you have to wait seconds for a keystroke to show its effect). As all prerequisite theories (not in an image) are automatically loaded, this is unavoidable. In PG, it's no problem to load a theory with many prerequisites, nor to have many buffers open simultaneously. NOTE: This problem could be solved in my case by 1) giving jEdit a ridiculously large amount of heap space (4Gb) and, 2) using images for prerequisite theories. * Isabelle/jEdit does not scale to large files. Error markers on the right side are only displayed for a context around the current cursor position. There seems to be no way to jump to the error position. If the error happens to be displayed as a red bar on the right side of the editor area, pixel-accurate mousing is required to jump to the error, and not to a position dozens of lines away. In PG, you could always jump to the position where processing failed by Ctrl-. . Moreover, you got error messages with file names and line numbers, that you could use to navigate to the error position easily. * Isabelle/jEdit seems to be quite unstable. Within one week, it happened several (3 or 4) times that the whole thing just became unresponsive, and had to be restarted to continue work. In PG, those things happen perhaps once in a month. IMPORTANT FEATURES THAT ARE MISSING OVERLY TEDIOUS WORKFLOWS * Isabelle/jEdit does not support highlighting of paranthesis in the output window (it does work in PG!). This is an essential feature to read bigger goal states. Moreover, the output buffer does not support middle-mouse-button copy-and-paste on my ubuntu-box, while it perfectly works in the editor window. * Long list of warnings, e.g. duplicate simp rule, or tracing messages produced by a method appear before the subgoals in the output, and thus makes them inaccessible without lots of scrolling. This feature is a real flow-stopper when exploring proofs. In PG, it is possible to have separate buffers for the goal-state, the tracing, and the warning messages, thus you always see the current subgoal you are working on without scrolling down some buffer every time. * If sledgehammer (both over panel and as command) is running, further processing of the file is blocked/very slow. Thus, it is not possible to run sledgehammer and, in parallel, continue exploration to find your own proof. In PG, parallel sledgehammering works, and I used it extensively. In Isabelle/jEdit I now think twice before I invoke sledgehammer, because it just interrupts my workflow and I have to wait for it to finish staring at the sledgehammer-window and doing nothing. * Isabelle/jEdit cannot open a theory-file without processing it. This is in particular a problem when porting stuff and opening the original version of the same file to look something up. Even worse: Once opened, you cannot close the file again, and it will remain in the theory panel (with an error marker) until you quit jEdit. In PG, it is no problem to open a file without processing it. * The standard search (Ctrl-F) function does not allow to enter non-ASCII characters at all. This is a real show-stopper if you search for a text containing such characters. In PG, you could at least use \... - tokens to enter non-ASCII characters. Moreover, I would like an incremental search, but there is probably a jEdit pluging somewhere? (Probably with the same problems of entering non-ASCII characters) * When theories have inconsistent file/theory name, you will only find the error by stepwise going back the chain of bad theory - errors, file by file. This is simply tedious. In PG, you got a backtrace in the output, and could immediately identify the broken file. * Auto-Completion does not really work. You have to decide for a completion delay. If you choose it too short, some completions will not appear at all. If you
Re: [isabelle-dev] Remaining uses of Proof General?
Great list Peter! * The standard search (Ctrl-F) function does not allow to enter non-ASCII characters at all. This is a real show-stopper if you search for a text containing such characters. In PG, you could at least use \... - tokens to enter non-ASCII characters. Moreover, I would like an incremental search, but there is probably a jEdit pluging somewhere? (Probably with the same problems of entering non-ASCII characters) There is already an incremental search, but by default it has no keyboard shortcut. Myself, I have re-bound Ctrl-F to Incremental Search Bar, and am quite happy with that. (This is in jEdit's Global Options, then Shortcuts.) John ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
(For now the list of Remaining uses of Proof General / Emacs seems to be empty. If there is anything remaining, this thread is still open to submissions.) Let me make this list nonempty again. In the course of a day, I typically find myself pulling from the Isabelle repository several times. I am encouraged in this by my use of Mercurial queues. So it's not untypical that my HOL image is slightly out of date, usually in a harmless way. Sometimes I fire up Proof General just because I know it will take the image as is instead of forcing me to rebuild it (and waste 4 minutes of my time). This is not a big issue, and I presume that if Proof General stopped to exist, I would adapt my workflow accordingly -- e.g. by getting into the habit of rebuilding HOL after each pull. But the above observation is connected with Andrei's corridor full of smart people. Sometimes I would just wish Isabelle/jEdit could allow me to do the quick-and-dirty things the more primitive Proof General allowed -- a I know what I'm doing flag so to speak. Jasmin ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Sun, 25 May 2014, Jasmin Christian Blanchette wrote: In the course of a day, I typically find myself pulling from the Isabelle repository several times. I am encouraged in this by my use of Mercurial queues. So it's not untypical that my HOL image is slightly out of date, usually in a harmless way. Sometimes I fire up Proof General just because I know it will take the image as is instead of forcing me to rebuild it (and waste 4 minutes of my time). There is already isabelle jedit -n to bypass the automatic build. I never use that myself, because I no longer do the bootstrap dependency management in my head. When I do have to step out of the self-build chain of the tool infrastructure, e.g. when working on the sources of Isabelle/Pure or Isabelle/jEdit sources, I use a separate jEdit editor process that is not Isabelle/jEdit. Another option is to use the last official release of Isabelle/jEdit to edit a few files elsewhere. Sometimes I would just wish Isabelle/jEdit could allow me to do the quick-and-dirty things the more primitive Proof General allowed -- a I know what I'm doing flag so to speak. I guess it is more I knew how it used to be done in the old times with Proof General end Emacs. Isabelle/jEdit does allow much more things than was possible before, it only needs to be discovered. Sometimes my impression is that it would be better to discard Proof General on the spot, so that people have free mental energies to work in a more productive way with slightly more up-to-date tools. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
Am 25.05.2014 um 14:59 schrieb Makarius makar...@sketis.net: On Sun, 25 May 2014, Jasmin Christian Blanchette wrote: In the course of a day, I typically find myself pulling from the Isabelle repository several times. I am encouraged in this by my use of Mercurial queues. So it's not untypical that my HOL image is slightly out of date, usually in a harmless way. Sometimes I fire up Proof General just because I know it will take the image as is instead of forcing me to rebuild it (and waste 4 minutes of my time). There is already isabelle jedit -n to bypass the automatic build. I never use that myself, because I no longer do the bootstrap dependency management in my head. Aha! -n no build dialog for session image on startup I thought this only controlled whether the dialog is shown; not whether the build takes place. Jasmin ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Sun, 25 May 2014, Jasmin Blanchette wrote: -n no build dialog for session image on startup I thought this only controlled whether the dialog is shown; not whether the build takes place. That was once a separate build_dialog tool, but it is now just an implicit build, so I will remove this confusing word. The build_dialog was meant to let Proof General participate in contemporary Isabelle infrastructure, but it was never used and discontinued about 1 year ago. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Tue, 29 Apr 2014, Matthew Fernandez wrote: Currently most of my theories are generated by another tool. When debugging the generated theories, I often have to open a file that I know contains many broken proofs. In these circumstances it can be beneficial to have a way of stepping into the middle of a broken proof to explore, while ignoring all the following (also broken) proofs). In Isabelle/578dc6b4be89 and d11d11da0d90 from about 2 weeks ago there is a slightly refined treatment of error recovery, such that continuous checking no longer bumps into other toplevel statements / proofs. That is still not the real thing, just the second round of adhoc improvements after the first one in 2010. Proper structural recovery needs to come at some point, with more formal indendation, and the final discontinuation of hard tabulators -- not for the coming release, though. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
This is not a remaining use of Proof General, but of the Emacs text editor: trimming the final newline of theory sources for document preparation. This could lead to extra white space between sections in the last decades, but it was just one of these habits to take care of that manually. jEdit has its own built-in smartness concerning the last line, and some well-known problems coming from it, especially for plugin authors who need to paint something into the text buffer. Since there is no realistic chance to remove superfluous newlines manually, Isabelle/5fc1c2098964 now does that unconditionally during document preparation. (For now the list of Remaining uses of Proof General / Emacs seems to be empty. If there is anything remaining, this thread is still open to submissions.) Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
Thanks a lot. Andreas On 12/05/14 20:07, Florian Haftmann wrote: 1. Violation of well-sortedness constraints: type ... not an instance of ... declare [[show_sorts]] code_thms constant to be exported Then, I use educated guessing and Emacs' incremental search to navigate the code equations that have been output until I find the fault -- usually, it's just a missing [code] or [code del] declaration for some constant that has introduced a quantifier or set comprehension. I would really appreciate support for navigating code equations in the output (e.g., Ctrl-click on a constant on the RHS of an equation takes me to the code equation of that constant (in the output of code_thms). For this particular case, it would also be useful to get the chain of propagation for the sort constraint like in GHC (arising from the use of ...), but since Isabelle's code generator strengthens sort constraints for intermediate functions, this would be a list (tree/graph) of functions that trace the propagation. I will have to think about something like that seriously. Here, I have two suggestions for improvements: a) Provide an entry to the code preprocessor such that I can trace the transformation of the code equations for a given (set of) constants. Currently, I only know how to trace the preprocessing of *all* code equations, but I am not interested in most of this trace. I will consider this. b) [code_abbrev] is the worst code generator attribute that I know of, because there's no reverse [code_abbrev del]. Each time I have to get rid of a code abbreviation, I have to figure out once again how [code_abbrev] transforms the theorem before it calls [code_unfold] and [code_post]. Please add the [code_abbrev del] attribute. See now http://isabelle.in.tum.de/repos/isabelle/rev/40213e24c8c4 And while I am at it, here is another point that makes my life unnecessarily hard, but it's not related to jEdit vs. PG: 3. Problems with Code_Evaluation.term_of and friends The term reconstruction functions are not displayed in code_thms because of the section obfuscation in Code_Evaluation. I do not understand why this has to be obfuscated. I always have to go via export_code and read the generated code to figure out what the code equation for one of these overloaded constants is. And it's bad luck if export_code raises an error because some of the code equations are invalid. See now http://isabelle.in.tum.de/repos/isabelle/rev/1e50fddbe1f5 Florian ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 2 May 2014, Makarius wrote: On Tue, 29 Apr 2014, Andreas Lochbihler wrote: Until then there are various approximations: * Multiple floating instances of Output, with different Update / Auto update state. * The Output / Detach button to produce an unchanging Info window on the spot. In Isabelle/c2ddbf327bbd the former Detach button is now a menu item in all dockable windows that support this concept of producing a stand-alone Info window from a snapshot of the content. Since Query and Info already do a good job for keeping track of invididual state output, outside the auto-update mode of Output, I was wondering if it is time to *discontinue* its special buttons: Output / Update Output / Auto update These are remains from early experimental generations of Isabelle/jEdit some years ago. Is anyone actually using that in current repository versions, not the last release? Since former Proof General and Emacs users often prefer keyboard over mouse, the following standard jEdit actions might be interesting: left-docking-area right-docking-area top-docking-area bottom-docking-area close-docking-area They are bound by default to Emacs-style multi key sequences, e.g. C+e C+DOWN. In fact, the similarity to C+e DOWN for subscript in Isabelle/jEdit has already caused some confusion to someone trying the latter, and not knowing about Emacs ways to treat keyboards. Thus I learned about the existance of the other key sequence in the first place, but also that Emacs usage cannot be expected from regular users today. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Tue, 29 Apr 2014, Thomas Sewell wrote: Back to the actual technical questions. What are the main performance bottle-necks here? Printing of intermediate goal states? Or applying intermediate steps repeatedly? I suspect that the problem is not that the printing or the intermediate calculations are taking too long. It's that printing the output the user wants to see is waiting on some other computation finishing, creating the sensation of lag. Some evidence to back this up: I tried an adjustment a while ago in which I had the goal state print incrementally. Even if some of the subgoals took a while to print, you'd see the line with goal (12 subgoals) immediately, and then the subgoals as they were formatted. The short summary is that this helped a little sometimes, but I often still saw an empty Output panel for seconds after moving the cursor to a line that the continuous checker had already processed. Fast rewind to the start of this sub-thread, with the standard procedure according to Tim the Enchanter: * What are your exact hardware parameters: CPU, main memory? * What is your operating system? * What are your ML system settings, e.g. as shown by isabelle build -? ? * What are your JVM settings: ISABELLE_JAVA_SYSTEM_OPTIONS and JEDIT_JAVA_OPTIONS ? * What are the options threads and parallel_proofs ? To put this into proper context some clues about the actual applications would also help to put obscure speculations into the bright light of empirical science. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
1. Violation of well-sortedness constraints: type ... not an instance of ... declare [[show_sorts]] code_thms constant to be exported Then, I use educated guessing and Emacs' incremental search to navigate the code equations that have been output until I find the fault -- usually, it's just a missing [code] or [code del] declaration for some constant that has introduced a quantifier or set comprehension. I would really appreciate support for navigating code equations in the output (e.g., Ctrl-click on a constant on the RHS of an equation takes me to the code equation of that constant (in the output of code_thms). For this particular case, it would also be useful to get the chain of propagation for the sort constraint like in GHC (arising from the use of ...), but since Isabelle's code generator strengthens sort constraints for intermediate functions, this would be a list (tree/graph) of functions that trace the propagation. I will have to think about something like that seriously. Here, I have two suggestions for improvements: a) Provide an entry to the code preprocessor such that I can trace the transformation of the code equations for a given (set of) constants. Currently, I only know how to trace the preprocessing of *all* code equations, but I am not interested in most of this trace. I will consider this. b) [code_abbrev] is the worst code generator attribute that I know of, because there's no reverse [code_abbrev del]. Each time I have to get rid of a code abbreviation, I have to figure out once again how [code_abbrev] transforms the theorem before it calls [code_unfold] and [code_post]. Please add the [code_abbrev del] attribute. See now http://isabelle.in.tum.de/repos/isabelle/rev/40213e24c8c4 And while I am at it, here is another point that makes my life unnecessarily hard, but it's not related to jEdit vs. PG: 3. Problems with Code_Evaluation.term_of and friends The term reconstruction functions are not displayed in code_thms because of the section obfuscation in Code_Evaluation. I do not understand why this has to be obfuscated. I always have to go via export_code and read the generated code to figure out what the code equation for one of these overloaded constants is. And it's bad luck if export_code raises an error because some of the code equations are invalid. See now http://isabelle.in.tum.de/repos/isabelle/rev/1e50fddbe1f5 Florian -- PGP available: http://home.informatik.tu-muenchen.de/haftmann/pgp/florian_haftmann_at_informatik_tu_muenchen_de signature.asc Description: OpenPGP digital signature ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
The list of remaining uses of Proof General is shrinking dramatically every day. We can continue this a bit more during May, all referring to ongoing repository development. During the month of June, I will be mostly on vacation. After that the convergence towards the release needs to start. There will be probably Isabelle2014-RC0 for the VSL/ITP event at Vienna in mid July, i.e. a release candidate *before* the usual fork to the release repository. Starting with the RC versions for the release, I will pose the same question about remaining uses of Proof General on isabelle-users, so that everybody can participate. I have just inspected some old sources by someone else with Isabelle/jEdit from Isabelle2012, which was really good and solid back then, but looks now old and crappy. It shows that Isabelle/jEdit has already a long history on its own, and it is hardly new, but an established thing. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
Thanks Makarius. A few of us at NICTA have ported this change to our various versions of Isabelle and begun playing with it. It seems to improve the situation sometimes, though we haven't yet got a feel for when in particular it helps. In fact, we haven't really understood what the change does. On 07/05/14 22:59, Makarius wrote: On Mon, 5 May 2014, Makarius wrote: Users running on batteries might also want a mode that restricts all threads to the behaviour above. Have you tried that with threads = 1 (there is also a special treatment for high-priority prints in that mode)? So far I guess that most people run with defaults, without any idea of the tuning parameters. See also: changeset: 56875:f6259d6fb565 user:wenzelm date:Tue May 06 16:05:14 2014 +0200 files: etc/options src/Pure/PIDE/command.ML description: explicit option parallel_print to downgrade parallel scheduling, which might occasionally help for big and heavy scripts; In principle this is an instance of the too many options syndrome, but here the implicit change of behaviour on 1 core is merely made explicit. Moreover, according to the waterbed-syndrome in its positive sense, it means that options added here inevitably cause other old/obsolete options to be removed faster. I completely agree that having too many options is a problem. There's no point having them if noone knows that they're there, or which ones to try. That said, I think it's a good path for performance adjustments which might or might not be helpful. I suspect you could get away with adding far more options than you plan to have in the end, and keep only the ones that end up with a quorum of users. I'm a bit of an optimist though. This sounds a bit too pragmatic and opportunistic to me. What is special about print tasks anyway, apart from their priority? The recent concept for asynchronous print functions makes print tasks rather general, and there are more automated provers or disprovers in that category than actual printing. What is even more important than prints, is the main protocol thread, which presently needs to work against the whole farm of worker threads to update certain administrative structures of the document model. If I knew a proper way to reduce the priority (or to pre-empt) worker threads for that, I would do it. But it probably needs some work by David Matthews on the ML thread infrastructure. Consider me an unashamed pragmatist. I see a similarity between task/thread scheduling in Isabelle and task/thread scheduling in operating systems. All modern operating systems are full of ad-hoc heuristics designed to bump up the priority of tasks that are likely to create I/O requests or update things for the user. A parallel make, for instance, will run much faster if the OS prioritises the compile tasks that are still reading files ahead of the ones that have begin compiling and computing. This keeps the disk working throughout the build. Windows raises the priority of in-focus windows, and Mac OS X pushes the audio threads of apps up to the highest priority, etcetera. I may have misspoken with regard to print task. I guess I meant task that will produce output which at some point the user has directly requested into their output panel, query panel etc. If we see the user as an external resource like a hard disk, these are the tasks we need to front-load to keep the external task running at full capacity. I see the some of the other output tasks, which possibly produce counterexamples or which produce squiggly lines which are possibly helpful, as lower priority. Preempting long-running tasks would change the tradeoffs a lot. Another possibility would be to introduce a yield-point (cooperative multitasking) which a task can execute, which will possibly cause its execution to be delayed in favour of a higher priority task. Adding that to the tactic combinators would make nearly all Isabelle workloads much finer-grained. Well, those are just my thoughts. Thanks for the adjustment, I hope it solves our responsiveness problems. Best wishes, Thomas. ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Thu, 8 May 2014, Thomas Sewell wrote: If I knew a proper way to reduce the priority (or to pre-empt) worker threads for that, I would do it. But it probably needs some work by David Matthews on the ML thread infrastructure. Consider me an unashamed pragmatist. The important point is that a system like Isabelle cannot be built on the basis of pragmatism. It is occasionally helpful to recall the cultural foundations on which one is standing. The system can be used pragmatically, or rather practically, of course. I see a similarity between task/thread scheduling in Isabelle and task/thread scheduling in operating systems. All modern operating systems are full of ad-hoc heuristics designed to bump up the priority of tasks that are likely to create I/O requests or update things for the user. Definitely. I've introduced the slogan of Isabelle as logical operating system already in 2007, when the parallel batch mode with its ML threads was still new. Many years later that has become reality in PIDE interaction, but it was much harder to get there than anticipated. In recent years I have become more cautious in the ambitions of what the system is meant to do. It is already too far ahead of anything else in the ITP world, and hardly anyone understands how it really works. A parallel make, for instance, will run much faster if the OS prioritises the compile tasks that are still reading files ahead of the ones that have begin compiling and computing. This keeps the disk working throughout the build. Luckily Isabelle no longer depends on make and its many historical problems. The Isabelle build tool is fast, because it does not access all these files over and over again. Thus the need for extra tricks is avoided, by giving up old habits from the 1970-ies. Preempting long-running tasks would change the tradeoffs a lot. Another possibility would be to introduce a yield-point (cooperative multitasking) which a task can execute, which will possibly cause its execution to be delayed in favour of a higher priority task. Adding that to the tactic combinators would make nearly all Isabelle workloads much finer-grained. That sounds rather obvious, but also like even more complication. David Matthews has provided a nice simplified version of pthreads in Poly/ML. He could probably do more, but even on the more complex JVM the influence on thread scheduling is limited. My canonical approach in such situations is to ask: Is there a way to avoid the need for all that extra weight? It requires looking at concrete applications carefully, to disprove their approach as something that could be done differently, with less impact on resources. That is not pragmatic, but it is how genuine scientific progress usually works. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On 08/05/2014 11:25, Makarius wrote: On Thu, 8 May 2014, Thomas Sewell wrote: If I knew a proper way to reduce the priority (or to pre-empt) worker threads for that, I would do it. But it probably needs some work by David Matthews on the ML thread infrastructure. Preempting long-running tasks would change the tradeoffs a lot. Another possibility would be to introduce a yield-point (cooperative multitasking) which a task can execute, which will possibly cause its execution to be delayed in favour of a higher priority task. Adding that to the tactic combinators would make nearly all Isabelle workloads much finer-grained. That sounds rather obvious, but also like even more complication. David Matthews has provided a nice simplified version of pthreads in Poly/ML. He could probably do more, but even on the more complex JVM the influence on thread scheduling is limited. I've had a look at providing thread priority in the Poly/ML thread package and I may have a go at including something. Poly/ML leaves thread scheduling to the pthreads library which really means to the OS and what is available depends on the particular OS. In general pthreads allows control over both priority and scheduling policy. I've done some tests on what various OSs allow for user (i.e. non-privileged) threads. Linux. Does not allow either policy or priority to be changed. Mac OS X. Allows both policy and priority to be changed. Cygwin/Windows. Single scheduling policy. Allows priority to be changed. FreeBSD. Allows priority but not policy to be changed. What this means is that ML code that wants to set a thread priority is going to have to make some enquiries about the priority range allowed. It looks as though adding a yield function would not be hard. There's a question about whether you would really want to use it. There is a cost involved even if there is no other thread that can be scheduled so you wouldn't want to call it too often. David ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Mon, 5 May 2014, Makarius wrote: Users running on batteries might also want a mode that restricts all threads to the behaviour above. Have you tried that with threads = 1 (there is also a special treatment for high-priority prints in that mode)? So far I guess that most people run with defaults, without any idea of the tuning parameters. See also: changeset: 56875:f6259d6fb565 user:wenzelm date:Tue May 06 16:05:14 2014 +0200 files: etc/options src/Pure/PIDE/command.ML description: explicit option parallel_print to downgrade parallel scheduling, which might occasionally help for big and heavy scripts; In principle this is an instance of the too many options syndrome, but here the implicit change of behaviour on 1 core is merely made explicit. Moreover, according to the waterbed-syndrome in its positive sense, it means that options added here inevitably cause other old/obsolete options to be removed faster. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 2 May 2014, Makarius wrote: On Tue, 29 Apr 2014, Andreas Lochbihler wrote: text ‹ @{term ‹A \un B›} › Here the \un works as expected -- the cartouche remains intact independently of its content, as long as the funny parentheses are nested properly. But this correct nesting is exactly the problem. When I type \un while writing the above, the closing parenthesis are not there yet. The prover sees something like text {* @{term A \un lemma foo: ... by ... But why? In the ancient times, input was always sequential, as depth-first traversal of the intended tree structure. In less ancient times, some people proposed rigid structural editors to make it impossible to escape from nested boxes (still seen today in TeXmacs), although that is a bit awkward. In the past 10 years or so, the standard IDE approach has arrived somewhere in the middle: the user is free to type intermediate non-sense, but the editor makes it easy to get it right by default. See also: changeset: 56842:b6e266574b26 user:wenzelm date:Sat May 03 20:31:29 2014 +0200 files: src/Tools/jEdit/etc/options src/Tools/jEdit/src/completion_popup.scala description: yet another completion option, to imitate old less ambitious behavior; It allows to ignore the language context of the prover. This is also an attempt to retain sanity, when masses of users complain about having to learn new things in the coming release. Hopefully some will do some actual testing of this big space of features, and report problems before the release and not after it. Makarius___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Mon, 5 May 2014, Thomas Sewell wrote: The basic assumption is that each proof task does not run too long, and if it does it is something to be improved in the application to make it more smooth. In contrast, Proof General makes it more easy to produce huge and heavy proof scripts that can be hardly handled by anyone else later. Right. That seems to be the assumption that's being violated in the few cases where people are still keen on ProofGeneral, for instance, in Andreas' big complicated tactic applications. One needs to understand two important things here: technology and psychology. 15 years ago, there were certain technological side-conditions both in the prover and in Emacs, which made Proof General what it is. Later people got used to that and optimized their workflow accordingly. Certain manual task scheduling became second nature to them. 5 years ago, the prover was quite different and the JVM + Scala + jEdit platform imposed other technological side-conditions of what can be done. Again, people need to get used to that and optimize their workflow, but in addition one needs to unlearn old habits from Proof General, This psychological factor makes it difficult to see the genuine technical problems that still need to be addressed. As usual it helps to show the actual situation, either just the sources, or a video of the usual workflow, or a demonstration with personal presence. Let me make a proposal. I think that various users would appreciate it if one of the worker threads was reserved for print jobs caused by moving the cursor (highest priority tasks) and their dependencies (assuming more than one worker thread). That would hopefully make it easier to control the delay. If the user is cautious with moving the cursor and if enough proof dependencies have been processed, the system *should* be as responsive as PG. The delay would also be mostly unaffected by the proof task runtime, only the print task runtimes, which might be easier for an advanced user to manage. This sounds a bit too pragmatic and opportunistic to me. What is special about print tasks anyway, apart from their priority? The recent concept for asynchronous print functions makes print tasks rather general, and there are more automated provers or disprovers in that category than actual printing. What is even more important than prints, is the main protocol thread, which presently needs to work against the whole farm of worker threads to update certain administrative structures of the document model. If I knew a proper way to reduce the priority (or to pre-empt) worker threads for that, I would do it. But it probably needs some work by David Matthews on the ML thread infrastructure. Users running on batteries might also want a mode that restricts all threads to the behaviour above. Have you tried that with threads = 1 (there is also a special treatment for high-priority prints in that mode)? So far I guess that most people run with defaults, without any idea of the tuning parameters. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On 03/05/14 00:05, Makarius wrote: On Tue, 29 Apr 2014, Thomas Sewell wrote: I tried an adjustment a while ago in which I had the goal state print incrementally. Even if some of the subgoals took a while to print, you'd see the line with goal (12 subgoals) immediately, and then the subgoals as they were formatted. The short summary is that this helped a little sometimes, but I often still saw an empty Output panel for seconds after moving the cursor to a line that the continuous checker had already processed. I strongly suspect that the print request was waiting in a queue somewhere. The system would become responsive again once it finished doing something else. That is the normal future task farm, with its restricted worker thread pool. All PIDE execution works via some Future.fork, with different priorities in the queue. Proof tasks have low priority, print tasks have high priority. Once a task is running on some thread, it continues and cannot be preempted by newer tasks with higher priority. The basic assumption is that each proof task does not run too long, and if it does it is something to be improved in the application to make it more smooth. In contrast, Proof General makes it more easy to produce huge and heavy proof scripts that can be hardly handled by anyone else later. Right. That seems to be the assumption that's being violated in the few cases where people are still keen on ProofGeneral, for instance, in Andreas' big complicated tactic applications. The case where I get into trouble is in implementing a package-lite. I put together a collection of tactics or computations in ML blocks and execute them at some point in a theory via setup or ML. It's a bit like setting up a proper package and invoking it, but without the implied robustness or generality. Some of these can run for a minute or longer. They're the kind of computations that users might want to control. With regard to the future task farm: This is pretty much what I'd expected. So we see a delay if all the available threads are executing tasks that take a while and are not the current print task. Adding more threads reduces the chance of this happening, but not much. The higher priority for print tasks means the delay will end as soon as any thread becomes available, so the more threads the faster on average that will happen, but without guarantees. Let me make a proposal. I think that various users would appreciate it if one of the worker threads was reserved for print jobs caused by moving the cursor (highest priority tasks) and their dependencies (assuming more than one worker thread). That would hopefully make it easier to control the delay. If the user is cautious with moving the cursor and if enough proof dependencies have been processed, the system *should* be as responsive as PG. The delay would also be mostly unaffected by the proof task runtime, only the print task runtimes, which might be easier for an advanced user to manage. Users running on batteries might also want a mode that restricts all threads to the behaviour above. As always, I have no idea how difficult that would be. On incremental printing: it's easy to implement by generalising a couple of the relevant Pretty operations to produce a Seq.seq internally rather than a list. That would probably violate some implicit assumptions about print modes, which are a slightly odd intrusion into the purity of Pretty.T. What was the reason for incremental printing anyway? Just performance for huge goal states? There are other bottle-necks concerning that, and if goals really do get that big one should think about other ways to expose them, not by printing in the old-fashioned way. Incrementality might have other reasons and actual benefits. In the early years of PIDE I had more ambitions for that, but it caused so many additional problems in the document model and the GUI that I removed most of it for the sake of delivering something that is sufficiently stable to be usable in practice. The reason for the experiment was that I was fixing some proofs somewhere, I forget where, which had relatively fast tactics executing on large, slow-to-print goals. I was probably in a context where Simpl was loaded, where printing is slower than usual (probably the print/parse translations, I've had a look and got nowhere.) It occurred to me that I could debug some of my mistakes faster if I just knew whether or not the tactic I'd typed had solved a goal, and many more if I just saw the first goal. But the time saved is probably lost again adjusting the goals limit, and it's annoying to do by hand. Incremental output seemed like a good idea. It looked promising initially, but then became really annoying, because Isabelle/jEdit or PIDE resets the Output buffer each time it gets more to display. So if you scroll down to look for something, you get scrolled back up for each time a
Re: [isabelle-dev] Remaining uses of Proof General?
On Tue, 29 Apr 2014, Thomas Sewell wrote: I tried an adjustment a while ago in which I had the goal state print incrementally. Even if some of the subgoals took a while to print, you'd see the line with goal (12 subgoals) immediately, and then the subgoals as they were formatted. The short summary is that this helped a little sometimes, but I often still saw an empty Output panel for seconds after moving the cursor to a line that the continuous checker had already processed. I strongly suspect that the print request was waiting in a queue somewhere. The system would become responsive again once it finished doing something else. That is the normal future task farm, with its restricted worker thread pool. All PIDE execution works via some Future.fork, with different priorities in the queue. Proof tasks have low priority, print tasks have high priority. Once a task is running on some thread, it continues and cannot be preempted by newer tasks with higher priority. The basic assumption is that each proof task does not run too long, and if it does it is something to be improved in the application to make it more smooth. In contrast, Proof General makes it more easy to produce huge and heavy proof scripts that can be hardly handled by anyone else later. On incremental printing: it's easy to implement by generalising a couple of the relevant Pretty operations to produce a Seq.seq internally rather than a list. That would probably violate some implicit assumptions about print modes, which are a slightly odd intrusion into the purity of Pretty.T. What was the reason for incremental printing anyway? Just performance for huge goal states? There are other bottle-necks concerning that, and if goals really do get that big one should think about other ways to expose them, not by printing in the old-fashioned way. Incrementality might have other reasons and actual benefits. In the early years of PIDE I had more ambitions for that, but it caused so many additional problems in the document model and the GUI that I removed most of it for the sake of delivering something that is sufficiently stable to be usable in practice. It looked promising initially, but then became really annoying, because Isabelle/jEdit or PIDE resets the Output buffer each time it gets more to display. So if you scroll down to look for something, you get scrolled back up for each time a subgoal prints, which can give the sensation that the editor is fighting you. There is a deeper conceptual problem here. Several independent entities want to update content of some GUI component: output window, tree view etc. This requires a merge of these change of the GUI state, but that is usually only done by a hard reset on one side, ignoring the other side. You can see that in jEdit's SideKick tree view, Isabelle/jEdit's Output dockable with scrollbar and folds, or even just in a plain Terminal with the scrollbar. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Tue, 29 Apr 2014, Andreas Lochbihler wrote: text ‹ @{term ‹A \un B›} › Here the \un works as expected -- the cartouche remains intact independently of its content, as long as the funny parentheses are nested properly. But this correct nesting is exactly the problem. When I type \un while writing the above, the closing parenthesis are not there yet. The prover sees something like text {* @{term A \un lemma foo: ... by ... But why? In the ancient times, input was always sequential, as depth-first traversal of the intended tree structure. In less ancient times, some people proposed rigid structural editors to make it impossible to escape from nested boxes (still seen today in TeXmacs), although that is a bit awkward. In the past 10 years or so, the standard IDE approach has arrived somewhere in the middle: the user is free to type intermediate non-sense, but the editor makes it easy to get it right by default. Isabelle/jEdit still lacks serious templating, but there are beginnings of it in the completion mechanism. The outer quotations and antiquotations have specific support already: a single keystroke ` offers a template for a well-formed cartouche, and the @{ prefix completes to a well-formed @{} with the cursor in the middle. Even Proof General had C-c C-a C-a for isar-antiquote already. Makarius___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Tue, 29 Apr 2014, Andreas Lochbihler wrote: There are hardly any performance problems in terms of computing power, possibly except for Isabelle processing a slow call to auto over and over again. The efficiency problem is the interaction with the IDE. I use the Find panel a lot, but then my output panel is not visible at the same time (that's why I would like to split the right dock in two). And when I scroll upwards to find a snippet of tactic script that I want to copy, the output updates and my current goal state is gone. The mechanics of the Output panel are a bit old-fashioned, still assuming a single-focus proof script model. At some point I would like to see a proper Preview of a certain part of proof document, with state output just in the right spots (zero or more depending on proof structure). Until then there are various approximations: * Multiple floating instances of Output, with different Update / Auto update state. * The Output / Detach button to produce an unchanging Info window on the spot. * The more flexible docking framework provided by the MyDoggy plugin, although it is unclear if that is more than a nice experiment by one of the old-time jEdit developers. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On 02/05/14 16:16, Makarius wrote: On Tue, 29 Apr 2014, Andreas Lochbihler wrote: text ‹ @{term ‹A \un B›} › Here the \un works as expected -- the cartouche remains intact independently of its content, as long as the funny parentheses are nested properly. But this correct nesting is exactly the problem. When I type \un while writing the above, the closing parenthesis are not there yet. The prover sees something like text {* @{term A \un lemma foo: ... by ... But why? In the ancient times, input was always sequential, as depth-first traversal of the intended tree structure. In less ancient times, some people proposed rigid structural editors to make it impossible to escape from nested boxes (still seen today in TeXmacs), although that is a bit awkward. In the past 10 years or so, the standard IDE approach has arrived somewhere in the middle: the user is free to type intermediate non-sense, but the editor makes it easy to get it right by default. I have used such templating mechanism with Eclipse and finally disabled them, because they caused me more work than what they saved. I usually prefer to enter both delimiters separately and to just see the matching parenthesis highlighted. The reason is that I often add the delimiters only later. For example, when I write a single-identifier term, I use text {* @{term my_constant} *} and some time later, I figure out that I have to add something, e.g., a type constraint. Hence, I produce the following sequence of edits (the # denotes the position of the cursor) text {* @{term #my_constant} *} text {* @{term #my_constant} *} text {* @{term my_constant#} *} text {* @{term my_constant :: my_type#} *} text {* @{term my_constant :: my_type#} *} With the template mechanisms that I have seen so far, I get the following sequence: text {* @{term #my_constant} *} text {* @{term #my_constant} *} text {* @{term #my_constant} *} text {* @{term my_constant#} *} text {* @{term my_constant :: my_type#} *} text {* @{term my_constant :: my_type#} *} text {* @{term my_constant :: my_type#} *} Andreas ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Fri, 2 May 2014, Andreas Lochbihler wrote: The reason is that I often add the delimiters only later. For example, when I write a single-identifier term, I use text {* @{term my_constant} *} and some time later, I figure out that I have to add something, e.g., a type constraint. Hence, I produce the following sequence of edits (the # denotes the position of the cursor) text {* @{term #my_constant} *} text {* @{term #my_constant} *} text {* @{term my_constant#} *} text {* @{term my_constant :: my_type#} *} text {* @{term my_constant :: my_type#} *} With the template mechanisms that I have seen so far, I get the following sequence: text {* @{term #my_constant} *} text {* @{term #my_constant} *} text {* @{term #my_constant} *} text {* @{term my_constant#} *} text {* @{term my_constant :: my_type#} *} text {* @{term my_constant :: my_type#} *} text {* @{term my_constant :: my_type#} *} I think the second form is not proper templating yet, just an escape hatch of the IDE to produce balanced quotes by default, since it is more often correct that the other way round. The Isabelle text cartouches are an attempt to get rid of unbalanced quotes altogether, and reduce the problem to one of balanced parentheses. My ` completion is already better than the above, because it allows to select all 3 cases: balance template, left side, right side. jEdit has already nice actions to select a code block, depending on the structure of parentheses. What is missing are ways to add or remove an outermost pair of parentheses, which should not be too difficult to add. Independently of code blocks, the Isabelle/jEdit actions to modify control symbols already work with selections in a structured way. The completion mechanism also knows a bit about the various forms of selection, and tries to do something sensible with them. The abobe example could be also handled by a double-click to select the word of my_constant, and then perform a still hypothetical operation to enclose it in quotes of some form. Note that when I say jEdit it refers to the jEdit text editor, while the Prover IDE is called Isabelle/jEdit. Getting the basic terminology right helps to avoid confusion about what happens where, and who is ultimately responsible for it. We have an increasingly complex situation of many Isabelle sub-languages and sub-systems, but being explicit about that is better than sweeping it under the carpet. In contrast, the Coq guys have upheld the illusion of one main language longer, and actually removed their quotes around the term language long ago, and thus introduced many problems that persist until today. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
But I try to process such theories with jEdit and only go back to XEmacs/PG when I cannot stand Isabelle/jEdit any longer (which usually happens when I debug the code generator setup). That's an interesting observation. What are the particular properties of »debugging« here that make PG preferable? Maybe it is just a question of better code generation tool support. Florian -- PGP available: http://home.informatik.tu-muenchen.de/haftmann/pgp/florian_haftmann_at_informatik_tu_muenchen_de signature.asc Description: OpenPGP digital signature ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
Hi Makarius, On 28/04/14 23:10, Makarius wrote: a) Given some text like definition foo where foo = ... when I add an attribute like [simp]: after the where, I get a symbol completion popup to replace the : with the element sign. Usually, my next thing is to move the cursor with the cursor keys. But the popup gobbles all the key strokes until I explicitly close it with ESC. As colons are used everywhere in Isabelle's outer syntax, it would really be great if the popup only appears when I am in inner syntax. b) Sometimes, when I write a HOL term, I used to not get the completion popup when I enter something like \un if there were sufficiently many parse errors in that partial term. Even Ctrl-b did not help. However, I cannot reproduce it in a small example at the moment. In the case a), I guess that you still have the completion delay 0.0, while I presently work with 0.5 to give the prover a chance to add semantic completion information, before any popups are shown. My completion delay is 0.1. When writing Isabelle terms normally, this is the amount of time that does not break my flow of typing. text ‹ @{term ‹A \un B›} › Here the \un works as expected -- the cartouche remains intact independently of its content, as long as the funny parentheses are nested properly. But this correct nesting is exactly the problem. When I type \un while writing the above, the closing parenthesis are not there yet. The prover sees something like text {* @{term A \un lemma foo: ... by ... What is funny is that Proof General was actually one of the main reasons of moving only slowly in such token language reforms. I am glad that PG still works for most of my theories and I try to keep that state as long as feasible. There are already problems with new keywords declared by AFP entries that are not listed in the keywords file. I then usually insert ; as a delimiter. But I try to process such theories with jEdit and only go back to XEmacs/PG when I cannot stand Isabelle/jEdit any longer (which usually happens when I debug the code generator setup). Andreas ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On 28/04/14 23:18, Makarius wrote: On Mon, 28 Apr 2014, Andreas Lochbihler wrote: 2. Reactivity when processing large files With PG, I knew how to control the Isabelle prover. When I edit a large file in a larger project like JinjaThreads, every now and then, Isabelle changes the background colour from red to gray and then, apparently nothing happens for minutes before Isabelle turns it red again and starts reprocessing. Is there some way to explicitly tell Isabelle that it should now start to check again. Toggling continuous checking does not help. Sometimes, I even have to close the theory file and reopen it again. This sounds like the Poly/ML RTS is desparately trying to reclaim memory, by aggressive sharing huge amounts of data. Not long ago that situation lead into real memory problems on my good old 32 GB machine, but David Matthews managed once again to postpone the ultimate JinjaThreads implosion as a black hole of computing resources. For now just the usual game, according to Tim the Enchanter: * What are your exact hardware parameters: CPU, main memory? Intel® Core™ i7-3630QM CPU @ 2.40GHz, 8GB memory * What is your operating system? Ubuntu 12.04 LTS * What are your ML system settings, e.g. as shown by isabelle build -? ? ML_PLATFORM=x86-linux ML_HOME=~/.isabelle/contrib/polyml-5.5.1-1/x86-linux ML_SYSTEM=polyml-5.5.1 ML_OPTIONS=-H 500 * What are your JVM settings: ISABELLE_JAVA_SYSTEM_OPTIONS and JEDIT_JAVA_OPTIONS ? JEDIT_JAVA_OPTIONS=-Xms128m -Xmx3072m -Xss2m -Dactors.corePoolSize=4 -Dactors.enableForkJoin=false * What are the options threads and parallel_proofs ? threads = 0, parallel_proofs = 2 Andreas ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On 28/04/14 22:25, Makarius wrote: On Mon, 28 Apr 2014, Andreas Lochbihler wrote: My main usage of PG is when I want to construct a complicated proof method call like (fastforce intro: ... dest: ... elim: ... simp add: ... cong: ... del: ... simp del: ...)+ that collapses an apply script of a hundred lines. I haven't yet found a convenient way to write the apply script in Isabelle/jEdit, because of reactivity issues (see item 2 below) and the continuous updates of the output window (when I scroll to some other part of the apply script using the cursor keys). Are there key bindings for scrolling that do not move the cursor? This reminds me of a very old insider jokes from the mid-1990-ies: Dieter Nazareth had finished the W0 formalization where he had turned half-decent tactic scripts into such compact one-liners, and shortly afterwards Wolfgang Naraschewski had to disentangle that again for the full W formalization, or rather start from scratch. A few years later, the Isar language emerged and made that approach in principle obsolete. I know, I have myself untangles such one-liners often enough when something has changed. Nevertheless, I believe that I'm still faster to build these one-liners than write pretty Isar proofs of hundreds of lines, just because the goal states are huge and all cases are shown in the same way. Back to the actual technical questions. What are the main performance bottle-necks here? Printing of intermediate goal states? Or applying intermediate steps repeatedly? There are hardly any performance problems in terms of computing power, possibly except for Isabelle processing a slow call to auto over and over again. The efficiency problem is the interaction with the IDE. I use the Find panel a lot, but then my output panel is not visible at the same time (that's why I would like to split the right dock in two). And when I scroll upwards to find a snippet of tactic script that I want to copy, the output updates and my current goal state is gone. (I know I could disable the updating, but then I have to enable it manually again.) I can say more when I understand the actual problem better. In such situations I normally have to see the dynamics of how you actually work. Maybe I can show you what my problems are at ITP in Vienna in July. Andreas ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
What is funny is that Proof General was actually one of the main reasons of moving only slowly in such token language reforms. I am glad that PG still works for most of my theories and I try to keep that state as long as feasible. There are already problems with new keywords declared by AFP entries that are not listed in the keywords file. 'isabelle keywords $SESSION' can be used to generate a new keywords file with all keywords of $SESSION. - René -- René Neumann Institut für Informatik (I7) Technische Universität München Boltzmannstr. 3 85748 Garching b. München Tel: +49-89-289-17232 Office: MI 03.11.055 smime.p7s Description: S/MIME Cryptographic Signature ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Tue, 29 Apr 2014, Andreas Lochbihler wrote: * What are your exact hardware parameters: CPU, main memory? Intel® Core™ i7-3630QM CPU @ 2.40GHz, 8GB memory That is a recent high-end laptop or a midrange desktop machine. JinjaThreads is *the* biggest Isabelle application on the planet, it deserves a proper workstation or server, lets say with 8 cores and 16 GB minimum (which is still small by today's standards). ML_PLATFORM=x86-linux ML_HOME=~/.isabelle/contrib/polyml-5.5.1-1/x86-linux ML_SYSTEM=polyml-5.5.1 ML_OPTIONS=-H 500 That is OK for batch mode, but in interactive mode the GC time of the Poly/ML RTS will be quite noticable. I will make a few experiments with x86_64 and some real memory beyond 16 GB, and report my experience later. * What are your JVM settings: ISABELLE_JAVA_SYSTEM_OPTIONS and JEDIT_JAVA_OPTIONS ? JEDIT_JAVA_OPTIONS=-Xms128m -Xmx3072m -Xss2m -Dactors.corePoolSize=4 -Dactors.enableForkJoin=false This looks OK for that situation. Note that you can strip the actors properties, since I have removed that altogether some days ago (e.g. 326e8a7ea287). The new JVM thread pool is hardwired to the *virtual* number of CPU cores, which is a bit high by default, but it is not used very much in Isabelle/Scala. * What are the options threads and parallel_proofs ? threads = 0, parallel_proofs = 2 Here we have the standard overloading / overheating of Intel hyperthreaded CPUs. I reckon that most users have that problem, and experience bad reacticity that I never see myself, because I know more about multicore system tuning. The maximum that makes sense on this hardware is threads = 4, as well as ML_OPTIONS=-H 500 --gcthreads 4 In the next Poly/ML release, David Matthews provides the means to have this as default. Makarius___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
Hi Makarius, Over the past weeks, I've been using Isabelle/jEdit about half of my Isabelle time (and ProofGeneral 3.7.1.1 with XEmacs the other half). Isabelle/jEdit is great when it comes to working on small projects or refactoring existing sources. I really like the negative line spacing setting and completion of fact names! Thanks! My main usage of PG is when I want to construct a complicated proof method call like (fastforce intro: ... dest: ... elim: ... simp add: ... cong: ... del: ... simp del: ...)+ that collapses an apply script of a hundred lines. I haven't yet found a convenient way to write the apply script in Isabelle/jEdit, because of reactivity issues (see item 2 below) and the continuous updates of the output window (when I scroll to some other part of the apply script using the cursor keys). Are there key bindings for scrolling that do not move the cursor? Here are some things that could be improved in Isabelle/jEdit (I am currently on Isabelle/4e2a0d4e7a82): 1. Symbol completion in PG was absolutely deterministic. The immediate symbol completion in jEdit works great, too, I merely had to learn new sequences of key strokes. Symbol completion of non-unique results is not satisfactory. a) Given some text like definition foo where foo = ... when I add an attribute like [simp]: after the where, I get a symbol completion popup to replace the : with the element sign. Usually, my next thing is to move the cursor with the cursor keys. But the popup gobbles all the key strokes until I explicitly close it with ESC. As colons are used everywhere in Isabelle's outer syntax, it would really be great if the popup only appears when I am in inner syntax. b) Sometimes, when I write a HOL term, I used to not get the completion popup when I enter something like \un if there were sufficiently many parse errors in that partial term. Even Ctrl-b did not help. However, I cannot reproduce it in a small example at the moment. 2. Reactivity when processing large files With PG, I knew how to control the Isabelle prover. When I edit a large file in a larger project like JinjaThreads, every now and then, Isabelle changes the background colour from red to gray and then, apparently nothing happens for minutes before Isabelle turns it red again and starts reprocessing. Is there some way to explicitly tell Isabelle that it should now start to check again. Toggling continuous checking does not help. Sometimes, I even have to close the theory file and reopen it again. 3. Navigation between theories files In PG, I usually have only a small subset of the loaded theories and ML files open as buffers, and I conveniently switch between them with Ctrl-x b. In jEdit, I use Ctrl-` to go to the previous file, but going to a different one is a pain, because I have to search it in the complete list of open files. It would be great if there was a list of just those files that I had on my screen previously, not all loaded files. Moreover, when I close a file and then press Ctrl-` in the file that shows up, I do not get to the file I have visited before the two, but to some arbitrary other. Can jEdit remember the order in which files have been visited? XEmacs at least does this. Maybe there are already solutions to the above annoyances, I just don't know them. There's another thing I would like to see in jEdit: The window layout has three columns (one dock on the left and one on the right) and the middle column (with the editor area) can be divided in three rows (dock - text - dock). Is there some way that I can split the right column into two rows to show two information areas at the same time (e.g. Output at the top and Find below)? Andreas On 27/04/14 20:14, Makarius wrote: Are there any remaining uses of Proof General, e.g. in the situation of current Isabelle/5b6f4655e2f2 ? This is neither a joke nor a running gag -- I just can't think of anything myself after the introduction of the spell checker. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
I'm still a regular user of PG. From time to time, I test Isabelle/jEdit, and my reasons for switching back to PG are somewhat similar to what Andreas reported. My main problems with Isabelle/JEdit are: 1. I cannot really control what Isabelle/Jedit processes when, and it invests computation power on the meaningless parts of the file directly after the point where I am editing. I'm not even convinced that it is the right approach to let Isabelle/jEdit's heuristics decide when and what it processes, and make user intervention impossible at first place (Or even worse, force the user into workarounds like inserting semicolons or ends behind the current editing point, which seems to be common practice among Isabelle/jEdit users) 2. In PG, when the processed region reaches the end of a theory file, I can be pretty sure that everything is fine with this theory. In Isabelle/jEdit, I have to scan the theory status panel manually for remaining red or pink bars, which is very inconvenient for large projects with hundreds of files. Moreover, I find it a bit scary that severe errors related to Isabelle/jEdit's document processing model (cf. https://lists.cam.ac.uk/mailman/htdig/cl-isabelle-users/2013-November/msg00170.html) can go undiscovered for several month, although most Isabelle users are on Isabelle/jEdit these days. I ask myself: Have they got so used to strange behaviours of the IDE that they do not realize severe errors any more? -- Peter On Mo, 2014-04-28 at 09:14 +0200, Andreas Lochbihler wrote: Hi Makarius, Over the past weeks, I've been using Isabelle/jEdit about half of my Isabelle time (and ProofGeneral 3.7.1.1 with XEmacs the other half). Isabelle/jEdit is great when it comes to working on small projects or refactoring existing sources. I really like the negative line spacing setting and completion of fact names! Thanks! My main usage of PG is when I want to construct a complicated proof method call like (fastforce intro: ... dest: ... elim: ... simp add: ... cong: ... del: ... simp del: ...)+ that collapses an apply script of a hundred lines. I haven't yet found a convenient way to write the apply script in Isabelle/jEdit, because of reactivity issues (see item 2 below) and the continuous updates of the output window (when I scroll to some other part of the apply script using the cursor keys). Are there key bindings for scrolling that do not move the cursor? Here are some things that could be improved in Isabelle/jEdit (I am currently on Isabelle/4e2a0d4e7a82): 1. Symbol completion in PG was absolutely deterministic. The immediate symbol completion in jEdit works great, too, I merely had to learn new sequences of key strokes. Symbol completion of non-unique results is not satisfactory. a) Given some text like definition foo where foo = ... when I add an attribute like [simp]: after the where, I get a symbol completion popup to replace the : with the element sign. Usually, my next thing is to move the cursor with the cursor keys. But the popup gobbles all the key strokes until I explicitly close it with ESC. As colons are used everywhere in Isabelle's outer syntax, it would really be great if the popup only appears when I am in inner syntax. b) Sometimes, when I write a HOL term, I used to not get the completion popup when I enter something like \un if there were sufficiently many parse errors in that partial term. Even Ctrl-b did not help. However, I cannot reproduce it in a small example at the moment. 2. Reactivity when processing large files With PG, I knew how to control the Isabelle prover. When I edit a large file in a larger project like JinjaThreads, every now and then, Isabelle changes the background colour from red to gray and then, apparently nothing happens for minutes before Isabelle turns it red again and starts reprocessing. Is there some way to explicitly tell Isabelle that it should now start to check again. Toggling continuous checking does not help. Sometimes, I even have to close the theory file and reopen it again. 3. Navigation between theories files In PG, I usually have only a small subset of the loaded theories and ML files open as buffers, and I conveniently switch between them with Ctrl-x b. In jEdit, I use Ctrl-` to go to the previous file, but going to a different one is a pain, because I have to search it in the complete list of open files. It would be great if there was a list of just those files that I had on my screen previously, not all loaded files. Moreover, when I close a file and then press Ctrl-` in the file that shows up, I do not get to the file I have visited before the two, but to some arbitrary other. Can jEdit remember the order in which files have been visited? XEmacs at least does this. Maybe there are already solutions to the above annoyances, I just don't know
Re: [isabelle-dev] Remaining uses of Proof General?
On Mon, 28 Apr 2014, Matthew Fernandez wrote: On 28/04/14 04:14, Makarius wrote: Are there any remaining uses of Proof General, e.g. in the situation of current Isabelle/5b6f4655e2f2 ? I'm mostly on Isabelle/jEdit now, but I do delve back into Isabelle/Emacs (is that the current terminology for this creature?) I don't know all details about the terminology, which is also slightly varying over time. There are Isabelle tools called emacs and jedit after the underlying text editors, which I introduced myself some years ago, alongside with isabelle tty (which actually uses rlwrap as editor if that is available). isabelle emacs invokes Proof General or Isabelle Proof General (in contrast to the Coq version), or Proof General Emacs (in contrast to the Eclipse version) -- David Aspinall could explain that more precisely. I used myself wrongly ProofGeneral over many years, and David never told me that until it was rather late, but I changed that habit afterwards. isabelle jedit starts Isabelle/jEdit. This was once a tiny Isabelle plugin for the jEdit text editor (so the distinction did not exist yet), but is now a rather big IDE based on jEdit and a lot of extra functionality provided by the plugin + a few JVM bootstrap tricks. Regular users of official releases also get a native application wrapper that was newly introduced in Isabelle2013-2, and is different from the jEdit distribution. My reasons are mostly predictable execution, as I can control what the prover is up to with explicit stepping forwards and backwards. I can probably achieve the same result toggling continuous checking on/off in Isabelle/jEdit, but haven't invested the time in modifying my workflow. Can you say more about typical situations? When doing occasional debugging, either of tools or the system itself, I need more knowledge about what happens when exactly. I never do this in Proof General these days, but within the Prover IDE in a buffer that contains only the main items of interest. Then I edit carefully, based on educated guesses how the PIDE document model works, or I toggle the continuous checking that was newly introduced in Isabelle2013-2. I've also encountered the problems discussed in other threads of the Isabelle/jEdit GUI locking up when some tactic is looping and the JVM heap being exhausted with no indication from the UI. I reckon that this refers to the official Isabelle2013-2 release. I have reworked many details of scheduling in the past few months, even just now when writing this email. When the Isabelle2014-RC line starts (probably in July) you should look precisely at your typical applications to see how it works. I don't want to see again a situation where problem reports trickle only slowly *after* the release is shipped. Isabelle/Emacs is capable of running on underpowered machines which do not have enough resources to run Isabelle/jEdit. This is not a good reason for maintaining legacy support, but there may be users in this situation. It is a normal sign of stagnation of some application that it suddenly runs blazingly fast on old or tiny hardware. At ITP 2013 last summer I've seen a few Coq users working comfortably with CoqIDE or Proof General on netbooks are small laptops. That surely can't be done with a full-scale Prover IDE like Isabelle/jEdit. When Proof General was young and strong, it was also huge and bloated compared to the hardware of that time, escpecially XEmacs was really heavy and we had many insider jokes about that. The relation of hardware vs. software performance is not an accident, but the result of the normal balancing of trade-offs: How much functionality can we afford on a certain range of hardware at the moment? I routinely walk through consumer electronics stores like Fnac Paris, to see what you get for 500..1000 EUR, to estimate what can be expected from typical users. Then I test on 3 systematically on 3 dissimilar systems, 2 of them actually 3 years old. What I normally don't test is unplugged battery mode, because I am in the lucky situation of not commuting. People who do that routinely, should make some systematic experiments with the nominal number of Isabelle/ML threads at 0.5 of the true number of cores, i.e. 0.25 of the virtual number of cores on Intel. To simplify the calculation, just try the constant threads = 1 an see how it works. Last summer at Rennes, someone was surprised to have a 2 core laptop running at 600% CPU, but it actually turned out a new i7 with 8 virtual CPUs. The defaults were just burning down the batteries, without any extra benefit in those warm summer days. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Mon, 28 Apr 2014, Andreas Lochbihler wrote: My main usage of PG is when I want to construct a complicated proof method call like (fastforce intro: ... dest: ... elim: ... simp add: ... cong: ... del: ... simp del: ...)+ that collapses an apply script of a hundred lines. I haven't yet found a convenient way to write the apply script in Isabelle/jEdit, because of reactivity issues (see item 2 below) and the continuous updates of the output window (when I scroll to some other part of the apply script using the cursor keys). Are there key bindings for scrolling that do not move the cursor? This reminds me of a very old insider jokes from the mid-1990-ies: Dieter Nazareth had finished the W0 formalization where he had turned half-decent tactic scripts into such compact one-liners, and shortly afterwards Wolfgang Naraschewski had to disentangle that again for the full W formalization, or rather start from scratch. A few years later, the Isar language emerged and made that approach in principle obsolete. Back to the actual technical questions. What are the main performance bottle-necks here? Printing of intermediate goal states? Or applying intermediate steps repeatedly? As you move the cursor over commands, the Output updates itself, without any activity from the prover. The prover prints states as you change the editor view, e.g. by scrolling or resizing the window. You can disable the Auto-update of the Output dockable, but that does not affect the proof process, only the display. You can prevent the prover from burning cycles either by reducing the number of worker threads, or disabling the continuous checking. I can say more when I understand the actual problem better. In such situations I normally have to see the dynamics of how you actually work. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Mon, 28 Apr 2014, Andreas Lochbihler wrote: a) Given some text like definition foo where foo = ... when I add an attribute like [simp]: after the where, I get a symbol completion popup to replace the : with the element sign. Usually, my next thing is to move the cursor with the cursor keys. But the popup gobbles all the key strokes until I explicitly close it with ESC. As colons are used everywhere in Isabelle's outer syntax, it would really be great if the popup only appears when I am in inner syntax. b) Sometimes, when I write a HOL term, I used to not get the completion popup when I enter something like \un if there were sufficiently many parse errors in that partial term. Even Ctrl-b did not help. However, I cannot reproduce it in a small example at the moment. We should move anything concerning completion on specific threads on this mailing list, with explicit subject what it is about. It will take quite some time for the coming release to stabilize in that respect. There are a bit too many ambitious and smart mechanisms involved here. For now just a few notes. In the case a), I guess that you still have the completion delay 0.0, while I presently work with 0.5 to give the prover a chance to add semantic completion information, before any popups are shown. That includes a no_completion markup produced by the prover, specifically for things like :, although this introduces a real danger of non-determinism. The gobbling of key events by the popup should not happen, but there are some uncertainties due to key event workarounds in jEdit, and workarounds around these in Isabelle/jEdit. The basic idea is that the popup consumes exactly those key strokes that are relevant to it, and passes everything else to the main text area -- this is also what jEdit usually does. This behaviour has fluctuated concerning cursor left and right keys several times, and I need to check this once again soon. For current 9c3f0ae99532 I confirm that the first cursor left/right event is indeed absorbed. Case b) with \foo sequences happens whenever there is some semantic completion context and string literals involved: backslash sequences destroy the string token, and thus may change the context again. Here is an example: text {* @{term A \un B} *} The language context for 'text' disables symbol completion, because it is in conflict with latex macros, as just seen on the thread on isabelle-users Symbol Shortcuts vs. LaTeX code. The antiquotation changes the language context again to allow symbols, but the malformed string A \un B breaks that, and it falls back into the enclosing text context. So the \un cannot be completed. One of the motivations for backslash escapes is to make them different from usual legal input, but exactly that causes the problems here. I have started to think about making bad string tokens more acceptable to certain language layers, but that is once again an extra complication. A different approach is to use new cartouche syntax instead, which addresses old issues of quotation robustness and escape confusion uniformly. Using that token syntax, the above example becomes this: text ‹ @{term ‹A \un B›} › Here the \un works as expected -- the cartouche remains intact independently of its content, as long as the funny parentheses are nested properly. There is a different error, though: the term parser does not accept outer cartouche tokens yet. It could allow that, but I found this too ambitious as a start for the new syntax. What is funny is that Proof General was actually one of the main reasons of moving only slowly in such token language reforms. We are back again in a dead-lock situation, and not the first time in the past few years. Leaving the old Emacs world behind more decisively would free a lot of hidden resources, and that could have been done at least 2 years ago without any regrets. Of course there is no fundamental problem of Proof General supporting cartouches. There was once special code for nested comments that could be reactivated. The point is that somebody would have to do something, and not just expect that software magically maintains itself. Makarius___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Mon, 28 Apr 2014, Andreas Lochbihler wrote: 2. Reactivity when processing large files With PG, I knew how to control the Isabelle prover. When I edit a large file in a larger project like JinjaThreads, every now and then, Isabelle changes the background colour from red to gray and then, apparently nothing happens for minutes before Isabelle turns it red again and starts reprocessing. Is there some way to explicitly tell Isabelle that it should now start to check again. Toggling continuous checking does not help. Sometimes, I even have to close the theory file and reopen it again. This sounds like the Poly/ML RTS is desparately trying to reclaim memory, by aggressive sharing huge amounts of data. Not long ago that situation lead into real memory problems on my good old 32 GB machine, but David Matthews managed once again to postpone the ultimate JinjaThreads implosion as a black hole of computing resources. For now just the usual game, according to Tim the Enchanter: * What are your exact hardware parameters: CPU, main memory? * What is your operating system? * What are your ML system settings, e.g. as shown by isabelle build -? ? * What are your JVM settings: ISABELLE_JAVA_SYSTEM_OPTIONS and JEDIT_JAVA_OPTIONS ? * What are the options threads and parallel_proofs ? Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Mon, 28 Apr 2014, Peter Lammich wrote: 1. I cannot really control what Isabelle/Jedit processes when, and it invests computation power on the meaningless parts of the file directly after the point where I am editing. I'm not even convinced that it is the right approach to let Isabelle/jEdit's heuristics decide when and what it processes, and make user intervention impossible at first place Isabelle/jEdit is indeed about giving up manual control: the system is moving so fast, that you cannot handle every part of it yourself. It is like a TGV: you buy a ticket and sit comfortably, while the machine is moving on its own. There is nothing really revolutionary about that. Any of the major IDEs work in a similar manner. I don't claim any orginality on ideas here. Last year at ITP Rennes, it was very interesting for me to see that the MSR guys are imitating a similar IDE model in Dafny, although that is a quite different prover and a quite different platform. Hopefully the ITP community will make further moves towards serious IDEs, not just boring copy paste from one buffer into another (where a sub-ordinate process consumes that). (Or even worse, force the user into workarounds like inserting semicolons or ends behind the current editing point, which seems to be common practice among Isabelle/jEdit users) I don't know much about common practice. Maybe that is just what people at TUM do occasionally. There is the general problem here that people are often too shy or just not capable to explain what they are doing. It is also difficult to describe verbally how interaction is done, but videos sometimes help. 2. In PG, when the processed region reaches the end of a theory file, I can be pretty sure that everything is fine with this theory. In Isabelle/jEdit, I have to scan the theory status panel manually for remaining red or pink bars, which is very inconvenient for large projects with hundreds of files. I can't follow this argument. The Theories panel is one of the things that is lacking in Proof General. I cannot imagine anymore how big libraries were managed in the old regime. What is indeed missing is the infamous wrap-up of a session, that I have explained on the Isabelle mailing lists many times, like what isabelle build does in batch mode. That is still not there, since the Theories panel already does a fairly good job, and doing it formally in the IDE document model is not completely trivial: such things need to be done in real time on the spot for large libraries. Moreover, I find it a bit scary that severe errors related to Isabelle/jEdit's document processing model (cf. https://lists.cam.ac.uk/mailman/htdig/cl-isabelle-users/2013-November/msg00170.html) can go undiscovered for several month, although most Isabelle users are on Isabelle/jEdit these days. I ask myself: Have they got so used to strange behaviours of the IDE that they do not realize severe errors any more? That was a severe problem, and I can guess only half of the reasons how this came about. I would not use that as an argument againts Isabelle/jEdit, though, since the problem was caused by some unclear bit of the implementation that had to care about standard mode (PIDE) and legacy mode (TTY / Proof General) at the same time. If the latter had been discontinued 2 years ago, we would all be in better shape today. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On 29/04/14 01:04, Makarius wrote: On Mon, 28 Apr 2014, Matthew Fernandez wrote: My reasons are mostly predictable execution, as I can control what the prover is up to with explicit stepping forwards and backwards. I can probably achieve the same result toggling continuous checking on/off in Isabelle/jEdit, but haven't invested the time in modifying my workflow. Can you say more about typical situations? When doing occasional debugging, either of tools or the system itself, I need more knowledge about what happens when exactly. I never do this in Proof General these days, but within the Prover IDE in a buffer that contains only the main items of interest. Then I edit carefully, based on educated guesses how the PIDE document model works, or I toggle the continuous checking that was newly introduced in Isabelle2013-2. Currently most of my theories are generated by another tool. When debugging the generated theories, I often have to open a file that I know contains many broken proofs. In these circumstances it can be beneficial to have a way of stepping into the middle of a broken proof to explore, while ignoring all the following (also broken) proofs). Having said that, this cuts both ways. Isabelle/jEdit's behaviour of continuing in the face of broken proofs can allow me to explore a proof in the middle of a theory without needing to tediously repair the broken proofs preceding it. To summarise, I use whichever tool is most applicable to my current situation, but predominantly Isabelle/jEdit. I've also encountered the problems discussed in other threads of the Isabelle/jEdit GUI locking up when some tactic is looping and the JVM heap being exhausted with no indication from the UI. I reckon that this refers to the official Isabelle2013-2 release. I have reworked many details of scheduling in the past few months, even just now when writing this email. When the Isabelle2014-RC line starts (probably in July) you should look precisely at your typical applications to see how it works. I don't want to see again a situation where problem reports trickle only slowly *after* the release is shipped. Yes, sorry, you are correct. Either way, any UI issues I have encountered are subsumed by threads others have raised on this mailing list. The information in this e-mail may be confidential and subject to legal professional privilege and/or copyright. National ICT Australia Limited accepts no liability for any damage caused by this email or its attachments. ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
Back to the actual technical questions. What are the main performance bottle-necks here? Printing of intermediate goal states? Or applying intermediate steps repeatedly? I suspect that the problem is not that the printing or the intermediate calculations are taking too long. It's that printing the output the user wants to see is waiting on some other computation finishing, creating the sensation of lag. Some evidence to back this up: I tried an adjustment a while ago in which I had the goal state print incrementally. Even if some of the subgoals took a while to print, you'd see the line with goal (12 subgoals) immediately, and then the subgoals as they were formatted. The short summary is that this helped a little sometimes, but I often still saw an empty Output panel for seconds after moving the cursor to a line that the continuous checker had already processed. I strongly suspect that the print request was waiting in a queue somewhere. The system would become responsive again once it finished doing something else. I don't think that this is to do with garbage collection or heap sharing - I don't recall a specific instance, but I'm sure I've seen this behaviour when there's been plenty of spare memory. Sometimes there would be purple lines in the buffer, suggesting that some of the worker threads were busy on other tasks, but not always. On incremental printing: it's easy to implement by generalising a couple of the relevant Pretty operations to produce a Seq.seq internally rather than a list. It looked promising initially, but then became really annoying, because Isabelle/jEdit or PIDE resets the Output buffer each time it gets more to display. So if you scroll down to look for something, you get scrolled back up for each time a subgoal prints, which can give the sensation that the editor is fighting you. That's why I didn't make any effort to suggest it upstream. I don't know if that helps. Perhaps if I run across a good demonstrative example I'll send it across. Cheers, Thomas. ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
[isabelle-dev] Remaining uses of Proof General?
Are there any remaining uses of Proof General, e.g. in the situation of current Isabelle/5b6f4655e2f2 ? This is neither a joke nor a running gag -- I just can't think of anything myself after the introduction of the spell checker. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
Hallo, I am not, as it were, a user of Proof General anymore; however, I would like, if I may, to point out one thing that annoys me in jEdit and that was, in my opinion, better in Proof General: the handling of abbreviations for Unicode characters. The current behaviour with “immediate completion” in jEdit is already a great improvement over having to press “return” or “tab” every time one wants to use an abbreviation, but one problem that remains is the fact that jEdit performs the insertion of the character as soon as there is only one character of that name left, which often leads to somewhat unpredictable results – for instance, typing “\sigma” results in “σma”. I would prefer a solution that is more suited to my style of typing “\sigma” and immediately getting “σ”, like in Proof General. Another problem is that some abbreviations, like “==”, are not automatically replaced since there are several possibilities. In fact, I suppose what I would really like are customisable instant-replacement abbreviations, like the ones that Proof General offered. While jEdit does have an “abbreviations” section in its settings, it would appear they do not work in such a way. Cheers, Manuel On 04/27/14 20:14, Makarius wrote: Are there any remaining uses of Proof General, e.g. in the situation of current Isabelle/5b6f4655e2f2 ? This is neither a joke nor a running gag -- I just can't think of anything myself after the introduction of the spell checker. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On Sun, 27 Apr 2014, Manuel Eberl wrote: I am not, as it were, a user of Proof General anymore; however, I would like, if I may, to point out one thing that annoys me in jEdit and that was, in my opinion, better in Proof General: the handling of abbreviations for Unicode characters. Please not again this talk about jEdit. What you mean is Isabelle/jEdit, which is the default Prover IDE of Isabelle these days. The difference really matters, because jEdit (the text editor) has many different ways for abbreviations, completion etc. (You could also add various input methods of the Java platform, or the operating system.) In Isabelle/jEdit (the Prover IDE), I had varying default mechanisms for that over the years. The present one (in Isabelle/5b6f4655e2f2) is quite advanced, but also quite complex, not to say complicated. In the coming weeks and months it needs to be polished for the release, but there will be no further changes of the basic approach, as far as I can forsee. It is in principle also possible to provide completely different completion plugins, e.g. if someone wants to imitate the old X-Symbol behaviour precisely. jEdit is a very flexible text editor, and Isabelle/jEdit a powerful Prover IDE, which happens to provide certain defaults out of the box. The current behaviour with “immediate completion” in jEdit is already a great improvement over having to press “return” or “tab” every time one wants to use an abbreviation, but one problem that remains is the fact that jEdit performs the insertion of the character as soon as there is only one character of that name left, which often leads to somewhat unpredictable results – for instance, typing “\sigma” results in “σma”. That in isolation is predictable: the completion happens when the result is unique, and that notion of uniqueness does not change dynamically. That is the behaviour of Isabelle2013-2, though, since the new semantic completion introduces a language context that sometimes introduces non-determinism of a different kind, but not the above. I would prefer a solution that is more suited to my style of typing “\sigma” and immediately getting “σ”, like in Proof General. Here you merely need to train your fingers for the exact amount of prefix required for some symbol. If that does not work, you can leave the immediate completion off (which is the default). Like in Proof General means just the 4.x line, because that mechanism was quite different until 3.x, when I was still using Proof General myself. Another problem is that some abbreviations, like “==”, are not automatically replaced since there are several possibilities. That is on purpose, to avoid other odd effects. Very ambitious users can specify their own abbreviations in $ISABELLE_HOME_USER/etc/symbols, and see themselves how to balance the various possibilities of: (1) single-character abbreviations, e.g. % (2) unique abbreviations, e.g. -- (3) ambiguous abbrevations, e.g. == Note that == is rare in practice anyway, mostly for 'abbreviation' within the logical environment, which does not happen so often. Unless you are using old-style definitions with that Pure connective instead of the normal HOL one. Makarius___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
Re: [isabelle-dev] Remaining uses of Proof General?
On 28/04/14 04:14, Makarius wrote: Are there any remaining uses of Proof General, e.g. in the situation of current Isabelle/5b6f4655e2f2 ? I'm mostly on Isabelle/jEdit now, but I do delve back into Isabelle/Emacs (is that the current terminology for this creature?) every now and then. My reasons are mostly predictable execution, as I can control what the prover is up to with explicit stepping forwards and backwards. I can probably achieve the same result toggling continuous checking on/off in Isabelle/jEdit, but haven't invested the time in modifying my workflow. I've also encountered the problems discussed in other threads of the Isabelle/jEdit GUI locking up when some tactic is looping and the JVM heap being exhausted with no indication from the UI. However, if PG support disappeared entirely I wouldn't shed a tear. Something which used to be a driving factor for me, but no longer is: Isabelle/Emacs is capable of running on underpowered machines which do not have enough resources to run Isabelle/jEdit. This is not a good reason for maintaining legacy support, but there may be users in this situation. On 28/04/14 06:10, Makarius wrote: On Sun, 27 Apr 2014, Manuel Eberl wrote: I am not, as it were, a user of Proof General anymore; however, I would like, if I may, to point out one thing that annoys me in jEdit and that was, in my opinion, better in Proof General: the handling of abbreviations for Unicode characters. Please not again this talk about jEdit. What you mean is Isabelle/jEdit, which is the default Prover IDE of Isabelle these days. The difference really matters, because jEdit (the text editor) has many different ways for abbreviations, completion etc. (You could also add various input methods of the Java platform, or the operating system.) In Isabelle/jEdit (the Prover IDE), I had varying default mechanisms for that over the years. The present one (in Isabelle/5b6f4655e2f2) is quite advanced, but also quite complex, not to say complicated. In the coming weeks and months it needs to be polished for the release, but there will be no further changes of the basic approach, as far as I can forsee. It is in principle also possible to provide completely different completion plugins, e.g. if someone wants to imitate the old X-Symbol behaviour precisely. jEdit is a very flexible text editor, and Isabelle/jEdit a powerful Prover IDE, which happens to provide certain defaults out of the box. The current behaviour with “immediate completion” in jEdit is already a great improvement over having to press “return” or “tab” every time one wants to use an abbreviation, but one problem that remains is the fact that jEdit performs the insertion of the character as soon as there is only one character of that name left, which often leads to somewhat unpredictable results – for instance, typing “\sigma” results in “σma”. That in isolation is predictable: the completion happens when the result is unique, and that notion of uniqueness does not change dynamically. That is the behaviour of Isabelle2013-2, though, since the new semantic completion introduces a language context that sometimes introduces non-determinism of a different kind, but not the above. I would prefer a solution that is more suited to my style of typing “\sigma” and immediately getting “σ”, like in Proof General. Here you merely need to train your fingers for the exact amount of prefix required for some symbol. If that does not work, you can leave the immediate completion off (which is the default). Like in Proof General means just the 4.x line, because that mechanism was quite different until 3.x, when I was still using Proof General myself. Another problem is that some abbreviations, like “==”, are not automatically replaced since there are several possibilities. That is on purpose, to avoid other odd effects. Very ambitious users can specify their own abbreviations in $ISABELLE_HOME_USER/etc/symbols, and see themselves how to balance the various possibilities of: (1) single-character abbreviations, e.g. % (2) unique abbreviations, e.g. -- (3) ambiguous abbrevations, e.g. == Note that == is rare in practice anyway, mostly for 'abbreviation' within the logical environment, which does not happen so often. Unless you are using old-style definitions with that Pure connective instead of the normal HOL one. Makarius ___ isabelle-dev mailing list isabelle-...@in.tum.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev The information in this e-mail may be confidential and subject to legal professional privilege and/or copyright. National ICT Australia Limited accepts no liability for any damage caused by this email or its attachments. ___ isabelle-dev mailing list isabelle-...@in.tum.de