Hi Thierry,
*>>> It's possible to edit a step's formula using ALT-left click, why not a
simple click? (that's why I naturally tried first, then I saw the
tooltip...)*
I reserved a simple click for future - I am planning to implement a feature
when a simple click on any symbol will highlight the smallest syntax
subtree the symbol is included into. I hope this feature will simplify
exploring long statements and also it should make it easier to copy
subexpressions.
*>>> If when creating a new step I change my mind, it seems there is no way
out of actually creating the step and then deleting it. I end up writing
some dummy, and then deleting the step. It would be nice if e.g. just ESC
would get you out of the step edition mode.*
That’s right, currently a user is forced to type at least one dummy symbol
in that situation. I was trying to implement the editor in the most simple
way for me for not to spent a lot of time on ui development when some core
features are not ready. Unfortunately, this simple use case is not so
simple to fix. But I will definitely fix it in the future.
*>>> When "Justification cannot be determined automatically", it would be
nice to find out what fails: was an unification found, but distinct
variables conditions were missing, or was a unification found, but no
matching for (such and such) hypothesis, etc…*
Yeah, I also though about that. Unfortunately I don’t see any simple fix
for this at the moment. Moreover the unification algorithm is still under
development and I am actively modifying it now when developing bottom-up
proofs. But for sure I will try to improve this in the future. BTW, what is
current behavior of mmj2 in a similar situation?
Thanks Thierry for your feedback!
And next follows the most difficult part of my response (at least for me)
:)
*>>> Your examples works, but in many cases I do not manage to replace
metavariables. For example in "spcgv", when I want to replace "setvar1" by
e.g. "x", or in "brab2a" when I want to replace "class1" by anything.*
If I am getting you correctly, you started with an empty page, read all the
set.mm, added “spcgv” by searching it by label. As a result you’ve got the
state as follows:
Variables:
var1 setvar setvar1
var2 class class2
var3 wff wff3
var4 wff wff4
var5 class class5
Disjoints:
setvar1,wff4,class2
stmt1-spcgv.11: |- ( setvar1 = class2 -> ( wff3 <-> wff4 ) )
stmt1:|- ( class2 e. class5 -> ( A. setvar1 wff3 -> wff4 ) )
Then you tried to replace setvar1 with x and you’ve got “No substitution
can be extracted from the provided expressions.”
In that case it behaves exactly as I programmed it, though I am not sure if
this is correct as for a proof assistant. And I need your and others
experienced metamath developers help to verify this. This case doesn’t work
because of disjoints. The Metamath book explains how to check disjoints
when we are verifying a proof, but I have not found any explanation of how
to check disjoints in a proof assistant (or maybe I have not read till that
place in the book or skipped it unintentionally :) ) So I came up with the
following rules myself. When you provide “Replace what” = [some sequence of
active symbols] and “Replace with” = [another sequence of active symbols],
the program searches for all possible substitutions by means of which we
can get from [some sequence of active symbols] to [another sequence of
active symbols]. In your example there is only one possible substitution
setvar1 -> [x]. Then the program adds all other active variables to this
substitution replacing them by themselves. So as a result we have such
substitution:
setvar1 -> [x]
x -> [x]
ph -> [ph]
class2 -> [class2]
… and so on for all other variables defined in set.mm and all the work
variables.
I introduced this by analogy of applying substitutions during proof
verification, when we have to apply a substitution simultaneously for all
the variables in the assertion used in the proof step.
Next the program checks disjoints for this substitution. setvar1 results in
[x] (an expression consisting of only one symbol) and class2 results in
[class2] (also an expression consisting of only one symbol). Then similarly
to the checks in proofs:
1.
“the two expressions must have no variables in common”: [x] and [class2]
have no common variables - this is passed.
2.
“each possible pair of variables, one from each expression, must exist
in an active $d statement …”, i.e. x and class2 must be in a disjoin group
- this fails. So the entire substitution is considered invalid and the
programs shows “No substitution can be extracted from the provided
expressions.”
This is possible to fix by adding a disjoint “x,wff4,class2”, so you’ll end
up with two disjoints:
Disjoints:
setvar1,wff4,class2
x,wff4,class2
Then the replacement should work.
Please let me know if this is what is expected from a proof assistant. If
this is correct behavior, then I will consider adding some messages to the
ui explaining why no substitution can be found or even adding missing
disjoints automatically.
Best regards,
Igor
On Wednesday, January 11, 2023 at 2:44:54 PM UTC+1 Thierry Arnoux wrote:
> Hi Igor,
>
> Ok, let me give you here some quick and random feedback:
>
> Your examples works, but in many cases I do not manage to replace
> metavariables. For example in "spcgv", when I want to replace "setvar1" by
> e.g. "x", or in "brab2a" when I want to replace "class1" by anything.
> Every time I get a message "No substitution can be extracted from the
> provided expressions." How can I deal with that?
>
> It's possible to edit a step's formula using ALT-left click, why not a
> simple click? (that's why I naturally tried first, then I saw the
> tooltip...)
>
> If when creating a new step I change my mind, it seems there is no way out
> of actually creating the step and then deleting it. I end up writing some
> dummy, and then deleting the step. It would be nice if e.g. just ESC would
> get you out of the step edition mode.
>
> When "Justification cannot be determined automatically", it would be nice
> to find out what fails: was an unification found, but distinct variables
> conditions were missing, or was a unification found, but no matching for
> (such and such) hypothesis, etc...
>
> Of course more automation would be nice...
>
>
>
> On 06/01/2023 19:17, Igor Ieskov wrote:
>
> I fixed few bugs and moved my proof assistant to a new URL -
> https://igorocky.github.io/mm-proof-assistant/demo/latest/index.html
>
> This URL will always redirect to the latest version of the proof assistant
> ( to https://igorocky.github.io/mm-proof-assistant/demo/v*N*/index.html )
>
> Best regards,
>
> Igor
>
> On Friday, January 6, 2023 at 1:14:14 AM UTC+1 Igor Ieskov wrote:
>
>> Thanks Glauco!
>>
>> Best regards,
>>
>> Igor
>>
>> On Friday, January 6, 2023 at 1:07:57 AM UTC+1 Igor Ieskov wrote:
>>
>>> Thanks Antony and David for your feedback!
>>>
>>> "Who's it targeted at?"
>>>
>>> At the moment I don’t have any particular long term plans for this
>>> project. I started it just out of curiosity, Metamath seemed very simple
>>> and I wanted to try to automate proofs. When I realized that I cannot
>>> achieve desired level of automation, I started watching what existing
>>> solutions can do. I liked how mmj2 works because it is also seemed simple
>>> but very practical. So I decided to check if I can do something similar.
>>> When I was able to repeat the proof from the mmj2 tutorial I wrote this
>>> post. Now I am planning to work on two more major features - proving in
>>> bottom-up direction and proof explorer, some small UI improvements and
>>> writing more tests (the code is tough, I already found few bugs). When I
>>> complete these goals, probably, I will use this assistant to learn to
>>> create Metamath proofs myself. Editing code in a dedicated code editor is
>>> much more comfortable but it is difficult to implement, so I didn’t even
>>> choose between what kind of UI to implement. Simple HTML UI was the only
>>> option for me.
>>>
>>> "it might be good to provide a README.md (and a repository with a
>>> sensible name)"
>>>
>>> I moved the code to a new repository and provided a README file with
>>> instructions. Please let me know if there are any issues with running the
>>> project locally.
>>>
>>> The new repo - https://github.com/expln/metamath-proof-assistant
>>>
>>> This project depends on @expln/utils npm module. This is my project too
>>> ( https://github.com/expln/rescript-utils ) But this is not a usual
>>> library. This is just a set of useful functions which I collected in one
>>> place to reuse across my other projects. And version N+1 may be absolutely
>>> not compatible with version N :)
>>>
>>> "I'd like to see some reusable packages make their way into the npm
>>> repository so that this isn't such a huge mountain to climb."
>>>
>>> That’s a good idea. As for now I think it makes sense for me to
>>> implement remaining features and when the code (underlying data structures)
>>> become more stable, I will be able to create some API and publish it as an
>>> npm package. I also feel like I need to warn regarding the algorithm I use
>>> for unification. I read in the mmj2 documentation that mmj2 first creates
>>> syntax trees of expressions and then compares them to find possible
>>> substitutions (please correct me if I am wrong). As I understand this
>>> approach guaranties quick response for any expressions. But what I
>>> implemented is comparing two arrays of integers with some performance
>>> improvements (counting parentheses is one of them). And there is no
>>> guarantee that this algorithm will work fast for any expressions. So it may
>>> turn out that using my future library is not such a good decision :)
>>>
>>> "I notice that you don't have a license included - please add one!"
>>>
>>> I added MIT license. Thanks for pointing out to this!
>>>
>>>
>>> Best regards,
>>>
>>> Igor
>>>
>>>
>>> On Thursday, January 5, 2023 at 5:14:42 PM UTC+1 David A. Wheeler wrote:
>>>
>>>>
>>>> > On Jan 3, 2023, at 4:51 PM, Igor Ieskov <[email protected]> wrote:
>>>> >
>>>> > Hi all,
>>>> >
>>>> > I am developing a web-based proof assistant and would like to share
>>>> current results. The proof assistant is written in ReScript programming
>>>> language and React UI library. It runs completely in the browser. It uses
>>>> the same approach for building proofs as mmj2 (but at the moment it
>>>> doesn’t
>>>> have all the features mmj2 has). I recorded a video (without verbal
>>>> explanations) similar to one of the mmj2 tutorial videos in order to
>>>> demonstrate its features. Any feedback is appreciated.
>>>> >
>>>> >
>>>> >
>>>> > The demo video (if it is not opening, try to download; and sorry for
>>>> low quality of the video):
>>>> >
>>>> >
>>>> https://drive.google.com/file/d/1JCDffUXkb_J-TiA07aNwK9SBKyaukaA3/view?usp=share_link
>>>>
>>>> >
>>>> >
>>>> > The proof assistant:
>>>> >
>>>> > https://igorocky.github.io/mm-proof-assistant/demo/v1/index.html
>>>> >
>>>> >
>>>> > The source code is stored in two repositories. And there is mess with
>>>> it. I started writing it inside of another project, put some logic into a
>>>> second repo. Because of that it is not easy to run it locally. But I am
>>>> going to improve this soon.
>>>> >
>>>> >
>>>> > The source code:
>>>> >
>>>> >
>>>> https://github.com/Igorocky/learn-js-react-app/tree/master/src/metamath
>>>> >
>>>> > https://github.com/Igorocky/js-common-functions/tree/master/src/main
>>>>
>>>> That's awesome!
>>>>
>>>> I notice that you don't have a license included - please add one!
>>>> If you're going to release as open source software, then you need an
>>>> OSS license.
>>>> MIT is especially common:
>>>> https://github.com/IQAndreas/markdown-licenses/blob/master/mit.md
>>>> The Apache-2.0 and GPL-2.0+ licenses are also widely used.
>>>>
>>>> A way to "get started" with proofs without any installation steps at
>>>> all has its appeal!
>>>>
>>>> Sadly, the mmj2 tool has become harder to install and maintain.
>>>> One problem: it's in Java, but it calls out to JavaScript code, and the
>>>> mechanism it uses for calling JavaScript has been dropped from
>>>> more-recent versions of Java.
>>>> Specifically, mmj2 uses Nashorn. My understanding is that Nashorn's
>>>> intended replacement is GraalVM.
>>>> I don't think this is *unsurmountable*.
>>>> Mario looked into this briefly & expected that it wouldn't be hard to
>>>> switch to GraalVM
>>>> <https://github.com/digama0/mmj2/issues/7#issuecomment-428404641>,
>>>> but no one has (as of yet) picked up this work.
>>>>
>>>> --- David A. Wheeler
>>>>
>>>> --
> You received this message because you are subscribed to the Google Groups
> "Metamath" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/metamath/9aac3fc2-ea01-4bce-afab-7f08aa99be8en%40googlegroups.com
>
> <https://groups.google.com/d/msgid/metamath/9aac3fc2-ea01-4bce-afab-7f08aa99be8en%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
>
--
You received this message because you are subscribed to the Google Groups
"Metamath" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/metamath/e4e7deb6-06e7-41a3-88a4-a2adcdf1293en%40googlegroups.com.