I heard the terms "theorem provers" and "proof assistants" tossed around before (which I assumed to be the same up until a couple seconds ago), and also of Coq, Idris, Agda, TLA+ (don't know which aforementioned camps they belong to), but are completely clueless where I should begin to verify a formal proof programmatically that I just came up with.
For context, I started out with Shawn Hedman's "A First Course in Logic: An Introduction to Model Theory, Proof Theory, Computatibility, and Complexity" to learn the very basics. When I got to "Proof by Contradiction" derivation rule, I tried to derive the conclusion from the premises as an exercise, but I got there via a different path, and want to make sure that the steps are sound.
So what language / tool should I dive into first to verify the formal proofs below? Or am I totally misguided and there's something fundamental that I'm missing?
For example, this is from the book:
Premises: 𝓕 ∪ {F } ⊢ G
𝓕 ∪ {F } ⊢ ¬G
Conclusion: 𝓕 ⊢ ¬F
Line Statement Justification 1 𝓕 ∪ {F} ⊢ G Premise 2 𝓕 ∪ {¬G} ⊢ ¬F Contrapositive applied to 1 3 𝓕 ∪ {F} ⊢ ¬G Premise 4 𝓕 ∪ {¬¬G} ⊢ ¬F Contrapositive applied to 3 5 𝓕 ⊢ ¬F Proof by cases applied to 2 and 4
and this is the route I took (which I'm pretty sure is wrong):
Line | Statement | Justification |
---|---|---|
1 | 𝓕 ∪ {F} ⊢ ¬G | Premise |
2 | 𝓕 ∪ {F} ⊢ (¬G v ¬F) | V-introduction applied to 1 |
3 | 𝓕 ∪ {F} ⊢ (G → ¬F) | →-definition applied to 2 |
4 | 𝓕 ∪ {F} ⊢ G | Premise |
5 | 𝓕 ∪ {F} ⊢ ¬F | →-elimination applied to 3 and 4 |
6 | 𝓕 ∪ {¬F} ⊢ ¬F | assumption |
7 | 𝓕 ⊢ ¬F | Proof by cases applied to 5 and 6 |
Again, I'm not asking to you to tell me if my solution is good or bad, but a learning path on how I can check my work going forward. Thank you!
update (7/19/2023): I guess this CS stack exchange thread, Introduction into first order logic verification, answers my question, but I'm not far enough into my studies to decide.