(*<*)
theory TAO_6_Identifiable
imports TAO_5_MetaSolver
begin
(*>*)
section‹General Identity›
text‹\label{TAO_Identifiable}›
text‹
begin{remark}
In order to define a general identity symbol that can act
on all types of terms a type class is introduced
which assumes the substitution property which
is needed to derive the corresponding axiom.
This type class is instantiated for all relation types, individual terms
and individuals.
end{remark}
›
subsection‹Type Classes›
text‹\label{TAO_Identifiable_Class}›
class identifiable =
fixes identity :: "'a→'a→o" (infixl ‹=› 63)
assumes l_identity:
"w ⊨ x = y ==> w ⊨ φ x ==> w ⊨ φ y"
begin
abbreviation notequal (infixl ‹\≠› 63) where
"notequal ≡ λ x y . \<not>(x = y)"
end
class quantifiable_and_identifiable = quantifiable + identifiable
begin
definition exists_unique::"('a→o)→o" (binder ‹\∃!› [8] 9) where
"exists_unique ≡ λ φ . \<exists> α . φ α & (\<forall>β. φ β \<rightarrow> β = α)"
declare exists_unique_def[conn_defs]
end
subsection‹Instantiations›
text‹\label{TAO_Identifiable_Instantiation}›
instantiation κ :: identifiable
begin
definition identity_κ where "identity_κ ≡ basic_identity\<kappa>"
instance proof
fix x y :: κ and w φ
show "[x = y in w] ==> [φ x in w] ==> [φ y in w]"
unfolding identity_κ_def
using MetaSolver.Eqκ_prop ..
qed
end
instantiation ν :: identifiable
begin
definition identity_ν where "identity_ν ≡ λ x y . xP = yP"
instance proof
fix α :: ν and β :: ν and v φ
assume "v ⊨ α = β"
hence "v ⊨ αP = βP"
unfolding identity_ν_def by auto
hence "∧φ.(v ⊨ φ (αP)) ==> (v ⊨ φ (βP))"
using l_identity by auto
hence "(v ⊨ φ (rep (αP))) ==> (v ⊨ φ (rep (βP)))"
by meson
thus "(v ⊨ φ α) ==> (v ⊨ φ β)"
by (simp only: rep_proper_id)
qed
end
instantiation Π1 :: identifiable
begin
definition identity_Π1 where "identity_Π1 ≡ basic_identity1"
instance proof
fix F G :: Π1 and w φ
show "(w ⊨ F = G) ==> (w ⊨ φ F) ==> (w ⊨ φ G)"
unfolding identity_Π1_def using MetaSolver.Eq1_prop ..
qed
end
instantiation Π2 :: identifiable
begin
definition identity_Π2 where "identity_Π2 ≡ basic_identity2"
instance proof
fix F G :: Π2 and w φ
show "(w ⊨ F = G) ==> (w ⊨ φ F) ==> (w ⊨ φ G)"
unfolding identity_Π2_def using MetaSolver.Eq2_prop ..
qed
end
instantiation Π3 :: identifiable
begin
definition identity_Π3 where "identity_Π3 ≡ basic_identity3"
instance proof
fix F G :: Π3 and w φ
show "(w ⊨ F = G) ==> (w ⊨ φ F) ==> (w ⊨ φ G)"
unfolding identity_Π3_def using MetaSolver.Eq3_prop ..
qed
end
instantiation o :: identifiable
begin
definition identity_o where "identity_o ≡ basic_identity0"
instance proof
fix F G :: o and w φ
show "(w ⊨ F = G) ==> (w ⊨ φ F) ==> (w ⊨ φ G)"
unfolding identity_o_def using MetaSolver.Eq0_prop ..
qed
end
instance ν :: quantifiable_and_identifiable ..
instance Π1 :: quantifiable_and_identifiable ..
instance Π2 :: quantifiable_and_identifiable ..
instance Π3 :: quantifiable_and_identifiable ..
instance o :: quantifiable_and_identifiable ..
subsection‹New Identity Definitions›
text‹\label{TAO_Identifiable_Definitions}›
text‹
begin{remark}
The basic definitions of identity use type specific quantifiers
and identity symbols. Equivalent definitions that
use the general identity symbol and general quantifiers are provided.
end{remark}
›
named_theorems identity_defs
lemma identityE_def[identity_defs]:
"basic_identityE ≡ \<lambda>2 (λx y. (O!,xP) & (O!,yP) & \<box>(\<forall>F. (F,xP) \<equiv> (F,yP)))"
unfolding basic_identityE_def forall_Π1_def by simp
lemma identityE_infix_def[identity_defs]:
"x =E y ≡ (basic_identityE,x,y)" using basic_identityE_infix_def .
lemma identity\κ_def[identity_defs]:
"(=) ≡ λx y. x =E y \<or> (A!,x) & (A!,y) & \<box>(\<forall> F. {x,F} \<equiv> {y,F})"
unfolding identity_κ_def basic_identity\κ_def forall_Π1_def by simp
lemma identity\ν_def[identity_defs]:
"(=) ≡ λx y. (xP) =E (yP) \<or> (A!,xP) & (A!,yP) & \<box>(\<forall> F. {xP,F} \<equiv> {yP,F})"
unfolding identity_ν_def identity\κ_def by simp
lemma identity1_def[identity_defs]:
"(=) ≡ λF G. \<box>(\<forall> x . {xP,F} \<equiv> {xP,G})"
unfolding identity_Π1_def basic_identity1_def forall_ν_def by simp
lemma identity2_def[identity_defs]:
"(=) ≡ λF G. \<forall> x. (\<lambda>y. (F,xP,yP)) = (\<lambda>y. (G,xP,yP))
& (\<lambda>y. (F,yP,xP)) = (\<lambda>y. (G,yP,xP))"
unfolding identity_Π2_def identity_Π1_def basic_identity2_def forall_ν_def by simp
lemma identity3_def[identity_defs]:
"(=) ≡ λF G. \<forall> x y. (\<lambda>z. (F,zP,xP,yP)) = (\<lambda>z. (G,zP,xP,yP))
& (\<lambda>z. (F,xP,zP,yP)) = (\<lambda>z. (G,xP,zP,yP))
& (\<lambda>z. (F,xP,yP,zP)) = (\<lambda>z. (G,xP,yP,zP))"
unfolding identity_Π3_def identity_Π1_def basic_identity3_def forall_ν_def by simp
lemma identity\o_def[identity_defs]: "(=) ≡ λF G. (\<lambda>y. F) = (\<lambda>y. G)"
unfolding identity_o_def identity_Π1_def basic_identity0_def by simp
(*<*)
end
(*>*)
¤ Dauer der Verarbeitung: 0.6 Sekunden
¤
*© Formatika GbR, Deutschland