Git Product home page Git Product logo

xeventb's Introduction

CamilleX Feature

This feature provides a text editor (CamilleX) for Event-B constructs (e.g., XMachines and XContexts).

Release history:

2.1.0 Usability Update

Updated Plug-ins/Features

  • XContext (2.1.0): Attach the markers to the XContext's name if no child element found (see Issue #65).
  • XContext UI (2.1.0): Added handler to insert Event-B symbols into XContext Editor (see Issue #67).
  • XMachine (2.1.0): Attach the markers to the XMachine's name if no child element found (see Issue #65).
  • XMachine UI (2.1.0): Added handler to insert Event-B symbols into XMachine Editor (see Issue #67).
  • CamilleX UI (1.1.0):
    • Added a context menu item to do the batch generation of CamilleX source files (see Issue #63).
    • Added common implementation for a handler to insert Event-B Symbols to a text editor (see Issue #67).

Fixed Issues

  • Issue #63: Batch generation for a collection of CamilleX source files.
  • Issue #65: Markers attach to an XMachine or an XContext.
  • Issue #67: SymbolTable does not work with CamilleX editors

2.0.2 Maintenance release

  • Fixed the Update Site name.
  • Removed the included features: Inclusion, Records, Containment

Updated Plug-ins

  • XContext (2.0.2):
    • Added extra dependency on the Record Edit Plug-in.
  • XMachine (2.0.2):
    • Added extra dependency on the Inclusion Edit Plug-in.
    • Added extra dependency on the Record Edit Plug-in.
    • Added extra dependency on the Containment Edit Plug-in.
  • XMachine UI (2.0.1):
    • Update dependency range for org.eventb.core.emf.

2.0.1 Maintenance release

Updated Plugins/Features

  • Branding (0.0.5): Update copyright information on branding.
  • XContext (2.0.1):
    • Added missing dependency.
    • Fixed NPE in XContextMarkerModule.
  • XMachine (2.0.1):
    • Added missing dependency.
    • Fixed NPE in XContextMarkerModule.

2.0.0

Enhancement to CamilleX to improve its usability.

  • Issue #6: Show inherited information for extended events as hover information.
  • Issue #50: Show errors/warnings from Rodin components in CamilleX components.
  • Issue #51: Show warnings for untranslated formulae (predicates, expressions, assignments).
  • Support for records (in XContexts and XMachines).
  • Support for containment mechanisms (enabling external modelling extensions, e.g., UML-B models).

Fixed Issues

  • Issue #33: Errors in the generated Machine.
  • Issue #36: Exceptions when projects are closed.

Updated Plugins/Features

  • EMF Inclusion Feature (2.0.0): Added
  • EMF Containment Feature (0.0.1): Initial version
  • Records Feature (0.1.0): Initial version
  • Common (1.0.0):
    • Added validation issue code (used for validation and quick fixes).
  • UI (1.0.0): Pumped the version number due to API breakage in earlier version.
  • XContext (2.0.0): Pumped the version number due to API breakage in earlier version.
    • Issue #50: Show errors/warnings from Rodin Machine in XMachine.
    • Issue #51: Show warnings for untranslated formulae (predicates).
  • XContext IDE (2.0.0): Pumped the version number due to API breakage in earlier version.
  • XContext UI (2.0.0): Pumped the version number due to API breakage in earlier version.
    • Issue #51: Quick fixes for untranslated formulae (predicates)
  • XMachine (2.0.0): Pumped the version number due to API breakage in earlier version.
    • Issue #6: Show inherited information for extended events as hover information.
    • Issue #33: Errors in the generated Machine.
    • Issue #50: Show errors/warnings from Rodin Machine in XMachine.
    • Issue #51: Show warnings for untranslated formulae (predicates, expressions, assignments)
    • Support for records in XMachines.
    • Support for containment mechanisms (enabling external modelling extensions, e.g., UML-B models).
  • XMachine IDE (1.0.0): Pumped the version number due to API breakage in earlier version.
  • XMachine UI (2.0.0): Pumped the version number due to API breakage in earlier version.
    • Issue #51: Quick fixes for untranslated formulae (predicates, expressions, assignments)

1.0.0

The feature is now called CamilleX (instead of XEvent-B).

  • Branding (0.0.4): Updated logo to CamilleX.
  • Common (0.0.5): Update copyright statements in source code.
  • Cheatsheets (1.0.0): Updated the name to use CamilleX instead of XEvent-B.
  • Documentation (1.0.0): Updated the name to use CamilleX instead of XEvent-B.
  • UI (0.1.0): Updated the name to use CamilleX instead of XEvent-B.
  • XContext (1.0.0): Updated the name to use CamilleX instead of XEvent-B.
    • Update dependency ranges
  • XContext IDE (1.0.0): Updated the name to use CamilleX instead of XEvent-B.
    • Update dependency ranges
  • XContext UI (1.0.0): Updated the name to use CamilleX instead of XEvent-B.
    • Update dependency ranges
  • XMachine (1.0.0): Updated the name to use CamilleX instead of XEvent-B.
  • Update dependency ranges

0.0.7

  • XEvent-B Branding (0.0.3): Updated logo to XEvent-B.
  • XEvent-B Common (0.0.4): Enhancement (Issue #11).
    • Machines from different projects can now be included.
    • Machines are now included using qualified name defined as: projectName.machineName
  • XEvent-B Documentations (0.0.7): Update documentation for 0.0.7 release.
  • XEvent-B XContext (0.0.5): Changed dependency on XText to [2.12.0, 3.0.0).
  • XEvent-B XContext IDE (0.0.4): Changed dependency on XText to [2.12.0, 3.0.0).
  • XEvent-B XContext UI (0.0.4): Changed dependency on XText to [2.12.0, 3.0.0).
  • XEvent-B XMachine (0.0.5):
    • Changed dependency on XText to [2.12.0, 3.0.0).
    • Fixed Issue #8: Comments are not parsed.
    • Fixed Issue #10: Variants not translated: Fix is part of inclusion plug-in release 0.2.0.
    • Flattened machines now have the included machine elements generated before the source machine.
    • Order of generating elements of multiple inclusions and/or instances is from last to first.
    • This update is part of inclusion plug-in release 0.2.0.
  • XEvent-B XMachine IDE (0.0.4): Changed dependency on XText to [2.12.0, 3.0.0).
  • XEvent-B XMachine UI (0.0.4):
    • Changed dependency on XText to [2.12.0, 3.0.0).
    • Regenerated from XEvent-B XMachine 0.0.5

0.0.6

  • Renamed plug-ins and features to XEvent-B (instead of Event-B XText).
  • XEvent-B Branding (0.0.2): Renamed from Event-B XText Branding.
  • XEvent-B Documentations (0.0.2): Renamed from Event-B XText Documentations.
  • XEvent-B Cheatsheets (0.0.2): Renamed from Event-B XText Cheatsheets.
  • XEvent-B Common (0.0.3): Renamed from Event-B XText Common.
  • XEvent-B UI (0.0.2): Renamed from Event-B XText UI.
  • XEvent-B XContext (0.0.4): Renamed from Event-B XText Context.
  • XEvent-B XContext IDE (0.0.3): Renamed from Event-B XText Context IDE.
  • XEvent-B XContext UI (0.0.3): Renamed from Event-B Context UI.
  • XEvent-B XMachine (0.0.4): Renamed from Event-B XText Machine.
    • Support Machine Inclusion and Event Synchronisation.
  • XEvent-B XMachine IDE (0.0.3): Renamed from Event-B XText Machine IDE.
  • XEvent-B XMachine UI (0.0.3): Renamed from Event-B XText Machine UI.

0.0.5

  • Event-B XText Documentations (0.0.1): Documentation plug-in (Initial version).
  • Event-B XText Cheatsheets (0.0.1): Cheatsheets plug-in including Basic tutorial (Initial version).

0.0.4

  • Updated plug-in dependency for the feature

0.0.3

  • Event-B XText Context (0.0.3)
    • Issue #3: Single-line comment after the element, multi-line comment before the element
  • Event-B XText Context IDE (0.0.2) Regenerated
  • Event-B XText ContextUI IDE (0.0.2) Regenerated
  • Event-B XText Machine (0.0.3)
    • Issue #3: Single-line comment after the element, multi-line comment before the element
    • Issue #5: Event terminator using 'end' keyword instead of ';'
  • Event-B XText Machine IDE (0.0.2) Regenerated
  • Event-B XText Machine UI (0.0.2) Regenerated

0.0.2

  • Event-B XText Common (0.0.2)
    • Added transient value service for XContext and XMachine.
  • Event-B XText Context (0.0.2):
    • Added formatter (used for auto-indentation).
  • Event-B XText Machine (0.0.2):
    • Added formatter (used for auto-indentation).
  • Event-B XText UI (0.0.1): Initial version
    • Added context menu for converting machines and contexts to XText.

0.0.1 Initial version contains the following plug-ins:

  • Event-B XText Branding (0.0.1) Initial version: Branding information
  • Event-B XText Common (0.0.1) Initial version: Common facilities
  • Event-B XText Context (0.0.1) Initial version: Core support for Event-B contexts
  • Event-B XText Context IDE (0.0.1) Initial version: IDE for Event-B contexts
  • Event-B XText Context UI (0.0.1) Initial version: UI for Event-B contexts
  • Event-B XText Machine (0.0.1) Initial version: Core support for Event-B machines
  • Event-B XText Machine IDE (0.0.1) Initial version: IDE for Event-B machines
  • Event-B XText Machine UI (0.0.1) Initial version: UI for Event-B machines

xeventb's People

Contributors

asiehsalehi avatar cfsnook avatar dd4g12 avatar tshoang avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

xeventb's Issues

Contextual links to Rodin files.

Contextual links lead to generated bum/buc files instead of bumx/bucx sources.
This feature is requested by Tomas Fischer via private communication.

extended

converting from event-b to xtext with extended property is now fixed for next release 0.08

Disappearing generated Rodin files

Quite often the generated Rodin files (contexts and machines) are disappeared. This stops the XText builder to complete the build. Often, ones need to go through each CamilleX constructs to regenerate the files one by one.

Event terminator

It would be easier to have the events always ended with keyword "end" and removed the character ";". This feature is requested by Tomas Fischer via private communication.

Versioning of models

The models/projects should have version numbers (using semantic versioning). This can be done with some Manifest file.

Errors in the generated Machine

I have tried to copy and paste a machine from Camille (non-X version).
I had to reformat slightly.
For some reason the begin was not accepted for the INITIALISATION (contrary what seems to be used in the Camille guide PDF).
I had to rename when to where.
After some tweaks I got the contents to pass through CamilleX.
HOwever, the generated .bum files contains several errors.

Here are the contents:
machine XTransfer0
variables b c
invariants
@INV1: b∈ℕ // the bank account
@Inv2: c∈ℕ // the client account, no overdrafts
@inv3: b+c = 10 // total sum of credits: 10
events
event INITIALISATION
then
@Ini1: b := 5
@Ini2: c ≔ 5
end
event b2c where @g1 b>0 then
@A1: b ≔ b−1
@a2: c ≔ c+1
end
event c2b where @g1 c>0 then
@A1: b ≔ b+1
@a2: c ≔ c−1
end
end

The Rodin errors are:
Description Resource Path Location Type
Lexical error. Character : has been ignored XTransfer0.bum /CamilleXTests Unknown Rodin Problem Marker
Syntax error: Operator: ≔ should appear at the beginning of a sub-formula XTransfer0.bum /CamilleXTests Unknown Rodin Problem Marker
Syntax error: Operator: ≔ should appear at the beginning of a sub-formula XTransfer0.bum /CamilleXTests Unknown Rodin Problem Marker
Syntax error: Operator: ≔ should appear at the beginning of a sub-formula XTransfer0.bum /CamilleXTests Unknown Rodin Problem Marker
Syntax error: Operator: ≔ should appear at the beginning of a sub-formula XTransfer0.bum /CamilleXTests Unknown Rodin Problem Marker
Syntax error: Unknown operator: (expected to find an assignment operator) XTransfer0.bum /CamilleXTests Unknown Rodin Problem Marker

After adding a : after the two labels @g1 some of the errors disappeared, but there is still a lexical error for ini1; somehow the := is not converted to its Unicode equivalent.

Event group only supports 1 event

In CamilleX 3.0.0, the events group in the machine only support 1 event at the moment. That is the following

events
    event e
    end
end

is OK, but

events
    event e
    end

    event f
    end
end

is NOT OK.

This is a bug that needs to be fixed.

XMachine and XContext in the Project Explorer

It would be beneficial to show the bucx / bumx files in the explorer and to put the generated bum / buc files as their child nodes (like Complex Context Structure and Complex Machine Structure do).
(This feature is requested by Tomas Fischer via private communication)

Showing inherited elements

It would be nice to show inherited event elements in the outline and in the tooltip.
This feature is requested by Tomas Fischer via private communication.

Convert to CamilleX should not ignore features of generated elements

Add the moment, convert from Rodin constructs to CamilleX ignore features of generated elements (e.g., elements generated from UML-B). This is done by transient value services for XContext (ac.soton.xeventb.common.XContextTransientValueService) and XMachine (ac.soton.xeventb.common.XMachineTransientValueService).

This cause the generator to fail with exceptions thrown when the feature is a required feature, e.g., the name and predicate of axioms. As a result, the generator should NOT ignore the feature of the generated elements.

Support for commenting expression/predicate parts

It is desirable to have comment for a part of an expression/predicate. For example,
@Label:
"<" // Comment on 1st part
"<<second part" // Comment on 2nd part
"<>" // Comment on 3rd part
This feature is requested by Tomas Fischer via private communication.

Exceptions when projects are closed

I seem to get error messages and exceptions from CamilleX when I have closed projects.
For example,

An exception occurred invoking extension: ac.soton.xeventb.xcontext.ui.navigatorContent.XContext for object org.eclipse.jface.viewers.TreePath@276a6e1

org.eclipse.core.internal.resources.ResourceException: Project 'Soda' is not open.
at org.eclipse.core.internal.resources.Project.checkAccessible(Project.java:144)
at org.eclipse.core.internal.resources.Container.members(Container.java:239)
at org.eclipse.core.internal.resources.Container.members(Container.java:226)
at ac.soton.xeventb.ui.AbstractXEventBContentProvider.getChildren(AbstractXEventBContentProvider.java:74)
at ac.soton.xeventb.ui.AbstractXEventBContentProvider.hasChildren(AbstractXEventBContentProvider.java:129)
at org.eclipse.ui.internal.navigator.extensions.SafeDelegateTreeContentProvider.hasChildren(SafeDelegateTreeContentProvider.java:112)
at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.callNormalHasChildren(NavigatorContentServiceContentProvider.java:442)
at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.access$4(NavigatorContentServiceContentProvider.java:437)
at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider$3.run(NavigatorContentServiceContentProvider.java:405)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.hasChildren(NavigatorContentServiceContentProvider.java:390)
at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.hasChildren(NavigatorContentServiceContentProvider.java:434)
at org.eclipse.jface.viewers.AbstractTreeViewer.isExpandable(AbstractTreeViewer.java:2099)
at org.eclipse.jface.viewers.TreeViewer.isExpandable(TreeViewer.java:537)
at org.eclipse.jface.viewers.AbstractTreeViewer.isExpandable(AbstractTreeViewer.java:2137)
at org.eclipse.jface.viewers.AbstractTreeViewer.optionallyPruneChildren(AbstractTreeViewer.java:2770)
at org.eclipse.jface.viewers.AbstractTreeViewer.updateChildren(AbstractTreeViewer.java:2569)
at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1894)
at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:668)
at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1900)
at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:668)
at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1870)
at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1827)
at org.eclipse.ui.navigator.CommonViewer.internalRefresh(CommonViewer.java:529)
at org.eclipse.jface.viewers.StructuredViewer.lambda$3(StructuredViewer.java:1531)
at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1447)
at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:354)
at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1408)
at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1531)
at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:535)
at org.eclipse.ui.navigator.CommonViewer.refresh(CommonViewer.java:349)
at fr.systerel.internal.explorer.navigator.EventBNavigator$1.refresh(EventBNavigator.java:29)
at org.eclipse.ui.navigator.CommonViewer.refresh(CommonViewer.java:492)
at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1467)
at fr.systerel.internal.explorer.navigator.NavigatorController$ViewerRefresher.refreshViewer(NavigatorController.java:96)
at fr.systerel.internal.explorer.navigator.NavigatorController$ViewerRefresher$1.run(NavigatorController.java:79)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:37)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:182)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4034)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3701)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1150)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1039)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:680)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:594)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:151)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)
at org.eclipse.equinox.launcher.Main.run(Main.java:1499)

