Zulip Chat Archive
Stream: general
Topic: Inductive type compilation error
Jesse Michael Han (Feb 02 2019 at 05:12):
What's up with the following error? The presence of the complete_boolean_algebra
instance in the following code
universe u inductive B_name (β : Type u) [complete_boolean_algebra β] : Type (u+1) -- complains only if complete_boolean_algebra instance is there | mk (α : Type u) (A : α → (B_name × β)) : B_name
results in the following error message:
23:1: nested inductive type compiled to invalid inductive type nested exception message: type mismatch at definition '_nest_1_1.prod.B_name.mk.sizeof_spec', has type ∀ (β : Type u) [_inst_1 : complete_boolean_algebra β] [β_inst_inst : has_sizeof β] (fst : _nest_1_1.B_name β _inst_1) (snd : β), _nest_1_1.prod.B_name.sizeof β _inst_1 β_inst_inst (_nest_1_1.prod.B_name.mk β _inst_1 fst snd) = _nest_1_1.prod.B_name.sizeof β _inst_1 β_inst_inst (_nest_1_1.prod.B_name.mk β _inst_1 fst snd) but is expected to have type ∀ (β : Type u) [_inst_1 : complete_boolean_algebra β] [β_inst_inst : has_sizeof β] (fst : _nest_1_1.B_name β _inst_1) (snd : β), _nest_1_1.prod.B_name.sizeof β _inst_1 β_inst_inst (_nest_1_1.prod.B_name.mk β _inst_1 fst snd) = 1 + sizeof snd
Mario Carneiro (Feb 02 2019 at 05:17):
That's a nested inductive type
Mario Carneiro (Feb 02 2019 at 05:17):
these aren't compiled very well
Jesse Michael Han (Feb 02 2019 at 05:18):
Does the presence of the complete_boolean_algebra
instance make it nested, or is it nested because of the type of the constructor mk
?
Mario Carneiro (Feb 02 2019 at 05:19):
an isomorphic regular inductive is
inductive B_name (β : Type u) [complete_boolean_algebra β] : Type (u+1) -- complains only if complete_boolean_algebra instance is there | mk (α : Type u) (A : α → B_name) (B : α → β) : B_name
Mario Carneiro (Feb 02 2019 at 05:20):
it's the fact that you used a product of some type that hasn't been constructed yet
Jesse Michael Han (Feb 02 2019 at 05:21):
I see... I guess it's "simpler" to just specify two simultaneous values instead of specifying a pair as a value
Jesse Michael Han (Feb 02 2019 at 05:21):
Thanks for clarifying!
Mario Carneiro (Feb 02 2019 at 05:24):
Well, it's mostly the fact that inductives have a strict specification on what is allowed in the constructors, and other inductive types aren't in that specification. Lean has a trick for compiling them anyway, but it's complicated and not completely correct in some edge cases
Last updated: Dec 20 2023 at 11:08 UTC