Skip to content

Follow-up meta task and notes #15

@tlringer

Description

@tlringer

Following up from the presentation at CUDW, some TODOs:

  1. Type annotations in OCaml and Ltac2 (done)
  2. Aligning code side by side to show similarities
  3. Implementing other examples besides autoinduct in the other metalanguages
  4. Release and crowdsource more solutions? Could be like POPLmark Challenge for metalanguages IMO

Talia's Notes:

  1. By far the biggest barrier to plugin development is setup; it would be very nice to have a plugin generator for initial setup.
  2. In OCaml, it's very nice to have access to maps and folds over the subterm structure. It would be nice to have map/fold over terms exposed in other metalanguages if it isn't already (though I do wonder what the expressiveness of this is relative to [match!] and so on).
  3. I find it easier to organize automation behind interfaces in OCaml so that I can reuse utility functions; has thought gone into this for other metalanguages? In particular, I like being able to put utility functions behind nice .mli files and then just reuse them; I also like having lots of higher-order functions. Examples: 1 2 3 4
  4. I wish I could write OCaml inline right in a Coq file. This is a definite plus of all of the other metalanguages.
  5. I like being able to swap out different notions of equality and so on trivially in OCaml, and it'd be cool to be able to do that more easily in other metalanguages.
  6. Ltac is so limited; fixed numbers of arguments are sad.
  7. The OCaml plugin API changes a lot, so one major barrier to plugin development is that the burden of change is difficult (even for things like how to set up plugins, which confused me for this particular development). This is a plus of other metalanguages. (One thing we can track here in this repository is how much we need to change these over time.)
  8. Metacoq turned my computer into a furnace when I installed it, as a heads up.
  9. I was personally really impressed with the Ltac2 version and how similar it feels to the OCaml one.

Not (yet) covered by the autoinduct example, but relevant to writing automation:

  1. Caching for efficiency
  2. Fancier equalities and unification
  3. Nicely organizing automation in libraries
  4. Burden of change (discussed but not yet encountered)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions