[isabelle-dev] recursive datatype measure
Alexander Krauss
krauss at in.tum.de
Mon Feb 16 22:11:54 CET 2009
Chris,
> function
> parse_len :: "prod => nat list => int" where
>
> "parse_len (PTrm tok) toks = (if ((hd toks) = tok) then 1 else -1)"
> | "parse_len (Prod pl) toks =
> last (sort (map (%p. foldl (% (len::int) (p, l).
> if len = -1 then -1
> else len + parse_len p l)
> 0 (zip p (powerlist toks)))
> pl))"
> by pat_completeness auto
> termination
> apply (relation "measure (%(p, l). size p)", auto)
> apply (rename_tac pll toks pl len p l)
by (auto dest!: set_zip_leftD simp: termination_simp)
zip was in the way, and set_zip_leftD is the lemma you need. You can
also just do
termination
by (lexicographic_order dest!: set_zip_leftD)
Alex
More information about the isabelle-dev
mailing list