Received: from mail-wg0-f56.google.com ([74.125.82.56]:60570) by stodi.digitalkingdom.org with esmtps (TLSv1:RC4-SHA:128) (Exim 4.76) (envelope-from ) id 1TnjEI-00073o-U5; Tue, 25 Dec 2012 21:08:47 -0800 Received: by mail-wg0-f56.google.com with SMTP id 12sf3159337wgh.21 for ; Tue, 25 Dec 2012 21:08:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20120806; h=x-received:x-beenthere:x-received:x-received:received-spf :mime-version:in-reply-to:references:date:message-id:subject:from:to :x-original-sender:x-original-authentication-results:reply-to :precedence:mailing-list:list-id:x-google-group-id:list-post :list-help:list-archive:sender:list-subscribe:list-unsubscribe :content-type; bh=h1EVTHDcEXvgoesDWnK0YU0cVXO/UpLINNz7WR6OZXU=; b=QKELxiGl5FwwHTFjmgsn03wdSjo3T8ectnypJ76xT6cIJ2ypfTjFLu3ZMStRO4Aphe u1tJFnQsmmYLcVd/GeDamQfnX8/6jS9Jvra52L3K5yrQsuIHP1IlAEW3NUJT8T1VVDmd nWLflVgPkLlOO0HYZyqROGBSUCzZorkw060lekDsXGU2jzL8GSsRT36UsncMSHCOG/KN aT24Yqa8DyeU14z9/Bdu77g6NFbEsFv1mGpDolH6KGtsj8JWq4fX8sRTYMsS6pfF95hr GUbXsnihHt8VwCy5WkFVWeLfvcCP7dQEUMWyhWejs8XOg3mQDIgRSjNPAWDEmf3SsWvB sTjQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:x-beenthere:x-received:x-received:received-spf :mime-version:in-reply-to:references:date:message-id:subject:from:to :x-original-sender:x-original-authentication-results:reply-to :precedence:mailing-list:list-id:x-google-group-id:list-post :list-help:list-archive:sender:list-subscribe:list-unsubscribe :content-type; bh=h1EVTHDcEXvgoesDWnK0YU0cVXO/UpLINNz7WR6OZXU=; b=V5SAIXmHd1TY59gkrviWB/CLRYAwZcNe8KvPgaAmHE15keNmuSIznaM3wq6TmWCgkY pg7xeT5bXBJyVAwzCslbbce++Je8bsRRG1qqMjJ1HUHil7yypy41y9h9Mli2enA/1XUb rklkoS+zOFzAVzFKHX88JOaEQs9Q3xUNg0TiJSccsizxHxhjkimU+90FSHZO7wHCkH4J B/OB8nHLWkzTeTHTNLnjBJwhN/AoHPKswIdMGBXT4nAHTnefZ56iO7WR9ylEclVxucvb uZ6FaNHaU1vHHnmgTraoiGfCeG0sPWke4V0VHju2q2oR1VMnB0G0UpsYyU0aUSboIRhO Kdyw== X-Received: by 10.180.24.196 with SMTP id w4mr3977747wif.3.1356498507234; Tue, 25 Dec 2012 21:08:27 -0800 (PST) X-BeenThere: lojban@googlegroups.com Received: by 10.180.75.102 with SMTP id b6ls2888143wiw.29.gmail; Tue, 25 Dec 2012 21:08:25 -0800 (PST) X-Received: by 10.204.146.25 with SMTP id f25mr1024959bkv.1.1356498505918; Tue, 25 Dec 2012 21:08:25 -0800 (PST) X-Received: by 10.204.146.25 with SMTP id f25mr1024958bkv.1.1356498505887; Tue, 25 Dec 2012 21:08:25 -0800 (PST) Received: from mail-la0-f45.google.com (mail-la0-f45.google.com [209.85.215.45]) by gmr-mx.google.com with ESMTPS id v18si1883547bkw.1.2012.12.25.21.08.25 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 25 Dec 2012 21:08:25 -0800 (PST) Received-SPF: pass (google.com: domain of blindbravado@gmail.com designates 209.85.215.45 as permitted sender) client-ip=209.85.215.45; Received: by mail-la0-f45.google.com with SMTP id p9so10241620laa.18 for ; Tue, 25 Dec 2012 21:08:25 -0800 (PST) MIME-Version: 1.0 Received: by 10.152.124.15 with SMTP id me15mr24697893lab.5.1356498505663; Tue, 25 Dec 2012 21:08:25 -0800 (PST) Received: by 10.112.24.42 with HTTP; Tue, 25 Dec 2012 21:08:25 -0800 (PST) In-Reply-To: References: Date: Wed, 26 Dec 2012 00:08:25 -0500 Message-ID: Subject: [lojban] Re: Some weirdness in how mathematicians work with quantifiers From: Ian Johnson To: lojban@googlegroups.com X-Original-Sender: blindbravado@gmail.com X-Original-Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of blindbravado@gmail.com designates 209.85.215.45 as permitted sender) smtp.mail=blindbravado@gmail.com; dkim=pass header.i=@gmail.com Reply-To: lojban@googlegroups.com Precedence: list Mailing-list: list lojban@googlegroups.com; contact lojban+owners@googlegroups.com List-ID: X-Google-Group-Id: 1004133512417 List-Post: , List-Help: , List-Archive: Sender: lojban@googlegroups.com List-Subscribe: , List-Unsubscribe: , Content-Type: multipart/alternative; boundary=f46d0437458191860904d1ba6b17 X-Spam-Score: -0.1 (/) X-Spam_score: -0.1 X-Spam_score_int: 0 X-Spam_bar: / --f46d0437458191860904d1ba6b17 Content-Type: text/plain; charset=ISO-8859-1 (Also, I made a small mistake in the original post; I proved f*g is uniformly continuous, not just continuous, under those hypotheses. To any other mathematicians around these parts, sorry if that confused you. The point about quantifiers still applies.) On Tue, Dec 25, 2012 at 10:41 PM, Ian Johnson wrote: > I see no one's answered; I'm not sure if no one's interested, or if this > is just over everyone's head. Accordingly, the following is the same idea > in a different context, one that I know at least a few jbopre are familiar > with. But if you don't know any Haskell, this post isn't going to do you > any good. > > The example I have in mind comes from the use of monads in Haskell, and > specifically it has to do with how we think about do notation. Without do > notation, we get things like this: > m1 >>= \x1 -> m2 >>= \x2 -> f x1 x2 > As a concrete example: > getLine >>= \str1 -> getLine >>= \str2 -> putStrLn $ str1 ++ str2 > is an IO action that gets two strings from the user and prints their > concatenation. > As is, this is normal; variables which are arguments to the second > argument to >>= are lambda variables, with corresponding scope. str1 and > str2 don't "exist" in the natural mental model of this code, they're just > names of the arguments that tell the code how to use the results of the two > getLine actions. You could imagine "\str1 -> getLine ..." being a black box > function with a name, that you attach to getLine, and then str1 and str2 > vanish entirely. > > As we know, though, this model gets cumbersome when we start bringing > together a lot of monadic values into the same value using >>=, so there's > do notation to make things less troubling. The above looks like > do str1 <- getLine > str2 <- getLine > putStrLn $ str1 ++ str2 > in do notation. While this notation desugars to the above, the way that we > model it mentally is different. Because the functions are hidden and the > binds to lambdas are written analogously to assignments, we think of str1 > and str2 as values unto themselves. They are *instantiated* in our mental > model of the code. Most of the time, this model is fine, and indeed more > useful than the model above, even though it is rather different from what > actually is going on. The cases when this model works poorly (such as the > reverse state monad that some of you may have seen) seem completely bizarre > when written in do notation, because you can't think of those cases as > basically operating like an imperative DSL. > > This instantiation, like the instantiation of quantified variables that I > mentioned previously, doesn't actually make logical sense, but is a model > that makes it easier to reason about the code without having to deal with > functions as extensively as we would otherwise. And yet...it's sort of > troubling that we think like this, because we really can't do this while > preserving everything about the desugared code. It'd be really nice to be > able to do such a thing (things like {da goi ko'a} essentially, like in the > original post) in Lojban, but I'm really not sure whether it should be > allowed, since it really is an interaction with logic that isn't actually > logical at all. > > As before, I'm open to thoughts, although I admit that this prompt isn't > particularly specific. > > > mu'o mi'e la latro'a > > On Mon, Dec 24, 2012 at 6:53 PM, Ian Johnson wrote: > >> This is rather subtle, so I think it's best to begin with an example. >> This example isn't all *that* mathematically heavy, but it does involve >> the interaction of several sentences which each have a "forall exists >> forall" quantifier structure. This *does* have something to do with >> Lojban, but it will be a while before that is actually clear. You've been >> warned :) >> >> Suppose g : R->R is uniformly continuous and f : R -> R is integrable on >> [a,b]. Define the new function >> (f * g)(x) = integral from a to b of g(x-z) f(z) dz >> We want to show that the function f * g is continuous at every point, >> that is: >> (for all x in R,e1 > 0)(there exists d1 > 0)(for all y in R) |x-y| < d1 >> -> |(f * g)(x) - (f * g)(y)| < e1. >> >> (I write quantifiers in almost-prenex-normal form; my apologies if it is >> hard to read.) >> >> Let e1 > 0. >> Using the uniform continuity of g we have >> (for all e2 > 0)(exists d2 > 0)(for all x,y in R) |x-y| < d2 -> |g(x) - >> g(y)| < e2. >> >> So let e2 > 0, obtain the desired d2 > 0, and take x,y with |x-y| < d2. >> Then: >> >> | (f * g)(x) - (f * g)(y) | = | integral from a to b of f(z) (g(x-z) - >> g(y-z)) dz | >> <= integral from a to b of |f(z) (g(x-z) - g(y-z))| dz >> = integral from a to b of |f(z)| |g(x-z) - g(y-z)| dz >> < integral from a to b of |f(z)| e2 dz >> = Me2 >> where M = integral from a to b of |f(z)| exists and is finite by >> assumption. >> >> (Now comes the weird part.) >> >> Setting e2 = e1/M, obtain d2 using the continuity of g, then set d1=d2. >> Then if |x-y| < d1, from the above |(f * g)(x) - (f * g)(y)| < M e1/M = e1 >> as desired. Thus f*g is continuous at every point. >> >> What is weird here is that we're playing with e2 and d2 as if they're >> real. e1 and d1 are interacted with as the quantifier structure suggests: >> you introduce e1, do some work, and find a valid value of d1. But e2 is now >> *instantiated *(in this case in a trivial way, thankfully) under the e1 >> quantifier, and then d2 is instantiated under the e2 quantifier, followed >> by folding back up to obtain the original statement. None of this >> instantiation is "real", it's all syntactic, but we operate better when >> objects appear to be concrete. This is all ultimately valid reasoning, and >> indeed can be compressed so that everything is in normal form, but >> syntactically it's very strange, because it's analogous to {da goi ko'a}, >> which as I think most of us know doesn't actually make any sense. >> >> I was originally curious about this because I don't know how I would >> render proofs like this in Lojban; I would be forced, in order to "set >> d1=d2" and such, to bind d2, which is bound under a quantifier, to a >> variable, which doesn't actually make logical sense. >> >> Any thoughts? >> >> mu'o mi'e la latro'a >> > > -- You received this message because you are subscribed to the Google Groups "lojban" group. To post to this group, send email to lojban@googlegroups.com. To unsubscribe from this group, send email to lojban+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/lojban?hl=en. --f46d0437458191860904d1ba6b17 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable (Also, I made a small mistake in the original post; I proved f*g is uniform= ly continuous, not just continuous, under those hypotheses. To any other ma= thematicians around these parts, sorry if that confused you. The point abou= t quantifiers still applies.)

On Tue, Dec 25, 2012 at 10:41 PM, Ian Johnso= n <blindbravado@gmail.com> wrote:
I see no one's answered; I'm not sure if no one's interested, o= r if this is just over everyone's head. Accordingly, the following is t= he same idea in a different context, one that I know at least a few jbopre = are familiar with. But if you don't know any Haskell, this post isn'= ;t going to do you any good.

The example I have in mind comes from the use of monads in Haskell, and= specifically it has to do with how we think about do notation. Without do = notation, we get things like this:
m1 >>=3D \x1 -> m2 >>= =3D \x2 -> f x1 x2
As a concrete example:
getLine >>=3D \str1 -> getLine >>= =3D \str2 -> putStrLn $ str1 ++ str2
is an IO action that gets two st= rings from the user and prints their concatenation.
As is, this is norma= l; variables which are arguments to the second argument to >>=3D are = lambda variables, with corresponding scope. str1 and str2 don't "e= xist" in the natural mental model of this code, they're just names= of the arguments that tell the code how to use the results of the two getL= ine actions. You could imagine "\str1 -> getLine ..." being a = black box function with a name, that you attach to getLine, and then str1 a= nd str2 vanish entirely.

As we know, though, this model gets cumbersome when we start bringing t= ogether a lot of monadic values into the same value using >>=3D, so t= here's do notation to make things less troubling. The above looks like<= br> do str1 <- getLine
=A0 =A0=A0 str2 <- getLine
=A0 =A0=A0 putStr= Ln $ str1 ++ str2
in do notation. While this notation desugars to the a= bove, the way that we model it mentally is different. Because the functions= are hidden and the binds to lambdas are written analogously to assignments= , we think of str1 and str2 as values unto themselves. They are instanti= ated in our mental model of the code. Most of the time, this model is f= ine, and indeed more useful than the model above, even though it is rather = different from what actually is going on. The cases when this model works p= oorly (such as the reverse state monad that some of you may have seen) seem= completely bizarre when written in do notation, because you can't thin= k of those cases as basically operating like an imperative DSL.

This instantiation, like the instantiation of quantified variables that= I mentioned previously, doesn't actually make logical sense, but is a = model that makes it easier to reason about the code without having to deal = with functions as extensively as we would otherwise. And yet...it's sor= t of troubling that we think like this, because we really can't do this= while preserving everything about the desugared code. It'd be really n= ice to be able to do such a thing (things like {da goi ko'a} essentiall= y, like in the original post) in Lojban, but I'm really not sure whethe= r it should be allowed, since it really is an interaction with logic that i= sn't actually logical at all.

As before, I'm open to thoughts, although I admit that this prompt = isn't particularly specific.


mu'o m= i'e la latro'a

On Mon, Dec 24, 2012 at 6:53 PM, Ian Johnson <blindbravado@gmail.com> wrote:
This is rather subtle, so I think it's best to begin with an example. T= his example isn't all that mathematically heavy, but it does inv= olve the interaction of several sentences which each have a "forall ex= ists forall" quantifier structure. This does have something to = do with Lojban, but it will be a while before that is actually clear. You&#= 39;ve been warned :)

Suppose g : R->R is uniformly continuous and f : R -> R is integr= able on [a,b]. Define the new function
(f * g)(x) =3D integral from a to= b of g(x-z) f(z) dz
We want to show that the function f * g is continuo= us at every point, that is:
(for all x in R,e1 > 0)(there exists d1 > 0)(for all y in R) |x-y| &l= t; d1 -> |(f * g)(x) - (f * g)(y)| < e1.

(I write quantifiers = in almost-prenex-normal form; my apologies if it is hard to read.)

Let e1 > 0.
Using the uniform continuity of g we have
(for all= e2 > 0)(exists d2 > 0)(for all x,y in R) |x-y| < d2 -> |g(x) -= g(y)| < e2.

So let e2 > 0, obtain the desired d2 > 0, and = take x,y with |x-y| < d2. Then:

| (f * g)(x) - (f * g)(y) | =3D | integral from a to b of f(z) (g(x-z) = - g(y-z)) dz |
<=3D integral from a to b of |f(z) (g(x-z) - g(y-z))| = dz
=3D integral from a to b of |f(z)| |g(x-z) - g(y-z)| dz
< integ= ral from a to b of |f(z)| e2 dz
=3D Me2
where M =3D integral from a to b of |f(z)| exists and is finite = by assumption.

(Now comes the weird part.)

Setting e2 =3D e1/= M, obtain d2 using the continuity of g, then set d1=3Dd2. Then if |x-y| <= ; d1, from the above |(f * g)(x) - (f * g)(y)| < M e1/M =3D e1 as desire= d. Thus f*g is continuous at every point.

What is weird here is that we're playing with e2 and d2 as if they&= #39;re real. e1 and d1 are interacted with as the quantifier structure sugg= ests: you introduce e1, do some work, and find a valid value of d1. But e2 = is now instantiated (in this case in a trivial way, thankfully) unde= r the e1 quantifier, and then d2 is instantiated under the e2 quantifier, f= ollowed by folding back up to obtain the original statement. None of this i= nstantiation is "real", it's all syntactic, but we operate be= tter when objects appear to be concrete. This is all ultimately valid reaso= ning, and indeed can be compressed so that everything is in normal form, bu= t syntactically it's very strange, because it's analogous to {da go= i ko'a}, which as I think most of us know doesn't actually make any= sense.

I was originally curious about this because I don't know how I woul= d render proofs like this in Lojban; I would be forced, in order to "s= et d1=3Dd2" and such, to bind d2, which is bound under a quantifier, t= o a variable, which doesn't actually make logical sense.

Any thoughts?

mu'o mi'e la latro'a


--
You received this message because you are subscribed to the Google Groups "= lojban" group.
To post to this group, send email to lojban@googlegroups.com.
To unsubscribe from this group, send email to lojban+unsubscribe@googlegrou= ps.com.
For more options, visit this group at http://groups.google.com/group/lojban= ?hl=3Den.
--f46d0437458191860904d1ba6b17--