Applied Type System vs. Epigram

There's been much discussion of Epigram, but I have yet to see much discussion of Applied Type System. There have been a few stories here on LTU, but relatively little discussion. This surprises me as ATS seems quite advanced.

As a relative newcomer to type theory, I'm interested in the relative merits of ATS vs. Epigram vs. any other dependently typed languages that might exist. From my understanding, Epigram is a Pure Type System that seeks to unify types and terms, where ATS distinguishes the statics and dynamics of the language. What benefits and limitations do these approaches have on complexity for both developer and implementor?

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Epigram/DML/Cayenne

I'm not sure about ATS in particular, but I think it follows a similar route to DML.

DML only has a restricted form of dependent types, added to a conventional language. Epigram is focused squarely on pushing dependent typing and has a lot more power with regards to defining your own datatypes.

Another language is Cayenne. Like DML, Cayenne isn't a completely new language designed around dependent types but an existing language extended with dependent types instead. Whilst type checking always terminates in Epigram, it is undecidable in Cayenne.

I also feel Ontic is important.

Then there are the various proof assistants - Coq, LEGO, etc. I don't have much experience with these. If someone could elaborate on their differences and advantages/disadvantages I would appreciate it.

Relation to DML

I'm not sure about ATS in particular, but I think it follows a similar route to DML.

I think Hongwei Xi, the main researcher behind ATS, was also behind DML, but it's my understanding that ATS was created as an alternative to Pure Type Systems, while retaining its dependent typing power. I could be wrong though, hence the request for clarification. :-)

DML only has a restricted form of dependent types, added to a conventional language.

Yes, I'm aware of this. I've seen a vague reference or two to ATS also supporting "restricted dependent types", but it was never clarified in more laymen's terms.

I also feel Ontic is important.

Indeed, I've heard a few rumblings on Ontic here and there, but it doesn't seem like much work is happening in that direction.

Then there are the various proof assistants - Coq, LEGO, etc. I don't have much experience with these.

ATS has support for combining programming with theorem proving, which is why it seems so strange that it's been discussed so little here. It seems very interesting.

Epigram/DML/ATS/Coq

I feel the strongest difference is what kind of programs you can write with which expressiveness in specifications.

  • For DML it is ML with automatic proving for arithmetic expressions in types. The other allow roughly the same expressiveness in specifications.
  • Epigram is powerful just as Coq and LEGO, it is a really dependently typed programming language where proof and algorithmic code are intermingled in an elegant way.
  • ATS separates proving and coding a little more and proposes other paradigms than functional programming. The main difference i see between Epigram and ATS is on the objective. The first proposes a new way of programming while the second integrates all paradigms in an unifying one using dependent types and relying explicitely on the manipulation of proof objects.
  • In Coq (and probably LEGO), you could write the same programs as in Epigram, except it would generally be a nightmare for a number of practical and theoretical reasons. Epigram is a programming language giving you adapted syntax and constructs to program, and a nice typing and editing system. Here tactics to prove/program are part of the language (rec, <=, case, etc...).
    On the other hand, Coq and LEGO are proof assistants, so their main focus is on proving, not on the easy manipulation of terms. That's kind of where Curry-Howard stops for them, you can write terms with simple types easily, but once you want to give a rich specification to a program you're alone. You can use the tactic language to prove arbitrarily complex goals but it's a bad idea to use them for creating programs.

Thanks for the explanation!

Thanks for the explanation! It would seem then, that ATS may be more verbose, but still theoretically as powerful as Epigram. The "backwards-compatible" paradigms are certainly interesting though, if only to see how they're typed, and it should yield an idea of how useful they actually are.