Prove dozens of syntactic substitution lemmata in one fell swoop with an induction principle with only two cases? Check.
Compositionality needs three cases though. :(
Prove dozens of syntactic substitution lemmata in one fell swoop with an induction principle with only two cases? Check.
Compositionality needs three cases though. :(
@JacquesC2 I already taught the computational content of this proof to a dependently-typed compiler. This means I can already manipulate families of well-scoped, well-typed AST representations without metaprogramming the AST traversals for substitution and splicing.
Happy to help a proof assistant teacher of a proof assistant with a reasonable theory and meta-theory and a reasonable development team. I suspect I'm already doing it vacuously. I'd be even happier to discover I'm not doing it vacuously anymore.
@ohad Work on convincing @totbwf . That won't help with any current proof assistant, but... it'll likely help.
Then I'd say convince @AndrasKovacs .
@pigworker @ohad @totbwf @AndrasKovacs The convinced people need to find the convinceable people who have the skils+desire+energy to change the current systems.
I'm convinced, but I don't have the cycles to get to the point where I could modify a current system adequately.
@pigworker @ohad @totbwf @AndrasKovacs In my books, the first step is to have "theory" be a first-class object. Neither records nor nested Sigma types are adequate representations.
Then we'd have a hope of making the old free tricks work nicely. And then on to new tricks we could go!
@pigworker @ohad @totbwf @AndrasKovacs [Veering discussion again - now: status of "theory" representation in a language.]
I can easily agree with that, i.e. what's important is quotability. And to be disciplined, you need some way to know (1) what the meta-theory of the thing you're quoting, and (2) what the vocabulary you'll land on.
@pigworker @ohad @totbwf @AndrasKovacs You already know my answer: you look at the (theory) morphisms that you used to create these things, not at the things themselves.
A 'flat' rig has forgotten whence it came. But if you've created your rig in a sensible way, the knowledge of those two monoids is in your hands, as is the way to tell them apart.
Typical category-theory answer: the answer lies in the morphisms, not the objects.
@ohad @pigworker @totbwf @AndrasKovacs @gallais The higher lesson is that if you remember the reason for the travel, you know most of the rest already. Amusingly, this lesson is most clearly seen when trying to implement undo/redo.
In other words: transformers are strictly more informative than the sequence of states traveled through.
[Of course I meant intensional representations of transformers, opaque transformers are less useful than knowing all the states.]
@ohad @totbwf @AndrasKovacs Because I don't know how to build a proof assistant (beyond a toy one). Formalizing this in one is pointless. It's integrating it into its very functioning that is the only remaining, interesting part.
I build stuff akin to this. They worked. But I used the wrong method (meta-programming). Others are still using the wrong method.
This needs programming, not meta-programming.
@ohad @JacquesC2 @totbwf @AndrasKovacs
This discussion is going on several tangents, but if you read any serious mathematical paper, you will see that there is both object-level and meta-level discussion.
At the moment proof assistants are good at object-level discussions, and, although they do support meta-level programming (in a crappy way in my view), they don't support meta-level reasoning (at all).
@MartinEscardo @ohad @totbwf @AndrasKovacs Right!
(You can do it via layers of encoding, but it gets awful really, really quickly.)
@JacquesC2 writes "You can do it via layers of encoding, but it gets awful really, really quickly."
I agree with the "but".
But I disagree with the "You can do it via layers".
Yes, you can in principle, if you take the object-language of your proof assistant as the meta-language, and then encode the object-language within it.
But what if I have already proved something, using the object-language of the proof assistant, and I want to draw a meta-theoretical conclusion?
This happens all the time. In e.g. TypeTopology we have about 260k lines of code (including comments and blank lines).
Do I need to translate this to the encoded language if I want to meta-reason about it? Of course this is a ludicrous requirement.
(Which we often do in papers. I can give explicit examples on demand.)
@ohad @totbwf @AndrasKovacs Discussion evolved and veered.
Proofs are only needed to convince oneself that implementing "free substitution machinery" isn't a pile of hacks. Piles of hacks have been done - we know this can work. You've shown there's a strong reason for that. Great.
Now there's no reason not to implement this as a feature.
@ohad @JacquesC2 @totbwf @AndrasKovacs Implementing a well-typed by construction type theory with type variables inevitably involves a lot of green slime due to needing to do type-substitution in terms. This makes it impractical to build any serious compiler machinery on top of this.
So, personally, I'd like to work in a dependent type theory which has built-in support for equational solving of substitution theories to avoid dealing with this kind of green slime.
@ohad therapist: strength pentagon isn’t real, it can’t hurt you
strength pentagon:
@ohad I have pet peeves about commutative diagrams and which of them deserve the name proof.
You have managed to not trigger them. Bravo.