diff --git a/demos/faulty/avl/Main.ml b/demos/faulty/avl/Main.ml index ee1f4d3116a45c8409f4248812e1602cbf99a947..af0d2711052ee9d06cb2a90d82cc81a9e4c7c3e9 100644 --- a/demos/faulty/avl/Main.ml +++ b/demos/faulty/avl/Main.ml @@ -27,7 +27,7 @@ let check (_ : R.t) = C.check, constant "check" let set = - declare_abstract_type ~check "set" + declare_abstract_type ~check () (* -------------------------------------------------------------------------- *) diff --git a/demos/faulty/bag_det/Main.ml b/demos/faulty/bag_det/Main.ml index 52882e636dc167d502a8ed1374090e7cbc6c0eb4..b2f8e82a9d2659de9f3e488d731fcd5151cb40be 100644 --- a/demos/faulty/bag_det/Main.ml +++ b/demos/faulty/bag_det/Main.ml @@ -32,7 +32,7 @@ let element = by the reference implementation and by the candidate implementation. *) let bag = - declare_abstract_type "bag" + declare_abstract_type() (* -------------------------------------------------------------------------- *) diff --git a/demos/faulty/bag_nondet/Main.ml b/demos/faulty/bag_nondet/Main.ml index 0350976a24defc658600e3af48a57a62e7bfb458..d168d953d3e5c652866336f820dbde839dab3729 100644 --- a/demos/faulty/bag_nondet/Main.ml +++ b/demos/faulty/bag_nondet/Main.ml @@ -32,7 +32,7 @@ let element = by the reference implementation and by the candidate implementation. *) let bag = - declare_abstract_type "bag" + declare_abstract_type() (* -------------------------------------------------------------------------- *) diff --git a/demos/faulty/generator/Main.ml b/demos/faulty/generator/Main.ml index 6f1c2b72d1105f715d56beb5feb74fc6a3ca4e6c..fdbcfa53b5ed8a564ee8654eb18d564e2b790538 100644 --- a/demos/faulty/generator/Main.ml +++ b/demos/faulty/generator/Main.ml @@ -25,7 +25,7 @@ let check model = C.check model, constant "check" let t = - declare_abstract_type "t" ~var:"g" ~check + declare_abstract_type ~var:"g" ~check () (* -------------------------------------------------------------------------- *) diff --git a/demos/faulty/map/Main.ml b/demos/faulty/map/Main.ml index 4c8e168a6840cf532135a5a69c75bed190ce69c9..1af04b36f8497522242e1d3e2b3d39ff094cd462 100644 --- a/demos/faulty/map/Main.ml +++ b/demos/faulty/map/Main.ml @@ -27,7 +27,7 @@ let check model = C.check model, constant "check" let map = - declare_abstract_type ~check "map" + declare_abstract_type ~check () (* -------------------------------------------------------------------------- *) diff --git a/demos/faulty/pairs/Main.ml b/demos/faulty/pairs/Main.ml index a9c28abfe346503f53dfa0d5a6af43663acc8fc2..4a4ae669f36cb78b0bd233d0e2d7fb6a70019243 100644 --- a/demos/faulty/pairs/Main.ml +++ b/demos/faulty/pairs/Main.ml @@ -41,7 +41,7 @@ let index (s : _ R.t) = ways by the reference implementation and by the candidate implementation. *) let stack = - declare_abstract_type "stack" + declare_abstract_type() (* -------------------------------------------------------------------------- *) diff --git a/demos/faulty/parray/Main.ml b/demos/faulty/parray/Main.ml index c6f0d12a209ef38ae199022d330f2d6dc2ac462a..bb0d88d17bfef972b50534322765da48bb7d5b47 100644 --- a/demos/faulty/parray/Main.ml +++ b/demos/faulty/parray/Main.ml @@ -44,7 +44,7 @@ let index_element_list = (* Declare an abstract type [array] of persistent arrays. *) let array = - declare_abstract_type "array" + declare_abstract_type() (* -------------------------------------------------------------------------- *) diff --git a/demos/faulty/parray_mini/Main.ml b/demos/faulty/parray_mini/Main.ml index 61fbbf40b8fcfdba4886fd367f419e5d19041039..5e496add5c4445169951c3f42625a7ae90b19ed3 100644 --- a/demos/faulty/parray_mini/Main.ml +++ b/demos/faulty/parray_mini/Main.ml @@ -16,7 +16,7 @@ module R = Reference module C = Candidate let () = (* Specs. *) - let array = declare_abstract_type "array" + let array = declare_abstract_type() and element = sequential() and length = interval 0 16 and index a = interval 0 (R.length a) in diff --git a/demos/faulty/sparray/Main.ml b/demos/faulty/sparray/Main.ml index ef7fbb86e0861917627bf207fbf8b2d0d0e191bc..8811b3ae2e64ff7b4ded316f2c325edd73130954 100644 --- a/demos/faulty/sparray/Main.ml +++ b/demos/faulty/sparray/Main.ml @@ -31,7 +31,7 @@ let element = (* Declare an abstract type [array] of persistent arrays. *) let array = - declare_abstract_type "array" + declare_abstract_type() (* -------------------------------------------------------------------------- *) diff --git a/demos/misc/choose_and_remove_opt_deterministic/Main.ml b/demos/misc/choose_and_remove_opt_deterministic/Main.ml index 06fa7b47f5beb39360ccc1e73c30ad92d94a6c75..ccc1659810a84bd797081db6a28ca1720eded93a 100644 --- a/demos/misc/choose_and_remove_opt_deterministic/Main.ml +++ b/demos/misc/choose_and_remove_opt_deterministic/Main.ml @@ -27,7 +27,7 @@ let check model = C.check model, constant "check" let map = - declare_abstract_type ~check "map" + declare_abstract_type ~check () (* -------------------------------------------------------------------------- *) diff --git a/demos/misc/map_choose/Main.ml b/demos/misc/map_choose/Main.ml index d2ed27c26f4ccc9a8de5e6a0b75146bc2a43d77f..bb09667bd178468092aa0444938d79314238e2c7 100644 --- a/demos/misc/map_choose/Main.ml +++ b/demos/misc/map_choose/Main.ml @@ -30,7 +30,7 @@ let check model = C.check model, constant "check" let map = - declare_abstract_type ~check "map" + declare_abstract_type ~check () (* -------------------------------------------------------------------------- *) diff --git a/demos/misc/map_choose_opt/Main.ml b/demos/misc/map_choose_opt/Main.ml index 01df4663da53d357eb16171aae869d8a5d685c3d..8bfe181a2e1a00334e115763d6ded7d2597e9844 100644 --- a/demos/misc/map_choose_opt/Main.ml +++ b/demos/misc/map_choose_opt/Main.ml @@ -30,7 +30,7 @@ let check model = C.check model, constant "check" let map = - declare_abstract_type ~check "map" + declare_abstract_type ~check () (* -------------------------------------------------------------------------- *) diff --git a/demos/misc/seq1/Main.ml b/demos/misc/seq1/Main.ml index afe6e864ca0888003e2a0160d2a89a3052b8a199..c76cd61a6aa89ea680949a9223b5d66886159ab5 100644 --- a/demos/misc/seq1/Main.ml +++ b/demos/misc/seq1/Main.ml @@ -20,7 +20,7 @@ let element = sequential() let stack = - declare_abstract_type "stack" + declare_abstract_type() let seq = declare_seq (lt 16) diff --git a/demos/misc/seq2/Main.ml b/demos/misc/seq2/Main.ml index afe6e864ca0888003e2a0160d2a89a3052b8a199..c76cd61a6aa89ea680949a9223b5d66886159ab5 100644 --- a/demos/misc/seq2/Main.ml +++ b/demos/misc/seq2/Main.ml @@ -20,7 +20,7 @@ let element = sequential() let stack = - declare_abstract_type "stack" + declare_abstract_type() let seq = declare_seq (lt 16) diff --git a/demos/misc/seq3/Main.ml b/demos/misc/seq3/Main.ml index afe6e864ca0888003e2a0160d2a89a3052b8a199..c76cd61a6aa89ea680949a9223b5d66886159ab5 100644 --- a/demos/misc/seq3/Main.ml +++ b/demos/misc/seq3/Main.ml @@ -20,7 +20,7 @@ let element = sequential() let stack = - declare_abstract_type "stack" + declare_abstract_type() let seq = declare_seq (lt 16) diff --git a/demos/misc/seq4/Main.ml b/demos/misc/seq4/Main.ml index 1fc8e50b5cf4d58b3ce54fd235967f553ee44710..9ab96af8cbee13927baf75b35bdf3bfa5313e8e2 100644 --- a/demos/misc/seq4/Main.ml +++ b/demos/misc/seq4/Main.ml @@ -20,7 +20,7 @@ let aseq = declare_affine_seq (lt 16) let array = - declare_abstract_type "array" + declare_abstract_type() let () = diff --git a/demos/misc/seq5/Main.ml b/demos/misc/seq5/Main.ml index 0674545efae0e1334f1bcc838ede5224965dc751..ba84b1ecd246ace65305ee049999405ea26c371a 100644 --- a/demos/misc/seq5/Main.ml +++ b/demos/misc/seq5/Main.ml @@ -23,7 +23,7 @@ let aseq = declare_affine_seq element let array = - declare_abstract_type "array" + declare_abstract_type() let () = diff --git a/demos/misc/seq6/Main.ml b/demos/misc/seq6/Main.ml index 0674545efae0e1334f1bcc838ede5224965dc751..ba84b1ecd246ace65305ee049999405ea26c371a 100644 --- a/demos/misc/seq6/Main.ml +++ b/demos/misc/seq6/Main.ml @@ -23,7 +23,7 @@ let aseq = declare_affine_seq element let array = - declare_abstract_type "array" + declare_abstract_type() let () = diff --git a/demos/working/bag/Main.ml b/demos/working/bag/Main.ml index 0350976a24defc658600e3af48a57a62e7bfb458..d168d953d3e5c652866336f820dbde839dab3729 100644 --- a/demos/working/bag/Main.ml +++ b/demos/working/bag/Main.ml @@ -32,7 +32,7 @@ let element = by the reference implementation and by the candidate implementation. *) let bag = - declare_abstract_type "bag" + declare_abstract_type() (* -------------------------------------------------------------------------- *) diff --git a/demos/working/map/Main.ml b/demos/working/map/Main.ml index 4a41cd5c43eb5f5e7fd8ff61045fe76733c73ca6..1845eca827e79ff0b5c89e43f9579dbb890df9dc 100644 --- a/demos/working/map/Main.ml +++ b/demos/working/map/Main.ml @@ -27,7 +27,7 @@ let check model = C.check model, constant "check" let map = - declare_abstract_type ~check "map" + declare_abstract_type ~check () (* -------------------------------------------------------------------------- *) diff --git a/demos/working/parray/Main.ml b/demos/working/parray/Main.ml index ccc93b66b996d9cbd22f00132d0d44f6c6b11cd1..fca3c4e64e037814e2b3e81f7fe164fd04ae267d 100644 --- a/demos/working/parray/Main.ml +++ b/demos/working/parray/Main.ml @@ -34,7 +34,7 @@ let index = (* Declare an abstract type [array] of persistent arrays. *) let array = - declare_abstract_type "array" + declare_abstract_type() (* -------------------------------------------------------------------------- *) diff --git a/demos/working/seq/Main.ml b/demos/working/seq/Main.ml index 434921c9f2af7f4703510867a7a370c2d5d381aa..d9139f08865b04e2be1416be9ce73394e6f1ee6f 100644 --- a/demos/working/seq/Main.ml +++ b/demos/working/seq/Main.ml @@ -20,7 +20,7 @@ let element = sequential() let stack = - declare_abstract_type "stack" + declare_abstract_type() let seq = declare_seq (lt 16) diff --git a/demos/working/sparray/Main.ml b/demos/working/sparray/Main.ml index ef7fbb86e0861917627bf207fbf8b2d0d0e191bc..8811b3ae2e64ff7b4ded316f2c325edd73130954 100644 --- a/demos/working/sparray/Main.ml +++ b/demos/working/sparray/Main.ml @@ -31,7 +31,7 @@ let element = (* Declare an abstract type [array] of persistent arrays. *) let array = - declare_abstract_type "array" + declare_abstract_type() (* -------------------------------------------------------------------------- *) diff --git a/demos/working/stack/Main.ml b/demos/working/stack/Main.ml index 08337e7bdadc08d3f5d64d5d1a92d8a1d8126983..f5e99c7291cc554a1da2fc5c3e13e3747b958642 100644 --- a/demos/working/stack/Main.ml +++ b/demos/working/stack/Main.ml @@ -56,7 +56,7 @@ let check model = C.check model, constant "check" let stack = - declare_abstract_type ~check "stack" + declare_abstract_type ~check () (* -------------------------------------------------------------------------- *) diff --git a/demos/working/stack_prologue/Main.ml b/demos/working/stack_prologue/Main.ml index b2a13a4775bf56e7d953d7bcc79ca796ee594207..87e5ca34d77119a55f760994988370f122ae5b94 100644 --- a/demos/working/stack_prologue/Main.ml +++ b/demos/working/stack_prologue/Main.ml @@ -38,7 +38,7 @@ let prologue () = let stack = let check model = C.check model, constant "check" in - declare_abstract_type ~check "stack" + declare_abstract_type ~check () in let nonfull s = not (R.is_full s) in diff --git a/src/BuiltinAbstract.ml b/src/BuiltinAbstract.ml index f3c2d3170a928d0045740af1dbed78e9fe560f6a..ac1adfc2a8e880c44f11714d9caaa1ad01a458ec 100644 --- a/src/BuiltinAbstract.ml +++ b/src/BuiltinAbstract.ml @@ -16,8 +16,7 @@ open Support.Fun let abstract spec = (* Declare this abstract type. *) - let name = "<abstract>" in - let aspec = declare_abstract_type ~var:"abs" name in + let aspec = declare_abstract_type ~var:"abs" () in (* Declare an operation that maps this abstract type to its concrete representation. Its implementation is the identity function. *) Ops.declare "Sup.Fun.id" (aspec ^> spec) id id; diff --git a/src/BuiltinSeq.ml b/src/BuiltinSeq.ml index 29ac00a0e7ebc75af05d01faea39b278db00ae70..3856ad2178ff86e13afa11b5859d3f7af7648f8e 100644 --- a/src/BuiltinSeq.ml +++ b/src/BuiltinSeq.ml @@ -49,7 +49,7 @@ let declare_seq ?length:(length=16) element = (* The deconstruction side. *) begin (* Declare an abstract type [seq]. *) - let seq = declare_abstract_type ~var:"seq" "seq" in + let seq = declare_abstract_type ~var:"seq" () in (* Declare the operation [to_option]. *) let spec = seq ^> option (element *** seq) in Ops.declare "Sup.Seq.to_option" spec @@ -96,7 +96,7 @@ let declare_affine_seq ?length:(length=16) element = (* The deconstruction side. *) begin (* Declare the abstract type [seq]. *) - let seq = declare_abstract_type ~var:"seq" "affine_seq" in + let seq = declare_abstract_type ~var:"seq" () in (* Declare the operation [to_option]. *) let spec = VSeq.valid % seq ^> option (element *** seq) in Ops.declare "Sup.Seq.to_option" diff --git a/src/Monolith.mli b/src/Monolith.mli index ebb80b37259ceb54efaa92b8fdc6c5ec425af349..98c63434303bbc408eff5cf04d129106c5b805c6 100644 --- a/src/Monolith.mli +++ b/src/Monolith.mli @@ -274,10 +274,9 @@ val deconstructible: ('t Print.printer) -> ('t, 't) spec -(** [declare_abstract_type "t"] declares a new abstract type named "t". This - name is used in certain error messages. Which types ['r] and ['c] are - actually meant, in the reference implementation and in the candidate - implementation, is inferred by the OCaml type-checker. +(** [declare_abstract_type()] declares a new abstract type. Which types ['r] + and ['c] are actually meant, in the reference implementation and in the + candidate implementation, is inferred by the OCaml type-checker. An abstract type may be implemented in different ways in the reference implementation and in the candidate implementation, which explains why @@ -299,12 +298,11 @@ val deconstructible: performed. The optional parameter [var] is a base name that is used for variables - of type "t". If it is omitted, the first letter of the type's name is - used. *) + of this type. *) val declare_abstract_type: ?check: ('r -> ('c -> unit) code) -> ?var: string -> - (* name: *) string -> + unit -> ('r, 'c) spec (** [unit] represents the base type [unit]. This type is constructible diff --git a/src/Spec.ml b/src/Spec.ml index 097f0db4607df401a53d5fb6f7c50c627df22792..4626262a9beec6ee0a8c3b02c2e42f533fb366af 100644 --- a/src/Spec.ml +++ b/src/Spec.ml @@ -207,9 +207,6 @@ type (_, _) spec = and ('r, 'c) abstract = { - (* The name of this type, used only in informational messages. *) - aty_name : string; - (* The base name used for a variable of this type. *) aty_var : string; @@ -300,27 +297,18 @@ let default_check : type r c . r -> (c -> unit) code = fun _ -> (fun _ -> ()), Code.constant "(fun _ -> ())" -let default_var var name = - match var with - | Some var -> - var - | None -> - (* Use the first letter of the type's name. *) - String.sub name 0 1 +let default_var = + "x" let declare_abstract_type ?check:(check=default_check) - ?var - name + ?var:(var=default_var) + () = - (* Sanitize the type name. *) - if name = "" then invalid_arg "declare_abstract_type: name is empty"; - (* If no [var] argument was provided, choose one, based on the type name. *) - let var = default_var var name in (* Create a new tag for this abstract type. *) let tag = Tag.new_tag () in (* Done. *) - SpecBaseAbstract (tag, { aty_var = var; aty_name = name; aty_check = check }) + SpecBaseAbstract (tag, { aty_var = var; aty_check = check }) (* -------------------------------------------------------------------------- *)