From Stdlib Require Import Classical Relations. Section Pilot. (* Vocabulary. Nothing is assumed about any of these. *) Variable Thing : Type. Variable Gives : Thing -> Thing -> Prop. (* Gives y x : y gives existence to x *) Variable Through : Thing -> Thing -> Prop. (* Through x y : x has its existence through y *) Variable Exists : Thing -> Prop. (* x exists *) Variable Ess : Thing -> Prop. (* x's existence is from its own nature *) Variable PartOf : Thing -> Thing -> Prop. (* p is a part of u *) Variable Universe : Thing. (* the universe *) (* Definitions. *) Definition DependsOn (x y : Thing) : Prop := Gives y x. (* x depends on y *) Definition ThroughAnother (x : Thing) : Prop := exists y, Gives y x. Definition OfItself (x : Thing) : Prop := Exists x /\ ~ ThroughAnother x. Definition Necessary (x : Thing) : Prop := Exists x /\ Ess x. Definition Possible (x : Thing) : Prop := Exists x /\ ~ Ess x. Definition InUniverse (x : Thing) : Prop := x = Universe \/ PartOf x Universe. (* Approved postulates, written as definitions: a theorem uses one only when its statement lists it as a condition. *) Definition MP001 : Prop := forall x y, Gives y x -> ~ Through y x. (* a giver does not have its existence through what it gives existence to *) Definition MP002 : Prop := forall x y, Gives y x -> Through x y. (* the receiver has its existence through the giver *) Definition MP003 : Prop := forall x y z, Through x y -> Through y z -> Through x z. (* existence-through is inherited *) Definition MP008 : Prop := forall x, Exists x -> ~ ThroughAnother x -> Ess x. (* existence comes from one's nature or from a giver *) Definition OP001 : Prop := forall x y, Gives y x -> OfItself y. (* only what exists of itself gives existence *) Definition OP006 : Prop := exists x, InUniverse x /\ Possible x. (* the universe is not wholly necessary *) Definition SP001 : Prop := exists x, Exists x. (* something exists *) (* Added for the full test: aggregates, possible worlds, and their postulates. *) Variable MemberOf : Thing -> Thing -> Prop. (* p is a member of the aggregate a *) Variable World : Type. Variable ExistsIn : World -> Thing -> Prop. (* x exists in world w *) Definition Independent (x : Thing) : Prop := forall y, ~ DependsOn x y. Definition NonExistencePossible (x : Thing) : Prop := exists w, ~ ExistsIn w x. Definition AggregateOfPossibles (A : Thing) : Prop := (forall p, p <> A -> (MemberOf p A <-> Possible p)) /\ ~ MemberOf A A. Definition MP007 : Prop := forall x, Ess x -> forall w, ExistsIn w x. (* existence from one's nature cannot fail *) Definition MP009 : Prop := (exists p, Possible p) -> exists A, AggregateOfPossibles A /\ Exists A. (* the aggregate of possibles exists *) Definition MP010 : Prop := forall A, (exists p, MemberOf p A) -> (forall p, MemberOf p A -> ~ Ess p) -> ~ Ess A. (* possibles do not add up to a necessary *) Definition MP011 : Prop := forall c A p, Gives c A -> MemberOf p A -> clos_trans Thing Gives c p. (* giving to a whole gives to its members *) Definition MP012 : Prop := forall y x, Gives y x -> Exists y. (* a giver exists *) Lemma imkan_s8_no_internal_cause_L7 : MP001 -> MP002 -> forall x, ~ Gives x x. Proof. intros; firstorder. Qed. Lemma imkan_s8_no_internal_cause_L12 : MP001 -> MP002 -> MP003 -> MP011 -> forall A c, MemberOf c A -> ~ Gives c A. Proof. intros H1 H2 H3 H11 A c Hm Hg. assert (K: forall a b, clos_trans Thing Gives a b -> exists m, (a=m \/ clos_trans Thing Gives a m) /\ Gives m b). { intros a b H. induction H as [a b Hab | a y b Hay IH1 Hyb IH2]. - exists a. split; [left; reflexivity | exact Hab]. - destruct IH2 as [m [[E|Hm'] Hg']]. + exists m. split; [right; rewrite <- E; exact Hay | exact Hg']. + exists m. split; [right; eapply t_trans; eauto | exact Hg']. } assert (T: forall a b, clos_trans Thing Gives a b -> Through b a). { intros a b H. induction H as [a b Hab | a y b Hay IH1 Hyb IH2]. - apply H2; exact Hab. - eapply H3; eauto. } assert (Hc := H11 c A c Hg Hm). destruct (K c c Hc) as [m [[E|Hm'] Hg']]. - rewrite <- E in Hg'. exact (imkan_s8_no_internal_cause_L7 H1 H2 c Hg'). - apply (H1 c m Hg'). apply T. exact Hm'. Qed. Lemma imkan_s8_no_internal_cause_L17 : MP010 -> forall A, AggregateOfPossibles A -> forall B, B <> A -> Exists B -> (exists p, MemberOf p B) -> (forall p, MemberOf p B -> MemberOf p A) -> MemberOf B A. Proof. intros H10 A [HA HnA] B HBA HEB Hex Hsub. apply (proj2 (HA B HBA)). split. - exact HEB. - apply H10. + exact Hex. + intros p Hp. assert (H1 : MemberOf p A) by (apply Hsub; exact Hp). assert (H2 : p <> A) by (intro e; subst; exact (HnA H1)). apply (proj1 (HA p H2)) in H1. destruct H1 as [_ H3]; exact H3. Qed. Lemma imkan_s8_no_internal_cause_L6 : MP001 -> MP002 -> MP003 -> MP010 -> MP011 -> forall A, AggregateOfPossibles A -> (forall x, ~ Gives x x) /\ ~ Gives A A /\ (forall c, MemberOf c A -> ~ Gives c A) /\ (forall B, B <> A -> Exists B -> (exists p, MemberOf p B) -> (forall p, MemberOf p B -> MemberOf p A) -> ~ Gives B A). Proof. intros H1 H2 H3 H10 H11 A HA. refine (conj (imkan_s8_no_internal_cause_L7 H1 H2) (conj _ (conj _ _))). - intro h. exact (imkan_s8_no_internal_cause_L7 H1 H2 A h). - intros c hc. exact (imkan_s8_no_internal_cause_L12 H1 H2 H3 H11 A c hc). - intros B hne hex hm hs hg. exact (imkan_s8_no_internal_cause_L12 H1 H2 H3 H11 A B (imkan_s8_no_internal_cause_L17 H10 A HA B hne hex hm hs) hg). Qed. End Pilot. Print Assumptions imkan_s8_no_internal_cause_L6.