DefineEm:
PROC = {
[] ← DL[$Interface, LIST[StarCh[LIST[$Define, $Unused, $Joined, $TwoDArrayJoin, $WeakJoined, $MustJoin, $Permutable, $Timing, $Simulate, Oo[$Body], $PortImplementation, Oo[$ArrayRelatedInfo], $Comment, $UserData, Limit[$Repeat, 1], Limit[$Constraint, 1], Limit[$Assign, 1], Limit[$Block, 2], Limit[$Escape, 2], Limit[$Iterate, 2], Limit[$Redo, 2]]] ]];
[] ← DL[$Unused, LIST[Star[$Reference]]];
[] ← DL[$Joined, LIST[StarCh[LIST[$Reference, $Joined, $WeakJoined]] ]];
[] ← DL[$WeakJoined, LIST[StarCh[LIST[$Reference, $Joined, $WeakJoined]] ]];
[] ← DL[$MustJoin, LIST[StarCh[LIST[$Reference, $Joined, $WeakJoined]] ]];
[] ← DL[$Permutable, LIST[StarCh[LIST[NameRef[], $NonPermutable, $Permutable]] ]];
[] ← DL[$NonPermutable, LIST[StarCh[LIST[NameRef[], $NonPermutable, $Permutable]] ]];
[] ← DL[$Timing, LIST[NameRef[], StarCh[LIST[$Delay, $Stable, $Comment, $UserData]] ]];
[] ← DL[$Delay, LIST[Star[$Transition], Star[$Reference]]];
[] ← DL[$Transition, LIST[NameRef[], NameRef[], $Value, Opt[$Value]]];
[] ← DL[$Stable, LIST[NameRef[], $Number, $Number, NameRef[], NameRef[], NameRef[]]];
[] ← DL[$Simulate, LIST[NameRef[], NameDef[], StarCh[LIST[Oo[$Rename], $PortListAlias, Oo[$IgnoreValue], $WaveValue, $Apply, $Comment, $UserData]] ]];
[] ← DL[$PortListAlias, LIST[NameDef[], $NameRefs]];
[] ← DL[$IgnoreValue, LIST[NameDef[]]];
[] ← DL[$WaveValue, LIST[NameDef[], $Number, $LogicWaveform]];
[] ← DL[$Apply, LIST[$WholeNumber, $Number, StarCh[LIST[$LogicInput, $LogicOutput, $Comment, $UserData]] ]];
[] ← DL[$LogicInput, LIST[$NameRefs, $LogicWaveform]];
[] ← DL[$LogicOutput, LIST[$NameRefs, $LogicWaveform]];
[] ← DL[$LogicWaveform, LIST[Star[NameRef[]]]];
[] ← DL[$Body, LIST[StarCh[LIST[$FigureGroup, $Comment, $Property]] ]];
[] ← DL[$PortImplementation, LIST[NameRef[], StarCh[LIST[$FigureGroup, $Comment, $Property]] ]];
[] ← DL[$FigureGroup, LIST[$FigureGroupRef, StarCh[LIST[$Figure, $SignalGroup, $Comment, $UserData]] ]];
[] ← DC[$FigureGroupRef, LIST[NameRef[], $FigureGroupSpecification]];
[] ← DC[$Figure, LIST["Polygon", "Path", "Rectangle", "Dot", "Shape", "OpenShape", "Circle", "Annotate"]];
[] ← DL[$Polygon, LIST[Star[$Point], Star[$Property]]];
[] ← DL[$Path, LIST[Star[$Point], Star[$Property]]];
[] ← DL[$Rectangle, LIST[$Point, $Point, Star[$Property]]];
[] ← DL[$Dot, LIST[$Point, Star[$Property]]];
[] ← DL[$Shape, LIST[Star[$Corner], Star[$Property]]];
[] ← DL[$OpenShape, LIST[Star[$Corner], Star[$Property]]];
[] ← DL[$Circle, LIST[$Point, $Point, Star[$Property]]];
[] ← DL[$Point, LIST[$Coordinate, $Coordinate], 0, 0];
[] ← DC[$Point, LIST[$Expression], 1];
[] ← DC[$Corner, LIST[$Point, $Arc]];
[] ← DL[$Arc, LIST[$Point, $Point, $Point]];
[] ← DL[$Annotate, LIST[$String, $Point, $Point, $Justify]];
[] ← DC[$Justify, JdC[LIST[$Upper, $Center, $Lower], LIST[$Left, $Center, $Right]]];
[] ← DL[$SignalGroup, LIST[NameRef[], StarCh[LIST[$FigureGroup, $Comment, $UserData]] ]];
[] ← DL[$ArrayRelatedInfo, LIST[$ArrayUse, Opt[Ch[LIST[$Socket, $Plug]]], StarCh[LIST[$Comment, $UserData]] ]];
[] ← DC[$ArrayUse, LIST["ArrayMacro", "ArraySite", "BaseArray"]];
[] ← DL[$Socket, LIST[Star[$Transform]]];
[] ← DL[$Plug, LIST[Star[$SocketSet]]];
[] ← DL[$SocketSet, LIST[Star[$Instance], Star[$Transform]]];
[] ← DL[$Contents, LIST[StarCh[LIST[$Define, $Instance, $Unused, $Global, $Joined, $TwoDArrayJoin, $MustJoin, $Required, $Measured, $CriticalSignal, $FigureGroup, $Annotate, $Wire, $Section, Oo[$LogicModel], $Comment, $UserData, Limit[$Repeat, 1], Limit[$Constraint, 1], Limit[$Assign, 1], Limit[$Block, 2], Limit[$Escape, 2], Limit[$Iterate, 2], Limit[$Redo, 2]]] ]];
[] ← DL[$Instance, LIST[$References, NameRef[], NameDef[], Opt[$Rename], Opt[$Transform], Star[$Parameter], Star[$Property], Star[$PortInstance]]];
[] ← DQ[$References, LIST[$Multiple, Star[$Reference]], $Reference];
[] ← DL[$Transform, LIST[Opt[$ScaleX], Opt[$ScaleY], Opt[$Orientation], Opt[$Translate]]];
[] ← DL[$ScaleX, LIST[$Coordinate, $Coordinate]];
[] ← DL[$ScaleY, LIST[$Coordinate, $Coordinate]];
[] ← DC[$Orientation, LIST["r0", "r90", "r180", "r270", "mx", "myr90", "my", "mxr90"]];
[] ← DL[$Translate, LIST[$Place, $Place]];
[] ← DC[$Place, LIST[$Coordinate, $Step]];
[] ← DL[$Step, LIST[$Coordinate, $WholeNumber, $Coordinate]];
[] ← DL[$Parameter, LIST[NameRef[], $ParameterValue]];
[] ← DQ[$ParameterValue, LIST[$Multiple, Star[$PrimitiveData]], $PrimitiveData, 0, 0];
[] ← DQ[$ParameterValue, LIST[$Multiple, Star[$Expression]], $Expression, 1];
[] ← DC[$PrimitiveData, LIST[$Primitive, $True, $False]];
[] ← DC[$Primitive, LIST[$String, $Integer, $ScaledInteger]];
[] ← DL[$PortInstance, LIST[NameRef[], Star[$Property]]];
[] ← DL[$Global, LIST[Star[NameRef[]]]];
[] ← DL[$Required, LIST[NameRef[], Star[$Delay]]];
[] ← DL[$Measured, LIST[NameRef[], Star[$Delay]]];
[] ← DL[$CriticalSignal, LIST[$WholeNumber, Star[NameRef[]]]];
[] ← DL[$Wire, LIST[NameRef[], NameRef[], Opt[$FigureGroup], Star[$Property]]];
[] ← DL[$Section, LIST[$String, StarCh[LIST[$String, $Instance, $Section]] ]];
[] ← DL[$LogicModel, LIST[NameRef[], $LogicOtherwise, StarCh[LIST[$LogicState, $Comment, $UserData]] ]];
[] ← DL[$LogicOtherwise, LIST[NameRef[]]];
[] ← DL[$LogicState, LIST[Star[$Condition], $Result]];
[] ← DL[$Condition, LIST[Star[$WFF]]];
[] ← DL[$Result, LIST[Star[$WFF]]];
[] ← DL[$WFF, LIST[NameRef[], NameRef[], $Number, $Number]];
}.