Using alists rather than finite-maps will have the issue that

  fix [(X, a + Y); (Y, b + X)] X

will be seen as different to

fix [(Y, b + X); (X, a + Y)] X

when you might prefer them to be syntactically identical, but there are so many 
“structural congruences” in this syntax that having to deal with one more 
perhaps won’t be such a big deal.

And of course, you could try quotienting it up to all those identities….

Michael

From: "Chun Tian (binghe)" <binghe.l...@gmail.com>
Date: Thursday, 26 October 2017 at 21:00
To: "Norrish, Michael (Data61, Acton)" <michael.norr...@data61.csiro.au>
Cc: hol-info <hol-info@lists.sourceforge.net>
Subject: Re: [Hol-info] How to define term-like multi-recursive structures?

Hi again,

I'm surprised that, ``('a, 'b) alist`` (or ``('a # 'b) list``) is supported by 
datatype package. So I'm going to have the following datatype in the future:

val _ = Datatype `CCS = nil
     | var 'a
     | prefix ('b Action) CCS
     | sum CCS CCS
     | par CCS CCS
     | restr (('b Label) set) CCS
     | relab CCS ('b Relabeling)
     | fix (('a # CCS) list) 'a `;

I wanted to use finite_map (learnt from Konrad Slind) but datatype package 
doesn't support it, however alist is a prefect replacement.

Thus I would say my question can be closed, if there's no other suggestions.

Regards,

Chun Tian



On Thu, Oct 26, 2017 at 10:56 AM, Chun Tian (binghe) 
<binghe.l...@gmail.com<mailto:binghe.l...@gmail.com>> wrote:
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<mailto: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<mailto:binghe.l...@gmail.com>>
Date: Thursday, 26 October 2017 at 00:05
To: hol-info 
<hol-info@lists.sourceforge.net<mailto: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<mailto:hol-info@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/hol-info



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




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