Let me describe the problem again: (actually I have a candidate solution)

The central idea in the CCS grammar designed by Robin Milner is to use
inductively defined finite structures to represent potential infinite
structures. If I have the following equation of CCS:

X = a + X

The only solution would be an infinite sum of a:

X = a + a + a + ...

But we don't really need the infinite sum as part of CCS grammar, we can
write this form instead:

rec X (a + var X)

So the "equation with single variable" itself can be treated as a CCS
process.   But if I have multi-variable equations:

X = a + Y
Y = b + X

the solution should be:

X = a + b + a + b + ...
Y = b + a + b + a + ...

to represent the equation itself as a CCS process, I should at least put
the following "fix" constructor into the datatype:

fix ('a list) (CCS list) 'a

so that I can write a term

``fix [X; Y] [a + var Y; b + var X] X``

which means "the value of X in the equation group in which X and Y are
unknown variables".  But if I write only partially:

``fix [X; Y] [a + var Y; b + var X]``

above term should have the type ``:'a -> ('a, 'b) CCS``, which works like a
choice function, given any variable it returns the corresponding value of
that variable.

In my initial question, I wanted to put only ``fix ('a list) (CCS list)``
into the CCS datatype, and that was wrong because the type of ``fix ('a
list) (CCS list)`` is not CCS, but (CCS list).

Can you see a better way to have a similar datatype?

Regards,

Chun Tian


On Thu, Oct 26, 2017 at 1:20 AM, <michael.norr...@data61.csiro.au> wrote:

> 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
>



-- 
Chun Tian (binghe)
University of Bologna (Italy)
------------------------------------------------------------------------------
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