FOL.Exists
(*
CoMoEx - Exists
Copyright (C) 2024 Max Ole Elliger
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*)
Require Import Classical_Prop.
CoMoEx - Exists
Copyright (C) 2024 Max Ole Elliger
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*)
Require Import Classical_Prop.
Section existsI_demo.
Variable T : Set.
Section existsI_demo_1.
Variable Q : Prop.
Variable some_t : T.
Hypothesis A1 : Q.
Einfachstes Beispiel: Wir wollen zeigen, dass ein x existiert,
sodass Q gilt. Q ist ein konstantes Prädikatensymbol, hängt also
nicht von x ab. Zudem wissen wir schon, dass Q grundsätzlich gilt.
Dieses Beispiel reduziert sich also darauf, zu zeigen, dass überhaupt
irgendein x aus T existiert, dass also T nicht-leer ist. Dies
ist über some_t sichergestellt. (Wir nehmen das hier also einfach
an, da der Fokus auf dem Existenzquantor, nicht aber auf Inhabitation
liegt.
Theorem existsI_demo_1 : exists x : T, Q.
Proof.
exists some_t.
exact A1.
Qed.
End existsI_demo_1.
Section existsI_demo_2.
Variable P : T -> Prop.
Variable some_t : T.
Hypothesis A1 : P some_t.
Ähnliches Beispiel.
Theorem existsI_demo_2 : exists x, P x.
Proof.
Admitted.
End existsI_demo_2.
Section existsI_demo_3.
Variable P : T -> Prop.
Variable x : T.
Hypothesis A1 : P x.
Ähnliches Beispiel. Welchen Zweck könnte es haben,
dass ich existsI_demo_2 UND existsI_demo_3 anführe?
Section existsE_demo.
Variable T : Set.
Variable Q : Prop.
Section existsE_demo_1.
Hypothesis A1 : exists x : T, Q.
Theorem existsE_demo_1 : Q.
Proof.
A1 sagt "Es gibt ein x, sodass Q gilt." Also nehme ich dieses x
einfach mal als gegeben an, zudem die zugehörige Aussage. Damit
arbeite ich weiter.
destruct A1 as [x A2].
exact A2.
Qed.
End existsE_demo_1.
Section existsE_demo_2.
Variable P : T -> Prop.
Hypothesis A1 : exists x, Q -> P x.
Hypothesis A2 : Q.
Hier muss man wohl nicht nur eliminieren, sondern auch einführen...
Kombinierte Beispiele
Section exists_comm_ops.
Variable T : Set.
Variables P Q : T -> Prop.
Section exists_comm_and_1.
Hypothesis H1 : exists x, P x /\ Q x.
Theorem exists_comm_and_1_1 : (exists x, P x) /\ exists x, Q x.
Proof.
Admitted.
End exists_comm_and_1.
Section exists_comm_and_2.
Hypothesis H1 : exists x y, P x /\ Q y.
Theorem exists_comm_and_2_1 : (exists x, P x) /\ exists x, Q x.
Proof.
Admitted.
End exists_comm_and_2.
Section exists_comm_or_1.
Hypothesis H1 : exists x, P x \/ Q x.
Theorem exists_comm_or_1_1 : (exists x, P x) \/ exists x, Q x.
Proof.
Admitted.
End exists_comm_or_1.
Section exists_comm_or_2.
Hypothesis H1 : exists x y, P x \/ Q y.
Theorem exists_comm_or_2_1 : (exists x, P x) \/ exists x, Q x.
Proof.
Admitted.
End exists_comm_or_2.
End exists_comm_ops.