"Is it coherent to ask whether any two things are equal"

def:  "yes" is the reply that follows recognized equality and "no" is the 
reply that does not
obs:  recognition of equality is situated  { ≟(2, 2)  ≟(2, *2*)  ≟(2, teuw) 
} 
yes






On Thursday, September 10, 2015 at 11:54:52 PM UTC-4, Jeff Bezanson wrote:
>
> I think there are some viable options here, for example making numbers 
> non-iterable, and/or doing some combination of checks and conversions. 
> However splitting Base for this purpose is nowhere near viable. It's a 
> cop-out design: we can't decide which behavior is right, so we just 
> give you both and make you pick. Very confusing. If you need to do 
> something extra to enable convenient mode, then it's not convenient. 
> Or, on the other side, if every style guide is going to recommend 
> enabling strict mode because otherwise your program is a mess, why 
> provide an alternative at all? 
>
> Unfortunately, at the bottom of this issue there is a fundamental 
> philosophical debate that may not be possible to resolve with design 
> choices. Namely, is equality a total theory? Is it coherent to ask 
> whether any two things are equal, or do the arguments first have to 
> clear some hurdle of commensurability? It's no secret that julia is 
> biased from the beginning towards the former, no-hurdles view. It 
> would be great if the two sides in this debate could just get along 
> somehow, but it doesn't seem like something we're likely to resolve 
> here. 
>
> On Thu, Sep 10, 2015 at 5:20 PM,  <[email protected] <javascript:>> 
> wrote: 
> > Jeff, 
> > 
> > Thanks very much for pointing out the issue that I opened last year.  I 
> had 
> > thought incorrectly that I had raised the matter of type-checking with 
> 'in' 
> > on this newsgroup rather than on github, which explains why I couldn't 
> > locate the previous discussion in my first post today. 
> > 
> > I am bringing the subject up again because I understand Julia much 
> better 
> > now, and I have realized that a main cause for the loose type-checking 
> is 
> > the plethora of methods in Base (e.g., the start/next/done functions 
> that 
> > turn a Float64 into an iterable) that create certain conveniences but 
> also 
> > create many possibilities for programmer blunders.  Now that I 
> understand 
> > the cause of the loose type-checking, I am able to propose a 
> (relatively) 
> > simple solution, which is to split Base into two parts: essentials and 
> > conveniences 
> > 
> > -- Steve 
> > 
> > 
> > On Thursday, September 10, 2015 at 2:31:39 PM UTC-4, Jeff Bezanson 
> wrote: 
> >> 
> >> If anybody is interested and missed it the first time around, there is 
> >> some good discussion of this in 
> >> https://github.com/JuliaLang/julia/issues/7903. 
> >> 
> >> On Thu, Sep 10, 2015 at 2:01 PM, Randy Zwitch 
> >> <[email protected]> wrote: 
> >> > How do you enumerate all of the cases that are "oddball"? 
> >> > 
> >> > julia> [1,2,3] in Any[[1],[2],[3],[1,2,3]] 
> >> > 
> >> > true 
> >> > 
> >> > 
> >> > julia> [1,2,3] in [[1],[2],[3],[1,2,3]] 
> >> > 
> >> > false 
> >> > 
> >> > 
> >> > In the first case, because I declare the array of type "Any", I have 
> an 
> >> > Array of Arrays (Array{Any, 1}). In that case, the "in" statement is 
> >> > perfectly valid to test for and is true. 
> >> > 
> >> > 
> >> > In the second case, you get false. What's difficult here is that I 
> think 
> >> > the 
> >> > compiler is confused due to the change in concentation syntax: 
> >> > 
> >> > 
> >> > julia> typeof([[1],[2],[3],[1,2,3]]) 
> >> > 
> >> > WARNING: [a,b,...] concatenation is deprecated; use [a;b;...] instead 
> >> > 
> >> >  in depwarn at ./deprecated.jl:73 
> >> > 
> >> >  in oldstyle_vcat_warning at ./abstractarray.jl:29 
> >> > 
> >> >  in vect at abstractarray.jl:32 
> >> > 
> >> > while loading no file, in expression starting on line 0 
> >> > 
> >> > Array{Int64,1} 
> >> > 
> >> > 
> >> > 
> >> > I'm not proposing a solution, just highlighting that it would be 
> pretty 
> >> > difficult to protect everyone from themselves. At some point, people 
> >> > need to 
> >> > be precise about what they mean. 
> >> > 
> >> > 
> >> > 
> >> > 
> >> > On Thursday, September 10, 2015 at 12:59:59 PM UTC-4, 
> >> > [email protected] 
> >> > wrote: 
> >> >> 
> >> >> About a year ago I proposed on this forum that 'in' should do more 
> >> >> type-checking.  For example, the expression 
> >> >> 
> >> >>    [1,2,3] in [1,2,3,4] 
> >> >> 
> >> >> is almost certainly a programmer error.  But Julia accepts it 
> without 
> >> >> complaint and returns 'false'.  I myself have had problems with the 
> >> >> wrong 
> >> >> version of 'in' getting called and nonsensical results returned. 
> >> >> 
> >> >> The argument raised against this proposal was the following. 
>  According 
> >> >> to 
> >> >> Julia semantics, "a in b" is equivalent to 
> >> >> 
> >> >>      for x in b 
> >> >>         if x==a 
> >> >>            return true 
> >> >>         end 
> >> >>      end 
> >> >>      return false 
> >> >> 
> >> >> But in fact, as the Julia 0.4 recent masters show, there are at 
> least 
> >> >> two 
> >> >> cases in which 'in' does not follow these semantics and returns an 
> >> >> error if 
> >> >> it thinks the programmer made a mistake.  (See the trace below-- 
> both 
> >> >> are 
> >> >> cases where Julia 0.4 changed behavior from 0.3). 
> >> >> 
> >> >> It is important for Julia to be vigilant about catching obvious 
> >> >> programmer 
> >> >> errors.  This will help improve its chances for use in introductory 
> >> >> programming courses at universities, among other reasons. 
> >> >> 
> >> >> I propose the following: In Julia 0.5, Base should be broken up into 
> >> >> Base 
> >> >> and ExpansiveBase.  Functions like in(x::Any,itr::Any) from 
> reduce.jl 
> >> >> or 
> >> >> start(x::Number) from number.jl that allow oddball user code to be 
> >> >> accepted 
> >> >> by the compiler would be put into ExpansiveBase.  The semantics for 
> >> >> 'in(a,b)' when only Base is loaded should be either 
> >> >> typeof(a)==eltype(b) or 
> >> >> that there exists a method convert(eltype(b),a). 
> >> >> 
> >> >> -- Steve Vavasis 
> >> >> 
> >> >> 
> >> >> julia> 0 in IntSet() 
> >> >> WARNING: stored zeros in IntSet is deprecated 
> >> >>  in depwarn at deprecated.jl:63 
> >> >>  in in at intset.jl:163 
> >> >> while loading no file, in expression starting on line 0 
> >> >> false 
> >> >> 
> >> >> julia> (1,2) in Dict{Any,Any}() 
> >> >> ERROR: Associative collections only contain Pairs; 
> >> >> Either look for e.g. A=>B instead, or use the `keys` or `values` 
> >> >> function if you are looking for a key or value respectively. 
> >> >>  in in at dict.jl:13 
> >> >> 
> >> > 
>

Reply via email to