Proof checker implementation in OCaml. It reads a proof line by line and checks if a current statement can be deduced from the previous ones. It supports first order logic and axioms (statements that are considered true). It can also fill a gaps in a proof. See example inputs in tests. Details are available in Polish here.
goal modusPonens: P /\ (P => Q) => Q
proof
[ P /\ (P => Q) :
P;
P => Q;
Q ];
P /\ (P => Q) => Q
end.
- compilation:
make proof_checker - cleaning:
make clean
./proof_checker.native in out
Specified in proof_checker.pdf (in Polish), but:
- variable name must match:
(['B'-'D'] | ['F' - 'Z']) ['a'-'z' 'A'-'Z' '0'-'9' '_']* - target name must match:
['a'-'z'] ['a'-'z' 'A'-'Z' '0'-'9' '_']* - first order logic:
A x formula,E x formula - gaps in a proof:
prove_it { formula }
You can find example tests in /tests folder - here.
| Test | Correct or incorrect proofs | Extension |
|---|---|---|
| tests/in0 | correct | none |
| tests/in1 | incorrect | none |
| tests/in2 | correct | axioms |
| tests/in3 | incorrect | first order logic |
| tests/in4 | correct | first order logic |
| tests/in5 | correct | gaps in a proof |
| tests/in6 | incorrect | gaps in a proof |
Implementacja podstawowej wersji zadania z dodatkami:
- Aksjomaty
- Logika klasyczna (prawo eliminacji podwójnej negacji)
- Logika pierwszego rzędu
- Program próbuje uzupełnić luki w dowodzie
Najważniejszy fragment zadania jest napisany w plikach
- kompilacja:
make proof_checker - sprzątanie:
make clean
./proof_checker.native in out
Składnia jak w specyfikacji zadania, ale:
- nazwa zmiennej dopasować się do następującego wyrażenia regularnego:
(['B'-'D'] | ['F' - 'Z']) ['a'-'z' 'A'-'Z' '0'-'9' '_']* - nazwa celu dopasować się do następującego wyrażenia regularnego:
['a'-'z'] ['a'-'z' 'A'-'Z' '0'-'9' '_']* - logika I rzędu:
A x formula,E x formula - luki w dowodzie:
prove_it { formula } - w folderze
tests/dostarczone są testy z przykładowymi dowodami
| Test | Opis | Rozszerzenie |
|---|---|---|
| tests/in0 | correct | wersja bez rozszerzeń |
| tests/in1 | incorrect | wersja bez rozszerzeń |
| tests/in2 | correct | aksjomaty |
| tests/in3 | incorrect | logika I rzędu |
| tests/in4 | correct | logika I rzędu |
| tests/in5 | correct | prove_it {} |
| tests/in6 | incorrect | prove_it {} |