Zulip Chat Archive
Stream: new members
Topic: inductives
Keeley Hoek (Jun 12 2019 at 11:06):
Here are two attempts at the same idea:
structure pairing (β : Type 1) := (α : Type) (f : α → β) inductive foo (γ : Type) : Type 1 | intro (m : γ → pairing foo) : foo
and
inductive bar : Type 1 | intro : Π (α β : Type) (v : α → bar) (v2 : β → bar), bar
called foo
and bar
, where bar
is evidently isomorphic to foo (fin 2)
. It seems like the <...>.rec
generated for the former is considerably weaker than that for the latter. I think this has something to do with the way nesting inductives is done. Can anyone comment on whether that's what's going on. Is there a way to fix things, while keeping my gamma parameter?
Mario Carneiro (Jun 12 2019 at 12:08):
nested inductives in lean 3 are kind of garbage
Mario Carneiro (Jun 12 2019 at 12:09):
nested meta inductives aren't bad because lean just rolls with whatever you say, but regular nested inductives have a complicated and buggy compilation
Keeley Hoek (Jun 12 2019 at 12:11):
Yeah okay damn. This is really depressing. Since I suddenly care about them and haven't been listening prior, are they getting better in lean 4?
Mario Carneiro (Jun 12 2019 at 12:12):
the correct equivalent of foo
is
inductive foo (γ : Type) : Type 1 | intro (α : γ → Type) (f : ∀ x, α x → foo) : foo
Mario Carneiro (Jun 12 2019 at 12:12):
I recommend just hand-unrolling any nested/mutual inductives you need into plain inductives
Keeley Hoek (Jun 12 2019 at 12:13):
Ok dreams restored maybe
Keeley Hoek (Jun 12 2019 at 12:13):
Thanks!
Mario Carneiro (Jun 12 2019 at 12:13):
I think they are being addressed in lean 4, but I don't know how successful it will be, we will see
Keeley Hoek (Jun 12 2019 at 12:16):
ok.
Keeley Hoek (Jun 12 2019 at 12:16):
EVERYTHING IS BETTER AND DEFINITIONALLY EQUAL NOW AND I LOVE IT
Keeley Hoek (Jun 12 2019 at 12:16):
sorry
Keeley Hoek (Jun 12 2019 at 12:17):
:D
Keeley Hoek (Jun 12 2019 at 12:28):
Oooh, interesting, I still don't get that more powerful recursor using the unwrapped definition!...
Mario Carneiro (Jun 12 2019 at 12:30):
is the claim that bar
is isomorphic to foo (fin 2)
?
Mario Carneiro (Jun 12 2019 at 12:32):
the .rec
s look alright to me
Keeley Hoek (Jun 12 2019 at 12:54):
@Mario Carneiro compare the following:
def test2 (b : bar) : bar := begin induction b with α β v v2 Ihv Ihv2, -- I have Ihv and Ihv2 end def test (b : foo (fin 2)) : foo (fin 2) := begin induction b with α β v v2 Ihv Ihv2, -- I don't have Ihv and Ihv2 end
Mario Carneiro (Jun 12 2019 at 12:56):
here are some improved names in the second case:
def test (b : foo bool) : foo bool := begin induction b with αβ vv2 IhvIhv2, let α := αβ ff, let β := αβ tt, let v : α → foo bool := vv2 ff, let v2 : β → foo bool := vv2 tt, have Ihv : α → foo bool := IhvIhv2 ff, have Ihv2 : β → foo bool := IhvIhv2 tt, end
Mario Carneiro (Jun 12 2019 at 12:56):
the parameters are mashed together
Last updated: Dec 20 2023 at 11:08 UTC