1 % (c) 2021-2025 Lehrstuhl fuer Softwaretechnik und Programmiersprachen,
2 % Heinrich Heine Universitaet Duesseldorf
3 % This software is licenced under EPL 1.0 (http://www.eclipse.org/org/documents/epl-v10.html)
4
5 :- module(pathes_extensions_db,[
6 prob_extension/1,
7 compile_time_unavailable_extension/2,
8 module_path_implements_extension/3,
9 silently_fail_unavailable_predicate/3,
10 lib_component_implements_extension/4,
11 lib_file_suffix/3,
12 load_spec_file_requires_extension/2,
13 preference_value_requires_extension/3,
14 probcli_command_requires_extension/2,
15 external_function_requires_extension/2
16 ]).
17
18
19 % ------------------------------------
20 % PROB EXTENSIONS DECLARATION DATABASE
21 % ------------------------------------
22
23 % keep track of which optional extensions of ProB are available
24 % and patch use_modules to unloaded extensions
25 % Note: only use_modules with explicit import lists are patched !
26
27 % This module is potentially loaded very early (from the pathes module).
28 % To avoid cyclic dependency problems, do not import any other ProB modules
29 % (or at least be very careful).
30
31 % PROB-CORE EXTENSIONS:
32 % ---------------------
33
34 :- load_files(library(system), [when(compile_time), imports([environ/2])]).
35
36 % TO DO: provide a way to choose which extensions are available
37 % these are the extensions that are present in the prob-core:
38 core_extension(counter_extension). % one can use Prolog version by setting prob_c_counter to false, but counter_extensions is available in both cases
39
40 core_extension(core).
41 core_extension(dot_extension). % do we need this in core?
42 core_extension(plspec_extension).
43
44 % compile_time_unavailable_extension cannot guarantee that an extension will be available!
45 % It can only report that an extension will definitely be unavailable.
46 % If this predicate fails, it means that the extension was compiled in,
47 % but may still be unavailable at runtime for other reasons,
48 % which can be checked using unavailable_extension/2 from the pathes_lib module.
49
50 :- if(environ(prob_core_only,true)).
51 compile_time_unavailable_extension(E, 'non-core extension disabled using prob_core_only=true') :- \+ core_extension(E).
52 :- endif.
53
54 :- if(environ(prob_myheap,false)). % otherwise we use Prolog version
55 compile_time_unavailable_extension(myheap_extension, 'manually disabled using prob_myheap=false').
56 :- endif.
57
58 :- if(environ(disable_chr,true)). % otherwise we use Prolog version
59 compile_time_unavailable_extension(chr_extension, 'manually disabled using disable_chr=true').
60 :- endif.
61
62 compile_time_unavailable_extension(_, _) :- fail.
63
64 prob_extension(alloy2b_extension).
65 prob_extension(atelierb_extension).
66 prob_extension(avl_ugraphs_extension).
67 prob_extension(bliss_extension).
68 prob_extension(bvisual2_extension).
69 prob_extension(cbc_extension).
70 prob_extension(chr_extension).
71 prob_extension(counter_extension).
72 prob_extension(core).
73 prob_extension(cse_extension).
74 prob_extension(cspm_extension).
75 prob_extension(coverage_extension).
76 prob_extension(disprover_extension).
77 prob_extension(dot_extension).
78 prob_extension(cdclt_extension).
79 prob_extension(external_svg_extension).
80 prob_extension(external_reals_extension).
81 prob_extension(fuzz_extension).
82 prob_extension(fuzzing_extension).
83 prob_extension(graphical_state_viewer_extension).
84 prob_extension(hit_profiler_extension).
85 prob_extension(json_extension).
86 prob_extension(kodkod_extension).
87 prob_extension(latex_extension).
88 prob_extension(ltl_extension).
89 prob_extension(ltl2ba_extension).
90 prob_extension(ltsmin_extension).
91 prob_extension(mcdc_coverage_extension).
92 prob_extension(meta_interface_extension).
93 prob_extension(myheap_extension).
94 prob_extension(nauty_extension).
95 prob_extension(opcache_extension).
96 prob_extension(optimizing_solver_extension).
97 prob_extension(pge_extension).
98 prob_extension(plspec_extension).
99 prob_extension(pltables_extension).
100 prob_extension(por_extension).
101 prob_extension(predicate_debugger_extension).
102 prob_extension(probhash_extension).
103 prob_extension(random_permutations).
104 prob_extension(refinement_extension).
105 prob_extension(regexp_extension).
106 prob_extension(rulesdsl_extension).
107 prob_extension(satsolver_extension).
108 prob_extension(setlog_extension).
109 prob_extension(smt_extension).
110 prob_extension(smtlib_extension).
111 prob_extension(state_graph_extension).
112 prob_extension(symbolic_model_checker_extension).
113 prob_extension(symmetry_extension).
114 prob_extension(synthesis_extension).
115 prob_extension(table_tools_extension).
116 prob_extension(tcltk_extension).
117 prob_extension(timer_extension).
118 prob_extension(tla2b_extension).
119 prob_extension(tlc4b_extension).
120 prob_extension(unsat_core_extension).
121 prob_extension(visb_extension).
122 prob_extension(wd_extension).
123 prob_extension(wp_ba_extension).
124 prob_extension(xml2b_extension).
125 prob_extension(zmq_extension).
126
127
128
129 % PATHS/MODULES for EXTENSIONS:
130 % -----------------------------
131
132 % module_path_implements_extension (PATH, ModuleName, ExtensionName)
133
134 % TO DO: complete lists
135 module_path_implements_extension(chrsrc(M),M,chr_extension).
136 module_path_implements_extension(cbcsrc(M),M,cbc_extension).
137 module_path_implements_extension(covsrc(hit_profiler),hit_profiler,hit_profiler_extension).
138 module_path_implements_extension(disproversrc(M),M,disprover_extension).
139 module_path_implements_extension(dotsrc(M),M,dot_extension).
140 module_path_implements_extension(cdclt_solver(M),M,cdclt_extension).
141 module_path_implements_extension(extrasrc(atelierb_provers_interface),atelierb_provers_interface,atelierb_extension).
142 module_path_implements_extension(extrasrc(avl_ugraphs),avl_ugraphs,avl_ugraphs_extension).
143 module_path_implements_extension(extrasrc(b_expression_sharing),b_expression_sharing,cse_extension).
144 module_path_implements_extension(extrasrc(b_operation_cache),b_operation_cache,opcache_extension).
145 module_path_implements_extension(extrasrc(b2setlog),b2setlog,setlog_extension).
146 module_path_implements_extension(extrasrc(before_after_predicates),before_after_predicates,wp_ba_extension).
147 module_path_implements_extension(extrasrc(bvisual2),bvisual2,bvisual2_extension).
148 module_path_implements_extension(extrasrc(coverage_statistics),coverage_statistics,coverage_extension).
149 module_path_implements_extension(extrasrc(external_functions_svg),external_functions_svg,external_svg_extension).
150 module_path_implements_extension(extrasrc(external_functions_reals),external_functions_svg,external_reals_extension).
151 module_path_implements_extension(extrasrc(graphical_state_viewer_images),graphical_state_viewer_images,graphical_state_viewer_extension).
152 module_path_implements_extension(extrasrc(json_parser),json_parser,json_extension).
153 module_path_implements_extension(extrasrc(latex_processor),latex_processor,latex_extension).
154 module_path_implements_extension(extrasrc(meta_interface),meta_interface,meta_interface_extension).
155 module_path_implements_extension(extrasrc(mcdc_coverage),mcdc_coverage,mcdc_coverage_extension).
156 module_path_implements_extension(extrasrc(optimizing_solver),optimizing_solver,optimizing_solver_extension).
157 module_path_implements_extension(extrasrc(predicate_debugger),predicate_debugger,predicate_debugger_extension).
158 module_path_implements_extension(extrasrc(refinement_checker),refinement_checker,refinement_extension).
159 module_path_implements_extension(extrasrc(state_graph_canon),state_graph_canon,state_graph_extension).
160 module_path_implements_extension(extrasrc(unsat_cores),unsat_cores,unsat_core_extension).
161 module_path_implements_extension(extrasrc(weakest_preconditions),weakest_preconditions,wp_ba_extension).
162 module_path_implements_extension(extrasrc(xml2b),xml2b,xml2b_extension).
163 module_path_implements_extension(extrasrc(table_tools),table_tools,table_tools_extension).
164 module_path_implements_extension(kodkodsrc(M),M,kodkod_extension).
165 module_path_implements_extension(pltablesrc(M),M,pltables_extension).
166 module_path_implements_extension(probcspsrc(M),M,cspm_extension).
167 module_path_implements_extension(probltlsrc(M),M,ltl_extension).
168 module_path_implements_extension(probltlsrc(ltl_safety),ltl_safety,ltl2ba_extension).
169 module_path_implements_extension(probpgesrc(M),M,pge_extension). %pge_algo:do_not_evaluate_guard/0
170 module_path_implements_extension(probporsrc(M),M,por_extension).
171 module_path_implements_extension(probsrc('alloy2b/alloy2b'),alloy2b,alloy2b_extension).
172 module_path_implements_extension(prozsrc(M),M,fuzz_extension).
173 module_path_implements_extension(rulesdslsrc(M),M,rulesdsl_extension).
174 module_path_implements_extension(smt_solvers_interface(M),M,smt_extension).
175 module_path_implements_extension(smtlib_solver(M),M,smtlib_extension).
176 module_path_implements_extension(symsrc(M),M,symmetry_extension).
177 module_path_implements_extension(symbolic_model_checker(M),M,symbolic_model_checker_extension).
178 module_path_implements_extension(synthesis(M),N,synthesis_extension) :- (get_module_name(M,N) -> true ; M=N).
179 module_path_implements_extension(tcltkuisrc(M),M,tcltk_extension).
180 module_path_implements_extension(visbsrc(M),M,visb_extension).
181 module_path_implements_extension(wdsrc(M),M,wd_extension).
182
183 % modules/files in extension (usually C/C++ related extensions):
184 module_path_implements_extension(extension('bliss/bliss_interface'),bliss_interface,bliss_extension).
185 module_path_implements_extension(extension('counter/counter'),counter,counter_extension).
186 module_path_implements_extension(extension('cvc4interface/cvc4interface'),cvc4interface,smt_extension).
187 module_path_implements_extension(extension('ltl2ba/ltl2ba'),ltl2ba,ltl2ba_extension).
188 module_path_implements_extension(extension('ltlc/ltlc'),ltlc,ltl_extension).
189 module_path_implements_extension(extension('ltsmin/ltsmin_trace'),ltsmin_trace,ltsmin_extension).
190 module_path_implements_extension(extension('ltsmin/ltsmin'),ltsmin,ltsmin_extension).
191 module_path_implements_extension(extension('myheap/myheap'),myheap,myheap_extension).
192 module_path_implements_extension(extension('nauty/graphiso'),graphiso,nauty_extension).
193 module_path_implements_extension(extension('plspec/plspec/plspec_core'),plspec_core,plspec_extension).
194 module_path_implements_extension(extension('plspec/plspec/prettyprinter'),prettyprinter,plspec_extension).
195 module_path_implements_extension(extension('probhash/probhash'),probhash,probhash_extension).
196 module_path_implements_extension(extension('prolog_fuzzer/fuzzing'),fuzzing,fuzzing_extension).
197 module_path_implements_extension(extension('random_permutations/random_permutations'),random_permutations,random_permutations).
198 module_path_implements_extension(extension('regexp/regexp'),regexp,regexp_extension).
199 module_path_implements_extension(extension('satsolver/satsolver'),satsolver,satsolver_extension).
200 module_path_implements_extension(extension('timer/timer'),timer,timer_extension).
201 module_path_implements_extension(extension('z3interface/z3interface'),z3interface,smt_extension).
202 module_path_implements_extension(extension('zmq/master/master'),master,zmq_extension).
203 module_path_implements_extension(extension('zmq/worker/worker'),worker,zmq_extension).
204 module_path_implements_extension(extension('zmq/zmq'),zmq,zmq_extension).
205
206
207 % TO DO: deconstruct programmatically
208 get_module_name('deep_learning/ground_truth',ground_truth).
209 get_module_name('deep_learning/b_machine_identifier_normalization',b_machine_identifier_normalization).
210 get_module_name('deep_learning/predicate_data_generator',predicate_data_generator).
211 get_module_name('deep_learning/operation_data_generator',operation_data_generator).
212
213 % declare predicates that should silently fail
214 % when the corresponding extension is not available
215 silently_fail_unavailable_predicate(is_dot_command,1,meta_interface_extension).
216 silently_fail_unavailable_predicate(is_dot_command_for_expr,1,meta_interface_extension).
217 silently_fail_unavailable_predicate(is_plantuml_command,1,meta_interface_extension).
218 silently_fail_unavailable_predicate(is_plantuml_command_for_expr,1,meta_interface_extension).
219 silently_fail_unavailable_predicate(is_table_command,1,meta_interface_extension).
220 silently_fail_unavailable_predicate(is_table_command_for_expr,1,meta_interface_extension).
221 silently_fail_unavailable_predicate(get_profile_stats,2,hit_profiler_extension).
222 silently_fail_unavailable_predicate(retract_profile_stats,2,hit_profiler_extension).
223
224
225 % LIB FILES for EXTENSIONS:
226 % -------------------------
227
228 % Required components:
229 lib_component_implements_extension(java_parser,jar,'probcliparser',core).
230 lib_component_implements_extension(statespace_queue,bundle,'myheap',core). % but fallback exists
231 lib_component_implements_extension(user_signal,bundle,'user_signal',core). % required for ProB2
232
233 lib_component_implements_extension(kodkod,jar,'probkodkod',kodkod_extension).
234 lib_component_implements_extension(tla2b,jar,'TLA2B',tla2b_extension).
235 lib_component_implements_extension(tlc4b,jar,'TLC4B',tlc4b_extension).
236 lib_component_implements_extension(alloy2b,jar,'alloy2b',alloy2b_extension).
237 lib_component_implements_extension(ltl2ba,bundle,'ltl2ba',ltl2ba_extension).
238 lib_component_implements_extension(ltlc,bundle,'ltlc',ltl_extension).
239 lib_component_implements_extension(counter,bundle,'counter',counter_extension).
240 lib_component_implements_extension(ltsmin_bundle,bundle,'ltsmin',ltsmin_extension).
241 lib_component_implements_extension(ltsmin_sequential,executable,'prob2lts-seq',ltsmin_extension).
242 lib_component_implements_extension(ltsmin_symbolic,executable,'prob2lts-sym',ltsmin_extension).
243 lib_component_implements_extension(ltsmin_printtrace,executable,'ltsmin-printtrace',ltsmin_extension).
244 lib_component_implements_extension(csp_parser,executable,'cspmf',cspm_extension).
245 lib_component_implements_extension(fuzz_parser,executable,'fuzz',fuzz_extension).
246 lib_component_implements_extension(fuzz_lib,file,'fuzzlib',fuzz_extension).
247 lib_component_implements_extension(nauty,bundle,'graphiso',nauty_extension).
248 lib_component_implements_extension(regexp,bundle,'regexp',regexp_extension).
249 lib_component_implements_extension(random_permutations,bundle,'random_permutations',random_permutations).
250 lib_component_implements_extension(setlog,qlf,'setlog-cli',setlog_extension).
251 lib_component_implements_extension(z3,bundle,'z3interface',smt_extension).
252 lib_component_implements_extension(zmq,bundle,'zmq',zmq_extension).
253
254 lib_file_suffix(bundle,darwin,'.bundle').
255 lib_file_suffix(bundle,windows,'.dll').
256 lib_file_suffix(bundle,linux,'.so').
257 lib_file_suffix(executable,windows,'.exe').
258 lib_file_suffix(executable,P,'') :- P \= windows.
259 lib_file_suffix(file,_,'').
260 lib_file_suffix(jar,_,'.jar').
261 lib_file_suffix(qlf,_,'.qlf'). % SWI compiled Prolog program
262
263
264 % FILENAME SUFFIXES (FILE EXTENSIONS):
265 % -----------------
266
267 % see second argument of known_spec_file_extension
268 load_spec_file_requires_extension(alloy,alloy2b_extension).
269 load_spec_file_requires_extension(csp,cspm_extension).
270 load_spec_file_requires_extension(smt,smtlib_extension).
271 load_spec_file_requires_extension(tla,tla2b_extension).
272 load_spec_file_requires_extension(z,fuzz_extension).
273
274
275 % PREFERENCE VALUES:
276 % -----------------
277
278 preference_value_requires_extension(symmetry_mode,hash,symmetry_extension).
279 preference_value_requires_extension(symmetry_mode,flood,symmetry_extension).
280 preference_value_requires_extension(symmetry_mode,nauty,symmetry_extension).
281 preference_value_requires_extension(symmetry_mode,nauty,nauty_extension).
282
283 %preference_value_requires_extension(use_chr_solver,true,chr_extension).
284 preference_value_requires_extension(use_common_subexpression_elimination,true,cse_extension).
285 preference_value_requires_extension(smt_supported_interpreter,true,smt_extension).
286
287 preference_value_requires_extension(use_solver_on_load,kodkod,kodkod_extension).
288 preference_value_requires_extension(use_solver_on_load,z3,smt_extension).
289 preference_value_requires_extension(use_solver_on_load,z3cns,smt_extension).
290 preference_value_requires_extension(use_solver_on_load,z3axm,smt_extension).
291 preference_value_requires_extension(use_solver_on_load,sat,satsolver_extension).
292 preference_value_requires_extension(use_solver_on_load,cdclt,cdclt_extension).
293
294 preference_value_requires_extension(pge,Val,pge_extension) :- dif(Val,off).
295 preference_value_requires_extension(por,Val,por_extension) :- dif(Val,off).
296 preference_value_requires_extension(use_safety_ltl_model_checker,true,ltl2ba_extension). % ltl.pl performs a separate check is_ltl2ba_tool_installed before checking for the preference
297 preference_value_requires_extension(randomise_enumeration_order,true,random_permutations).
298
299 preference_value_requires_extension(use_cbc_analysis,true,cbc_extension).
300
301 preference_value_requires_extension(try_atb_provers,true,atelierb_extension).
302
303 preference_value_requires_extension(try_operation_reuse,Val,opcache_extension) :- Val \= false.
304
305 preference_value_requires_extension(use_chr_solver,true,chr_extension).
306
307 % PROBCLI COMMANDS:
308 % -----------------
309
310 % which probcli commands requires which extension
311 probcli_command_requires_extension(ltl_assertions,ltl_extension).
312 probcli_command_requires_extension(ltl_formula_model_check(_,_),ltl_extension).
313 probcli_command_requires_extension(ltl_file(_),ltl_extension).
314
315 probcli_command_requires_extension(dot_command(_,_),dot_extension).
316 probcli_command_requires_extension(dot_command_for_expr(_,_,_,_),dot_extension).
317 probcli_command_requires_extension(csv_table_command(_,_,_,_),meta_interface_extension).
318
319 probcli_command_requires_extension(process_latex_file(_,_),latex_extension).
320
321 probcli_command_requires_extension(ltsmin2(_), ltsmin_extension).
322 probcli_command_requires_extension(ltsmin_ltl_output(_), ltsmin_extension).
323 probcli_command_requires_extension(ltsmin_option(_),ltsmin_extension).
324
325 probcli_command_requires_extension(rule_report(_),rulesdsl_extension).
326 probcli_command_requires_extension(visb_history(_,_,_),visb_extension).
327 probcli_command_requires_extension(cli_start_mc_with_tlc,tlc4b_extension).
328
329 probcli_command_requires_extension(cli_check_disprover_result(_),disprover_extension).
330
331 probcli_command_requires_extension(kodkod_comparision(_),kodkod_extension).
332 probcli_command_requires_extension(kodkod_performance(_),kodkod_extension).
333
334 probcli_command_requires_extension(zmq_master(_),zmq_extension).
335 probcli_command_requires_extension(zmq_worker(_),zmq_extension).
336 probcli_command_requires_extension(zmq_assertion(_),zmq_extension).
337
338 probcli_command_requires_extension(csp_main(_),cspm_extension).
339 probcli_command_requires_extension(csp_in_situ_refinement_check(_,_,_),cspm_extension).
340 probcli_command_requires_extension(csp_checkAssertion(_,_,_),cspm_extension).
341 probcli_command_requires_extension(eval_csp_expression(_),cspm_extension).
342 probcli_command_requires_extension(csp_get_assertions,cspm_extension).
343 probcli_command_requires_extension(csp_translate_to_file(_),cspm_extension).
344 probcli_command_requires_extension(add_csp_guide(_),cspm_extension).
345
346 probcli_command_requires_extension(cli_wd_check(_,_),wd_extension).
347
348 probcli_command_requires_extension(cli_symbolic_model_check(_),symbolic_model_checker_extension).
349
350 probcli_command_requires_extension(cli_start_sym_mc_with_lts(_),ltsmin_extension).
351 probcli_command_requires_extension(ltsmin,ltsmin_extension).
352
353 probcli_command_requires_extension(get_min_max_coverage(_),coverage_extension).
354 probcli_command_requires_extension(get_coverage_information(_),coverage_extension).
355 probcli_command_requires_extension(coverage(_,_,ShowEnabledInfo),coverage_extension) :-
356 ShowEnabledInfo \== just_check_stats, ShowEnabledInfo \== just_summary.
357
358 probcli_command_requires_extension(refinement_check(_,_,_),refinement_extension).
359 probcli_command_requires_extension(csp_in_situ_refinement_check(_,_),refinement_extension).
360 probcli_command_requires_extension(csp_checkAssertion(_,_),refinement_extension).
361
362 probcli_command_requires_extension(all_deadlocking_paths(_),cbc_extension).
363 probcli_command_requires_extension(cbc_tests(_),cbc_extension).
364 probcli_command_requires_extension(enabling_analysis_csv(_),cbc_extension).
365 probcli_command_requires_extension(feasibility_analysis_csv(_),cbc_extension).
366 probcli_command_requires_extension(test_description(_),cbc_extension).
367 probcli_command_requires_extension(cbc_sequence(_,_,_),cbc_extension).
368
369
370 probcli_command_requires_extension(trace_check(json,_,_),json_extension).
371 probcli_command_requires_extension(trace_check('JSON',_,_),json_extension).
372
373 probcli_command_requires_extension(cbc_option(unsat_core),unsat_core_extension).
374 probcli_command_requires_extension(disprover_options(Opts),unsat_core_extension) :-
375 member(disprover_option(unsat_core),Opts).
376
377 probcli_command_requires_extension(dot_command(_,_),meta_interface_extension).
378 probcli_command_requires_extension(dot_command_for_expr(_,_,_,_),meta_interface_extension).
379
380 probcli_command_requires_extension(check_statespace_hash(_,_),probhash_extension).
381
382 probcli_command_requires_extension(cli_print_statistics(hit_profile),hit_profiler_extension). % in covsrc
383
384
385 % probcli_command_requires_extension(cli_check_properties(_),predicate_debugger_extension). % only used when PROPERTIES inconsistent; hence we just leave comment here
386
387
388 % EXTERNAL FUNCTIONS:
389 % -------------------
390 external_function_requires_extension('KODKOD',kodkod_extension).
391 external_function_requires_extension('KODKOD_SOLVE',kodkod_extension).
392
393 external_function_requires_extension('REGEX_MATCH',regexp_extension).
394 external_function_requires_extension('REGEX_IMATCH',regexp_extension).
395 external_function_requires_extension('IS_REGEX',regexp_extension).
396 external_function_requires_extension('REGEX_REPLACE',regexp_extension).
397 external_function_requires_extension('REGEX_IREPLACE',regexp_extension).
398 external_function_requires_extension('REGEX_SEARCH_STR',regexp_extension).
399 external_function_requires_extension('REGEX_ISEARCH_STR',regexp_extension).
400 external_function_requires_extension('REGEX_SEARCH',regexp_extension).
401 external_function_requires_extension('REGEX_ISEARCH',regexp_extension).
402 external_function_requires_extension('REGEX_SEARCH_ALL',regexp_extension).
403 external_function_requires_extension('REGEX_ISEARCH_ALL',regexp_extension).
404
405
406 external_function_requires_extension('MACHINE_INFO',probhash_extension).
407 external_function_requires_extension('SHA_HASH',probhash_extension).
408 external_function_requires_extension('SHA_HASH_HEX',probhash_extension).
409 external_function_requires_extension('SHA_HASH_FILE_HEX',probhash_extension).
410
411 external_function_requires_extension('SATSOLVER_SOLVE',satsolver_extension).
412
413 external_function_requires_extension('READ_XML',xml2b_extension).
414
415 external_function_requires_extension(svg_points, external_svg_extension).
416 external_function_requires_extension(svg_train, external_svg_extension).
417 external_function_requires_extension(svg_axis, external_svg_extension).
418 external_function_requires_extension(svg_set_polygon,external_svg_extension).
419 external_function_requires_extension(svg_dasharray_for_intervals,external_svg_extension).
420
421
422 external_function_requires_extension('STRING_TO_REAL',external_reals_extension).
423 external_function_requires_extension('RADD',external_reals_extension).
424 external_function_requires_extension('RSUB',external_reals_extension).
425 external_function_requires_extension('RMUL',external_reals_extension).
426 external_function_requires_extension('RDIV',external_reals_extension).
427 %TODO: declare all exported functions of external_functions_reals