Show warnings for untranslated formulae

Currently, the formulae are translated into Event-B mathematical language automatically. However, untranslated formulae inconsistency in displaying errors/warnings from the Rodin components, e.g., in the positions of the problems. Therefore it is important to warn the user about that.

Updating the Xtext Community Website

Hello XEventB team,

The Xtext team would like to update the Xtext community website listing all the cool projects people are building around Xtext/Xtend.

See also the corresponding GitHub issue and Bugzilla ticket.

If you are interested that the XEventB project is listed there, please provide the following information as a comment to this issue:

<tr>
	<td><a href="project_link">project_name</a></td>
	<td>project_description_max_2_sentences</td>
	<td>license</td>
	<td>category</td>
	<td>author(s)</td>
</tr>

We will then update the Xtext community website and get it online as soon as possible.

Thanks!
Tamás

Saving does not seem to update Rodin representation

I have intentionally created an error in a machine, using a variable that does not exist (Ss in the last line of the context shown below).
Saving the file in CamilleX did not create an error marker nor error message, despite Build and Prove automatically being enabled.
I often have a similar issue with Camille at the moment; the Event-B context editor does not have this issue.

screenshot 2018-11-19 at 12 41 54

generate (all) Rodin components

It would be useful to have a menu option to re-generate selected (or all) machines and contexts in a project.

