59 lines
1.3 KiB
Plaintext
59 lines
1.3 KiB
Plaintext
### Generating
|
|
|
|
[
|
|
Type atoms
|
|
Entity used-atom-set
|
|
Funcon initialise-generating
|
|
Funcon fresh-atom
|
|
Funcon use-atom-not-in
|
|
]
|
|
|
|
|
|
Meta-variables
|
|
T <: values
|
|
|
|
|
|
Built-in Type
|
|
atoms
|
|
/*
|
|
`atoms` is the type of values used as distinguishable tags.
|
|
Notation for individual atoms is not provided.
|
|
*/
|
|
|
|
|
|
Entity
|
|
< _ , used-atom-set(_:sets(atoms)) > ---> < _ , used-atom-set(_:sets(atoms)) >
|
|
|
|
|
|
Built-in Funcon
|
|
initialise-generating(_:=>T) : =>T
|
|
/*
|
|
The initial value of the `used-atom-set(SA)` entity is unspecified. It could
|
|
contains atoms that are reserved for internal use.
|
|
*/
|
|
|
|
|
|
Funcon
|
|
fresh-atom : =>atoms
|
|
/*
|
|
`fresh-atom` computes an atom distinct from all previously computed atoms.
|
|
*/
|
|
Rule
|
|
element-not-in(atoms, SA) ~> A
|
|
-----------------------------------------------
|
|
< fresh-atom , used-atom-set(SA) >
|
|
---> < A , used-atom-set(set-insert(A, SA)) >
|
|
|
|
|
|
Funcon
|
|
use-atom-not-in(_:sets(atoms)) : =>atoms
|
|
/*
|
|
`use-atom-not-in(SA)` computes an atom not in the set `SA`, and inserts it
|
|
in the `used-atom-set(SA')` entity, in case it was not previously used.
|
|
*/
|
|
Rule
|
|
element-not-in(atoms, SA) ~> A
|
|
--------------------------------------------------------
|
|
< use-atom-not-in(SA:sets(atoms)) , used-atom-set(SA') >
|
|
---> < A , used-atom-set(set-insert(A, SA')) >
|