Zulip Chat Archive

Stream: lean4

Topic: Proving nonexistence of inductive fixpoints?


Andrés Goens (Aug 29 2022 at 09:42):

I'm trying to figure out how to prove that a term that I cannot construct a term that would be some sort of (coinductive?) fixpoint of an inductive term. The catch is that the recursion is 'hidden' by a function term. Something like this:

inductive Object
  | mk : (subobjects : Nat  Option Object)  Object

def Object.subobjects : Object  Nat  Option Object
  | .mk sub => sub

theorem no_suboject_self :  o : Object, ¬∃ n, o.subobjects n = some o := sorry

I'm sure there's some nice type-theoretic background to this that I don't have :sweat_smile: can someone here maybe help me out, how would I prove something like no_subobject_self?

(BTW: I posted this here since I'm working with Lean4, but happy to move it if it makes more sense in a different stream)

Mario Carneiro (Aug 29 2022 at 10:10):

Unfortunately that's a really bad combination of features for lean right now. induction doesn't support nested inductives, and well founded recursion doesn't support inductives with rank higher than omega (in your case, this is caused by the (Nat -> T) -> T style constructor

Mario Carneiro (Aug 29 2022 at 10:11):

You can do it but you basically have to construct the proof term manually


Last updated: Dec 20 2023 at 11:08 UTC