##Logical predicates
| B | Lisb | IR | Description |
|------------------------------------------------------|------------------------------------|----------------------------------------------------------------------------|----------------------------|
| pred1 & pred2 & ...
| (and & preds)
| {:tag :and, :preds preds}
| conjunction |
| pred1 or pred2 or ...
| (or & preds)
| {:tag :or, :preds preds}
| disjunction |
| pred1 => pred2 => ...
| (=> & preds)
| {:tag :implication, :preds preds}
| implication |
| | (implication & preds)
| {:tag :implication, :preds preds}
| sugar |
| pred1 <=> pred2 <=> ...
| (<=> & preds)
| {:tag :equivalence, :preds preds}
| equivalence |
| | (equivalence & preds)
| {:tag :equivalence, :preds preds}
| sugar |
| not(pred)
| (not pred)
| {:tag :not, :pred pred}
| not |
| !(id1,id2,...).(implication)
| (for-all ids implication)
| {:tag :for-all, :ids ids, :implication implication}
| universal quantification |
| | (for-all ids premise conclusion)
| {:tag :for-all, :ids ids, :implication (implication premise conclusion)}
| sugar |
| #(id1,id2,...).(pred)
| (exists ids pred)
| {:tag :exists, :ids ids, :pred pred}
| existential quantification |
##Equality
| B | Lisb | IR | Description |
|-----------------------------------------------------------|-----------------------|----------------------------------------------------|-------------|
| left = right
| (= left right)
| {:tag :equals, :left left, :right right}
| equality |
| left /= right
| (not= left right)
| {:tag :not-equals, :left left, :right right}
| disequality |
| elem1/=elem2 & elem1/=elem3 & ... & elem2/=elem3 & ...
| (distinct? & elems)
| (band (not= elem1 elem2) (not= elem1 elem3) ...)
| distinct |
##Booleans
| B | Lisb | IR | Description |
|--------------|---------------------|----------------------------------|--------------------------------------|
| TRUE
| true
| true
| true |
| FALSE
| false
| false
| false |
| BOOL
| bool-set
| {:tag :bool-set}
| set of boolean values ({TRUE,FALSE}) |
| bool(pred)
| (pred->bool pred)
| {:tag :pred->bool, :pred pred}
| convert predicate into BOOL value |
##Sets
| B | Lisb | IR | Description |
|-------------------------------|--------------------------------------------|--------------------------------------------------------------------|--------------------------------------------|
| {elem1,elem2,...}
| #{elem1 elem2 ...}
| #{elem1 elem2 ...}
| set enumeration |
| {id1,id2,...|pred}
| (comprehension-set ids pred)
| {:tag :comprehension-set, :ids ids, :pred pred}
| comprehension set |
| | #{ids | pred}
| {:tag :comprehension-set, :ids ids, :pred pred}
| sugar |
| POW(set)
| (pow set)
| {:tag :power-set, :set set}
| power set |
| POW1(set)
| (pow1 set)
| {:tag :power1-set, :set set}
| set of non-empty subsets |
| FIN(set)
| (fin set)
| {:tag :fin, :set set}
| set of all finite subsets |
| FIN1(set)
| (fin1 set)
| {:tag :fin1, :set set}
| set of all non-empty finite subsets |
| card(set)
| (card set)
| {:tag :cardinality, :set set}
| cardinality |
| set1*set2*...
| (cart-or-mult & sets)
| {:tag :cartesian-product-or-multiplication, :nums-or-sets sets}
| cartesian product or multiplication |
| | (cartesian-product & sets)
| {:tag :cartesian-product, :sets sets}
| cartesian product |
| | (x & sets)
| {:tag :cartesian-product, :sets set}
| sugar |
| set1\/set2\/...
| (union & sets)
| {:tag :union, :sets sets}
| set union |
| set1/\set2/\...
| (intersection & sets)
| {:tag :intersection, :sets sets}
| set intersection |
| set1-set2-...
| (set- & sets)
| {:tag :difference, :sets sets}
| set difference |
| elem:set
| (member? elem set)
| {:tag :member, :elem elem, :set set}
| element of |
| | (in elem set)
| {:tag :member, :elem elem, :set set}
| sugar |
| | (contains? set & elems)
| (and (member? elem1 set) (member? elem2 set) ...)
| sugar |
| elem/:set
| (not (member? set elem))
| | not element of |
| set1<:set2&set2<:...
| (subset? & sets)
| {:tag :subset?, :sets sets}
| subset of |
| | (superset? & sets)
| {:tag :subset?, :sets (clore.core/reverse sets)}
| sugar |
| set1/<:set2&set2/<:...
| (not (subset? sets))
| | not subset of |
| set1<<:set2&set2<<:...
| (strict-subset? sets)
| {:tag :strict-subset?, :sets sets}
| strict subset of |
| | (strict-superset? sets)
| {:tag :strict-subset?, :sets (clojure.core/reverse sets)}
| sugar |
| set1/<<:set2&set2/<<:...
| (not (strict-subset? sets))
| | not strict subset of |
| union(set-of-sets)
| (unite-sets set-of-sets)
| {:tag :unite-sets, :set-of-sets set-of-sets}
| generalised union over sets of sets |
| inter(set-of-sets)
| (intersect-sets set-of-sets)
| {:tag :intersect-sets, :set-of-sets set-of-sets}
| generalised intersection over sets of sets |
| UNION(ids).(pred|expr)
| (union-pe ids pred expr)
| {:tag :union-pe, :ids ids, :pred pred, :expr expr}
| generalised union with predicate |
| INTER(ids).(pred|expr)
| (intersection-pe ids pred expr)
| {:tag :intersection-pe, :ids ids, :pred pred, :expr expr}
| generalised intersection with predicate |
##Numbers
| B | Lisb | IR | Description |
|-------------------------|------------------------|-----------------------------------------------------|----------------------------------------------------------------------|
| INTEGER
| integer-set
| {:tag :integer-set}
| set of integers |
| NATURAL
| natural-set
| {:tag :natural-set}
| set of natural numbers |
| NATURAL1
| natural1-set
| {:tag :natural1-set}
| set of non-zero natural numbers |
| INT
| int-set
| {:tag :int-set}
| set of implementable integers (MININT..MAXINT) |
| NAT
| nat-set
| {:tag :nat-set}
| set of implementable natural numbers |
| NAT1
| nat1-set
| {:tag :nat1-set}
| set of non-zero implementable natural numbers |
| from..to
| (interval from to)
| {:tag :interval, :from from, :to to}
| set of numbers from n to m |
| | (range from to)
| {:tag :interval, :from from, :to (dec to)}
| clojure |
| MININT
| min-int
| {:tag :min-int}
| the minimum implementable integer |
| MAXINT
| max-int
| {:tag :max-int}
| the maximum implementable integer |
| num1>num2>...
| (> & nums)
| {:tag :greater, :nums nums}
| greater than |
| num1<num2<...
| (< & nums)
| {:tag :less, :nums nums}
| less than |
| num1=>num2=>...
| (>= & nums)
| {:tag :greater-equals, :nums nums}
| greater than or equal |
| nums1<=num2<=...
| (<= & nums)
| {:tag :less-equals, :nums nums}
| less than or equal |
| max(S)
| (max S)
| {:tag :max, :set set}
| maximum of a set of numbers |
| max({m,n,o})
| (max m n o)
| {:tag :max, :set set}
| sugar |
| min(S)
| (min S)
| {:tag :min, :set set}
| minimum of a set of numbers |
| min({m,n,o})
| (min m n o)
| {:tag :min, :set set}
| sugar |
| num1+num2+...
| (+ & nums)
| {:tag :add, :nums nums}
| addition |
| num1-num2-...
| (- & nums)
| {:tag :sub, :nums nums}
| difference |
| num1*num2*...
| (cart-or-mul & nums)
| {:tag :cart-or-mul, :nums-or-sets nums}
| cartesian product or multiplication |
| | (* & elems)
| {:tag :mul, :elems elems}
| multiplication |
| num1/num2/...
| (div & nums)
| {:tag :div, :nums nums}
| division |
| num1/num2/...
| (/ & nums)
| {:tag :div, :nums nums}
| sugar |
| num1**num2**...
| (** & nums)
| {:tag :pow, :nums nums}
| power |
| num1 mod num2 mod ...
| (mod & nums)
| {:tag :mod, :nums nums}
| remainder of division |
| PI(z).(P|E)
| (π #{z} P E)
| {:tag :product, :ids ids, :pred pred, :expr expr}
| Set product |
| | (pi #{z} P E)
| {:tag :product, :ids ids, :pred pred, :expr expr}
| sugar |
| SIGMA(z).(P|E)
| (Σ #{z} P E)
| {:tag :sum, :ids ids, :pred pred, :expr expr}
| Set summation |
| | (sigma #{z} P E)
| {:tag :sum, :ids ids, :pred pred, :expr expr}
| sugar |
| succ(n)
| (successor n)
| {:tag :successor, :num num}
| successor (n+1) |
| | (inc n)
| {:tag :successor, :num num}
| sugar |
| pred(n)
| (predecessor n)
| {:tag :predecessor, :num num}
| predecessor (n-1) |
| | (dec n)
| {:tag :predecessor, :num num}
| sugar |
| 2
| 2
| 2
| integer literal |
| -2
| -2
| -2
| integer literal |
| 0xF
| 15
| 15
| hexadecimal literal (cannot be retranslated) |
##Relations
| B | Lisb | IR | Description |
|------------------------------------------------------|-------------------------------------|--------------------------------------------------|------------------------------------------------------------------|
| set1<->set2<->...
| (<-> & sets)
| {:tag :relation, :sets sets}
| relation |
| set1<->set2<->...
| (relation & sets)
| {:tag :relation, :sets sets}
| relation |
| set1<<->set2<<->...
| (<<-> & sets)
| {:tag :total relation, :sets sets}
| total relation |
| set1<->>set2<<->...
| (<->> & sets)
| {:tag :surjective relation , :sets sets}
| surjective relation |
| set1<<->>set2<<->...
| (<<->> & sets)
| {:tag :total surjective relation, :sets sets}
| total surjective relation |
| left|->right
| (|-> left right)
| {:tag :maplet, :left left, :right right}
| maplet |
| | (maplet left right)
| {:tag :maplet, :left left, :right right}
| sugar |
| dom(rel)
| (dom rel)
| {:tag :dom, :rel rel}
| domain of relation |
| ran(rel)
| (ran rel)
| {:tag :ran, :rel rel}
| range of relation |
| id(set)
| (id set)
| {:tag :id, :set set}
| identity relation |
| set<|rel
| (<| set rel)
| {:tag :domain-restriction, :rel rel, :set set}
| domain restriction |
| | (domain-restriction set rel)
| {:tag :domain-restriction, :rel rel, :set set}
| sugar |
| set<<|rel
| (<<| set rel)
| {:tag :domain-subtraction, :rel rel, :set set}
| domain subtraction |
| |(domain-subtraction set rel)
| {:tag :domain-subtraction, :rel rel, :set set}
| sugar |
| rel|>set
| (|> rel set)
| {:tag :range-restriction, :rel rel, :set set}
| range restriction |
| |(range-restriction set rel)
| {:tag :range-restriction, :rel rel, :set set}
| sugar |
| rel|>>set
| (|>> rel set)
| {:tag :range-subtraction, :rel rel, :set set}
| range subtraction |
| | (range-subtraction set rel)
| {:tag :range-subtraction, :rel rel, :set set}
| sugar |
| rel~
| (inverse rel)
| {:tag :inverse, :rel rel}
| inverse of relation |
| rel[set]
| (image rel set)
| {:tag :image, :rel rel, :set set}
| relational image |
| rel1<+rel2<+...
| (override & rels)
| {:tag :override, :rels rels}
| relational overriding (r2 overrides r1) |
| | (<+ & rels)
| {:tag :override, :rels rels}
| sugar |
| rel1><rel2><...
| (direct-product & rels)
| {:tag :direct-product, :rels rels}
| direct product {x,(y,z) | x,y:r1 & x,z:r2} |
| | (>< & rels)
| {:tag :direct-product, :rels rels}
| sugar |
| ((rel1;rel2);...)
| (composition & rels)
| {:tag :composition, :rels rels}
| relational composition {x,y| x|->z:r1 & z|->y:r2} |
| ((rel1||rel2)||...)
| (parallel-product & rels)
| {:tag :parallel-product, :rels rels}
| parallel product {((x,v),(y,w)) | x,y:r1 & v,w:r2} |
| prj1(set1, set2)
| (prj1 set1 set2)
| {:tag :prj1, :set1 set1, :set2 set2}
| projection function (usage prj1(Dom,Ran)(Pair)) |
| prj2(set1, set2)
| (prj2 set1 set2)
| {:tag :prj2, :set1 set1, :set2 set2}
| projection function (usage prj2(Dom,Ran)(Pair)) |
| closure1(rel)
| (closure1 rel)
| {:tag :closure1, :rel rel}
| transitive closure |
| closure(rel)
| (closure rel)
| {:tag :closure, :rel rel}
| reflexive & transitive closure |
| iterate(rel,num)
| (iterate rel num)
| {:tag :iterate, :rel rel, :num num}
| iteration of r with n>=0 |
| fnc(rel)
| (fnc rel)
| {:tag :fnc, :rel rel}
| translate relation A<->B into function A+->POW(B) |
| rel(rel)
| (rel rel)
| {:tag :rel, :rel rel}
| translate relation A<->POW(B) into relation A<->B |
##Functions
| B | Lisb | IR | Description |
|----------------------------------|-------------------------------|----------------------------------------------------|----------------------|
| set1+->set2+->...
| (+-> & sets)
| {:tag :partial-fn, :sets sets}
| partial function |
| | (partial-function & sets)
| {:tag :partial-fn, :sets sets}
| sugar |
| set1-->set2-->...
| (--> & sets)
| {:tag :total-fn, :sets sets}
| total function |
| | (total-function & sets)
| {:tag :total-fn, :sets sets}
| sugar |
| set1+->>set2+->>...
| (+->> & sets)
| {:tag :partial-surjection, :sets sets}
| partial surjection |
| | (partial-surjection & sets)
| {:tag :partial-surjection, :sets sets}
| sugar |
| set1-->>set2-->>...
| (-->> & sets)
| {:tag :total-surjection, :sets sets}
| total surjection |
| | (total-surjection & sets)
| {:tag :total-surjection, :sets sets}
| sugar |
| set1>+>set2>+>...
| (>+> & sets)
| {:tag :partial-injection, :sets sets}
| partial injection |
| | (partial-injection & sets)
| {:tag :partial-injection, :sets sets}
| sugar |
| set1>->set2>->...
| (>-> & sets)
| {:tag :total-injection, :sets sets}
| total injection |
| | (total-injection & sets)
| {:tag :total-injection, :sets sets}
| sugar |
| set1>+>>set2>+>>...
| (>+>> & sets)
| {:tag :partial-bijection, :sets sets}
| partial bijection |
| | (partial-bijection & sets)
| {:tag :partial-bijection, :sets sets}
| sugar |
| set1>->>set2>->>...
| (>->> & sets)
| {:tag :total-bijection, :sets sets}
| total bijection |
| | (total-bijection & sets)
| {:tag :total-bijection, :sets sets}
| sugar |
| %id1,id2,... .(pred|expr)
| (lambda ids pred expr)
| {:tag :lambda, :ids ids, :pred pred, :expr expr}
| lambda abstraction |
| f(arg1,arg2,...)
| (fn-call f & args)
| {:tag :fn-call, :f f, :args args}
| function application |
##Sequences
| B | Lisb | IR | Description |
|--------------------------|-----------------------|------------------------------------------|-------------------------------------------|
| <> or []
| (sequence)
| {:tag :empty-sequence}
| empty sequence |
| [elem1,elem2,...]
| (sequence & elemes)
| {:tag :sequence, :elems elems}
| constructed sequence |
| seq(set)
| (seq set)
| {:tag :seq, :set set}
| set of sequences over Sequence |
| seq1(set)
| (seq1 set)
| {:tag :seq1, :set set}
| set of non-empty sequences over Sequence |
| iseq(set)
| (iseq set)
| {:tag :iseq, :set set}
| set of injective sequences |
| iseq1(set)
| (iseq1 set)
| {:tag :iseq1, :set set}
| set of non-empty injective sequences |
| perm(set)
| (perm set)
| {:tag :perm, :set set}
| set of bijective sequences (permutations) |
| size(seq)
| (size seq)
| {:tag :size, :seq seq}
| size of sequence |
| seq1^seq2...
| (concat seqs)
| {:tag :concat, :seqs seqs}
| concatenation |
| elem->seq
| (-> elem seq)
| {:tag :prepend, :elem elem, :set seq}
| prepend element |
| | (prepend elem seq)
| {:tag :prepend, :elem elem, :set seq}
| prepend element |
| (seq<-elem1)<-elem2...
| (<- seq elems)
| {:tag :append, :set seq, :elem elems}
| append element |
| | (append seq elems)
| {:tag :append, :set seq, :elem elems}
| append element |
| rev(seq)
| (reverse seq)
| {:tag :reverse, :seq seq}
| reverse of sequence |
| first(seq)
| (first seq)
| {:tag :first, :seq seq}
| first element |
| last(seq)
| (last seq)
| {:tag :last, :seq seq}
| last element |
| front(seq)
| (front seq)
| {:tag :front, :seq seq}
| front of sequence (all but last element) |
| | (drop-last seq)
| {:tag :front, :seq seq}
| clojure |
| tail(seq)
| (tail seq)
| {:tag :tail, :seq seq}
| tail of sequence (all but first element) |
| | (rest seq)
| {:tag :tail, :seq seq}
| clojure |
| conc(seq-of-seqs)
| (conc seq-of-seqs)
| {:tag :conc, :seq-of-seqs seq-of-seqs}
| concatenation of sequence of sequences |
| seq/|\num
| (take num seq)
| {:tag :take, :num num, :seq seq}
| take first n elements of sequence |
| seq\|/num
| (drop num seq)
| {:tag :drop, :num num, :seq seq}
| drop first n elements from sequence |
##Records
| B | Lisb | IR | Description |
|-----------------------------------|-----------------------|----------------------------------------|------------------------------------------------------|
| struct(id1:type1,id2:type2,...)
| (struct & id-types)
| {:tag :struct, :id-types id-types}
| set of records with given fields and field types |
| rec(id1:val1,id2:val2,...)
| (record & id-vals)
| {:tag :record, :id-vals id-vals}
| construct a record with given field names and values |
| rec'id
| (record-get rec id)
| {:tag :record-get, :rec rec, :id id}
| get value of field with name ID |
##Strings
| B | Lisb | IR | Description |
|-----------------|----------------|----------------------|-----------------------------------------------------------------------|
| "astring"
| "astring"
| "astring"
| a specific (single-line) string value |
| '''astring'''
| | | an alternate way of writing (multi-line) strings, no need to escape " |
| STRING
| string-set
| {:tag :string-set}
| the set of all strings |
##Reals
##Trees
##Let and If-Then-Else
| B | Lisb | IR | Description |
|------------------------------------------------------------------|---------------------------------|-----------------------------------------------------------------|---------------------------------------------|
| IF cond THEN then ELSE else END
| (ite cond then else)
| {:tag :if-then-else, :cond cond, :then then, :else else}
| conditional for expressions and predicates |
| LET id1,id2,... BE id1=val1 & id2=val2 ... IN expr-or-pred END
| (let-in id-vals expr-or-pred)
| {:tag :let-in, :id-vals id-vals, :expr-or-pred :expr-or-pred}
| let for expression and predicates |
##Substitutions
| B | Lisb | IR | Description |
|------------------------------------------------------------------------------------|-----------------------------------------------|---------------------------------------------------------|----------------------------------------|
| skip
| skip
| {:tag :skip}
| no operation |
| id1,id2,... := val1,val2,...
| (assign & id-vals)
| {:tag :assignment, :id-vals id-vals}
| assignment |
| | (set! & id-vals)
| {:tag :assignment, :id-vals id-vals}
| sugar |
| f(x) := E
| (assign (fn-call f x) E)
| (bassign (bfn-call f x) E
| functional override |
| ids :: set
| (becomes-element-of ids set)
| {:tag :becomes-element-of, :ids ids, :set set}
| choice from set |
| | (becomes-member ids set)
| {:tag :becomes-element-of, :ids ids, :set set}
| sugar |
| ids : (pred)
| (becomes-such ids set)
| {:tag :becomes-such, :ids ids, :pred pred}
| choice by pred (constraining ids) |
| return1,return2,... <-- op(arg1,arg2,...)
| (<-- returns (op-call op args))
| {:tag :op-call, :returns returns, :op op, :args args}
| call operation and assign return value |
| sub1||sub2|...
| (|| & subs)
| {:tag :parallel-substitution, :subs subs}
| parallel substitution |
| | (parallel-sub & subs)
| {:tag :parallel-substitution, :subs subs}
| sugar |
| sub1;sub2;...
| (sequential-sub & subs)
| {:tag :sequential-substitution, :subs subs}
| sequential composition |
| ANY id1,id2,... WHERE pred THEN subs END
| (any ids pred subs)
| {:tag :any, :ids ids, :pred pred, :subs subs}
| non deterministic choice |
| LET id1,id2,... BE id1=val1&id2=val2... IN subs END
| (let-sub [id1 val1 id2 val2 ...] subs)
| {:tag :let-sub, :id-vals id-vals, :subs subs}
| |
| VAR x,... IN subs END
| (var ids subs
| {:tag :var, :ids ids, :subs subs}
| generate local variables |
| PRE pred THEN subs END
| (pre pred & subs)
| {:tag :precondition, :pred pred, :subs subs}
| |
| ASSERT pred THEN subs END
| (assert pred & subs)
| {:tag :assert, :pred pred, :subs subs}
| |
| CHOICE sub1 OR sub2 OR ... END
| (choice & subs)
| {:tag :choice, :subs subs}
| |
| IF cond THEN then END
| (if-sub cond then)
| {:tag :if-sub, :cond cond, :then then}
| |
| IF cond THEN then ELSE else END
| (if-sub cond then else)
| {:tag :if-sub, :cond cond, :then then, :else else}
| |
| IF cond1 THEN sub1 ELSIF cond2 THEN sub2 ... END
| (cond-sub & clauses)
| {:tag :cond-sub, :clauses clauses}
| |
| IF cond1 THEN sub2 ESLIF cond2 THEN sub2 ... ELSE else-sub END
| (cond-sub & clauses)
| {:tag :cond-sub, :clauses clauses}
| |
| SELECT cond1 THEN sub1 WHEN cond2 THEN sub2 ... END
| (select & clauses)
| {:tag :select, :clauses clauses}
| |
| SELECT cond1 THEN sub1 WHEN cond2 THEN sub2 ... ELSE sub-else END
| (select & clauses)
| {:tag :select, :clauses clauses}
| |
| CASE expr OF EITHER cond1 THEN sub1 OR cond2 THEN sub2 ... END END
| (case expr & cases)
| | |
| CASE expr OF EITHER cond1 THEN sub1 OR cond2 THEN sub2 ... ELSE sub-else END END
| (case expr & case)
| | |
##Machine clauses
###Machine inclusion
| B | Lisb | IR | Description |
|----------------------------------|-----------------------------------|-----------------------------------------------|--------------------------------------|
| USES mch-name1,mch-name2,...
| (uses & machine-names)
| {:tag :uses :values machine-names}
| |
| INDLUDES mch-ref1,mch-ref2,...
| (includes & machine-references)
| {:tag :includes :values machine-references}
| |
| SEES mch-name1,mch-name2,...
| (sees & machine-names)
| {:tag :sees :values machine-names}
| |
| EXTENDS mch-ref1,mch-ref2,...
| (extends & machine-references)
| {:tag :extends :values machine-references}
| |
| PROMOTES op1,op2,...
| (promotes & ops)
| {:tag :promotes :values ops}
| |
####Machine reference
| B | Lisb | IR | Description |
|-----------------------|-----------------|-----------------------------------------------------|------------------------------|
| name
| name
| {:tag :machine-reference, :name name}
| machine name |
| name(arg1,arg2,...)
| [name & args]
| {:tag :machine-reference, :name name, :args args}
| machine name with parameters |
###Machine section
| B | Lisb | IR | Description |
|------------------------------------|--------------------------|---------------------------------------|--------------------------------------|
| CONSTRAINTS pred1 & pred2 & ...
| (constraints & preds)
| {:tag :constraints, :values preds}
| contraints |
| SETS set-def1;set-def2;...
| (sets & set-defs)
| {:tag :sets, :values set-defs}
| sets |
| CONSTANTS id1,id2,...
| (constants & ids)
| {:tag :constants, :values ids}
| constants |
| CONCRETE_CONSTANTS cx,cy,..
| | | synonym for constants |
| PROPERTIES pred1 & pred2 & ...
| (properties preds)
| {:tag :properties, :values preds}
| properties |
| VARIABLES id1,id2,...
| (variables & ids)
| {:tag :variables, :values ids}
| variables |
| CONCRETE_VARIABLES cv,cw,...
| | | synonym for variables |
| INVARIANT pred1 & pred2 & ...
| (invariants & preds)
| {:tag :invariants, :values preds}
| invariant |
| ASSERTIONS pred1;pred2;...
| (assertions & preds)
| {:tag :assertions, :values preds}
| assertions |
| INITIALISATION subs1;subs2;...
| (init & subs)
| {:tag :init, :values subs}
| initialisation |
| OPERATIONS op-def1;op-def2;...
| (operations & op-defs)
| {:tag :operations, :values op-defs}
| operations |
####Set definitions
| B | Lisb | IR | Description |
|------------------------|-------------------------------|------------------------------------------------|----------------|
| id
| id
| {:tag :deferred-set, :id id}
| deferred set |
| | (deferred-set id)
| {:tag :deferred-set, :id id}
| deferred set |
| id={elem1,elem2,...}
| id #{elem1 elem2 ...}
| {:tag :enumerated-set, :id id, :elems elems}
| enumerated set |
| | (enumerated-set id & elems)
| {:tag :enumerated-set, :id id, :elems elems}
| enumerated set |
####Operation definitions
| B | Lisb | IR | Description |
|------------------------------------------------------|----------------------------------|------------------------------------------------------------------------|---------------------------------------|
| name = body
| (name [] body)
| {:tag :op, :returns [], :name name, :args [], :body body}
| operation |
| name(arg1,arg2,...) = body
| (name args body)
| {:tag :op, :returns [], :name name, :args args, :body body}
| operation with parameters |
| return1,return2,... <-- name = body
| (<-- returns (name [] body))
| {:tag :op, :returns return-vals, :name name, :args [], :body body}
| operation with returns |
| return1,return2,... <-- name(arg1,arg2,...) = body
| (<-- returns (name args body))
| {:tag :op, :returns return-vals, :name name, :args args, :body body}
| operation with parameters and returns |
###Definitions
| B | Lisb | IR | Description |
|----------------------------|------------------------|------------------------------------|-------------|
| DEFINITIONS def1;def2...
| (definitions & defs)
| {:tag :definitions :values defs}
| |
####Definition definitions
| B | Lisb | IR | Description |
|-------------------------------|-------------------------------------------|------------------------------------------------------------------|-------------|
| name == expr
| (expression-definition name [] expr)
| {:tag :expression-definition :name name :args [] :expr expr}
| |
| name(arg1,arg2,...) == expr
| (expression-definition name args expr)
| {:tag :expression-definition :name name :args args :expr expr}
| |
| name == pred
| (predicate-definition name [] pred)
| {:tag :predicate-definition :name name :args [] :pred pred}
| |
| name(arg1,arg2,...) == pred
| (predicate-definition name args pred)
| {:tag :predicate-definition :name name :args args :pred pred}
| |
| name == sub
| (substitution-definition name [] sub)
| {:tag :substitution-definition :name name :args [] :sub sub}
| |
| name(arg1,arg2,...) == sub
| (substitution-definition name args sub)
| {:tag :substitution-definition :name name :args args :sub sub}
| |
| name == sub
| (substitution-definition name [] sub)
| {:tag :substitution-definition :name name :args [] :sub sub}
| |
| name(arg1,arg2,...) == sub
| (substitution-definition name args sub)
| {:tag :substitution-definition :name name :args args :sub sub}
| |
| "FILE.def"
| (file-definition "FILE.def")
| {:tag :file-definition :file "FILE.def"}
| |
##Machine
| B | Lisb | IR | Description |
|-------------------------------------------------------------------------|-------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------|---------------------|
| MACHINE machine-name clauses END
| (machine machine-name & machine-clauses)
| (merge {:tag :machine, :machine-clauses machine-clauses} machine-name)
| machine |
| MODEL machine-name clauses END
| (model machine-name & machine-clauses)
| (merge {:tag :model, :machine-clauses machine-clauses} machine-name)
| synonym for machine |
| SYSTEM machine-name clauses END
| (system machine-name & machine-clauses)
| (merge {:tag :system, :machine-clauses machine-clauses} machine-name)
| synonym for machine |
| REFINEMENT machine-name REFINES abstract-machine-name clauses END
| (refinement machine-name abstract-machine-name & machine-clauses)
| (merge {:tag :refinement, :abstract-machine-name abstract-machine-name, :machine-clauses machine-clauses} machine-name)
| refinement |
| IMPLEMENTATION machine-name REFINES abstract-machine-name clauses END
| (implementation machine-name abstract-machine-name & machine-clauses)
| (merge {:tag :implementation, :abstract-machine-name abstract-machine-name, :machine-clauses machine-clauses} machine-name)
| implementation |
###Machine name
| B | Lisb | IR | Description |
|---------------------------|-------------------|--------------------------------|------------------------------|
| name
| name
| {:name name}
| machine name |
| name(arg,arg,...)
| [name & args]
| {:name name, :args args}
| machine name with parameters |
Can you improve this documentation?Edit on GitHub
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close