Skip to content

Commit 7c8dcba

Browse files
committed
Refactoring command line interface of MOLOSS
1 parent 0e6ebe0 commit 7c8dcba

8 files changed

+64
-80
lines changed

src/ast_modal.ml

+7
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@ type formula =
1818
| Boxe of formula
1919
| Diamond of formula
2020

21+
type axiom =
22+
| AxS
23+
| AxB
24+
| Ax4
25+
| Ax5
26+
| AxCD
27+
2128
(** This function propagate a negation in a modal formula.
2229
Helps to compute the NNF of the formula *)
2330
let rec prop_neg = function

src/decide.ml

+9-26
Original file line numberDiff line numberDiff line change
@@ -522,37 +522,20 @@ end
522522
let axiom_to_dec_proc axiom =
523523
let rec aux = function
524524
| [] -> []
525-
| "-S"::q | "-M"::q | "-boxeM"::q ->
526-
if L.mem "-5" axiom then
525+
| M.AxS::q ->
526+
if L.mem M.Ax5 axiom then
527527
reflexiv::(aux q)
528528
else
529529
reflexiv::(aux q)
530-
| "-K"::q -> aux q
531-
| "-4"::q -> transitivity::(aux q)
532-
| "-B"::q -> symmetric::(aux q)
533-
| "-5"::q -> euclidean::(aux q)
534-
| "-CD"::q -> functionnal::(aux q)
535-
| t::q ->
536-
begin
537-
if String.length t <= 1
538-
then begin
539-
Printf.printf "argument inconnu : %s\n" t;
540-
exit 0
541-
end
542-
else if String.get t 0 = '-' && String.get t 1 != '-'
543-
then
544-
begin
545-
fpf "Axiome inconne : %s \n" t;
546-
exit 1
547-
end
548-
else
549-
aux q
550-
end
530+
| M.Ax4::q -> transitivity::(aux q)
531+
| M.AxB::q -> symmetric::(aux q)
532+
| M.Ax5::q -> euclidean::(aux q)
533+
| M.AxCD::q -> functionnal::(aux q)
551534
in let res = aux axiom in
552-
if L.mem "-CD" axiom || L.mem "-boxeM" axiom then
535+
if L.mem M.AxCD axiom then
553536
res@[forall]
554-
else if (L.mem "-4" axiom || L.mem "-5" axiom || L.mem "--soft" axiom)
555-
&& not (L.mem "--soft-ignore" axiom) then
537+
else if (L.mem M.Ax4 axiom || L.mem M.Ax5 axiom || Cmdline.(!optSoft))
538+
&& not (Cmdline.(!optSoftIgnore)) then
556539
res@[forall;softexist]
557540
else
558541
res@[forall;exist]

src/direct.ml

+7-21
Original file line numberDiff line numberDiff line change
@@ -78,19 +78,19 @@ let getUniqueId () =
7878

