Skip to Content.
Sympa Menu

coq-club - [Coq-Club] Induction over two non-mutual inductive terms

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

[Coq-Club] Induction over two non-mutual inductive terms


Chronological Thread 
  • From: scott constable <sdconsta AT syr.edu>
  • To: coq-club AT inria.fr
  • Subject: [Coq-Club] Induction over two non-mutual inductive terms
  • Date: Tue, 8 Mar 2016 15:41:51 -0500
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=sdconsta AT syr.edu; spf=None smtp.mailfrom=sdconsta AT syr.edu; spf=None smtp.helo=postmaster AT smtp1.syr.edu
  • Ironport-phdr: 9a23:VInbsBcsg1HqoI3H0NKRWQhKlGMj4u6mDksu8pMizoh2WeGdxc65Yx7h7PlgxGXEQZ/co6odzbGG7OawBSdZu8/JmUtBWaIPfidNsd8RkQ0kDZzNImzAB9muURYHGt9fXkRu5XCxPBsdMs//Y1rPvi/6tmZKSV3BPAZ4bt74BpTVx5zukbvipNuDP04R3mP1SIgxBSv1hD2ZjtMRj4pmJ/R54TryiVwMRd5rw3h1L0mYhRf265T41pdi9yNNp6BprJYYAu2pN5g/GLdfFXEtN30/zMztrxjKCwWVtVUGVWBDiRFPHxSN5xb8RYv4uC/3/r5m1CKdO9bqRJgvSC7k4qt2Hky7wBwbPiI0pTmEwvd7i7hW9Uqs

Hi All,

I have a simple recursive programming language implemented in coq with an evaluate function "eval". Since the language is non-normalizing, eval is recursively defined over a nat counter, "i" (I'm following the strategy given in the ImpCEvalFun chapter of SF). I'm currently trying to prove that whenever a term "tm" in the language is well-formed, no error can occur during a computation. So the theorem is as follows:

Theorem NoFail : forall i tm, well_formed tm -> eval i tm <> Error.

It seems that I need to induct over both i and tm, but doing something like

induction i as [|i'], tm.

always leads to unprovable subgoals, such as

  IHi' : eval i' (t_Plus t1 t2) <> Error
  ============================
   eval (S i') (t_Plus t1 t2) <> Error

when what I really want would be something like

  IH1 : eval i' t1 <> Error
  IH2 : eval i' t2 <> Error
  ============================
   eval (S i') (t_Plus t1 t2) <> Error

Any help would be much appreciated.

Thanks,

Scott Constable




Archive powered by MHonArc 2.6.18.

Top of Page