From 504e2d03a10f1641b36a9d5f127a18bc943562ce Mon Sep 17 00:00:00 2001 From: Marcos Magueta Date: Sat, 26 Sep 2026 13:22:10 -0300 Subject: ephemeral relations as outputs of FOL and program overhaul --- lib/protocols/Evaluator.ml | 11 +++++++++++ lib/protocols/Evaluator.mli | 10 ++++++++++ lib/protocols/Program.ml | 16 ---------------- lib/protocols/Program.mli | 15 --------------- lib/protocols/Relation.ml | 4 ---- lib/protocols/Relation.mli | 9 --------- 6 files changed, 21 insertions(+), 44 deletions(-) create mode 100644 lib/protocols/Evaluator.ml create mode 100644 lib/protocols/Evaluator.mli delete mode 100644 lib/protocols/Program.ml delete mode 100644 lib/protocols/Program.mli (limited to 'lib/protocols') diff --git a/lib/protocols/Evaluator.ml b/lib/protocols/Evaluator.ml new file mode 100644 index 0000000..789fb9d --- /dev/null +++ b/lib/protocols/Evaluator.ml @@ -0,0 +1,11 @@ +class type implementation = object + method invoke : Handle.t -> (Handle.t, Concepts.Condition.condition) result +end + +type Handle.protocol += Evaluator of implementation +type t = implementation + +let make impl = Evaluator (impl :> implementation) +let from handle = Handle.into handle (function Evaluator impl -> Some impl | _ -> None) +let require = Handle.require from +let invoke i program = Handle.invoke i (fun o -> o#invoke program) diff --git a/lib/protocols/Evaluator.mli b/lib/protocols/Evaluator.mli new file mode 100644 index 0000000..3d42b5c --- /dev/null +++ b/lib/protocols/Evaluator.mli @@ -0,0 +1,10 @@ +type t + +class type implementation = object + method invoke : Handle.t -> (Handle.t, Concepts.Condition.condition) result +end + +val make : #implementation -> Handle.protocol +val from : Handle.t -> t Handle.interface option +val require : Handle.t -> (t Handle.interface, Concepts.Condition.condition) result +val invoke : t Handle.interface -> Handle.t -> (Handle.t, Concepts.Condition.condition) result diff --git a/lib/protocols/Program.ml b/lib/protocols/Program.ml deleted file mode 100644 index e50f07d..0000000 --- a/lib/protocols/Program.ml +++ /dev/null @@ -1,16 +0,0 @@ -module type PROGRAM = sig - type t -end - -module Make (P : PROGRAM) = struct - class type implementation = object - method invoke : P.t -> (Handle.t, Concepts.Condition.condition) result - end - - type Handle.protocol += Program of implementation - type t = implementation - - let make impl = Program (impl :> implementation) - let from handle = Handle.into handle (function Program impl -> Some impl | _ -> None) - let invoke i program = Handle.invoke i (fun o -> o#invoke program) -end diff --git a/lib/protocols/Program.mli b/lib/protocols/Program.mli deleted file mode 100644 index 6cdffd8..0000000 --- a/lib/protocols/Program.mli +++ /dev/null @@ -1,15 +0,0 @@ -module type PROGRAM = sig - type t -end - -module Make (P : PROGRAM) : sig - type t - - class type implementation = object - method invoke : P.t -> (Handle.t, Concepts.Condition.condition) result - end - - val make : #implementation -> Handle.protocol - val from : Handle.t -> t Handle.interface option - val invoke : t Handle.interface -> P.t -> (Handle.t, Concepts.Condition.condition) result -end diff --git a/lib/protocols/Relation.ml b/lib/protocols/Relation.ml index c05337f..3962c9c 100644 --- a/lib/protocols/Relation.ml +++ b/lib/protocols/Relation.ml @@ -7,8 +7,6 @@ module Error = struct end class type implementation = object - method predicate : (Concepts.Hash.hash option, Concepts.Condition.condition) result - method local_constraints : (Concepts.Hash.hash option, Concepts.Condition.condition) result method contains : Concepts.Tuple.t -> (bool, Concepts.Condition.condition) result end @@ -18,6 +16,4 @@ type t = implementation let make impl = Relation (impl :> implementation) let from handle = Handle.into handle (function Relation impl -> Some impl | _ -> None) let require handle = from handle |> Option.to_result ~none:(Error.not_a_relation ()) -let predicate i = Handle.invoke i (fun o -> o#predicate) -let local_constraints i = Handle.invoke i (fun o -> o#local_constraints) let contains i tuple = Handle.invoke i (fun o -> o#contains tuple) diff --git a/lib/protocols/Relation.mli b/lib/protocols/Relation.mli index b4a11ec..be11cc1 100644 --- a/lib/protocols/Relation.mli +++ b/lib/protocols/Relation.mli @@ -1,19 +1,10 @@ type t class type implementation = object - method predicate : (Concepts.Hash.hash option, Concepts.Condition.condition) result - method local_constraints : (Concepts.Hash.hash option, Concepts.Condition.condition) result method contains : Concepts.Tuple.t -> (bool, Concepts.Condition.condition) result end val make : #implementation -> Handle.protocol val from : Handle.t -> t Handle.interface option val require : Handle.t -> (t Handle.interface, Concepts.Condition.condition) result - -val predicate : - t Handle.interface -> (Concepts.Hash.hash option, Concepts.Condition.condition) result - -val local_constraints : - t Handle.interface -> (Concepts.Hash.hash option, Concepts.Condition.condition) result - val contains : t Handle.interface -> Concepts.Tuple.t -> (bool, Concepts.Condition.condition) result -- cgit v1.2.3