[isabelle-dev] default cases rule

Christian Sternagel c.sternagel at gmail.com
Fri Sep 5 12:27:06 CEST 2014


Dear all,

routinely checking IsaFoR against the development version of Isabelle 
(more precisely d0dffec0da2b) I stumbled across the following 
proof-breaking inconvenience:

In Isabelle2014 and earlier we could do

notepad
begin
   fix p :: "('a × 'b × 'c)" and xs
   assume "p ∈ set xs"
   then obtain x y z where "(x, y, z) ∈ set xs"
     by (cases p) auto
end

i.e., relying on the default cases rule the proof went through.

In the development version, however, the following subgoals remain after 
"apply (cases p)"

goal (2 subgoals):
  1. ⋀z2. (⋀x y z. (x, y, z) ∈ set xs ⟹ thesis) ⟹
           xs = p # z2 ⟹ thesis
  2. ⋀z1 z2.
        (⋀x y z. (x, y, z) ∈ set xs ⟹ thesis) ⟹
        xs = z1 # z2 ⟹ p ∈ set z2 ⟹ thesis

That is, the default rule changed for assumptions of the form "_ : set _".

First question: is this intentional and what is the current default rule?

Second question: is it considered "bad form" to rely on default rules?

cheers

chris


More information about the isabelle-dev mailing list