Hacker News new | ask | show | jobs
by konjin 2104 days ago
>Take your average computer science graduate from the last ten years. Do you think anyone would be remotely able to understand what is going on there?

Yes, you literally read the literate program of TeX and understand what's going on: http://brokestream.com/tex.pdf

I had never learned Pascal but I've managed to edit and compile TeX successfully, and it was easier than trying to understand any of my own non-literate programs.

>My point being that if we wouldn’t rely on TeX itself and use ANT (or whatever alternative) which is written in the quite elegant OCaml, than hacking it would be at least possible for mere mortals. Although I have to admit, despite being in love with OCaml since my PhD days, it’s also a quite niche language. But imagine if the whole thing was written in Python, or at least C.

Imagine if software engineers were actual engineers instead of glorified script kiddies.

>I wish someone would design a new space shuttle because while it's a neat project I only understand MKS units and it's too much effort to use a calculator for converting between them and Imperial units.

2 comments

It does seem that the OP constructs a bit of a strawman by claiming TeX's source code is too complicated for an average computer science graduate. I doubt even the top 5% of computer graduates could more readily understand the source code of most common programs.
Well, Knuth's programming style is idiosyncratic, to say the least. But in the early 80s, in advance of the publication of The TeXBook, I learned enough TeX from reading the literate source for TeX to put together a 100-page software manual.

I don't really agree with Knuth's version of literate programming, but one can hardly fault the TeX source for being unreadable.

> Imagine if software engineers were actual engineers instead of glorified script kiddies.

Maybe you shouldn't need to be an engineer to write a document with some formulas inside?

We're not talking about the difficulty of writing a document using LaTeX, which I think we can agree is more or less proportional to the degree of control one has over the finished product.

What's at stake here is the difficulty of editing the source code of LaTeX, which would be necessary in order to make the resulting pdf files more compatible with screen readers for the visually impaired.

Back in the day we had engineers writing documents from markup. We called them typesetters. It was a qualified job, you don't expect the task to be something Joe Random could to with 6 weeks of training.
> Back in the day we had engineers writing documents from markup.

Back in the day secretaries were creating electronic documents with troff and nroff:

> The first version of Unix was developed on a PDP-7 which was sitting around Bell Labs. In 1971 the developers wanted to get a PDP-11 for further work on the operating system. In order to justify the cost for this system, they proposed that they would implement a document-formatting system for the Bell Labs patents department[1]. This first formatting program was a reimplementation of McIllroy's roff, written by Joe F. Ossanna.

* https://en.wikipedia.org/wiki/Troff

OP, here. It's not that long ago, I've used troff myself. Or maybe it was that long ago, but it just seems like yesterday.
Back in the days operating a computer also needed weeks of training and was a qualified job. That doesn't mean it always has to stay that way.
At risk of gatekeeping, it doesn’t sound like typesetters merit the title of engineer.
That's because it wasn't.
1 + 1 = 2

Aren't formulas easy to insert in plain text?

The problem with maths notation is that it was invented by sighted people for sighted people as a short hand for very complex ideas, which at the time weren't fully understood.

If you want to type equations use s-expressions, the clarity you get from saying what you mean is astonishing.

    (define integral
      (lambda (function)
        ;; Implementation of Risch algorithm left
        ;; as an exercise to the motivated reader.
        ))

    (define definite-integral 
      (lambda (lower-bound upper-bound function)
        (let ((anti-derivative (integral function)))
          (- (anti-derivative upper-bound)
             (anti-derivative lower-bound)))))
Hey look, you don't need the dummy variable explicitly any more. It's almost like it's a relic from a time before people understood what function application actually was.

If you want the implicit mess (and incredible power) of higher maths, be prepared to deal with the the mess of typography. Which is why you need TeX, or worse.

> Hey look, you don't need the dummy variable explicitly any more. It's almost like it's a relic from a time before people understood what function application actually was.

If you actually perform definite integration, as a limit of Riemann (or Lebesgue, if you like) sums, or even try to approximate it numerically, you're going to have some dummy variable cropping back up again. As your comment indicates, when Risch's theorem proves that there is no elementary anti-derivative, you're going to be out of luck.

You're skimping on some of the complexity by equating a definition with a particular way of computing it, but that's completely inadequate for mathematics, as there are many things we can't compute (either in theory or in practice).

In particular, you definition of integral assumes that integrable functions always have an antiderivative, which is wrong.

I find it odd that you pretend a meta-mathematical question is a mathematical one.

You are dismissing constructivism as not mathematics, and you ignore that the halting problem is a way to deal with a class of results which include non-existence proofs by running an algorithm forever.

I can easily create calculations that will never return results which classical mathematics say are impossible by the simple fact they never return any results at all.

The Risch algorithm being a complex example, finding the square root of two in the rational number domain being a simple one. I can still deal with them as though they return results in all calculations though, without the need for baroque semi-mystical notation. Unless you want to claim some sort of divine human essence not present in Turing Machines and Lambda Calculus which lets us transcend their computational capabilities?

I literally don't understand what the hell you are talking about.

