Thx for this!

I'd say that the material is worthy of inclusion into a bool chapter.

Phil
Le 23 sept. 2014 12:51, "Udo Schneider" <udo.schnei...@homeaddress.de> a
écrit :

> Phil,
>
> I'd say that's an implementation of the "Material implication"[1] operator
> from Propositional calculus.
>
> You can write it as
>
> P -> Q
>
> and read it as "P implies Q" or (not 100% correct) "if P (is true) then Q
> (is true)".
>
> Let's take a look at the truth table:
>
>  P | Q | P -> Q
> ---+---+-------
>  t | t | t
> ---+---+-------
>
> inserting it into the statement above yields:
>
> "if true then true" which is true indeed.
>
> The funny thing starts when we look at the case(s), where P is false. The
> general (verbal) rule says that if the premise (P) is false the truth value
> of the conclusion doesn't matter. Hence the complete term is true:
>
>  P | Q | P -> Q
> ---+---+-------
>  f | t | t
> ---+---+-------
>  f | f | t
> ---+---+-------
>
> There is one case left: What happens if the premise is true but the
> conclusion is false? That's in direct violation of the defintion which
> states that "if P (is true) then Q (is true)". As P is true and Q is false
> the truth value of the complete term is false!
>
>  P | Q | P -> Q
> ---+---+-------
>  t | f | f
> ---+---+-------
>
> Or to put it in different words: An implication can only be false if the
> premise is true but the conclusion is false.
>
> So we end up with this truth table:
>
>  P | Q | P -> Q
> ---+---+-------
>  t | t | t
> ---+---+-------
>  f | t | t
> ---+---+-------
>  f | f | t
> ---+---+-------
>  t | f | f
> ---+---+-------
>
> We did not take a look yet, at how to implement this with basic boolean
> operators. So we need to take a look at the table and find the expression:
> Let's start with the exception (fourth case). We can express this as:
>
> !(P & !Q) -> "The term is false if P is true and Q is false"
>
> I added the inner term "P & !Q" to the table to make it easier to follow:
>
>
>  P | Q | P -> Q | P & !Q | !(P & !Q)
> ---+---+--------+--------+-----------
>  t | t | t      | f      | t
> ---+---+--------+--------+-----------
>  f | t | t      | t      | f
> ---+---+--------+--------+-----------
>  f | f | t      | f      | t
> ---+---+--------+--------+-----------
>  t | f | f      | f      | t
> ---+---+--------+--------+-----------
>
> The "last" step is to simplify the term "!(P & !Q)" using one of de
> Morgan's laws:
> !(A & B) == !A | !B
>
> Using this for our term gives
>
> !(P & !Q) == !P | !!Q == !P | Q
>
>  P | Q | P -> Q | P & !Q | !(P & !Q) | !P | Q
> ---+---+--------+--------+-----------+--------
>  t | t | t      | f      | t         | t
> ---+---+--------+--------+-----------+--------
>  f | t | t      | t      | f         | f
> ---+---+--------+--------+-----------+--------
>  f | f | t      | f      | t         | t
> ---+---+--------+--------+-----------+--------
>  t | f | f      | f      | t         | t
> ---+---+--------+--------+-----------+--------
>
> So our final term is "correct" (proof in the truth table) and is
> equivalent to the smalltalk term:
>
> !P | Q  := self not or: [aBlock value]
>
>
> I have to admit though that implications in Propositional calculus really
> gave me a headache. You might simply want to accept that they are defined
> this way. And maybe it doesn't help ... but there are even more strange
> things lurking around the corner [4] :-)
>
> Although not immidiatly obvious all the terms in Propositional calculus do
> not neccessarly have a semantic meaning in context to each other. They are
> totaly independent. The only thing that counts is the truth value of its
> terms. E.g. something like this is mathematically/syntacically valid but
> doesn't make any sense from a semantic point of view:
>
> P := I am 12y old
> Q := It rains
>
> The term "P -> Q" is perfectly fine mathematically/syntacically but
> doesn't mean anything in terms of semantics.
>
>
> Hope this helps.
>
> CU,
>
> Udo
>
>
> [1] http://en.wikipedia.org/wiki/Material_implication_(rule_of_inference)
> [2] http://en.wikipedia.org/wiki/Propositional_calculus
> [3] http://en.wikipedia.org/wiki/De_Morgan's_laws
> [4] http://en.wikipedia.org/wiki/Paradoxes_of_material_implication
>
> On 23.09.14 10:49, p...@highoctane.be wrote:
>
>> Cool article & technique indeed. Ah Smalltalk, where were you all those
>> years ;-)
>>
>> Speaking of PetitParser, which is excellent indeed, there is this #==>
>> method in Boolean.
>>
>> PetitParser uses that a lot. I can use the thing but do not really
>> grasps how it works.
>>
>> Now, the method comment says:
>>
>> Boolean #==> aBlock
>> "The material conditional, also known as the material implication or
>> truth functional conditional.Correspond to not ... or ... and does not
>> correspond to the English if...then... construction.
>> known as:
>> b if a
>> a implies b
>> if a then b
>> b is a consequence of a
>> a therefore b (but note: 'it is raining therefore it is cloudy' is
>> implication; 'it is autumn therefore the leaves are falling' is
>> equivalence).
>> Here is the truth table for material implication:
>>    p   |   q   |   p ==> q
>> -------|-------|-------------
>>    T   |   T   |      T
>>    T   |   F   |      F
>>    F   |   T   |      T
>>    F   |   F   |      T
>> "
>>
>> ^self not or: [aBlock value]
>>
>>
>> This is still a bit foggy to me.
>>
>> Anyone caring to shed some light on that?
>> What are the typical ways to use that?
>>
>> TIA
>> Phil
>>
>>
>>
>>
>> On Tue, Sep 23, 2014 at 10:07 AM, Udo Schneider
>> <udo.schnei...@homeaddress.de
>> <mailto:udo.schnei...@homeaddress.de>> wrote:
>>
>>      > just as it is black magic for me now :D
>>     The nice thing about this approach is the fact that it "just"
>>     piggybacks the normal Smalltalk message sending. So you can step
>>     through it using the Debugger - it's Smalltalk all the way down.
>>
>>     I still remember my first shock when (having no formal background on
>>     parsing theory at that time) I saw the parsing tables generated by
>>     T-Gen. Of course it was Smalltalk ... but understanding those tables
>>     was a nightmare.
>>
>>     PetitParser is the gold standard here IMHO. It is able to parse
>>     arbitrary input (compared to my block expressions only). And you can
>>     still use the Debugger to step through the parsing process *and
>>     still understand what's going on!*
>>
>>     CU,
>>
>>     Udo
>>
>>     On 23.09.14 09:54, kilon alios wrote:
>>
>>         just as it is black magic for me now :D
>>
>>         At least I get the general feeling. I am new to parsing too, so
>>         far I
>>         have only played with regex parsing. Not the most smalltalkish
>>         way but
>>         it works well so far.
>>
>>         On Tue, Sep 23, 2014 at 9:39 AM, Udo Schneider
>>         <udo.schnei...@homeaddress.de
>>         <mailto:udo.schnei...@homeaddress.de>
>>         <mailto:udo.schneider@__homeaddress.de
>>         <mailto:udo.schnei...@homeaddress.de>>>
>>         wrote:
>>
>>              Hi Estaban,
>>
>>              I think the first time I saw this pattern was in ReStore on
>>         Dolphin
>>              Smalltalk. I didn't understand it's implementation back
>> then. I
>>              assume that it's similar to what I described though. But
>>         having a
>>              Smalltalk block automagically creating the equivalent SQL
>>         SELECT
>>              expression was like black magic at that time :-)
>>
>>              CU,
>>
>>              Udo
>>
>>
>>
>>
>>              On 23.09.14 04:15, Esteban A. Maringolo wrote:
>>
>>                  Excellent article.
>>
>>                  I think GLORP uses a similar technique to setup its
>>         expressions, and
>>                  also have issues with #and:/#or: selectors due to
>>         inlining, so
>>                  it uses
>>                  AND:/#OR: instead.
>>
>>                  Regards!
>>
>>                  Esteban A. Maringolo
>>
>>                  pd: Your blog and it's choosen topic made me remember
>>         http://use-the-index-luke.com/
>>
>>                  2014-09-22 20:48 GMT-03:00 Udo Schneider
>>                  <udo.schnei...@homeaddress.de
>>         <mailto:udo.schnei...@homeaddress.de>
>>                  <mailto:udo.schneider@__homeaddress.de
>>         <mailto:udo.schnei...@homeaddress.de>>>__:
>>
>>
>>                      All,
>>
>>                      I just finished a blog entry. It shows how to use
>>         Smalltalk
>>                      blocks as parsers/translators. E.g. translating a
>> Block
>>
>>                                [:customer | (customer joinDate year is:
>> Date
>>                      today year)]
>>
>>                      into an SQL-like String
>>
>>                                (YEAR(customers.joinDate) = 2014)
>>
>>                      The SQL stuff is just an example - you can create
>>         nearly any
>>                      output.
>>
>>                      Check out
>>         http://readthesourceluke.__blo__gspot.de/2014/09/block-____
>> translators-parsing-magic.html
>>         <http://blogspot.de/2014/09/block-__translators-parsing-
>> magic.html>
>>
>>         <http://readthesourceluke.__blogspot.de/2014/09/block-__
>> translators-parsing-magic.html
>>         <http://readthesourceluke.blogspot.de/2014/09/block-
>> translators-parsing-magic.html>__>
>>
>>                      Maybe that's old stuff for some of you - but I hope
>>         it's
>>                      interesting for some at least :-)
>>
>>                      Comments and feedback appreciated.
>>
>>                      CU,
>>
>>                      Udo
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>
>
>
>

Reply via email to