I’m not sure why you say that you can’t add “fix” to the datatype declaration.

A line like

   | fix (CCS list)

would be accepted by Datatype.  Then the type of the constructor “fix” would be

  fix : ('a,'b) CCS list -> ('a,'b) CCS

In short, I don't understand why you write "the type of ``fix …`` is *not* CCS 
at all".

If your underlying constructors don't allow for "infinite" CCS terms (or their 
encoding), then it's hard to know how you would ever define the sorts of CCS 
constants that have infinite behaviours in time.  Perhaps one approach would be 
to define the syntax as a co-datatype, allowing the syntax itself to be 
infinite.  This'd be a bit weird though…

Michael 

From: "Chun Tian (binghe)" <binghe.l...@gmail.com>
Date: Thursday, 26 October 2017 at 00:05
To: hol-info <hol-info@lists.sourceforge.net>
Subject: [Hol-info] How to define term-like multi-recursive structures?

Hi, 

sorry for keeping asking questions.  In my current CCS datatype, there's a 
recursive constructor:

val _ = Datatype `CCS = nil
     | var 'a
...
     | rec 'a CCS `;

A term ``rec X (f (var X))`` is like the solution of an equation X = f(X), or 
the fixed-point of f(), and its behavior is then defined by a set of rules.  
What the Datatype package gives me, is to make sure "rec" and "var" are kind of 
*primitive* constants, such that they're part of the one_one and distinctness 
theorems of the CCS. (if I simply define a constant outside of the datatype, I 
don't have such benefits at all, and many theorems will not be proved)

Now  (as a long-term plan) I want to implement the ultimate, original form of 
Milner's CCS [1], in which there's a "fix" (fixed-point) constructor.  It's 
like a multi-variable version of above "rec" costructor, something like:

fix X p1 Y p2 Z p3 ...

If you think above term as a multi-variable equation groups, then each part in 
its solution will be defined as a valid CCS term.  Such a "solution" (as a 
container of CCS terms) may be represented as a finite_map ``:('a |-> ('a, 'b) 
CCS)`` or simply a list ``:('a, 'b) CCS list``.

Obviously I can't put this "fix" directly into the definition of above CCS 
datatype (let's assume HOL4 can do support nesting recursive datatype), because 
the type of ``fix ...`` is *not* CCS at all.   But what is it if I want such a 
constant? some kind of specification?

Regards,

Chun Tian

-- 
Chun Tian (binghe)
University of Bologna (Italy)

[1] Milner, R.: Operational and Algebraic Semantics of Concurrent Processes. 
1–41 (2017).



------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
hol-info mailing list
hol-info@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to