Zulip Chat Archive

Stream: new members

Topic: Finding joins in the module graph


Joachim Breitner (Feb 24 2022 at 08:27):

Assume I have a helper lemma that combines two concepts (in this case, nat.coprime.mul and finset.prod), and I need to find the right module to put this. Is there a tool that helps me with that? Something that might tell me “All modules depending on both data.nat.gcd and algebra.big_operators.basic also depend on module X”, so that X is the natural home for such a lemma?

Eric Wieser (Feb 24 2022 at 08:32):

If you're familiar with Python and networkx, there's a dependency graph that you can read in available at https://leanprover-community.github.io/mathlib_docs/import.gexf

Patrick Massot (Feb 24 2022 at 08:52):

Note that leanproject will also create such a graph for you: leanproject import-graph --help

Mario Carneiro (Feb 24 2022 at 08:59):

Is there an easy way to read this back into lean?

Eric Wieser (Feb 24 2022 at 11:07):

I've found in the past that leanproject import-graph is painfully slow - but maybe you just need a clean working tree

Joachim Breitner (Feb 24 2022 at 13:43):

I vaguely recall that for Isabelle I once wrote a command that would suggest which module to move a theorem to, that may be possible in lean too, but that would only consider modules that are already imported, so a bit less useful.

Alex J. Best (Feb 24 2022 at 14:33):

There is a prototype of this at https://github.com/alexjbest/dag-tools/blob/master/src/home_finder.lean it is a bit slow but more or less works iirc

Alex J. Best (Feb 24 2022 at 14:34):

It's called #vind_home to avoid conflict with #find lol

Alex J. Best (Feb 24 2022 at 14:38):

Demo is at https://github.com/alexjbest/dag-tools/blob/master/src/test_home_finder.lean

Joachim Breitner (Mar 10 2022 at 16:33):

JFTR (or just-for-the-web-archive-if-someone-googles-this-thread), as I randomly stumbled over it: My experiments with such a tool in Isabelle are in https://github.com/nomeata/isa-where-to-move


Last updated: Dec 20 2023 at 11:08 UTC