But this has nothing to do with constructivism. Even if you only allow constructive definitions and proofs, there is still the world of a difference between the definition of an integral and the result you get from evaluating it.

Yeah, sure, in theory you can represent an integral as a function that takes another function and two boundary points and returns a value...

But first, it may not be possible to determine the value of the integral exactly because there is no known method of doing so (the Risch algorithm, apart from it basically being so complex that it's implemented almost nowhere fully, only works for elementary functions!).

And second, if integrals are "just functions", you lose the ability to manipulate them according to known theorems, e.g. additivity, triangle inequality, Cauchy-Schwarz, convergence theorems, ...

So yeah, here's where I get the feeling that some people should do some more maths and spend good parts of their days proving theorems and playing with definitions before they start complaining about how dumb its language is.

>So yeah, here's where I get the feeling that some people should do some more maths and spend good parts of their days proving theorems and playing with definitions before they start complaining about how dumb its language is.

Some people have a PhD in mathematical physics and wrote the higher function code of axiom. I guess those people would be difficult to understand for non-experts.

> In particular, you definition of integral assumes that integrable functions always have an antiderivative, which is wrong.

I was objecting at the same time as you were, but I don't think this is the right objection. It's true that not every integrable function has an elementary anti-derivative, but every integrable function f does have an anti-derivative F, at least in the sense that F is almost everywhere differentiable, and the derivative is almost everywhere equal to f. (And, of course, if f is continuous, then F is everywhere differentiable, and its derivative everywhere equals f.)

If you say "at least in the sense that F is almost everywhere differentiable", you're already redefining "anti-derivative" to some extent, I feel. But this is just arguing over semantics. Even then, I think your claim that every integrable function has a "generalized antiderivative" is also only true for the Riemann integral. The Dirichlet function is Lebesgue integrable, but it doesn't have an antiderivative even in this weaker sense.[^1] And mathematicians generally prefer the Lebesgue integral.

I think the more important insight here is that integration fundamentally isn't defined through the anti-derivative, and that the two notions are actually related is a deep theorem, rather than just a definition.

And the fact that non-elementary antiderivatives exist is interesting in theory, but in practice you can't use them directly for anything. In particular, in practical situations you will often use numerical methods to integrate a function which will not be based on any notion of anti-derivative at all.

[^1] Edit: I think I was wrong here. If you take the function identically zero, then its derivative is identically zero and as such equal to the Dirichlet function almost everywhere. So this is not a counterexample. I still think it's weird to call than an "antiderivative" though.

My favourite anti-derivatives of the constant zero and Dirichlet function are monotonically increasing.

https://en.wikipedia.org/wiki/Cantor_function

> If you say "at least in the sense that F is almost everywhere differentiable", you're already redefining "anti-derivative" to some extent, I feel. But this is just arguing over semantics.

It is, but let's! Before we re-define the anti-derivative, we'd have to define it. A sensible definition is: a function F is an anti-derivative of a function f if F is everywhere differentiable, and if F' = f everywhere. By this definition, not every integrable function has an anti-derivative.

On the other hand, we could also just choose to define—not re-define!—an anti-derivative of f to be a function F that is almost everywhere differentiable, and such that F' = f almost everywhere. This definition is more complicated, but also more inclusive; and it handles everything the old definition could.

In this respect it is, and it's no accident, exactly like the Lebesgue integral vis a vis the Riemann integral. Lebesgue's integral has a more complicated definition than Riemann's, and we could call it a re-definition; but, since it handles everything that Riemann's does (with the same answer), we could say in retrospect that Lebesgue's was the correct definition, and Riemann's was just the special case we happened to discover first.

> I think the more important insight here is that integration fundamentally isn't defined through the anti-derivative, and that the two notions are actually related is a deep theorem, rather than just a definition.

Certainly I agree with this!

> And the fact that non-elementary antiderivatives exist is interesting in theory, but in practice you can't use them directly for anything. In particular, in practical situations you will often use numerical methods to integrate a function which will not be based on any notion of anti-derivative at all.

Here again I'd argue over semantics, though I'd concede it's much more a matter of personal preference than my argument above, which I think has mathematical weight behind it. Namely, I'd argue that the numerical integration is doing something directly with the non-elementary anti-derivative, namely, evaluating it at a point—just like we call reading off the value of, say, the sine of an angle from our calculator doing something directly with the sine, even though what we're really doing is summing sufficiently many terms in a Taylor-series approximation.

> [^1] Edit: I think I was wrong here. If you take the function identically zero, then its derivative is identically zero and as such equal to the Dirichlet function almost everywhere. So this is not a counterexample. I still think it's weird to call than an "antiderivative" though.

I agree that it's not a counterexample for the reason you say, and there's no arguing with perceptions of something being weird; it certainly is counter to intuition built out of Riemann integrals. And yet, if we didn't steel ourselves to handle this weirdness, we'd have to say that it didn't have an anti-derivative at all; and why artificially restrict our theorems to match our intuition, rather than expanding our intuition to meet our theorems?

You don't.

Maybe to edit such a complex program that you're using to convert your equations to some other pretty format you should.