theory TNEMO imports FOL begin typedecl Ob typedecl Ti arities Ob :: "term" Ti :: "term" (* temporal non-extensional mereology of objects *) consts O :: "Ob => Ob => Ti => o" P :: "Ob => Ob => Ti => o" PP :: "Ob => Ob => Ti => o" E :: "Ob => Ti => o" Me :: "Ob => Ob => Ti => o" pP :: "Ob => Ob => o" pPP :: "Ob => Ob => o" pO :: "Ob => Ob => o" pMe :: "Ob => Ob => o" cP :: "Ob => Ob => o" bP :: "Ob => Ob => o" axioms P_exists1: "(ALL x. (EX t. E(x,t)))" P_exists2: "(ALL x y t. (P(x,y,t) -->(E(x,t) & E(y,t))))" P_trans: "(ALL x y z t. (P(x,y,t) & P(y,z,t) --> P(x,z,t)))" P_ssuppl: "(ALL x y t. ((E(x,t) & ~P(x,y,t)) --> (EX z. (P(z,x,t) & ~O(z,y,t)))))" defs E_def: "E(x,t) == P(x,x,t)" O_def: "O(x,y,t) == (EX z. (P(z,x,t) & P(z,y,t)))" PP_def: "PP(x,y,t) == P(x,y,t) & ~P(y,x,t)" Me_def: "Me(x,y,t) == (P(x,y,t) & P(y,x,t))" pP_def: "pP(x,y) == (ALL t. ((E(x,t) | E(y,t)) --> P(x,y,t)))" pPP_def: "pPP(x,y) == (ALL t. ((E(x,t) | E(y,t)) --> PP(x,y,t)))" pO_def: "pO(x,y) == (ALL t. ((E(x,t) | E(y,t)) --> O(x,y,t)))" pMe_def: "pMe(x,y) == (ALL t. ((E(x,t) | E(y,t)) --> Me(x,y,t)))" cP_def: "cP(x,y) == (ALL t. (E(y,t) --> P(x,y,t)))" bP_def: "bP(x,y) == (ALL t. (E(x,t) --> P(x,y,t)))" (* axioms as rules *) lemma P_exists2_rule: "P(x,y,t) ==>(E(x,t) & E(y,t))" apply(insert P_exists2) apply(auto) done lemma P_trans_rule: "[|P(x,y,t); P(y,z,t)|] ==> P(x,z,t)" apply(insert P_trans) apply(erule allE,erule allE,erule allE,erule allE) apply(rule mp) apply(assumption) apply(rule conjI) apply(assumption) apply(assumption) done lemma P_Me_rule: "[|P(x,y,t);P(y,x,t)|] ==> Me(x,y,t)" apply(drule conjI) apply(assumption) apply(fold Me_def) apply(assumption) done lemma P_ssuppl_rule: "[|E(x,t);~P(x,y,t)|] ==> (EX z. (P(z,x,t) & ~O(z,y,t)))" apply(insert P_ssuppl) apply(auto) done lemma ltb2: "(~(A & ~B) ==> (~A | B))" apply(auto) done lemma P_ssuppl_rule_transpos: "~(EX z. (P(z,x,t) & ~O(z,y,t))) ==> (~E(x,t) | P(x,y,t))" apply(insert P_ssuppl) apply(rule ltb2) apply(rule notI) apply(auto) done (* theorems of non-extensional temporal mereology *) theorem P_refl: "E(x,t) ==> P(x,x,t)" apply(unfold E_def) apply(assumption) done theorem Me_refl: "E(x,t) ==> Me(x,x,t)" apply(unfold Me_def) apply(unfold E_def) apply(auto) done theorem Me_exists2: "Me(x,y,t) ==> (E(x,t) & E(y,t))" apply(unfold Me_def) apply(rule conjI) apply(erule conjE) apply(drule P_exists2_rule) apply(auto) apply(drule P_exists2_rule) apply(auto) done theorem Me_sym: "Me(x,y,t) ==> Me(y,x,t)" apply(unfold Me_def) apply(auto) done theorem Me_trans: "[|Me(x,y,t); Me(y,z,t)|] ==> Me(x,z,t)" apply(unfold Me_def) apply(rule conjI) apply(erule conjE,erule conjE) apply(erule P_trans_rule) apply(assumption) apply(erule conjE,erule conjE) apply(erule P_trans_rule) apply(assumption) done theorem O_refl: "(ALL x t. E(x,t) --> O(x,x,t))" apply(rule allI,rule allI) apply(unfold E_def) apply(unfold O_def) apply(auto) done lemma O_refl_rule: "E(x,t) ==> O(x,x,t)" apply(insert O_refl) apply(auto) done theorem O_sym: "(ALL x y t. (O(x,y,t) --> O(y,x,t)))" apply(unfold O_def) apply(auto) done lemma O_sym_rule: "O(x,y,t) ==> O(y,x,t)" apply(insert O_sym) apply(auto) done theorem O_imp_E_and_E: "O(x,y,t) ==> (E(x,t) & E(y,t))" apply(rule conjI) apply(unfold O_def) apply(erule exE) apply(erule conjE) apply(drule P_exists2_rule) apply(auto) apply(rotate_tac 1) apply(drule P_exists2_rule) apply(auto) done theorem PP_imp_P: "(ALL x y t. (PP(x,y,t) --> P(x,y,t)))" apply(unfold PP_def) apply(auto) done lemma PP_imp_P_rule: "PP(x,y,t) ==> P(x,y,t)" apply(unfold PP_def) apply(auto) done theorem P_imp_Me_or_PP: "P(x,y,t) ==> (Me(x,y,t) | PP(x,y,t))" apply(unfold PP_def,unfold Me_def) apply(auto) done theorem PP_or_Me_imp_P: "(PP(x,y,t) | Me(x,y,t)) ==> P(x,y,t)" apply(unfold Me_def) apply(safe) apply(drule PP_imp_P_rule) apply(assumption) done theorem PP_asym: "(ALL x y t. PP(x,y,t) --> ~PP(y,x,t))" apply(unfold PP_def) apply(auto) done lemma PP_asym_rule: "PP(x,y,t) ==> ~PP(y,x,t)" apply(insert PP_asym) apply(auto) done theorem PP_trans: "(ALL x y z t. (PP(x,y,t) & PP(y,z,t)-->PP(x,z,t)))" apply(rule allI, rule allI, rule allI,rule allI) apply(rule impI) apply(unfold PP_def) apply(rule conjI) apply(erule conjE,erule conjE,erule conjE) apply(rule P_trans_rule) apply(assumption) apply(assumption) apply(erule conjE, erule conjE, erule conjE) apply(drule P_trans_rule) apply(assumption) apply(rule notI) apply(drule P_trans_rule) apply(assumption) apply(erule notE) apply(assumption) done lemma PP_trans_rule: assumes p1: "PP(x,y,t)" assumes p2: "PP(y,z,t)" shows "PP(x,z,t)" apply(insert PP_trans) apply(erule allE, erule allE,erule allE,erule allE) apply(rule mp) apply(assumption) apply(rule conjI) apply(insert p1) apply(assumption) apply(insert p2) apply(assumption) done theorem P_and_PP_imp_PP: "[|P(x,y,t);PP(y,z,t)|] ==> PP(x,z,t)" apply(drule P_imp_Me_or_PP) apply(safe) apply(unfold Me_def) apply(clarify) prefer 2 apply(drule PP_trans_rule [of x y t z]) apply(assumption) apply(assumption) apply(unfold PP_def) apply(safe) apply(drule P_trans_rule [of x y t z]) apply(assumption) apply(assumption) apply(drule P_trans_rule [of z x t y]) apply(auto) done theorem PP_and_P_imp_PP: "[|PP(x,y,t);P(y,z,t)|] ==> PP(x,z,t)" apply(drule P_imp_Me_or_PP) apply(safe) apply(unfold Me_def) apply(clarify) prefer 2 apply(drule PP_trans_rule [of x y t z]) apply(assumption) apply(assumption) apply(unfold PP_def) apply(safe) apply(drule P_trans_rule [of x y t z]) apply(assumption) apply(assumption) apply(drule P_trans_rule [of y z t x]) apply(auto) done (* from now on we only use the rule notation wherever possible *) theorem P_and_notMe_imp_PP: "[|P(x,y,t);~Me(x,y,t)|] ==> PP(x,y,t)" apply(unfold Me_def,unfold PP_def) apply(auto) done theorem P_imp_O: "P(x,y,t) ==> O(x,y,t)" apply(unfold O_def) apply(rule exI) apply(rule conjI) apply(drule P_exists2_rule) apply(erule conjE) apply(unfold E_def) apply(assumption) apply(assumption) done theorem P_and_O: "[|P(x,y,t);O(x,z,t)|] ==> O(y,z,t)" apply(unfold O_def) apply(erule exE) apply(rule exI) apply(rule conjI) apply(erule conjE) prefer 2 apply(erule conjE) apply(assumption) apply(rule P_trans_rule) apply(assumption) apply(assumption) done theorem O_imp_O_imp_P: "(ALL x y t. (E(x,t) & (ALL z. (O(z,x,t) --> O(z,y,t))) --> P(x,y,t)))" apply(rule allI,rule allI,rule allI) apply(rule impI) apply(erule conjE) apply(rule_tac P="~E(x,t)" and Q="P(x,y,t)" in disjE) apply(rule P_ssuppl_rule_transpos) apply(rule notI) apply(erule exE) apply(erule allE) apply(erule conjE) apply(drule P_imp_O) apply(drule mp) apply(assumption) apply(erule notE) apply(assumption) apply(erule_tac R="P(x,y,t)" in notE) apply(assumption) apply(assumption) done lemma O_imp_O_imp_P_rule: "[|E(x,t);(ALL z. (O(z,x,t) --> O(z,y,t)))|] ==> P(x,y,t)" apply(insert O_imp_O_imp_P) apply(auto) done lemma ltb1: "(ALL z. (A(z,x,t) & B(z,y,t))) ==> (ALL z. A(z,x,t)) & (ALL z. B(z,y,t))" apply(auto) done theorem O_iff_O_iff_Me : "(ALL x y t. ((E(x,t) & E(y,t) & (ALL z. (O(z,x,t) <-> O(z,y,t)))) <-> Me(x,y,t)))" apply(rule allI,rule allI,rule allI) apply(unfold iff_def) apply(rule conjI) apply(rule impI) apply(unfold Me_def) apply(erule conjE,erule conjE) apply(drule ltb1) apply(erule conjE) apply(rule conjI) apply(drule O_imp_O_imp_P_rule) prefer 2 apply(assumption) apply(assumption) apply(drule_tac x="y" and y="x" in O_imp_O_imp_P_rule) prefer 2 apply(assumption) apply(assumption) apply(auto) apply(drule P_exists2_rule) apply(erule conjE) apply(assumption) apply(drule P_exists2_rule) apply(erule conjE) apply(assumption) apply(drule P_and_O) apply(drule O_sym_rule) apply(assumption) apply(rule O_sym_rule) apply(assumption) apply(drule_tac x="y" and y="x" in P_and_O) apply(drule O_sym_rule) apply(assumption) apply(rule O_sym_rule) apply(assumption) done theorem P_iff_P_iff_Me: "(ALL x y t. ((E(x,t) & E(y,t) & (ALL z. (P(z,x,t) <-> P(z,y,t)))) <-> Me(x,y,t)))" apply(rule allI,rule allI,rule allI) apply(rule iffI) apply(erule conjE,erule conjE) apply(unfold Me_def) apply(unfold E_def) apply(rule conjI) apply(erule_tac x="x" in allE) apply(erule iffE) apply(drule_tac P="P(x, x, t)" and Q="P(x, y, t)" in mp) apply(assumption) apply(assumption) apply(erule_tac x="y" in allE) apply(erule iffE) apply(drule_tac P="P(y, y, t)" and Q="P(y, x, t)" in mp) apply(assumption) apply(assumption) apply(rule conjI) apply(fold E_def) apply(fold Me_def) apply(drule Me_exists2) apply(erule conjE) apply(assumption) apply(rule conjI) apply(drule Me_exists2) apply(erule conjE) apply(assumption) apply(rule allI) apply(rule iffI) apply(unfold Me_def) apply(erule conjE) apply(drule_tac x="z" and y="x" and z="y" in P_trans_rule) apply(assumption) apply(assumption) apply(erule conjE) apply(drule_tac x="z" and y="y" and z="x" in P_trans_rule) apply(auto) done theorem pP_refl: "ALL x. pP(x,x)" apply(unfold pP_def) apply(unfold E_def) apply(auto) done theorem pP_trans: "[|pP(x,y);pP(y,z)|] ==> pP(x,z)" apply(unfold pP_def) apply(auto) apply(erule_tac x="t" in allE) apply(erule_tac x="t" in allE) apply(drule_tac P="E(x,t)" and Q="E(y,t)" in disjI1) apply(clarify) apply(frule P_exists2_rule) apply(auto) apply(rule_tac x="x" and y="y" and z="z" and t="t" in P_trans_rule) apply(assumption, assumption) apply(erule_tac x="t" in allE) apply(erule_tac x="t" in allE) apply(drule_tac P="E(y,t)" and Q="E(z,t)" in disjI2) apply(clarify) apply(frule P_exists2_rule) apply(auto) apply(rule_tac x="x" and y="y" and z="z" and t="t" in P_trans_rule) apply(assumption, assumption) done theorem pPP_asym: "pPP(x,y) ==> ~pPP(y,x)" apply(unfold pPP_def) apply(clarify) apply(insert P_exists1) apply(erule_tac x="x" in allE) apply(erule exE) apply(erule_tac x="t" in allE) apply(erule_tac x="t" in allE) apply(drule_tac P="E(x,t)" and Q="E(y,t)" in disjI1) apply(clarify) apply(frule PP_imp_P_rule) apply(drule P_exists2_rule) apply(drule PP_asym_rule) apply(auto) done theorem pPP_trans: "[|pPP(x,y);pPP(y,z)|] ==> pPP(x,z)" apply(unfold pPP_def) apply(safe) apply(rule_tac x="x" and y="y" and t="t" in PP_trans_rule) apply(auto) apply(erule_tac x="t" in allE) apply(erule_tac x="t" in allE) apply(drule_tac P="E(x,t)" and Q="E(y,t)" in disjI1) apply(drule mp, assumption) apply(frule PP_imp_P_rule) apply(drule P_exists2_rule) apply(auto) apply(erule_tac x="t" in allE) apply(erule_tac x="t" in allE) apply(drule_tac P="E(y,t)" and Q="E(z,t)" in disjI2) apply(drule mp, assumption) apply(frule PP_imp_P_rule) apply(drule P_exists2_rule) apply(auto) apply(rule_tac x="x" and y="y" and t="t" in PP_trans_rule) apply(auto) done theorem pPP_imp_pP_and_notpP: "pPP(x,y) ==> (pP(x,y) & ~pP(y,x))" apply(unfold pPP_def,unfold pP_def) apply(unfold PP_def) apply(rule conjI) apply(safe) apply(erule_tac x="t" in allE) apply(force) apply(erule_tac x="t" in allE) apply(force) apply(insert P_exists1) apply(erule_tac x="x" in allE) apply(erule exE) apply(erule_tac x="t" in allE) apply(erule_tac x="t" in allE) apply(auto) done (* theorem pP_and_notpP_imp_pPP: "[|pP(x,y);~pP(y,x)|] ==> pPP(x,y)" apply(unfold pP_def,unfold pPP_def) apply(clarify) apply(erule_tac x="ta" in allE) apply(safe) apply(unfold PP_def) apply(safe) at this point it is clear that this is not provable *) theorem pO_refl: "(ALL x. pO(x,x))" apply(unfold pO_def) apply(insert O_refl) apply(auto) done theorem pO_sym: "pO(x,y) ==> pO(y,x)" apply(unfold pO_def) apply(insert O_sym) apply(auto) done (* theorem pO_shared_pP: "[|pO(x,y)|] ==> (EX z. (pP(z,x) & pP(z,y)))" apply(unfold pO_def,unfold pP_def,unfold O_def) apply(erule_tac x="t" in allE) apply(insert excluded_middle [of "(E(x, t) | E(y, t))"]) apply(erule disjE) prefer 2 apply(auto) apply(rule_tac x="z" in exI) apply(auto) at this point it is clear that we cannot prove this *) theorem SharedpP_imp_pO: "(EX z. (pP(z,x) & pP(z,y))) ==> pO(x,y)" apply(unfold pP_def,unfold pO_def) apply(safe) apply(erule_tac x="t" in allE) apply(erule_tac x="t" in allE) apply(drule_tac P="E(z,t)" and Q="E(x,t)" in disjI2) apply(clarify) apply(unfold O_def) apply(rule_tac x="z" in exI) apply(frule_tac x="z" and y="x" and t="t" in P_exists2_rule) apply(safe) apply(rule_tac x="z" in exI) apply(erule_tac x="t" in allE) apply(erule_tac x="t" in allE) apply(drule_tac P="E(z,t)" and Q="E(y,t)" in disjI2) apply(clarify) apply(drule_tac x="z" and y="y" and t="t" in P_exists2_rule) apply(auto) done theorem cP_refl: "(ALL x. (cP(x,x)))" apply(unfold cP_def) apply(insert P_exists1) apply(unfold E_def) apply(auto) done theorem cP_trans: "[|cP(x,y);cP(y,z)|] ==> cP(x,z)" apply(unfold cP_def) apply(safe) apply(erule_tac x="t" in allE) apply(erule_tac x="t" in allE) apply(safe) apply(drule P_exists2_rule) apply(safe) apply(drule_tac x="x" and y="y" and z="z" and t="t" in P_trans_rule) apply(auto) done theorem bP_refl: "(ALL x. (bP(x,x)))" apply(unfold bP_def) apply(insert P_exists1) apply(unfold E_def) apply(auto) done theorem bP_trans: "[|bP(x,y);bP(y,z)|] ==> bP(x,z)" apply(unfold bP_def) apply(safe) apply(erule_tac x="t" in allE) apply(erule_tac x="t" in allE) apply(safe) apply(drule P_exists2_rule) apply(safe) apply(drule_tac x="x" and y="y" and z="z" and t="t" in P_trans_rule) apply(auto) done theorem pP_imp_cP_and_bP: "pP(x,y) ==> (cP(x,y) & bP(x,y))" apply(unfold pP_def,unfold cP_def,unfold bP_def) apply(safe) apply(erule_tac x="t" in allE) apply(auto) done theorem cP_and_bP_imp_pP: "[|cP(x,y);bP(x,y)|] ==> pP(x,y)" apply(unfold pP_def,unfold cP_def,unfold bP_def) apply(safe) apply(erule_tac x="t" in allE) apply(erule_tac x="t" in allE) apply(auto) done end
lemma P_exists2_rule:
P(x, y, t) ==> E(x, t) ∧ E(y, t)
lemma P_trans_rule:
[| P(x, y, t); P(y, z, t) |] ==> P(x, z, t)
lemma P_Me_rule:
[| P(x, y, t); P(y, x, t) |] ==> Me(x, y, t)
lemma P_ssuppl_rule:
[| E(x, t); ¬ P(x, y, t) |] ==> ∃z. P(z, x, t) ∧ ¬ O(z, y, t)
lemma ltb2:
¬ (A ∧ ¬ B) ==> ¬ A ∨ B
lemma P_ssuppl_rule_transpos:
¬ (∃z. P(z, x, t) ∧ ¬ O(z, y, t)) ==> ¬ E(x, t) ∨ P(x, y, t)
theorem P_refl:
E(x, t) ==> P(x, x, t)
theorem Me_refl:
E(x, t) ==> Me(x, x, t)
theorem Me_exists2:
Me(x, y, t) ==> E(x, t) ∧ E(y, t)
theorem Me_sym:
Me(x, y, t) ==> Me(y, x, t)
theorem Me_trans:
[| Me(x, y, t); Me(y, z, t) |] ==> Me(x, z, t)
theorem O_refl:
∀x t. E(x, t) --> O(x, x, t)
lemma O_refl_rule:
E(x, t) ==> O(x, x, t)
theorem O_sym:
∀x y t. O(x, y, t) --> O(y, x, t)
lemma O_sym_rule:
O(x, y, t) ==> O(y, x, t)
theorem O_imp_E_and_E:
O(x, y, t) ==> E(x, t) ∧ E(y, t)
theorem PP_imp_P:
∀x y t. PP(x, y, t) --> P(x, y, t)
lemma PP_imp_P_rule:
PP(x, y, t) ==> P(x, y, t)
theorem P_imp_Me_or_PP:
P(x, y, t) ==> Me(x, y, t) ∨ PP(x, y, t)
theorem PP_or_Me_imp_P:
PP(x, y, t) ∨ Me(x, y, t) ==> P(x, y, t)
theorem PP_asym:
∀x y t. PP(x, y, t) --> ¬ PP(y, x, t)
lemma PP_asym_rule:
PP(x, y, t) ==> ¬ PP(y, x, t)
theorem PP_trans:
∀x y z t. PP(x, y, t) ∧ PP(y, z, t) --> PP(x, z, t)
lemma PP_trans_rule:
[| PP(x, y, t); PP(y, z, t) |] ==> PP(x, z, t)
theorem P_and_PP_imp_PP:
[| P(x, y, t); PP(y, z, t) |] ==> PP(x, z, t)
theorem PP_and_P_imp_PP:
[| PP(x, y, t); P(y, z, t) |] ==> PP(x, z, t)
theorem P_and_notMe_imp_PP:
[| P(x, y, t); ¬ Me(x, y, t) |] ==> PP(x, y, t)
theorem P_imp_O:
P(x, y, t) ==> O(x, y, t)
theorem P_and_O:
[| P(x, y, t); O(x, z, t) |] ==> O(y, z, t)
theorem O_imp_O_imp_P:
∀x y t. E(x, t) ∧ (∀z. O(z, x, t) --> O(z, y, t)) --> P(x, y, t)
lemma O_imp_O_imp_P_rule:
[| E(x, t); ∀z. O(z, x, t) --> O(z, y, t) |] ==> P(x, y, t)
lemma ltb1:
∀z. A(z, x, t) ∧ B(z, y, t) ==> (∀z. A(z, x, t)) ∧ (∀z. B(z, y, t))
theorem O_iff_O_iff_Me:
∀x y t. E(x, t) ∧ E(y, t) ∧ (∀z. O(z, x, t) <-> O(z, y, t)) <-> Me(x, y, t)
theorem P_iff_P_iff_Me:
∀x y t. E(x, t) ∧ E(y, t) ∧ (∀z. P(z, x, t) <-> P(z, y, t)) <-> Me(x, y, t)
theorem pP_refl:
∀x. pP(x, x)
theorem pP_trans:
[| pP(x, y); pP(y, z) |] ==> pP(x, z)
theorem pPP_asym:
pPP(x, y) ==> ¬ pPP(y, x)
theorem pPP_trans:
[| pPP(x, y); pPP(y, z) |] ==> pPP(x, z)
theorem pPP_imp_pP_and_notpP:
pPP(x, y) ==> pP(x, y) ∧ ¬ pP(y, x)
theorem pO_refl:
∀x. pO(x, x)
theorem pO_sym:
pO(x, y) ==> pO(y, x)
theorem SharedpP_imp_pO:
∃z. pP(z, x) ∧ pP(z, y) ==> pO(x, y)
theorem cP_refl:
∀x. cP(x, x)
theorem cP_trans:
[| cP(x, y); cP(y, z) |] ==> cP(x, z)
theorem bP_refl:
∀x. bP(x, x)
theorem bP_trans:
[| bP(x, y); bP(y, z) |] ==> bP(x, z)
theorem pP_imp_cP_and_bP:
pP(x, y) ==> cP(x, y) ∧ bP(x, y)
theorem cP_and_bP_imp_pP:
[| cP(x, y); bP(x, y) |] ==> pP(x, y)