7979
(** An association list between the axioms and their FO translation *)
8080
let assoc =
81-
[("-M",";axiome de réfléxivité \n\
81+
[(Ast_modal.AxS,";axiome de réfléxivité \n\
8282
(assert (forall ((w0 W)) (r w0 w0)))");
83-
("-4",";axiome de trasitivité \n\
83+
(Ast_modal.Ax4,";axiome de trasitivité \n\
8484
(assert (forall ((w0 W) (w1 W) (w2 W)) \
8585
(=> (and (r w0 w1) (r w1 w2)) (r w0 w2))))\n");
86-
("-B",";axiome de symétrie \n\
86+
(Ast_modal.AxB,";axiome de symétrie \n\
8787
(assert (forall ((w1 W)(w2 W)) \
8888
(=> (r w1 w2) (r w2 w1))))\n");
89-
("-5",":axiome de euclidienne \n\
89+
(Ast_modal.Ax5,":axiome de euclidienne \n\
9090
(assert (forall ((w0 W) (w1 W) (w2 W)) \
9191
(=> (and (r w0 w1) (r w0 w2)) \
9292
(and (r w1 w2) (r w2 w1)))))\n");
93-
("-CD",";axiome de fonctionelle \n\
93+
(Ast_modal.AxCD,";axiome de fonctionelle \n\
9494
(assert (forall ((w0 W) (w1 W) (w2 W)) \
9595
(=> (and (r w0 w1) (r w0 w2)) \
9696
(= w1 w2))))\n")]
@@ -105,24 +105,10 @@ begin
105105
in begin
106106
output_string oc ax;
107107
p_out ax out;
108+
p_axiom oc out q;
108109
end
109110
else
110-
begin
111-
if String.length t <= 1
112-
then begin
113-
Printf.printf "argument inconnu : %s\n" t;
114-
exit 1
115-
end
116-
else if String.get t 0 = '-' && String.get t 1 != '-'
117-
then
118-
begin
119-
fpf "Axiome inconne : %s \n" t;
120-
exit 1
121-
end
122-
else
123-
p_axiom oc out q
124-
end;
125-
p_axiom oc out q;
111+
assert false
126112
end
127113

128114

src/moloss.ml

+25-27
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@ open Lexing
44

55
module Dummy = struct let truc = 0 end
66

7+
78
module DecisionArg : Sign.DecideArg =
89
struct
9-
let argument = match (Array.to_list (Sys.argv)) with
10-
| _ :: _ :: q ->
11-
q
12-
| _ ->
13-
Printf.printf "Give a formula to solve\n";
14-
exit 1
10+
11+
let argument =
12+
let _ = Cmdline.init () in
13+
Cmdline.(!axs)
1514
end
1615

1716
module Decision = Decide.GetDecide(DecisionArg)
@@ -39,7 +38,7 @@ let argv = Array.to_list (Sys.argv) in
3938
if List.mem "--out" argv then
4039
Printf.printf "pas encore implem'\n"
4140
else
42-
if List.mem "--all" argv then
41+
if Cmdline.(!optAll) then
4342
let module Z3 = Solv(Smtz3.SMTz3)(Decision)(Simplify) in
4443
let module MSAT = Solv(Smtmsat.SMTmsat(Dummy))(Decision)(Simplify) in
4544
let module MiniSAT = Solv(Smtminisat.Smtmini)(Decision)(Simplify)
@@ -51,13 +50,13 @@ let argv = Array.to_list (Sys.argv) in
5150
Printf.printf "c oracle minisat\n";
5251
MiniSAT.solve f |> ignore;
5352
end
54-
else if List.mem "--z3" argv then
53+
else if Cmdline.(!optZ3) then
5554
let module Z3 = Solv(Smtz3.SMTz3)(Decision)(Simplify)
5655
in begin
5756
Printf.printf "c oracle z3\n";
5857
Z3.solve f |> ignore;
5958
end
60-
else if List.mem "--mSAT" argv then
59+
else if Cmdline.(!optmSAT) then
6160
let module MSAT = Solv(Smtmsat.SMTmsat(Dummy))(Decision)(Simplify)
6261
in begin
6362
Printf.printf "c oracle mSAT\n";
@@ -77,7 +76,7 @@ let argv = Array.to_list (Sys.argv) in
7776
if List.mem "--out" argv then
7877
Printf.printf "pas encore implem'\n"
7978
else
80-
if List.mem "--all" argv then
79+
if Cmdline.(!optAll) then
8180
let module Z3 = Solv(Smtz3.SMTz3)(Decision)(Simplify) in
8281
let module MSAT = Solv(Smtmsat.SMTmsat(Dummy))(Decision)(Simplify) in
8382
let module MiniSAT = Solv(Smtminisat.Smtmini)(Decision)(Simplify)
@@ -90,14 +89,14 @@ let argv = Array.to_list (Sys.argv) in
9089
Printf.printf "c oracle minisat\n";
9190
MiniSAT.solve f |> ignore;
9291
end
93-
else if List.mem "--z3" argv then
92+
else if Cmdline.(!optZ3) then
9493
let module Z3 = Solv(Smtz3.SMTz3)(Decision)(Simplify)
9594
in begin
9695
Printf.printf "c "; Pprinter.print_m f;
9796
Printf.printf "c oracle z3\n";
9897
Z3.solve f |> ignore;
9998
end
100-
else if List.mem "--mSAT" argv then
99+
else if Cmdline.(!optmSAT) then
101100
let module MSAT = Solv(Smtmsat.SMTmsat(Dummy))(Decision)(Simplify)
102101
in begin
103102
Printf.printf "c "; Pprinter.print_m f;
@@ -119,7 +118,7 @@ let solve_assert f =
119118
if List.mem "--out" argv then
120119
Printf.printf "pas encore implem'\n"
121120
else
122-
if List.mem "--all" argv then
121+
if Cmdline.(!optAll) then
123122
let module Z3 = Solv(Smtz3.SMTz3)(Decision)(Simplify) in
124123
let module MSAT = Solv(Smtmsat.SMTmsat(Dummy))(Decision)(Simplify) in
125124
let module MiniSAT = Solv(Smtminisat.Smtmini)(Decision)(Simplify)
@@ -132,14 +131,14 @@ let solve_assert f =
132131
Printf.printf "c oracle minisat\n";
133132
MiniSAT.solve f |> ignore;
134133
end
135-
else if List.mem "--z3" argv then
134+
else if Cmdline.(!optZ3) then
136135
let module Z3 = Solv(Smtz3.SMTz3)(Decision)(Simplify)
137136
in begin
138137
Printf.printf "c "; Pprinter.print_m f;
139138
Printf.printf "c oracle z3\n";
140139
Z3.solve f |> ignore;
141140
end
142-
else if List.mem "--mSAT" argv then
141+
else if Cmdline.(!optmSAT) then
143142
let module MSAT = Solv(Smtmsat.SMTmsat(Dummy))(Decision)(Simplify)
144143
in begin
145144
Printf.printf "c "; Pprinter.print_m f;
@@ -156,23 +155,23 @@ let solve_assert f =
156155

157156

158157
let _ =
159-
let argv = Array.to_list (Sys.argv)
160-
and t0 = Unix.gettimeofday ()
158+
let _ = Cmdline.init () in
159+
let t0 = Unix.gettimeofday ()
161160
in begin
162161
begin
163-
match argv with
164-
| _ :: filename :: _ ->
162+
match Cmdline.(!file) with
163+
| Some filename ->
165164
begin
166165
let file = open_in filename in
167166
let lb = Lexing.from_channel file in
168167
try
169168
let f = InToHyLoParser.file InToHyLoLexer.next_token lb in
170-
if List.mem "--direct" argv then
169+
if Cmdline.(!optDirect) then
171170
begin
172171
Printf.printf "c oracle direct\n";
173-
(Direct.solve (Convertisseur.st 0 f) argv) |> ignore;
172+
(Direct.solve (Convertisseur.st 0 f) Cmdline.(!axs)) |> ignore;
174173
end
175-
else if List.mem "--get-simplify" argv then
174+
else if Cmdline.(!optGetSimplify) then
176175
let fs = Simplify.simplify f in
177176
let l = Ast_modal.formLength f
178177
and d = Ast_modal.modDegree f
@@ -186,9 +185,9 @@ let _ =
186185
else "\027[31m"
187186
in
188187
Printf.printf "%d,%d,%s%d\027[0m,%s%d\027[0m\n" l d cls ls cds ds
189-
else if List.mem "--get-assert" argv then
188+
else if Cmdline.(!optGetAssert) then
190189
solve_assert f
191-
else if List.mem "--get-model" argv then
190+
else if Cmdline.(!optGetAssert) then
192191
solve_model f
193192
else
194193
solve_vanilla f
@@ -206,12 +205,11 @@ let _ =
206205
end
207206
| _ ->
208207
begin
209-
Printf.printf
210-
"Give a filename of a InToHyLo formula to solve.\n";
208+
Cmdline.print_usage ();
211209
exit 1;
212210
end;
213211
end;
214212
flush_all ();
215-
if List.mem "--time" argv then
213+
if Cmdline.(!optTime) then
216214
Printf.printf "c Done in %f s \n" (Unix.gettimeofday () -.t0);
217215
end

src/sign.ml

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ module type DecideArg =
104104
sig
105105
(** Basically : this argument is the argument in the command line. it contains :
106106
- the axioms : -S, -K, -4, -5 *)
107-
val argument : string list
107+
val argument : Ast_modal.axiom list
108108
end
109109

110110

src/simplify.ml

+2-2
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,9 @@ let rec simplifyS = function
124124
end
125125

126126
let getSimplify arg =
127-
if L.mem "--no-simplify" arg then
127+
if Cmdline.(!optNoSimplify) then
128128
(fun x -> x)
129-
else if L.mem "-S" arg || L.mem "--S4" arg || L.mem "--S5" arg
129+
else if L.mem M.AxS arg
130130
then simplifyS
131131
else simplifyK
132132

src/solve.ml

+12-2
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,15 @@ let add_model model new_bf =
4343
ISet.fold
4444
(fun ax model -> (ax, true)::model)
4545
axs model
46-
| _ -> assert false
46+
| BFO.Conj _ ->
47+
let _ = Printf.printf "C'est Conj"
48+
in assert false
49+
| BFO.Atom _ ->
50+
let _ = Printf.printf "C'est Atom"
51+
in assert false
52+
| BFO.Not _ ->
53+
let _ = Printf.printf "C'est Not"
54+
in assert false
4755

4856

4957
module Solve
@@ -115,9 +123,11 @@ let solve f =
115123
begin
116124
List.iter (fun v -> SMT.dec_const v) new_var;
117125
SMT.dec_assert new_bf ;
126+
(*
118127
let new_m = add_model m new_bf in
119128
multi_decide config new_m
120-
end;
129+
*)
130+
end;
121131
| D.SoftFound (new_var1,new_bf,new_var2,bf_soft,wght) ->
122132
begin
123133
List.iter (fun v -> SMT.dec_const v ) new_var1;

test.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
for filename in ./data/InToHyLo/test*; do
1+
for filename in ./data/InToHyLo/test-basic*; do
22
echo " "
33
echo "$filename"
44
./moloss.native "$filename" --time $*

0 commit comments

Comments
 (0)