Shortly after sending this message, I decided that it was a bad idea to let
a sleeping bug lie. I am totally and completly confused by ImplicationLink.
  I flat out do not understand it, at all, not one whit.

Consider this:

(ImplicationLink  (VariableNode "$X")   (PredicateNode "is-human"))

In C++ I can cast this to a ScopeLink, and then as the ScopeLink "what are
your variables?"  and I get back the answer "None".

That's it, game over. My brain no longer functions.   What does it mean, to
have a link that has variables, to not have variables in it???

My knee-jerk reaction is that the code is buggy, that it is a mistake to
have ImplicationLink inherit from ScopeLink, that some chain of accidents
lead to this point.   The wikipage is utterly incomprehensible: I don't
understand it either.  What is Implication?  Can we fix this so it makes
sense in some way?

--linas








On Sat, Oct 15, 2016 at 10:11 PM, Linas Vepstas <linasveps...@gmail.com>
wrote:

> OK, I'll defer the conversation. Sooner or later, Amen will open another
> bug report once again titled "question: feature or bug?" and I guess we can
> deal with it then.
>
> --linas
>
> On Thu, Oct 13, 2016 at 12:56 AM, 'Nil Geisweiller' via opencog <
> opencog@googlegroups.com> wrote:
>
>> On 10/13/2016 02:38 AM, Ben Goertzel wrote:
>>
>>> Wait ... we can have nested ScopeLinks, so that a variable embedded in
>>> two ScopeLInks can be bound by the outer one or the inner one... no?
>>>
>>
>> Yes, no problem, if a variable is scoped by both then the inner one will
>> cover the outer one.
>>
>> Anyway, I don't see a problem with having a C++ ImplicationLink class
>> inherit the ScopeLink class. The only think to take care of is to have no
>> variable extracted when there are 2 arguments, that is when using the non
>> sugar for of the ImplicationLink
>>
>> ImplicationLink
>>   P
>>   Q
>>
>> I think that is what the code does, but if it doesn't or its buggy it
>> should be fixed, I'm happy to fix it as soon as unit test fails because of
>> it.
>>
>> Nil
>>
>>
>>
>>> On Wed, Oct 12, 2016 at 4:08 PM, Linas Vepstas <linasveps...@gmail.com>
>>> wrote:
>>>
>>>>
>>>>
>>>> On Wed, Oct 12, 2016 at 12:53 PM, Nil Geisweiller <
>>>> ngeis...@googlemail.com>
>>>> wrote:
>>>>
>>>>>
>>>>>
>>>>>
>>>>> On 10/12/2016 06:55 PM, Linas Vepstas wrote:
>>>>>
>>>>>>
>>>>>> Well, yes, but Nil,, look at the core issue: the variable X in the
>>>>>> Implication link is bound, but the unit test is pretending that its
>>>>>> free.  My question is: are you *sure* you really want the
>>>>>> implicationLink to inherit from Scope Link (and thus, always bind it's
>>>>>> variables)?
>>>>>>
>>>>>
>>>>>
>>>>> X is supposed to be free in the ImplicationLink,
>>>>>
>>>>
>>>>
>>>> Really?  The C++ code has ImplicationLink inheriting from ScopeLink,
>>>> thus
>>>> making it bound.  Perhaps ImplicationLink should not inherit from
>>>> ScopeLink?
>>>>
>>>> ?
>>>>
>>>>
>>>>> bound to the PutLink. Yes I am sure I want it free in the
>>>>> ImplicationLink.
>>>>> Having ImplicationLink inherit Scope should not prevent that. The
>>>>> syntax
>>>>> itself is ambiguity free, if there are ambiguities in the code it's a
>>>>> bug
>>>>> and it should be fixed.
>>>>>
>>>>> Again, I'm happy to fix anything related to that once the issue
>>>>> reappears.
>>>>>
>>>>> Nil
>>>>>
>>>>>
>>>>>> --linas
>>>>>>
>>>>>>
>>>>>> On Wed, Oct 12, 2016 at 10:39 AM, Nil Geisweiller
>>>>>> <ngeis...@googlemail.com <mailto:ngeis...@googlemail.com>> wrote:
>>>>>>
>>>>>>      OK, when they fail again I guess you might feel free to push to
>>>>>> the
>>>>>>      master, as we're apparently using as a dev branch, and then I'll
>>>>>> fix
>>>>>>      that.
>>>>>>
>>>>>>      Nil
>>>>>>
>>>>>>      On 10/12/2016 06:17 PM, Linas Vepstas wrote:
>>>>>>
>>>>>>          No, actually, I worked around that.
>>>>>>
>>>>>>          The only reason that PutLinkUTest currently passes is because
>>>>>>          PutLink
>>>>>>          fails to treat ScopeLinks correctly.  When that gets fixed,
>>>>>> the
>>>>>> unit
>>>>>>          test will fail ... the issue remains the same.
>>>>>>
>>>>>>          --linas
>>>>>>
>>>>>>          On Tue, Oct 11, 2016 at 11:57 PM, Nil Geisweiller
>>>>>>          <ngeis...@googlemail.com <mailto:ngeis...@googlemail.com>
>>>>>>          <mailto:ngeis...@googlemail.com
>>>>>>          <mailto:ngeis...@googlemail.com>>> wrote:
>>>>>>
>>>>>>               Are these unit tests still failing?
>>>>>>
>>>>>>               Nil
>>>>>>
>>>>>>
>>>>>>               On 10/11/2016 08:36 PM, Linas Vepstas wrote:
>>>>>>
>>>>>>                   47 unit tests fail ... I'm not sure if they all fail
>>>>>>          for the same
>>>>>>                   reason, though.
>>>>>>
>>>>>>                   For example PutLink
>>>>>>
>>>>>>                   (PutLink
>>>>>>                       (LambdaLink
>>>>>>                         (VariableList
>>>>>>                           (TypedVariableLink
>>>>>>                             (VariableNode "$X")
>>>>>>                             (TypeNode "PredicateNode")
>>>>>>                           )
>>>>>>                           (TypedVariableLink
>>>>>>                             (VariableNode "$Y")
>>>>>>                             (TypeNode "PredicateNode")
>>>>>>                           )
>>>>>>                         )
>>>>>>                         (AndLink
>>>>>>                           (EvaluationLink
>>>>>>                             (PredicateNode "acquainted")
>>>>>>                             (ListLink
>>>>>>                               (VariableNode "$X")
>>>>>>                               (VariableNode "$Y")
>>>>>>                             )
>>>>>>                           )
>>>>>>                           (ImplicationLink
>>>>>>                             (VariableNode "$X")  ; this is
>>>>>>          alpha-converted to $foo1233
>>>>>>                             (PredicateNode "is-human")
>>>>>>                           )
>>>>>>                           (ImplicationLink
>>>>>>                             (VariableNode "$X") ; this is
>>>>>>          alpha-converted  to $bar456
>>>>>>                             (PredicateNode "is-human")
>>>>>>                           )
>>>>>>                         )
>>>>>>                       )
>>>>>>                       (ListLink
>>>>>>                         (PredicateNode "is-Self")
>>>>>>                         (PredicateNode "is-Bob")
>>>>>>                       )
>>>>>>                   )
>>>>>>
>>>>>>                   So, because the implication link is scoped, the
>>>>>> result
>>>>>>          of the
>>>>>>                   variable
>>>>>>                   substitution is
>>>>>>
>>>>>>                   (AndLink
>>>>>>                       (ImplicationLink
>>>>>>                         (VariableNode "$foo123")
>>>>>>                         (PredicateNode "is-human")
>>>>>>                       )
>>>>>>                       (ImplicationLink
>>>>>>                         (VariableNode "$bar456")
>>>>>>                         (PredicateNode "is-human")
>>>>>>                       )
>>>>>>                       (EvaluationLink
>>>>>>                         (PredicateNode "acquainted")
>>>>>>                         (ListLink
>>>>>>                           (PredicateNode "is-Self")
>>>>>>                           (PredicateNode "is-Bob")
>>>>>>                         )
>>>>>>                       )
>>>>>>                   )
>>>>>>
>>>>>>                   which is not what the unit test expects. The problem
>>>>>>          with using
>>>>>>                   either
>>>>>>                   ScopeLink or LambdaLink is that it becomes
>>>>>> impossible
>>>>>>          to have a
>>>>>>                   stable
>>>>>>                   variable name -- it can be alpha-converted to
>>>>>> anything,
>>>>>>          so any
>>>>>>                   algo that
>>>>>>                   depends on having a fixed, well-known variable name
>>>>>>          will fail.
>>>>>>
>>>>>>                   In this case -- I am not sure -- if you want
>>>>>>          ImplicationLink to be
>>>>>>                   scoped, then the unit test is wrong.  But is the
>>>>>> unit
>>>>>>          test is right,
>>>>>>                   then implication link must not be scoped.  I cannot
>>>>>>          tell which
>>>>>>                   one is
>>>>>>                   wanted.
>>>>>>
>>>>>>                   --linas
>>>>>>
>>>>>>
>>>>>>
>>>>>>                   On Tue, Oct 11, 2016 at 12:12 PM, Nil Geisweiller
>>>>>>                   <ngeis...@googlemail.com
>>>>>>          <mailto:ngeis...@googlemail.com> <mailto:
>>>>>> ngeis...@googlemail.com
>>>>>>          <mailto:ngeis...@googlemail.com>>
>>>>>>                   <mailto:ngeis...@googlemail.com
>>>>>>          <mailto:ngeis...@googlemail.com>
>>>>>>
>>>>>>                   <mailto:ngeis...@googlemail.com
>>>>>>          <mailto:ngeis...@googlemail.com>>>> wrote:
>>>>>>
>>>>>>                        Linas,
>>>>>>
>>>>>>                        I don't have time to get into that right now.
>>>>>> If
>>>>>>          you can
>>>>>>                   point to
>>>>>>                        where exactly it breaks (like a unit test on
>>>>>> your
>>>>>>          branch)
>>>>>>                   it would
>>>>>>                        help. In any case I look carefully into that
>>>>>> and
>>>>>> reply
>>>>>>                   tomorrow.
>>>>>>
>>>>>>                        Nil
>>>>>>
>>>>>>
>>>>>>                        On 10/11/2016 06:55 PM, Linas Vepstas wrote:
>>>>>>
>>>>>>                            You made it inherit from ScopeLink, thus
>>>>>>          making the
>>>>>>                   variables in it
>>>>>>                            implicitly scoped.  Then you added the file
>>>>>>                   ImplicationLink.cc,
>>>>>>                            and have
>>>>>>                            notes in there, complaining about how
>>>>>>          variables are
>>>>>>                   implcitly
>>>>>>                            scoped.
>>>>>>                            The wiki page for it,
>>>>>>          http://wiki.opencog.org/w/ImplicationLink
>>>>>>          <http://wiki.opencog.org/w/ImplicationLink>
>>>>>>                   <http://wiki.opencog.org/w/ImplicationLink
>>>>>>          <http://wiki.opencog.org/w/ImplicationLink>>
>>>>>>                            <http://wiki.opencog.org/w/ImplicationLink
>>>>>>          <http://wiki.opencog.org/w/ImplicationLink>
>>>>>>                   <http://wiki.opencog.org/w/ImplicationLink
>>>>>>          <http://wiki.opencog.org/w/ImplicationLink>>> still
>>>>>>                            says things that are wrong (re alpha
>>>>>>          conversion -- each
>>>>>>                   lambda gets
>>>>>>                            alpha converted, so the "sugar syntax"
>>>>>> section
>>>>>>          cannot
>>>>>>                   possibly
>>>>>>                            be right).
>>>>>>
>>>>>>                            I'm asking, because I'm trying to fix #910
>>>>>> by
>>>>>>          doing the
>>>>>>                   alpha
>>>>>>                            conversion
>>>>>>                            correctly, and the result of the fix is
>>>>>> that
>>>>>>          unit tests
>>>>>>                   with
>>>>>>                            implication
>>>>>>                            links in them now fail.  The whole thing
>>>>>>          smells bad.
>>>>>>
>>>>>>                            Either ImplicationLinks do inherit from
>>>>>>          ScopeLink, in which
>>>>>>                            case, there
>>>>>>                            should be no complaints about how the
>>>>>>          ScopeLink works:
>>>>>>                   it does
>>>>>>                            the right
>>>>>>                            thing.  If you don't like what the
>>>>>> scopeLink
>>>>>>          does, then
>>>>>>                            ImplicationLinks
>>>>>>                            should NOT inherit from it ...
>>>>>>
>>>>>>                            In either case, the wiki page needs fixing,
>>>>>>          because the
>>>>>>                   alpha
>>>>>>                            conversion
>>>>>>                            conversation we had recently renders that
>>>>>> page
>>>>>>          incoherent.
>>>>>>
>>>>>>                            I don't really care, one way or the other,
>>>>>> but
>>>>>>          I do need to
>>>>>>                            understand
>>>>>>                            the intended design well enough to be able
>>>>>> to
>>>>>>          fix bugs, and
>>>>>>                            right now, I
>>>>>>                            don't understand what ImplicationLink is,
>>>>>> or
>>>>>>          how its
>>>>>>                   supposed to
>>>>>>                            work.
>>>>>>
>>>>>>                            --linas
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups
>>>> "opencog" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an
>>>> email to opencog+unsubscr...@googlegroups.com.
>>>> To post to this group, send email to opencog@googlegroups.com.
>>>> Visit this group at https://groups.google.com/group/opencog.
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/opencog/CAHrUA35RygO2MWjZJ
>>>> 2MfEA2TCvBC8kjvFDVvj2-CNmqP2e9PLQ%40mail.gmail.com.
>>>>
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
>>>
>>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "opencog" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to opencog+unsubscr...@googlegroups.com.
>> To post to this group, send email to opencog@googlegroups.com.
>> Visit this group at https://groups.google.com/group/opencog.
>> To view this discussion on the web visit https://groups.google.com/d/ms
>> gid/opencog/57FF2210.9090304%40gmail.com.
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"opencog" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to opencog+unsubscr...@googlegroups.com.
To post to this group, send email to opencog@googlegroups.com.
Visit this group at https://groups.google.com/group/opencog.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/opencog/CAHrUA37%3Djebx87Z2uYTY4a5E1pSJ2zMzwZydFTe%2BoA612dgwFA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to