There are a few use cases where this is needed - e.g. if a project is shared in a repo, we may not track the bum and buc files because they have a lot of spurious changes.

At the moment i have to open each CamilleX file and make a change and save it and then revert the change and save it again.

Attempted to beginRule error message

I had old Camille open on the generated file; I saved a change in CamilleX and then reloaded the contents in Camille and got the following error message, which I guess is coming from new CamilleX?

screenshot 2018-11-13 at 18 40 08

Single-line comment after the commented element.

Currently the comment must be put before the commented element. However, the single line comment fits better after the commented element, e.g. in the sets, constants, variables or parameters sections, but also for short axioms, invariants, guards and actions.
(This feature is requested by Tomas Fischer via private communication)

Batch generation for a collection of CamilleX source files

When importing a project with CamilleX source, the XText builder cannot automatically generate the corresponding Rodin files. As a result, users often need to go through each CamilleX files (in the right order) to generate them manually (i.e., making changes to the source file, e.g., adding a blank space, and saving it again to enable the generator.
It would be nice to have a way to do this automatically.

This is requested by Jonathan Hammond via private email (December 2020).

Markers attach to an XMachine or an XContext

Currently, a marker (error/warning/info) attached to the XMachine or XContext will highlight the whole content of the XMachine or XContext. It is therefore better to attach the marker to the name of the machine or the context.

Comments everywhere

Currently, comments are restricted to before the modelling elements (Multi-line) or after the modelling elements (single-line). This is quite restrictive and due to the translation of the comments into the Rodin elements. We should allow comments everywhere by ignoring them, however it means that the comments will no longer be kept in the underlying Rodin elements (but that is OK).

XMachine comment is not translated

Comments for XMachine (multiline comments) are not translated to Rodin machine (See m0 in the following attached project).
P.zip
Note that the it works for XContext (see c0 in the same project).

Cannot reference records in other components, e.g. in Seen Contexs

In the following context c0, a record A is declared

context c0
sets S
records
	record A
	    x : many S
end

In the following machine m0, a record B extends A, which causes an error due to A cannot be found

machine m0
sees c0
records
	record B extends A
end

This problem occurs on Rodin 3.4.0 with CamilleX prototype installed. This does not occur when running from code.

Rodin keyboard converter bug

When converting plain text to Rodin keyboard symbols using the contextual helper, it puts "invariant" keyword at the end of the preceding line
image
image

CodeQL fails

CodeQL currently uses Maven to compile the code. Since Rodin 3.8 was released, Rodin 3.7 was moved to "old" which causes the issue. As a result, we should not use version specific update site, but rather the composite update site for Rodin core, i.e., http://rodin-b-sharp.sourceforge.net/core-updates/

Support for Unicode identifiers

At the moment, identifiers (e.g., variables, machine names, constants, carrier sets, etc.) must be ASCII identifiers. It is desirable to have support for proper Unicode identifiers (which is already supported by Rodin itself).

XMachine formatter does not indent the end keyword for events.

The formatter for XMachine does not indent the end keyword for events when there is a present of witness (with clause) as showed in the following example.

	convergent event CloseCourse
	refines CloseCourses
	any
		c
	where
		@grd2_1: c ∈ dom(atnds)
	then
		@act1_2: atnds ≔ {c} ⩤ atnds
	with
		@cs: cs = {c} 
end

The formatter seems to work fine without the with clause as in the following example

	convergent event Register
	refines Register
	any
		p
		c
	where
		@grd2_1: p ∈ PRTCPT
		@grd2_2: p ≠ instrs(c)
		@grd2_3: c ∈ dom(atnds)
		@grd2_4: p ∉ atnds(c)
		theorem @thm2_3: atnds(c) = prtcpts[{c}]
	then
		@act2_1: atnds(c) ≔ atnds(c) ∪ {p}
	end

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.