Normative Positions
Normative frames are a specific type of object, representing Hohfeld’s framework of normative concepts1 which includes 8 notions, distributed on 2 squares, concerning respectively deontic (or duty-related) and potestative (or power-related) directives.

Similarly to eFLINT, these concepts corresponds in DCPL to object-types with certain fixed parameters (frames, or stereotypical knowledge constructs). Their instantiation, as that of any other object, can be conditioned by transformational or reactive rules.
Power Frames
Powers specify an action
and an optional consequence
for that action, along with an optional holder
of the power (i.e. the class of agents that may perform the action
). A power frame can be of any of the following classes: power
, liability
, disability
, and immunity
; it has the following properties:
property | type | default | description |
---|---|---|---|
holder |
agent |
* |
the agent that detains the power |
action |
action event |
undefined |
the action that the holder can/cannot perform |
consequence |
event |
undefined |
an event that is triggered when the action is performed |
Example
Agents that are student
or staff
can #register
as member
of the library by using their id_card
(example of act creating a new descriptor qualification).
power {
holder: student | staff
action: #register { instrument: holder.id_card }
consequence: holder becomes member
}
Deontic Frames
A deontic frame is an object which can be of any of the following classes: duty
, prohibition
,liberty
,claim
,protection
, noclaim
; it has the following properties:
property | type | default | description |
---|---|---|---|
holder |
agent |
* |
the agent to which the duty applies |
counterparty |
agent |
* |
the agent which is interested in the fulfillment of the duty |
action |
action event |
undefined |
the action to perform in order to fulfill the duty |
violation |
event or expression |
undefined |
an expression to evaluate that determines when the duty is violated |
termination |
event or expression |
undefined |
an expression to evaluate that determines when the duty terminates |
fulfilled |
boolean |
false |
whether the duty has been fulfilled |
violated |
boolean |
false |
whether the duty has been violated |
All objects are here referred through descriptors, which can be complete or partial. The referring mechanism is similar to Cascading Style Sheets (CSS) in the sense that the refinement may reduce the number of objects to which the policy applies.
Example
By borrowing, the borrower can be requested in any moment to return the item. The borrower has the duty to return the item within the given date. If the borrower does not return the item, they may be fined (example of composite object, with power, duty and violation constructs).
duty {
holder: borrower
counterparty: lender
action: #return { item: book }
violation: now() > timeout
}
External Expressions
DCPL is not designed to be used as a traditional programming languages. Therefore, it lacks certain utilities, core-libraries, and expressions that can facilitate calculations or work with complex types.
The design of the language takes this into consideration by allowing the user to hook into an external environment to perform complex calculations in order to check e.g. violation or termination conditions. An example of such environment could be a Python interpreter, which can execute an external expression such as:
In principle, there is no limitation to what kind of interpreter could be leveraged to evaluate the expression, as the language design does not enforce any.
Todo
At this stage of design, there is no formal definition for how these expressions should be evaluated, take specific arguments, rely on shared data etc.
The reader should assume that an expression is meant to return a value computed externally in order for it to be used within a DCPL directive.
-
Hohfeld, W.N.: Fundamental legal conceptions as applied in judicial reasoning. Yale Law J. 26(8), 710–770 (1917) ↩