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)" <[email protected]>
Date: Thursday, 26 October 2017 at 00:05
To: hol-info <[email protected]>
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/hol-info