Zulip Chat Archive
Stream: lean4
Topic: Different namespace for mutual inductive types
Raghuram (May 21 2022 at 19:26):
mutual
inductive Tree (α) where
| node : α → TreeList α → Tree α
inductive Hidden.TreeList (α) where
| nil : TreeList α
| cons : Tree α → TreeList α → TreeList α
end
#check TreeList -- error; desirable
#check Hidden.TreeList -- works
#check Tree -- error; undesirable
#check Hidden.Tree -- works
Is there a way to do this so TreeList
is defined in the Hidden
namespace, but Tree
in the current namespace?
Alex Keizer (May 21 2022 at 19:32):
You can define the mutual in the Hidden
namespace, and then re-export only Tree
in the current namespace.
namespace Hidden
mutual
inductive Tree (α) where
| node : α → TreeList α → Tree α
inductive TreeList (α) where
| nil : TreeList α
| cons : Tree α → TreeList α → TreeList α
end
end Hidden
export Hidden (Tree)
#check TreeList -- error; desirable
#check Hidden.TreeList -- works
#check Tree -- works
#check Hidden.Tree -- works
Raghuram (May 22 2022 at 04:57):
I had tried that, but that exposes the fact that it's in the Hidden
namespace for every definition one wants to make and use with dot notation afterwards (after end Hidden
). I guess that's not that much of a problem though.
Raghuram (May 22 2022 at 04:58):
Also this appears to be intended behaviour, because giving the inductive types two different namespaces produces an error message about conflicting namespaces.
Last updated: Dec 20 2023 at 11:08 UTC