CellML Discussion List

Text archives Help


[cellml-discussion] A list of proposed changes to semantics to makein CellML 1.2


Chronological Thread 
  • From: ak.miller at auckland.ac.nz (Andrew Miller)
  • Subject: [cellml-discussion] A list of proposed changes to semantics to makein CellML 1.2
  • Date: Thu, 10 Jan 2008 12:16:45 +1300

Randall Britten wrote:
>
> I don?t think we would need attribute values like ?public_private? or
> ?both?, since I think ?public? access should imply ?private? access,
> similar to say c++ or Java?s use of those terms.
>
The usage of the words public and private in CellML is conceptually
different to how programming languages like C++ and Java use them. In
these programming languages, private means that a member can be accessed
only from within the current class, whereas public means that the member
may be accessed from outside of that class.

In CellML, public and private interfaces are both ways in which
reference can be made to a variable from outside of the class. So for
example, public_interface="none" private_interface="none" in CellML
corresponds to private in C++, while public_interface="none"
private_interface="out" is really equivalent to a partially public
member in C++.

Given this conceptual difference, I think that the claim that public
should imply private by analogy to programming languages does not
automatically hold. It is quite meaningful (and common) in CellML to
open the public interface but close the private interface.

Randall Britten wrote:

> Hi all
>
> Another case that illustrates that perhaps the concept of uni-directional
> connections may be flawed in a declarative language:
>
> Component A has variables x and y that are both public, but only one
al> gebraic equation, hence insufficient maths to find values for x and y
> (e.g. x+y=5).
> Component B, virtually the same structure. Has public x,y. Has only one
> algebraic equation, so also, taken on its own, insufficient to solve for x
> or y (e.g. x-y=k(t), where k(t) is knows at each value of t, e.g.
> k(t=1)=1.).
>
> The application that attempts to solve the model has to solve the linear
> system, and it does not make sense to see x or y as owned by either A or B.

I think this depends on what the implications of 'ownership' are. If
ownership is a purely CellML concept which does not affect the final
mathematical model, then I think that it wouldn't prevent us from defining
things this way.

I think that ownership is information which is strictly speaking, superfluous
to the mathematical interpretation of the model. The current implementation
of CCGS, for example, does not rely on it to provide any interpretation of
the mathematics, although it does provide clues to help provide a human
intuitive presentation of results. For example, the variable with no out
interfaces (referred to as 'the source variable' in the code, which others
have referred to as the owning variable), is used as the master variable
which sets the units into which all other variables connected to the same
variable are connected. As an alternative, the 'master variable' could be
chosen by some other approach, such as randomly, or based on the first
variable to appear in the model, but this is somewhat less robust if we seek
to get consistent results from the model (to some extent, the directionality
of connections could be considered a form of metadata).

Best regards,
Andrew

>
> Regards,
> Randall


