ProofWeb

Working with ProofWeb

Tips on First Ordem Logic


Require Import ProofWeb.

(* Ilustração de teoremas em Lógica de Primeira Ordem. *) 

Variable P : D -> Prop.
Variable Q : D * D -> Prop.
Variable R : D * D * D -> Prop.

(* Estratégia para trás *) 

Theorem exemplo_01 : all x, P(x) -> all y, P(y).
Proof.
imp_i H.
all_i z.
all_e (all x, P(x)).
ass H.
Qed.

(* Estratégia para frente *) 

Theorem exemplo_02 : all x, P(x) -> all y, P(y).
Proof.
imp_i H.
all_i z.
f_all_e H.
Qed.

(* O próximo caso pode ser resolvido sem eliminar ou introduzir os           *)
(* quantificadores, uma vez que os nomes das variáveis ligadas não importam. *) 

Theorem exemplo_03 : all x, P(x) -> all y, P(y).
Proof.
imp_i H.
ass H.
Qed.

(* O próximo caso só é demonstrável se houver um termo conhecido na linguagem. *)

Variable i : D.

Theorem exemplo_04 : all x, P(x) -> exi x, P(x).
Proof.
imp_i H.
exi_i i.
all_e (all x, P(x)).
ass H.
Qed.

(* Estratégia "Para frente". *)

Theorem exemplo_05 : all x, P(x) -> exi x, P(x).
Proof.
imp_i H.
insert H1 (P(i)).
f_all_e H.
f_exi_i H1.
Qed.

(* Utilizando a Eliminação do Existencial: Para frente *)

Theorem exemplo_06 : exi x, ~P(x) -> ~all x, P(x).
Proof.
imp_i H.
neg_i H1.
exi_e (exi x, ~P(x)) y H2.
ass H.
neg_e (P(y)).
ass H2.
all_e (all x, P(x)).
ass H1.
Qed.

(* Para trás *)

Theorem exemplo_07 : exi x, ~P(x) -> ~all x, P(x).
Proof.
imp_i H.
neg_i H1.
f_exi_e H y H2.
insert H3 (P(y)).
f_all_e H1.
f_neg_e H2 H3.
Qed.


(* Ilustração de estratégia heurística útil. *) 

Variable S : D -> Prop.

Hypothesis P1: (all x, P(x)/\exi y, S(y)).

Theorem exemplo_08 : all x, exi y, ( P(x)/\S(y)).
Proof.

(* Sempre tente utilizar primeiro as regras de Introdução do Universal... *) 

all_i j.

(* ...e de Eliminação do Existencial. *)

exi_e (exi y, S(y)) k H0.

(* Motivo: Essas regras no ProofWeb introduzem termos que poderão ser       *)
(* utilizados pela Introdução do Existencial e pela Eliminação do Universal *)

f_con_e2 P1.
exi_i k.
con_i.
all_e (all x, P(x)).
f_con_e1 P1.
ass H0.
Qed.