Predicate Logic en Coq [cerrado]
Nov 08 2020
¿Alguien puede ayudar con estos dos teoremas en lo que respecta a la lógica de predicados y el uso de coq? Tengo problemas para comprender la sintaxis de coq.
- existe x: D, (R x / \ S x) | - (existe y: D, R y) / \ (existe z: D, S z)
- existe x: D, (R x \ / S x) | - (existe y: D, R y) \ / (existe z: D, S z)
Respuestas
1 LucienDavid Nov 08 2020 at 22:35
Si entendí bien, lo que estás buscando es demostrar que si un elemento satisface ambos Props , entonces hay un elemento específico que satisface cada Prop :
Lemma and : forall (D:Type)(R S:D -> Prop),
(exists x:D, (R x /\ S x)) -> (exists y:D, R y) /\ (exists z:D, S z).
Y que si un elemento satisface al menos uno de los Props , entonces para uno de los Props , existe un elemento que lo satisface:
Lemma or : forall (D:Type)(R S:D -> Prop),
(exists x:D, (R x \/ S x)) -> (exists y:D, R y) \/ (exists z:D, S z).
Las pruebas serían entonces bastante simples, como sigue:
Lemma and : forall (D:Type)(R S:D -> Prop),
(exists x:D, (R x /\ S x)) -> (exists y:D, R y) /\ (exists z:D, S z).
Proof.
intros. destruct H. destruct H as [H1 H2].
split; exists x; [apply H1 | apply H2].
Qed.
Lemma or : forall (D:Type)(R S:D -> Prop),
(exists x:D, (R x \/ S x)) -> (exists y:D, R y) \/ (exists z:D, S z).
Proof.
intros. destruct H.
destruct H; [left | right]; exists x; apply H.
Qed.