> *From:* cellml-discussion-bounces at cellml.org
> [mailto:cellml-discussion-bounces at cellml.org] *On Behalf Of *Poul Nielsen
> *Sent:* Sunday, 23 December 2007 10:25 p.m.
> *To:* CellML Discussion List
> *Subject:* Re: [cellml-discussion] A list of proposed changes to
> semantics to makein CellML 1.2
>
> Yes, the scheme that I proposed would not allow variables to 'pass
> through' the public_interface and private_interface of a component. I
> imagine that this could be inconvenient in some situations. We could
> enable this by adding a fourth value, 'public_private', to the
> attribute list.
>
> Best wishes
>
> Poul
>
> On 2007 Dec 22, at 20:21, Jonathan Cooper wrote:
>
>
>
> On Sat, Dec 22, 2007 at 11:19:52AM +1300, Poul Nielsen wrote:
>
> I think that Jonathan is correct - the concept of 'in' and 'out'
>
> does not make sense in a declarative description. One way to remedy
>
> this would be to remove the 'public_interface' and
>
> 'private_interface' attributes from the <variable> element and
>
> replace them with an 'interface' attribute which could assume values
>
> "public", "private", or "none". This is a pretty fundamental change
>
> to the specification but I think that it better reflects the
>
> declarative intent of CellML model descriptions.
>
> How would that work for a component like B below, which has both a public
>
> and private interface for the same variable?
>
> Jonathan.
>
> On 2007 Dec 22, at 03:20, Jonathan Cooper wrote:
>
> On Thu, Dec 20, 2007 at 12:30:32AM +0800, David Nickerson wrote:
>
> * The current specification says:
>
> "A variable with either a private_interface or
> public_interface
>
> attribute
>
> value of "in" must be mapped to no more than one other
>
> variable in the
>
> model. [ Note that a similar restriction does not
> apply to
>
> variables with
>
> interface values of "out". An output variable can be
> mapped to
>
> multiple
>
> input variables in various components in the current
> model. ]"
>
> The problem with this is that it doesn't properly
> account for
>
> mappings where a variable is forwarded into an
> encapsulated
>
> block. As
>
> an example, consider the following encapsulation
> hierarchy (higher
>
> components encapsulate lower ones)...
>
> A
>
> |
>
> B
>
> / \
>
> C D
>
> Suppose that component A has, for variable v,
>
> public_interface="none", private_interface="out", and
> B has for
>
> variable v, public_interface="in", private_interface="out"
>
> (connected to A), and C and D have public_interface="in",
>
> private_interface="none", both of which are connected
> to B.
>
> There is no reason why this should not be valid.
> However, the
>
> specification contradicts itself on whether this is
> allowed. On
>
> one
>
> hand, because B has private_interface="out", it "can
> be mapped to
>
> multiple input variables in various components in the
> current
>
> model.", but because it has a public interface of in,
> it "must be
>
> mapped to no more than one other variable in the model".
>
> This can be fixed by firstly defining the
> interpretation of
>
> connections and interfaces, and then adding
> constraints based on
>
> that which actually describe which connections are
> allowed to each
>
> set of variables.
>
> will be interesting to see how such a definition ties in
> with the
>
> idea
>
> of input variables becoming output variables based on the
> way the
>
> components are hooked together :)
>
> Indeed.
>
> The use of "in" and "out" on interfaces very strongly implies that
>
> connections have a directionality, and this is also reflected
> in the
>
> quote from the specification above - it assumes that variables
> are
>
> only
>
> defined in one place, and hence it doesn't make sense to import a
>
> variable (via an "in" interface) from multiple locations. It does
>
> however make sense to export a variable to multiple locations, or
>
> forward
>
> an imported variable to multiple locations (the example Andrew
> gives).
>
> If we don't want connections to have directionality, then I
> think this
>
> requires quite a major change in the specification, even if
> only to
>
> avoid
>
> user confusion. For example, I would want to deprecate the use of
>
> "in"
>
> and "out", and instead allow public_interface="yes" or
>
> public_interface="no" (perhaps a synonym for "none") and
> similarly for
>
> private interfaces. The terms used in the language then
> reflect the
>
> nature of the interfaces - if connections are bidirectional,
> then it
>
> doesn't make sense to talk of an "in" interface, since it may
> function
>
> either as input or output depending on the other components in the
>
> system.
>
> Jonathan.
>
> --
>
> Jonathan Cooper MSN: msn at jonc.me.uk <mailto:msn at jonc.me.uk>
> www: jonc.me.uk/
>
> We are tribbles of Borg. Prepare to be replicated.
>
> _______________________________________________
>
> cellml-discussion mailing list
>
> cellml-discussion at cellml.org <mailto:cellml-discussion at
> cellml.org>
>
> http://www.cellml.org/mailman/listinfo/cellml-discussion
>
> _______________________________________________
>
> cellml-discussion mailing list
>
> cellml-discussion at cellml.org <mailto:cellml-discussion at cellml.org>
>
> http://www.cellml.org/mailman/listinfo/cellml-discussion
>
> --
>
> Jonathan Cooper MSN: msn at jonc.me.uk <mailto:msn at jonc.me.uk> www:
> jonc.me.uk/
>
> I haven't lost my mind... It's backed up on tape somewhere.
>
> _______________________________________________
>
> cellml-discussion mailing list
>
> cellml-discussion at cellml.org <mailto:cellml-discussion at cellml.org>
>
> http://www.cellml.org/mailman/listinfo/cellml-discussion
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> cellml-discussion mailing list
> cellml-discussion at cellml.org
> http://www.cellml.org/mailman/listinfo/cellml-discussion
>






Archive powered by MHonArc 2.6.18.

Top of page