This commit is contained in:
Adrien Vannson 2022-05-17 12:08:25 +02:00
parent 7b69264e3f
commit a03a5f5504
No known key found for this signature in database
GPG Key ID: FE2E66FD978C1A55
2 changed files with 39 additions and 31 deletions

View File

@ -2,6 +2,7 @@ The Pieuvre Proof Assistant
=========================== ===========================
# Utilisation # Utilisation
`Pieuvre` génère automatiquement un fichier `log.8pus` contenant la preuve venant d'être faite.
## Option `typecheck` ## Option `typecheck`
L'option `typecheck` peut être testée avec les fichiers tests dans `tests/typecheck`. Pour cela, utiliser les commandes : L'option `typecheck` peut être testée avec les fichiers tests dans `tests/typecheck`. Pour cela, utiliser les commandes :

63
main.ml
View File

@ -34,15 +34,6 @@ let is_interactive = match file with
| _ -> false | _ -> false
in in
let readline () = match file with
| None -> (
Printf.printf ">>> ";
flush stdout;
read_line ()
)
| Some f -> input_line f
in
if !reduce_option then ( if !reduce_option then (
let lexbuf = Lexing.from_channel (match file with let lexbuf = Lexing.from_channel (match file with
| None -> stdin | None -> stdin
@ -105,12 +96,29 @@ if !typecheck_option then (
exit 0 exit 0
); );
(* Show a message only if the input is read from stdin *) (* Affiche un message si l'entrée est lue sur stdin *)
let show s = match file with let show s = match file with
| None -> Printf.printf "%s" s | None -> Printf.printf "%s" s
| _ -> () | _ -> ()
in in
(* Ouvre un fichier contenant la preuve écrite *)
let log_file = open_out "log.8pus" in
let readline () =
let line = match file with
| None -> (
Printf.printf ">>> ";
flush stdout;
read_line ()
)
| Some f -> input_line f
in
Printf.fprintf log_file "%s\n" line;
flush log_file;
line
in
show "Please type the formula to prove\n"; show "Please type the formula to prove\n";
let ty = let ty =
@ -262,19 +270,18 @@ while !subgoals <> [] do
in in
let rec applyUntilWorking () = let rec applyUntilWorking () =
try try (
( let readTactic = read_tactic () in
let readTactic = read_tactic () in applyTactic readTactic
applyTactic readTactic )
)
with with
| TacticException(t,s) -> | TacticException(t,s) ->
Printf.printf "\027[31mCannot apply the tactic: %s\027[0m\n" s; Printf.printf "\027[31mCannot apply the tactic: %s\027[0m\n" s;
if(is_interactive) then applyUntilWorking () else raise (TacticException(t,s)) if(is_interactive) then applyUntilWorking () else raise (TacticException(t,s))
| TacticParseException -> | TacticParseException ->
Printf.printf "\027[31mCannot parse the tactic, please refer to pieuvre documentation.\027[0m\n"; Printf.printf "\027[31mCannot parse the tactic, please refer to pieuvre documentation.\027[0m\n";
if(is_interactive) then applyUntilWorking () else raise TacticParseException if(is_interactive) then applyUntilWorking () else raise TacticParseException
| e -> | e ->
Printf.printf "\027[31mPieuvre Failed Unexpectedly !\027[0m\n"; Printf.printf "\027[31mPieuvre Failed Unexpectedly !\027[0m\n";
raise e raise e
in in
@ -282,13 +289,13 @@ while !subgoals <> [] do
done; done;
let finalLam = !fill_holes [] in let finalLam = !fill_holes [] in
if (typecheck [] finalLam ty) then ( if (typecheck [] finalLam ty) then (
Printf.printf "Final proof :\n"; Printf.printf "Final proof :\n";
reduce finalLam; reduce finalLam;
) ) else (
else ( Printf.printf "Invalid proof constructed!\n";
Printf.printf "Invalid proof constructed!\n"; Printf.printf "%s can't be typed with %s.\n" (string_of_lam finalLam) (string_of_ty ty);
Printf.printf "%s can't be typed with %s.\n" (string_of_lam finalLam) (string_of_ty ty); Printf.printf "The whole development team of pieuvre is sorry for the damage eventually done by this error.\n"
Printf.printf "The whole development team of pieuvre is sorry for the damage eventually done by this error.\n" );
)
;; close_out log_file;;