CellML Discussion List

Text archives Help


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


Chronological Thread 
  • From: r.britten at auckland.ac.nz (Randall Britten)
  • Subject: [cellml-discussion] A list of proposed changes to semantics to make in CellML 1.2
  • Date: Thu, 10 Jan 2008 11:55:31 +1300

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

Regards,
Randall


> -----Original Message-----
> From: cellml-discussion-bounces at cellml.org [mailto:cellml-discussion-
> bounces at cellml.org] On Behalf Of Justin Marsh
> Sent: Monday, 24 December 2007 4:09 p.m.
> To: cellml-discussion at cellml.org
> Subject: Re: [cellml-discussion] A list of proposed changes to
> semantics to makein CellML 1.2
>
> Hi all,
> I hope that I haven't missed the point of bidirectionality,
> but the way it is suggested seems not to be a declarative way to
> do things.
>
> As far as I can tell, in a procedural language it makes sense
> to modify variables in multiple locations, as application is
> essentially sequential; the seperation between 'big ticks'
> and 'little ticks' allows one to flatten the calculation for
> each time step. In a declarative language however,
> there is essentially no application; this means that we want
> to group every part of a definition of something together.
> When we want to have parts of the definition of a thing in several
> places,
> the thing becomes that which explicitly joins together the
> definitions into one definition, via mappings and maths.
>
> In a declarative language, this should not explicitly be done by order;
> explicit grouping is accomplished by containment, or something like
> tagging, which is just a flattened form of containment.
>
> The 'in' and 'out' interface values are a form of tagging, specifying
> that the 'out' version of the variable is where its definition is
> grouped,
> with all of the 'in' versions using that definition to
> specify other definitions.
>
> The purpose that I see bidirectionality being put to is to allow
> for a certain kind of notational laziness, two cases of which stand out.
>
> The first is the variable forwarding case, which is not terribly
> problematic. It could be unambiguously
> resolved by explicitly separating the 'in' variable from the 'out'
> variable, for instance.
>
> Suppose we have encapsulated components like so:
>
> A
> |
> B
> / \
> C D
>
> We wish to forward variable v through component B.
> What we can do is have a variable v_in, mapped to variable v
> in component A, and a variable v_out, which is set equal
> to v_in in the Maths element of component B. The variable
> v_out can then be mapped to v in both C and D without
> ambiguity. This is a rather longhand way of doing this,
> but it could be done automatically fairly easily.
>
> The second case that springs to mind is where someone
> implicitly uses a procedural methodology in their model.
> For example, suppose you have a variable in a component,
> and that variable represented the level of a particular
> compound that was metabolised in the body. It may be
> necessary to add a stimulus protocol in order to get
> oscillation, and it may be desirous for the stimulus protocol to
> be in a separate component; to do that in a procedural language one
> would simply
> perturb the value of the variable at particular time points, by
> effectively having the variable sometimes have an 'in'
> interface and sometimes have an 'out' interface.
> A declarative way of doing this would be to create a variable
> defined by a piecewise equation within a separate
> stimulus protocol component, map that variable onto a variable
> in the compound component, and add the stimulus protocol variable into
> the maths that defines the levels of the compound; this is how
> these models are currently built.
>
> Best regards,
> Justin.
>
>
>
> Quoting Andrew Miller <ak.miller at auckland.ac.nz>:
>
> > 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".
> >
> > I think we also need "both" for the forwarding case if we were going
> to
> > take this approach.
> >
> > This is a pretty fundamental change
> >> to the specification but I think that it better reflects the
> >> declarative intent of CellML model descriptions.
> >
> > I think that if we want the bulk of valid CellML 1.1 models to be
> valid
> > CellML 1.2 models, we would need to at least keep the directionality
> as
> > an option, even if it carries information which is not meaningful in
> > CellML 1.2. This would mean 1.2 software could process most 1.1
> models
> > without having to implement the two specifications separately, which
> is
> > probably a good goal to have.
> >
> > I think that it all depends on how much we are prepared to change the
> > specification for CellML 1.2 - I have so far been aiming to get
> forwards
> > and backwards compatibility unless the model actually uses some
> feature
> > available in one version that isn't in another.
> >
> > Best regards,
> > Andrew
> >
> >>
> >> Best wishes
> >> Poul
> >>
> >> 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 www: jonc.me.uk/
> >>>
> >>> We are tribbles of Borg. Prepare to be replicated.
> >>> _______________________________________________
> >>> cellml-discussion mailing list
> >>> 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
> >
> > _______________________________________________
> > cellml-discussion mailing list
> > cellml-discussion at cellml.org
> > http://www.cellml.org/mailman/listinfo/cellml-discussion
> >
>
>
>
> ----------------------------------------------------------------
> This message was sent using IMP, the Internet Messaging Program.
>
> _______________________________________________
> cellml-discussion mailing list
> cellml-discussion at cellml.org
> http://www.cellml.org/mailman/listinfo/cellml-discussion




  • [cellml-discussion] A list of proposed changes to semantics to make in CellML 1.2, Randall Britten, 01/10/2008

Archive powered by MHonArc 2.6.18.

Top of page