|
|
|
|
Quelle TAO_7_Axioms.thy
Sprache: Isabelle
|
|
(*<*)
theory TAO_7_Axioms
imports TAO_6_Identifiable
begin
(*>*)
section‹The Axioms of PLM›
text‹\label{TAO_Axioms}›
text‹
begin{remark}
The axioms of PLM can now be derived from the Semantics
and the model structure.
end{remark}
›
(* TODO: why is this needed again here? The syntax should already
have been disabled in TAO_Semantics. *)
(* disable list syntax [] to replace it with truth evaluation *)
(*<*) unbundle no list_enumeration_syntax and no list_comprehension_syntax(*>*)
locale Axioms
begin
interpretation MetaSolver .
interpretation Semantics .
named_theorems axiom
text‹
begin{remark}
The special syntax ‹[[_]]› is introduced for stating the axioms.
Modally-fragile axioms are stated with the syntax for actual validity ‹[_]›.
end{remark}
›
definition axiom :: "o→bool" (‹[[_]]›) where "axiom ≡ λ φ . ∀ v . [φ in v]"
method axiom_meta_solver = ((((unfold axiom_def)?, rule allI) | (unfold actual_validity_def)?), meta_solver,
(simp | (auto; fail))?)
subsection‹Closures›
text‹\label{TAO_Axioms_Closures}›
text‹
begin{remark}
Rules resembling the concepts of closures in PLM are derived. Theorem attributes are introduced
to aid in the instantiation of the axioms.
end{remark}
›
lemma axiom_instance[axiom]: "[[φ]] ==> [φ in v]"
unfolding axiom_def by simp
lemma closures_universal[axiom]: "(∧x.[[φ x]]) ==> [[\<forall> x. φ x]]"
by axiom_meta_solver
lemma closures_actualization[axiom]: "[[φ]] ==> [[\<A> φ]]"
by axiom_meta_solver
lemma closures_necessitation[axiom]: "[[φ]] ==> [[\<box> φ]]"
by axiom_meta_solver
lemma necessitation_averse_axiom_instance[axiom]: "[φ] ==> [φ in dw]"
by axiom_meta_solver
lemma necessitation_averse_closures_universal[axiom]: "(∧x.[φ x]) ==> [\<forall> x. φ x]"
by axiom_meta_solver
attribute_setup axiom_instance = ‹
Scan.succeed (Thm.rule_attribute []
(fn _ => fn thm => thm RS @{thm axiom_instance}))
›
attribute_setup necessitation_averse_axiom_instance = ‹
Scan.succeed (Thm.rule_attribute []
(fn _ => fn thm => thm RS @{thm necessitation_averse_axiom_instance}))
›
attribute_setup axiom_necessitation = ‹
Scan.succeed (Thm.rule_attribute []
(fn _ => fn thm => thm RS @{thm closures_necessitation}))
›
attribute_setup axiom_actualization = ‹
Scan.succeed (Thm.rule_attribute []
(fn _ => fn thm => thm RS @{thm closures_actualization}))
›
attribute_setup axiom_universal = ‹
Scan.succeed (Thm.rule_attribute []
(fn _ => fn thm => thm RS @{thm closures_universal}))
›
subsection‹Axioms for Negations and Conditionals›
text‹\label{TAO_Axioms_NegationsAndConditionals}›
lemma pl_1[axiom]:
"[[φ \<rightarrow> (ψ \<rightarrow> φ)]]"
by axiom_meta_solver
lemma pl_2[axiom]:
"[[(φ \<rightarrow> (ψ \<rightarrow> χ)) \<rightarrow> ((φ \<rightarrow> ψ) \<rightarrow> (φ \<rightarrow> χ))]]"
by axiom_meta_solver
lemma pl_3[axiom]:
"[[(\<not>φ \<rightarrow> \<not>ψ) \<rightarrow> ((\<not>φ \<rightarrow> ψ) \<rightarrow> φ)]]"
by axiom_meta_solver
subsection‹Axioms of Identity›
text‹\label{TAO_Axioms_Identity}›
lemma l_identity[axiom]:
"[[α = β \<rightarrow> (φ α \<rightarrow> φ β)]]"
using l_identity apply - by axiom_meta_solver
subsection‹Axioms of Quantification›
text‹\label{TAO_Axioms_Quantification}›
lemma cqt_1[axiom]:
"[[(\<forall> α. φ α) \<rightarrow> φ α]]"
by axiom_meta_solver
lemma cqt_1_κ[axiom]:
"[[(\<forall> α. φ (αP)) \<rightarrow> ((\<exists> β . (βP) = α) \<rightarrow> φ α)]]"
proof -
{
fix v
assume 1: "[(\<forall> α. φ (αP)) in v]"
assume "[(\<exists> β . (βP) = α) in v]"
then obtain β where 2:
"[(βP) = α in v]" by (rule ExERule)
hence "[φ (βP) in v]" using 1 AllE by fast
hence "[φ α in v]"
using l_identity[where φ=φ, axiom_instance]
ImplS 2 by simp
}
thus "[[(\<forall> α. φ (αP)) \<rightarrow> ((\<exists> β . (βP) = α) \<rightarrow> φ α)]]"
unfolding axiom_def using ImplI by blast
qed
lemma cqt_3[axiom]:
"[[(\<forall>α. φ α \<rightarrow> ψ α) \<rightarrow> ((\<forall>α. φ α) \<rightarrow> (\<forall>α. ψ α))]]"
by axiom_meta_solver
lemma cqt_4[axiom]:
"[[φ \<rightarrow> (\<forall>α. φ)]]"
by axiom_meta_solver
inductive SimpleExOrEnc
where "SimpleExOrEnc (λ x . (F,x))"
| "SimpleExOrEnc (λ x . (F,x,y))"
| "SimpleExOrEnc (λ x . (F,y,x))"
| "SimpleExOrEnc (λ x . (F,x,y,z))"
| "SimpleExOrEnc (λ x . (F,y,x,z))"
| "SimpleExOrEnc (λ x . (F,y,z,x))"
| "SimpleExOrEnc (λ x . {x,F})"
lemma cqt_5[axiom]:
assumes "SimpleExOrEnc ψ"
shows "[[(ψ (\<iota>x . φ x)) \<rightarrow> (\<exists> α. (αP) = (\<iota>x . φ x))]]"
proof -
have "∀ w . ([(ψ (\<iota>x . φ x)) in w] ⟶ (∃ o1 . Some o1 = d\<kappa> (\<iota>x . φ x)))"
using assms apply induct by (meta_solver;metis)+
thus ?thesis
apply - unfolding identity_κ_def
apply axiom_meta_solver
using d\κ_proper by auto
qed
lemma cqt_5_mod[axiom]:
assumes "SimpleExOrEnc ψ"
shows "[[ψ τ \<rightarrow> (\<exists> α . (αP) = τ)]]"
proof -
have "∀ w . ([(ψ τ) in w] ⟶ (∃ o1 . Some o1 = d\<kappa> τ))"
using assms apply induct by (meta_solver;metis)+
thus ?thesis
apply - unfolding identity_κ_def
apply axiom_meta_solver
using d\κ_proper by auto
qed
subsection‹Axioms of Actuality›
text‹\label{TAO_Axioms_Actuality}›
lemma logic_actual[axiom]: "[(\<A>φ) \<equiv> φ]"
by axiom_meta_solver
lemma "[[(\<A>φ) \<equiv> φ]]"
nitpick[user_axioms, expect = genuine, card = 1, card i = 2]
oops ― ‹Counter-model by nitpick›
lemma logic_actual_nec_1[axiom]:
"[[\<A>\<not>φ \<equiv> \<not>\<A>φ]]"
by axiom_meta_solver
lemma logic_actual_nec_2[axiom]:
"[[(\<A>(φ \<rightarrow> ψ)) \<equiv> (\<A>φ \<rightarrow> \<A>ψ)]]"
by axiom_meta_solver
lemma logic_actual_nec_3[axiom]:
"[[\<A>(\<forall>α. φ α) \<equiv> (\<forall>α. \<A>(φ α))]]"
by axiom_meta_solver
lemma logic_actual_nec_4[axiom]:
"[[\<A>φ \<equiv> \<A>\<A>φ]]"
by axiom_meta_solver
subsection‹Axioms of Necessity›
text‹\label{TAO_Axioms_Necessity}›
lemma qml_1[axiom]:
"[[\<box>(φ \<rightarrow> ψ) \<rightarrow> (\<box>φ \<rightarrow> \<box>ψ)]]"
by axiom_meta_solver
lemma qml_2[axiom]:
"[[\<box>φ \<rightarrow> φ]]"
by axiom_meta_solver
lemma qml_3[axiom]:
"[[\<diamond>φ \<rightarrow> \<box>\<diamond>φ]]"
by axiom_meta_solver
lemma qml_4[axiom]:
"[[\<diamond>(\<exists>x. (E!,xP) & \<diamond>\<not>(E!,xP)) & \<diamond>\<not>(\<exists>x. (E!,xP) & \<diamond>\<not>(E!,xP))]]"
unfolding axiom_def
using PossiblyContingentObjectExistsAxiom
PossiblyNoContingentObjectExistsAxiom
apply (simp add: meta_defs meta_aux conn_defs forall_ν_def
split: ν.split υ.split)
by (metis νυ_ψν_is_ψυ υ.distinct(1) υ.inject(1))
subsection‹Axioms of Necessity and Actuality›
text‹\label{TAO_Axioms_NecessityAndActuality}›
lemma qml_act_1[axiom]:
"[[\<A>φ \<rightarrow> \<box>\<A>φ]]"
by axiom_meta_solver
lemma qml_act_2[axiom]:
"[[\<box>φ \<equiv> \<A>(\<box>φ)]]"
by axiom_meta_solver
subsection‹Axioms of Descriptions›
text‹\label{TAO_Axioms_Descriptions}›
lemma descriptions[axiom]:
"[[xP = (\<iota>x. φ x) \<equiv> (\<forall>z.(\<A>(φ z) \<equiv> z = x))]]"
unfolding axiom_def
proof (rule allI, rule EquivI; rule)
fix v
assume "[xP = (\<iota>x. φ x) in v]"
moreover hence 1:
"∃o1 o2. Some o1 = d\<kappa> (xP) ∧ Some o2 = d\<kappa> (\<iota>x. φ x) ∧ o1 = o2"
apply - unfolding identity_κ_def by meta_solver
then obtain o1 o2 where 2:
"Some o1 = d\<kappa> (xP) ∧ Some o2 = d\<kappa> (\<iota>x. φ x) ∧ o1 = o2"
by auto
hence 3:
"(∃ x .((w0 ⊨ φ x) ∧ (∀y. (w0 ⊨ φ y) ⟶ y = x)))
∧ d\<kappa> (\<iota>x. φ x) = Some (THE x. (w0 ⊨ φ x))"
using D3 by (metis option.distinct(1))
then obtain X where 4:
"((w0 ⊨ φ X) ∧ (∀y. (w0 ⊨ φ y) ⟶ y = X))"
by auto
moreover have "o1 = (THE x. (w0 ⊨ φ x))"
using 2 3 by auto
ultimately have 5: "X = o1"
by (metis (mono_tags) theI)
have "∀ z . [\<A>φ z in v] = [(zP) = (xP) in v]"
proof
fix z
have "[\<A>φ z in v] ==> [(zP) = (xP) in v]"
unfolding identity_κ_def apply meta_solver
using 4 5 2 d\κ_proper w0_def by auto
moreover have "[(zP) = (xP) in v] ==> [\<A>φ z in v]"
unfolding identity_κ_def apply meta_solver
using 2 4 5
by (simp add: d\κ_proper w0_def)
ultimately show "[\<A>φ z in v] = [(zP) = (xP) in v]"
by auto
qed
thus "[\<forall>z. \<A>φ z \<equiv> (z) = (x) in v]"
unfolding identity_ν_def
by (simp add: AllI EquivS)
next
fix v
assume "[\<forall>z. \<A>φ z \<equiv> (z) = (x) in v]"
hence "∧z. (dw ⊨ φ z) = (∃o1 o2. Some o1 = d\<kappa> (zP)
∧ Some o2 = d\<kappa> (xP) ∧ o1 = o2)"
apply - unfolding identity_ν_def identity_κ_def by meta_solver
hence "∀ z . (dw ⊨ φ z) = (z = x)"
by (simp add: d\κ_proper)
moreover hence "x = (THE z . (dw ⊨ φ z))" by simp
ultimately have "xP = (\<iota>x. φ x)"
using D3 d\κ_inject d\κ_proper w0_def by presburger
thus "[xP = (\<iota>x. φ x) in v]"
using EqκS unfolding identity_κ_def by (metis d\κ_proper)
qed
subsection‹Axioms for Complex Relation Terms›
text‹\label{TAO_Axioms_ComplexRelationTerms}›
lemma lambda_predicates_1[axiom]:
"(\<lambda> x . φ x) = (\<lambda> y . φ y)" ..
lemma lambda_predicates_2_1[axiom]:
assumes "IsProperInX φ"
shows "[[(\<lambda> x . φ (xP), xP) \<equiv> φ (xP)]]"
apply axiom_meta_solver
using D5_1[OF assms] d\κ_proper propex1
by metis
lemma lambda_predicates_2_2[axiom]:
assumes "IsProperInXY φ"
shows "[[((\<lambda>2 (λ x y . φ (xP) (yP))), xP, yP) \<equiv> φ (xP) (yP)]]"
apply axiom_meta_solver
using D5_2[OF assms] d\κ_proper propex2
by metis
lemma lambda_predicates_2_3[axiom]:
assumes "IsProperInXYZ φ"
shows "[[((\<lambda>3 (λ x y z . φ (xP) (yP) (zP))),xP,yP,zP) \<equiv> φ (xP) (yP) (zP)]]"
proof -
have "[[((\<lambda>3 (λ x y z . φ (xP) (yP) (zP))),xP,yP,zP) \<rightarrow> φ (xP) (yP) (zP)]]"
apply axiom_meta_solver using D5_3[OF assms] by auto
moreover have
"[[φ (xP) (yP) (zP) \<rightarrow> ((\<lambda>3 (λ x y z . φ (xP) (yP) (zP))),xP,yP,zP)]]"
apply axiom_meta_solver
using D5_3[OF assms] d\κ_proper propex3
by (metis (no_types, lifting))
ultimately show ?thesis unfolding axiom_def equiv_def ConjS by blast
qed
lemma lambda_predicates_3_0[axiom]:
"[[(\<lambda>0 φ) = φ]]"
unfolding identity_defs
apply axiom_meta_solver
by (simp add: meta_defs meta_aux)
lemma lambda_predicates_3_1[axiom]:
"[[(\<lambda> x . (F, xP)) = F]]"
unfolding axiom_def
apply (rule allI)
unfolding identity_Π1_def apply (rule Eq1I)
using D4_1 d1_inject by simp
lemma lambda_predicates_3_2[axiom]:
"[[(\<lambda>2 (λ x y . (F, xP, yP))) = F]]"
unfolding axiom_def
apply (rule allI)
unfolding identity_Π2_def apply (rule Eq2I)
using D4_2 d2_inject by simp
lemma lambda_predicates_3_3[axiom]:
"[[(\<lambda>3 (λ x y z . (F, xP, yP, zP))) = F]]"
unfolding axiom_def
apply (rule allI)
unfolding identity_Π3_def apply (rule Eq3I)
using D4_3 d3_inject by simp
lemma lambda_predicates_4_0[axiom]:
assumes "∧x.[(\<A>(φ x \<equiv> ψ x)) in v]"
shows "[[(\<lambda>0 (χ (\<iota>x. φ x)) = \<lambda>0 (χ (\<iota>x. ψ x)))]]"
unfolding axiom_def identity_o_def apply - apply (rule allI; rule Eq0I)
using TheEqI[OF assms[THEN ActualE, THEN EquivE]] by auto
lemma lambda_predicates_4_1[axiom]:
assumes "∧x.[(\<A>(φ x \<equiv> ψ x)) in v]"
shows "[[((\<lambda> x . χ (\<iota>x. φ x) x) = (\<lambda> x . χ (\<iota>x. ψ x) x))]]"
unfolding axiom_def identity_Π1_def apply - apply (rule allI; rule Eq1I)
using TheEqI[OF assms[THEN ActualE, THEN EquivE]] by auto
lemma lambda_predicates_4_2[axiom]:
assumes "∧x.[(\<A>(φ x \<equiv> ψ x)) in v]"
shows "[[((\<lambda>2 (λ x y . χ (\<iota>x. φ x) x y)) = (\<lambda>2 (λ x y . χ (\<iota>x. ψ x) x y)))]]"
unfolding axiom_def identity_Π2_def apply - apply (rule allI; rule Eq2I)
using TheEqI[OF assms[THEN ActualE, THEN EquivE]] by auto
lemma lambda_predicates_4_3[axiom]:
assumes "∧x.[(\<A>(φ x \<equiv> ψ x)) in v]"
shows "[[(\<lambda>3 (λ x y z . χ (\<iota>x. φ x) x y z)) = (\<lambda>3 (λ x y z . χ (\<iota>x. ψ x) x y z))]]"
unfolding axiom_def identity_Π3_def apply - apply (rule allI; rule Eq3I)
using TheEqI[OF assms[THEN ActualE, THEN EquivE]] by auto
subsection‹Axioms of Encoding›
text‹\label{TAO_Axioms_Encoding}›
lemma encoding[axiom]:
"[[{x,F} \<rightarrow> \<box>{x,F}]]"
by axiom_meta_solver
lemma nocoder[axiom]:
"[[(O!,x) \<rightarrow> \<not>(\<exists> F . {x,F})]]"
unfolding axiom_def
apply (rule allI, rule ImplI, subst (asm) OrdS)
apply meta_solver unfolding en_def
by (metis ν.simps(5) mem_Collect_eq option.sel)
lemma A_objects[axiom]:
"[[\<exists>x. (A!,xP) & (\<forall> F . ({xP,F} \<equiv> φ F))]]"
unfolding axiom_def
proof (rule allI, rule ExIRule)
fix v
let ?x = "αν { F . [φ F in v]}"
have "[(A!,?xP) in v]" by (simp add: AbsS d\κ_proper)
moreover have "[(\<forall>F. {?xP,F} \<equiv> φ F) in v]"
apply meta_solver unfolding en_def
using d1.rep_eq d\κ_def d\κ_proper evalΠ1_inverse by auto
ultimately show "[(A!,?xP) & (\<forall>F. {?xP,F} \<equiv> φ F) in v]"
by (simp only: ConjS)
qed
end
(*<*)
end
(*>*)
¤ Dauer der Verarbeitung: 0.12 Sekunden
¤
*© Formatika GbR, Deutschland
|
|
2026-11-01
|
|
|
|
|
Neuigkeiten |
| Aktuelles |
| Motto des Tages |
|
Open Source Software |
|
|
|
Jenseits des Üblichen ....
|
|
Besucherstatistik |
|
|
| Statistik |
| #Sources=1104856 |
| #Domains=417229 |
|
|