LES TYPES
Le type des formules
Le type formule sert à écrire des formules logiques et des expressions
type formule =
(* proposition *)
| P of string
(* symbols = symbolic constants *)
| S of string
(* variable *)
| V of string
(* constants *)
| True | False
| I of int
(* logical connectors *)
| Impl of formule * formule
| Et of formule * formule
| Ou of formule * formule
| Qq of var * formule
| Ex of var * formule
| Neg of formule
(* predicate *)
| Pred of name * expr list
(* operator *)
| Op of name * expr list
| ...
and expr = formule
and var = formule (* de la forme V ... *)
and symbol = formule (* de la forme S ... *)
Les types hypotheses et conclusion
type hyp = string * conclusion
type hypotheses = hyp list
type conclusion = formule
Le type des arbres de preuve
type proof_tree =
| ADP of int * conclusion (* une preuve à finir *)
| HYP_apply of hypotheses * hyp * conclusion
| IMPL_elim of hypotheses * proof_tree * proof_tree * conclusion
| IMPL_intro of hypotheses * hyp * proof_tree * conclusion
| ET_elim of hypotheses * int * proof_tree * conclusion
| ET_intro of hypotheses * proof_tree * proof_tree * conclusion
| OU_elim of hypotheses * proof_tree * proof_tree * proof_tree * conclusion
| OU_intro of hypotheses * int * proof_tree * formule * conclusion
| QQ_elim of hypotheses * (expr -> formule) * var * expr * proof_tree * conclusion
| QQ_intro of hypotheses * (expr -> formule) * var * symbol * proof_tree * conclusion
| EX_intro of hypotheses * (expr -> formule) * var * expr * proof_tree * conclusion
| EX_elim of hypotheses * var * formule * proof_tree * proof_tree * conclusion
| DEF_apply of hypotheses * name * arguments * proof_tree * conclusion
| Gap of hypotheses * proof_tree * conclusion (* sert uniquement à indiquer qu'on va raconter la suite de la preuve en descendant *)
| ABS_elim of hypotheses * proof_tree * conclusion
| NEGNEG_elim of hypotheses * proof_tree * conclusion
| ...
LES FONCTIONS PRÉDÉFINIES
Pour transformer une formule en chaine de caractères
utilisez la fonction déjà définie :
Term.pretty: formule -> string
Term.pretty (Impl(P("A"),P("B"))) retourne la chaîne "A ==> B"
Pour obtenir la conclusion d'une preuve
utilisez la fonction déjà définie :
Proof_tree.conclusion_of: proof_tree -> formule
Pour concaténer (coller) deux strings utilisez l'opérateur :
(^) : string ^ string -> string
Pour concaténer plusieurs strings utilisez la fonction :
String.concat: string -> string list -> string
Ex: String.concat "+" [ "a" ; "b" ; "c" ] = "a+b+c"
LE PROJET
il s'agit d'écrire une fonction
pretty_proof: proof_tree -> string
qui traduit un arbre de preuve en français
Nous vous conseillons de procéder dans l'ordre suivant:
d'abord les constructeurs (pour avoir 10)
- HYP_apply
- IMPL_intro
- IMPL_elim
puis pour avoir 12
- ET_elim
- ET_intro
puis pour avoir 14
- OU_elim
- OU_intro
puis pour avoir 16
- QQ_intro
- QQ_elim
puis pour avoir 18
- EX_intro
- EX_elim
puis pour avoir 20
- DEF_apply
puis pour avoir 22
- pretty_proof_ascendante
- pretty_proof_descendante
puis pour avoir 24
- ABS_elim
- NEGNEG_elim