Индуктивный тип, построенный по списку этого типа в Lean
Я хотел бы определить индуктивный тип, который может быть построен из списка самого себя в Lean. тем не мение
inductive a : Type :=
| aFromAs : list a → a
выдает ошибку:
failed to infer inductive datatype resultant universe, provide the universe levels explicitly
Хорошо, поэтому я set_option pp.universes true
а также list
принадлежит типу юниверса его параметра (если параметр не является Prop). Так что если a
является Type₁
все должно быть хорошо. Но
inductive a : Type₁ :=
| aFromAs : list a → a
выдает ошибку
arg #1 of aFromAs contains an non valid occurrence of the datatype being declared
Это выглядит актуально для меня. Это швы, как это должно работать.
2 ответа
Решение
Lean 3 теперь поддерживает вложенные индуктивные объявления:
inductive a : Type
| aFromAs : list a → a
Похоже, что у Lean нет поддержки вложенных типов данных, поэтому лучше всего кодировать их как взаимно рекурсивные определения:
inductive a := node : as -> a
with as :=
| nil : as
| cons : a -> as -> as