namedCases : string list -> tactic
For a datatype with n constructors, n strings are expected to be supplied. If no strings are supplied, the system will use a default naming scheme. If the ith constructor has no arguments, then si should be the empty string. If the ith constructor has k arguments, then si should consist of k space-separated names. In case a name does not need to be specified, an underscore _ or dash - can be supplied, in which case a default name will be conjured up.
In case ty is a product type ty1 # ... # tyi, namedCases [s] will iteratively case split on all product types in ty, thus replacing x:ty by a tuple with i variables, the names of which are taken from s.
A ?- !x:num#num#bool. P x
A ?- P (a,b,c)
A ?- P (a,_gv0,_gv1)
Datatype: arith = Var 'a | Const num | Add arith arith | Sub arith arith | Mult arith arith End
A ?- !x:'a arith. P x
P (Mult m1 m2) P (Sub s1 s2) P (Add a1 a2) P (Const c) P (Var v)