[isabelle-dev] New (Co)datatypes: Status & Plan (FYI)

Christian Urban christian.urban at kcl.ac.uk
Mon Aug 5 18:14:27 CEST 2013


Hi Andreas,

Thanks a lot! This fills a knowledge gap. ;o)

I am happy to keep the status quo. But I guess in an ideal world
one would then have two names for the associated theorems. Then 
size would fit in with every other simp-theorems coming from 
function or primrec definitions. 

Thanks again,
Christian

On Monday, August 5, 2013 at 08:43:06 (+0200), Andreas Lochbihler wrote:
 > Hi Christian,
 > 
 > the two different size functions become relevant as soon as you have a polymorphic 
 > datatype such as
 > 
 > datatype 'a foo = Foo 'a | Bar "'a foo"
 > 
 > Then, foo_size takes size function for every type variable as additional parameters and 
 > takes them into account, whereas size ignores occurrences of the type variables.
 > 
 > thm foo.size
 > 
 > foo_size fa (Foo a) = fa a + Suc 0
 > foo_size fa (Bar foo) = foo_size fa foo + Suc 0
 > size (Foo a) = 0
 > size (Bar foo) = size foo + Suc 0
 > 
 > The generalised size function can be useful in termination proofs such as
 > 
 > function f :: "nat foo => unit" where
 >    "f (Foo 0) = ()"
 > | "f (Foo (Suc n)) = f (Foo n)"
 > | "f (Bar x) = f x"
 > by pat_completeness simp_all
 > termination by(relation "measure (foo_size size)") simp_all
 > 
 > Andreas
 > 
 > 
 > On 04/08/13 21:20, Christian Urban wrote:
 > >
 > >
 > > On Sunday, August 4, 2013 at 20:32:50 (+0200), Dmitriy Traytel wrote:
 > >   > ....I.e. everything that is defined by the new package and
 > >   > falls into the fragment of the old package can be registered as an old
 > >   > datatype benefiting from all the infrastructure built around it (e.g.
 > >   > size function, Quickcheck, and other "datatype interpretations").
 > >
 > > On the topic of size functions: I found it always odd that
 > > the existing datatype package (however I think this particular
 > > functionality is now provided by the function package) defines
 > > under <datatype_name>.simps "two" definitions of the corresponding
 > > size function. Consider for example
 > >
 > >
 > >    datatype test = A1 | A2 | A3 "test"
 > >
 > >    thm test.size
 > >
 > >    > test_size A1 = 0
 > >    > test_size A2 = 0
 > >    > test_size (A3 ?test) = test_size ?test + Suc 0
 > >    > size A1 = 0
 > >    > size A2 = 0
 > >    > size (A3 ?test) = size ?test + Suc 0
 > >
 > >
 > > Surely, it would be more uniform to have just the equations for
 > > size, no? Is there any usage for the test_size definitions?
 > > If not, then maybe in the course of updating the datatype
 > > package, this oddity can be eliminated (Nominal needed to work
 > > around it). But I am happy to admit that I might miss something
 > > important.
 > >
 > > Best wishes,
 > > Christian
 > >
 > >
 > > _______________________________________________
 > > isabelle-dev mailing list
 > > isabelle-dev at in.tum.de
 > > https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
 > >
 > _______________________________________________
 > isabelle-dev mailing list
 > isabelle-dev at in.tum.de
 > https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev

-- 




More information about the isabelle-dev mailing list