(*<*) theory TAO_5_MetaSolver imports
TAO_4_BasicDefinitions "HOL-Eisbach.Eisbach" begin (*>*)
section‹MetaSolver› text‹\label{TAO_MetaSolver}›
text‹
begin{remark} ‹meta_solver› is a resolution prover that translates
expressions in the embedded logic to expressions in the meta-logic,
resp. semantic expressions.
The rules for connectives, quantifiers, exemplification
and encoding are straightforward.
Furthermore, rules for the defined identities are derived.
The defined identities in the embedded logic coincide with the
meta-logical equality.
end{remark} ›
locale MetaSolver begin interpretation Semantics .
subsection‹Rules for Implication› text‹\label{TAO_MetaSolver_Implication}›
lemma ImplI[meta_intro]: "([φ in v] ==> [ψ in v]) ==> ([φ \<rightarrow> ψ in v])" by (simp add: Semantics.T5) lemma ImplE[meta_elim]: "([φ \<rightarrow> ψ in v]) ==> ([φ in v] ⟶ [ψ in v])" by (simp add: Semantics.T5) lemma ImplS[meta_subst]: "([φ \<rightarrow> ψ in v]) = ([φ in v] ⟶ [ψ in v])" by (simp add: Semantics.T5)
subsection‹Rules for Negation› text‹\label{TAO_MetaSolver_Negation}›
lemma NotI[meta_intro]: "¬[φ in v] ==> [\<not>φ in v]" by (simp add: Semantics.T4) lemmaNotE[meta_elim]: "[\<not>φ in v] ==>¬[φ in v]" by (simp add: Semantics.T4) lemma NotS[meta_subst]: "[\<not>φ in v] = (¬[φ in v])" by (simp add: Semantics.T4)
subsection‹Rules for Conjunction› text‹\label{TAO_MetaSolver_Conjunction}›
lemma ConjI[meta_intro]: "([φ in v] ∧ [ψ in v]) ==> [φ & ψ in v]" by (simp add: conj_def NotS ImplS) lemma ConjE[meta_elim]: "[φ & ψ in v] ==> ([φ in v] ∧ [ψ in v])" by (simp add: conj_def NotS ImplS) lemma ConjS[meta_subst]: "[φ & ψ in v] = ([φ in v] ∧ [ψ in v])" by (simp add: conj_def NotS ImplS)
subsection‹Rules for Equivalence› text‹\label{TAO_MetaSolver_Equivalence}›
lemma EquivI[meta_intro]: "([φ in v] ⟷ [ψ in v]) ==> [φ \<equiv> ψ in v]" by (simp add: equiv_def NotS ImplS ConjS) lemma EquivE[meta_elim]: "[φ \<equiv> ψ in v] ==> ([φ in v] ⟷ [ψ in v])" by (auto simp: equiv_def NotS ImplS ConjS) lemma EquivS[meta_subst]: "[φ \<equiv> ψ in v] = ([φ in v] ⟷ [ψ in v])" by (auto simp: equiv_def NotS ImplS ConjS)
subsection‹Rules for Disjunction› text‹\label{TAO_MetaSolver_Disjunction}›
lemma DisjI[meta_intro]: "([φ in v] ∨ [ψ in v]) ==> [φ \<or> ψ in v]" by (auto simp: disj_def NotS ImplS) lemma DisjE[meta_elim]: "[φ \<or> ψ in v] ==> ([φ in v] ∨ [ψ in v])" by (auto simp: disj_def NotS ImplS) lemma DisjS[meta_subst]: "[φ \<or> ψ in v] = ([φ in v] ∨ [ψ in v])" by (auto simp: disj_def NotS ImplS)
subsection‹Rules for Necessity› text‹\label{TAO_MetaSolver_Necessity}›
lemma BoxI[meta_intro]: "(∧v.[φ in v]) ==> [\<box>φ in v]" by (simp add: Semantics.T6) lemma BoxE[meta_elim]: "[\<box>φ in v] ==> (∧v.[φ in v])" by (simp add: Semantics.T6) lemma BoxS[meta_subst]: "[\<box>φ in v] = (∀ v.[φ in v])" by (simp add: Semantics.T6)
subsection‹Rules for Possibility› text‹\label{TAO_MetaSolver_Possibility}›
lemma DiaI[meta_intro]: "(∃v.[φ in v]) ==> [\<diamond>φ in v]" by (metis BoxS NotS diamond_def) lemma DiaE[meta_elim]: "[\<diamond>φ in v] ==> (∃v.[φ in v])" by (metis BoxS NotS diamond_def) lemma DiaS[meta_subst]: "[\<diamond>φ in v] = (∃ v.[φ in v])" by (metis BoxS NotS diamond_def)
subsection‹Rules for Quantification› text‹\label{TAO_MetaSolver_Quantification}›
lemma AllI[meta_intro]: "(∧x. [φ x in v]) ==> [\<forall> x. φ x in v]" by (auto simp: T8) lemma AllE[meta_elim]: "[\<forall>x. φ x in v] ==> (∧x.[φ x in v])" by (auto simp: T8) lemma AllS[meta_subst]: "[\<forall>x. φ x in v] = (∀x.[φ x in v])" by (auto simp: T8)
subsubsection‹Rules for Existence› lemma ExIRule: "([φ y in v]) ==> [\<exists>x. φ x in v]" by (auto simp: exists_def Semantics.T8 Semantics.T4) lemma ExI[meta_intro]: "(∃ y . [φ y in v]) ==> [\<exists>x. φ x in v]" by (auto simp: exists_def Semantics.T8 Semantics.T4) lemma ExE[meta_elim]: "[\<exists>x. φ x in v] ==> (∃ y . [φ y in v])" by (auto simp: exists_def Semantics.T8 Semantics.T4) lemma ExS[meta_subst]: "[\<exists>x. φ x in v] = (∃ y . [φ y in v])" by (auto simp: exists_def Semantics.T8 Semantics.T4) lemma ExERule: assumes"[\<exists>x. φ x in v]"obtains x where"[φ x in v]" using ExE assms by auto
subsection‹Rules for Actuality› text‹\label{TAO_MetaSolver_Actuality}›
lemma ActualI[meta_intro]: "[φ in dw] ==> [\<A>φ in v]" by (auto simp: Semantics.T7) lemma ActualE[meta_elim]: "[\<A>φ in v] ==> [φ in dw]" by (auto simp: Semantics.T7) lemma ActualS[meta_subst]: "[\<A>φ in v] = [φ in dw]" by (auto simp: Semantics.T7)
subsection‹Rules for Encoding› text‹\label{TAO_MetaSolver_Encoding}›
lemma EncI[meta_intro]: assumes"∃ r o1 . Some r = d1 F ∧ Some o1 = d\<kappa> x ∧ o1∈ en r" shows"[{x,F} in v]" using assms by (auto simp: Semantics.T2) lemma EncE[meta_elim]: assumes"[{x,F} in v]" shows"∃ r o1 . Some r = d1 F ∧ Some o1 = d\<kappa> x ∧ o1∈ en r" using assms by (auto simp: Semantics.T2) lemma EncS[meta_subst]: "[{x,F} in v] = (∃ r o1 . Some r = d1 F ∧ Some o1 = d\<kappa> x ∧ o1∈ en r)" by (auto simp: Semantics.T2)
subsection‹Rules for Exemplification› text‹\label{TAO_MetaSolver_Exemplification}›
subsubsection‹Zero-place Relations›
lemma Exe0I[meta_intro]: assumes"∃ r . Some r = d0 p ∧ ex0 r v" shows"[(p) in v]" using assms by (auto simp: Semantics.T3) lemma Exe0E[meta_elim]: assumes"[(p) in v]" shows"∃ r . Some r = d0 p ∧ ex0 r v" using assms by (auto simp: Semantics.T3) lemma Exe0S[meta_subst]: "[(p) in v] = (∃ r . Some r = d0 p ∧ ex0 r v)" by (auto simp: Semantics.T3)
subsubsection‹One-Place Relations›
lemma Exe1I[meta_intro]: assumes"∃ r o1 . Some r = d1 F ∧ Some o1 = d\<kappa> x ∧ o1∈ ex1 r v" shows"[(F,x) in v]" using assms by (auto simp: Semantics.T1_1) lemma Exe1E[meta_elim]: assumes"[(F,x) in v]" shows"∃ r o1 . Some r = d1 F ∧ Some o1 = d\<kappa> x ∧ o1∈ ex1 r v" using assms by (auto simp: Semantics.T1_1) lemma Exe1S[meta_subst]: "[(F,x) in v] = (∃ r o1 . Some r = d1 F ∧ Some o1 = d\<kappa> x ∧ o1∈ ex1 r v)" by (auto simp: Semantics.T1_1)
subsubsection‹Two-Place Relations›
lemma Exe2I[meta_intro]: assumes"∃ r o1 o2 . Some r = d2 F ∧ Some o1 = d\<kappa> x ∧ Some o2 = d\<kappa> y ∧ (o1, o2) ∈ ex2 r v" shows"[(F,x,y) in v]" using assms by (auto simp: Semantics.T1_2) lemma Exe2E[meta_elim]: assumes"[(F,x,y) in v]" shows"∃ r o1 o2 . Some r = d2 F ∧ Some o1 = d\<kappa> x ∧ Some o2 = d\<kappa> y ∧ (o1, o2) ∈ ex2 r v" using assms by (auto simp: Semantics.T1_2) lemma Exe2S[meta_subst]: "[(F,x,y) in v] = (∃ r o1 o2 . Some r = d2 F ∧ Some o1 = d\<kappa> x ∧ Some o2 = d\<kappa> y ∧ (o1, o2) ∈ ex2 r v)" by (auto simp: Semantics.T1_2)
subsubsection‹Three-Place Relations›
lemma Exe3I[meta_intro]: assumes"∃ r o1 o2 o3 . Some r = d3 F ∧ Some o1 = d\<kappa> x ∧ Some o2 = d\<kappa> y ∧ Some o3 = d\<kappa> z ∧ (o1, o2, o3) ∈ ex3 r v" shows"[(F,x,y,z) in v]" using assms by (auto simp: Semantics.T1_3) lemma Exe3E[meta_elim]: assumes"[(F,x,y,z) in v]" shows"∃ r o1 o2 o3 . Some r = d3 F ∧ Some o1 = d\<kappa> x ∧ Some o2 = d\<kappa> y ∧ Some o3 = d\<kappa> z ∧ (o1, o2, o3) ∈ ex3 r v" using assms by (auto simp: Semantics.T1_3) lemma Exe3S[meta_subst]: "[(F,x,y,z) in v] = (∃ r o1 o2 o3 . Some r = d3 F ∧ Some o1 = d\<kappa> x ∧ Some o2 = d\<kappa> y ∧ Some o3 = d\<kappa> z ∧ (o1, o2, o3) ∈ ex3 r v)" by (auto simp: Semantics.T1_3)
subsection‹Rules for Being Ordinary› text‹\label{TAO_MetaSolver_Ordinary}›
lemma OrdI[meta_intro]: assumes"∃ o1 y. Some o1 = d\<kappa> x ∧ o1 = ψν y" shows"[(O!,x) in v]" proof - have"IsProperInX (λx. \<diamond>(E!,x))" by show_proper moreoverhave"[\<diamond>(E!,x) in v]" apply meta_solver using ConcretenessSemantics1 propex1 assms by fast ultimatelyshow"[(O!,x) in v]" unfolding Ordinary_def using D5_1 propex1 assms ConcretenessSemantics1 Exe1S by blast qed lemma OrdE[meta_elim]: assumes"[(O!,x) in v]" shows"∃ o1 y. Some o1 = d\<kappa> x ∧ o1 = ψν y" proof - have"∃r o1. Some r = d1 O! ∧ Some o1 = d\<kappa> x ∧ o1∈ ex1 r v" using assms Exe1E by simp moreoverhave"IsProperInX (λx. \<diamond>(E!,x))" by show_proper ultimatelyhave"[\<diamond>(E!,x) in v]" using D5_1 unfolding Ordinary_def by fast thus ?thesis apply - apply meta_solver using ConcretenessSemantics2 by blast qed lemma OrdS[meta_cong]: "[(O!,x) in v] = (∃ o1 y. Some o1 = d\<kappa> x ∧ o1 = ψν y)" using OrdI OrdE by blast
subsection‹Rules for Being Abstract› text‹\label{TAO_MetaSolver_Abstract}›
lemma AbsI[meta_intro]: assumes"∃ o1 y. Some o1 = d\<kappa> x ∧ o1 = αν y" shows"[(A!,x) in v]" proof - have"IsProperInX (λx. \<not>\<diamond>(E!,x))" by show_proper moreoverhave"[\<not>\<diamond>(E!,x) in v]" apply meta_solver using ConcretenessSemantics2 propex1 assms by (metis ν.distinct(1) option.sel) ultimatelyshow"[(A!,x) in v]" unfolding Abstract_def using D5_1 propex1 assms ConcretenessSemantics1 Exe1S by blast qed lemma AbsE[meta_elim]: assumes"[(A!,x) in v]" shows"∃ o1 y. Some o1 = d\<kappa> x ∧ o1 = αν y" proof - have1: "IsProperInX (λx. \<not>\<diamond>(E!,x))" by show_proper have"∃r o1. Some r = d1 A! ∧ Some o1 = d\<kappa> x ∧ o1∈ ex1 r v" using assms Exe1E by simp moreoverhence"[\<not>\<diamond>(E!,x) in v]" using D5_1[OF 1] unfolding Abstract_def by fast ultimatelyshow ?thesis apply - apply meta_solver using ConcretenessSemantics1 propex1 by (metis ν.exhaust) qed lemma AbsS[meta_cong]: "[(A!,x) in v] = (∃ o1 y. Some o1 = d\<kappa> x ∧ o1 = αν y)" using AbsI AbsE by blast
subsection‹Rules for Definite Descriptions› text‹\label{TAO_MetaSolver_DefiniteDescription}›
lemma TheEqI: assumes"∧x. [φ x in dw] = [ψ x in dw]" shows"(\<iota>x. φ x) = (\<iota>x. ψ x)" proof - have1: "d\<kappa> (\<iota>x. φ x) = d\<kappa> (\<iota>x. ψ x)" using assms D3 unfolding w0_defby simp
{ assume"∃ o1 . Some o1 = d\<kappa> (\<iota>x. φ x)" hence ?thesis using1 d\<kappa>_inject by force
} moreover { assume"¬(∃ o1 . Some o1 = d\<kappa> (\<iota>x. φ x))" hence ?thesis using1 D3 by (metis d\<kappa>.rep_eq evalκ_inverse)
} ultimatelyshow ?thesis by blast qed
subsection‹Rules for Identity› text‹\label{TAO_MetaSolver_Identity}›
lemma EqEI[meta_intro]: assumes"∃ o1 o2. Some (ψν o1) = d\<kappa> x ∧ Some (ψν o2) = d\<kappa> y ∧ o1 = o2" shows"[x =E y in v]" proof - obtain o1 o2where1: "Some (ψν o1) = d\<kappa> x ∧ Some (ψν o2) = d\<kappa> y ∧ o1 = o2" using assms by auto obtain r where2: "Some r = d2 basic_identityE" using propex2by auto have"[(O!,x)&(O!,y)&\<box>(\<forall>F. (F,x)\<equiv> (F,y)) in v]" proof - have"[(O!,x) in v] ∧ [(O!,y) in v]" using OrdI 1by blast moreoverhave"[\<box>(\<forall>F. (F,x)\<equiv> (F,y)) in v]" apply meta_solver using1by force ultimatelyshow ?thesis using ConjI by simp qed moreoverhave"IsProperInXY (λ x y . (O!,x)&(O!,y)&\<box>(\<forall>F. (F,x)\<equiv>(F,y)))" by show_proper ultimatelyhave"(ψν o1, ψν o2) ∈ ex2 r v" using D5_2 12 unfolding basic_identityE_defby fast thus"[x =E y in v]" using Exe2I 12 unfolding basic_identityE_infix_def basic_identityE_def by blast qed lemma EqEE[meta_elim]: assumes"[x =E y in v]" shows"∃ o1 o2. Some (ψν o1) = d\<kappa> x ∧ Some (ψν o2) = d\<kappa> y ∧ o1 = o2" proof - have"IsProperInXY (λ x y . (O!,x)&(O!,y)&\<box>(\<forall>F. (F,x)\<equiv> (F,y)))" by show_proper hence1: "[(O!,x)&(O!,y)&\<box>(\<forall> F. (F,x)\<equiv> (F,y)) in v]" using assms unfolding basic_identityE_def basic_identityE_infix_def using D4_2 T1_2 D5_2 by meson hence2: "∃ o1 o2 . Some (ψν o1) = d\<kappa> x ∧ Some (ψν o2) = d\<kappa> y" apply (subst (asm) ConjS) apply (subst (asm) ConjS) using OrdE by auto thenobtain o1 o2where3: "Some (ψν o1) = d\<kappa> x ∧ Some (ψν o2) = d\<kappa> y" by auto have"∃ r . Some r = d1 (\<lambda> z . makeo (λ w s . d\<kappa> (zP) = Some (ψν o1)))" using propex1by auto thenobtain r where4: "Some r = d1 (\<lambda> z . makeo (λ w s . d\<kappa> (zP) = Some (ψν o1)))" by auto hence5: "r = (λu s w. ∃ x . νυ x = u ∧ Some x = Some (ψν o1))" unfolding lambdabinder1_def d1_def d\<kappa>_proper apply transfer by simp have"[\<box>(\<forall> F. (F,x)\<equiv> (F,y)) in v]" using1using ConjE by blast hence6: "∀ v F . [(F,x) in v] ⟷ [(F,y) in v]" using BoxE EquivE AllE by fast hence"∀ v . ((ψν o1) ∈ ex1 r v) = ((ψν o2) ∈ ex1 r v)" using24unfolding valid_in_def by (metis "3""6" d1.rep_eq d\<kappa>_inject d\<kappa>_proper ex1_def evalo_inverse exe1.rep_eq
mem_Collect_eq option.sel rep_proper_id νκ_proper valid_in.abs_eq) moreoverhave"(ψν o1) ∈ ex1 r v" unfolding5 ex1_def by simp ultimatelyhave"(ψν o2) ∈ ex1 r v" by auto hence"o1 = o2"unfolding5 ex1_def by (auto simp: meta_aux) thus ?thesis using3by auto qed lemma EqES[meta_subst]: "[x =E y in v] = (∃ o1 o2. Some (ψν o1) = d\<kappa> x ∧ Some (ψν o2) = d\<kappa> y ∧ o1 = o2)" using EqEI EqEEby blast
lemma EqκI[meta_intro]: assumes"∃ o1 o2. Some o1 = d\<kappa> x ∧ Some o2 = d\<kappa> y ∧ o1 = o2" shows"[x =\<kappa> y in v]" proof - have"x = y"using assms d\<kappa>_inject by meson moreoverhave"[x =\<kappa> x in v]" unfolding basic_identity\<kappa>_def apply meta_solver by (metis (no_types, lifting) assms AbsI Exe1E ν.exhaust) ultimatelyshow ?thesis by auto qed lemma Eqκ_prop: assumes"[x =\<kappa> y in v]" shows"[φ x in v] = [φ y in v]" proof - have"[x =E y \<or> (A!,x)&(A!,y)&\<box>(\<forall> F. {x,F}\<equiv> {y,F}) in v]" using assms unfolding basic_identity\<kappa>_defby simp moreover { assume"[x =E y in v]" hence"(∃ o1 o2. Some o1 = d\<kappa> x ∧ Some o2 = d\<kappa> y ∧ o1 = o2)" using EqEEby fast
} moreover { assume1: "[(A!,x)&(A!,y)&\<box>(\<forall> F. {x,F}\<equiv> {y,F}) in v]" hence2: "(∃ o1 o2 X Y. Some o1 = d\<kappa> x ∧ Some o2 = d\<kappa> y ∧ o1 = αν X ∧ o2 = αν Y)" using AbsE ConjE by meson moreoverthenobtain o1 o2 X Y where3: "Some o1 = d\<kappa> x ∧ Some o2 = d\<kappa> y ∧ o1 = αν X ∧ o2 = αν Y" by auto moreoverhave4: "[\<box>(\<forall> F. {x,F}\<equiv> {y,F}) in v]" using1 ConjE by blast hence6: "∀ v F . [{x,F} in v] ⟷ [{y,F} in v]" using BoxE AllE EquivE by fast hence7: "∀v r. (∃ o1. Some o1 = d\<kappa> x ∧ o1∈ en r) = (∃ o1. Some o1 = d\<kappa> y ∧ o1∈ en r)" apply - apply meta_solver using propex1 d1_inject apply simp apply transfer by simp hence8: "∀ r. (o1∈ en r) = (o2∈ en r)" using3 d\<kappa>_inject d\<kappa>_proper apply simp by (metis option.inject) hence"∀r. (o1∈ r) = (o2∈ r)" unfolding en_def using3 by (metis Collect_cong Collect_mem_eq ν.simps(6)
mem_Collect_eq makeΠ1_cases) hence"(o1∈ { x . o1 = x }) = (o2∈ { x . o1 = x })" by metis hence"o1 = o2"by simp hence"(∃ o1 o2. Some o1 = d\<kappa> x ∧ Some o2 = d\<kappa> y ∧ o1 = o2)" using3by auto
} ultimatelyhave"x = y" using DisjS using Semantics.d\<kappa>_inject by auto thus"(v ⊨ (φ x)) = (v ⊨ (φ y))"by simp qed lemma EqκE[meta_elim]: assumes"[x =\<kappa> y in v]" shows"∃ o1 o2. Some o1 = d\<kappa> x ∧ Some o2 = d\<kappa> y ∧ o1 = o2" proof - have"∀ φ . (v ⊨ φ x) = (v ⊨ φ y)" using assms Eqκ_propby blast moreoverobtain φ where φ_prop: "φ = (λ α . makeo (λ w s . (∃ o1 o2. Some o1 = d\<kappa> x ∧ Some o2 = d\<kappa> α ∧ o1 = o2)))" by auto ultimatelyhave"(v ⊨ φ x) = (v ⊨ φ y)"by metis moreoverhave"(v ⊨ φ x)" using assms unfolding φ_prop basic_identity\<kappa>_def by (metis (mono_tags, lifting) AbsS ConjE DisjS
EqES valid_in.abs_eq) ultimatelyhave"(v ⊨ φ y)"by auto thus ?thesis unfolding φ_prop by (simp add: valid_in_def meta_aux) qed lemma EqκS[meta_subst]: "[x =\<kappa> y in v] = (∃ o1 o2. Some o1 = d\<kappa> x ∧ Some o2 = d\<kappa> y ∧ o1 = o2)" using EqκI EqκE by blast
lemma Eq1I[meta_intro]: "F = G ==> [F =1 G in v]" unfolding basic_identity1_def apply (rule BoxI, rule AllI, rule EquivI) by simp lemma Eq1E[meta_elim]: "[F =1 G in v] ==> F = G" unfolding basic_identity1_def apply (drule BoxE, drule_tac x="(αν { F })"in AllE, drule EquivE) apply (simp add: Semantics.T2) unfolding en_def d\<kappa>_def d1_def using νκ_proper rep_proper_id by (simp add: rep_def proper_def meta_aux νκ.rep_eq) lemma Eq1S[meta_subst]: "[F =1 G in v] = (F = G)" using Eq1I Eq1E by auto lemma Eq1_prop: "[F =1 G in v] ==> [φ F in v] = [φ G in v]" using Eq1E by blast
lemma Eq2I[meta_intro]: "F = G ==> [F =2 G in v]" unfolding basic_identity2_def apply (rule AllI, rule ConjI, (subst Eq1S)+) by simp lemma Eq2E[meta_elim]: "[F =2 G in v] ==> F = G" proof - assume"[F =2 G in v]" hence1: "[\<forall> x. (\<lambda>y. (F,xP,yP)) =1 (\<lambda>y. (G,xP,yP)) in v]" unfolding basic_identity2_def apply - apply meta_solver by auto
{ fix u v s w obtain x where x_def: "νυ x = v"by (metis νυ_surj surj_def) obtain a where a_def: "a = (λu s w. ∃xa. νυ xa = u ∧ evalΠ2 F (νυ x) (νυ xa) s w)" by auto obtain b where b_def: "b = (λu s w. ∃xa. νυ xa = u ∧ evalΠ2 G (νυ x) (νυ xa) s w)" by auto have"a = b"unfolding a_def b_def using1apply - apply meta_solver by (auto simp: meta_defs meta_aux makeΠ1_inject) hence"a u s w = b u s w"by auto hence"(evalΠ2 F (νυ x) u s w) = (evalΠ2 G (νυ x) u s w)" unfolding a_def b_def by (metis (no_types, opaque_lifting) νυ_surj surj_def) hence"(evalΠ2 F v u s w) = (evalΠ2 G v u s w)" unfolding x_def by auto
} hence"(evalΠ2 F) = (evalΠ2 G)"by blast thus"F = G"by (simp add: evalΠ2_inject) qed lemma Eq2S[meta_subst]: "[F =2 G in v] = (F = G)" using Eq2I Eq2E by auto lemma Eq2_prop: "[F =2 G in v] ==> [φ F in v] = [φ G in v]" using Eq2E by blast
lemma Eq3I[meta_intro]: "F = G ==> [F =3 G in v]" apply (simp add: meta_defs meta_aux conn_defs forall_ν_def basic_identity3_def) using MetaSolver.Eq1I valid_in.rep_eq by auto lemma Eq3E[meta_elim]: "[F =3 G in v] ==> F = G" proof -
assume"[F =3 G in v]" hence1: "[\<forall> x y. (\<lambda>z. (F,xP,yP,zP)) =1 (\<lambda>z. (G,xP,yP,zP)) in v]" unfolding basic_identity3_def apply - apply meta_solver by auto
{ fix u v r s w obtain x where x_def: "νυ x = v"by (metis νυ_surj surj_def) obtain y where y_def: "νυ y = r"by (metis νυ_surj surj_def) obtain a where a_def: "a = (λu s w. ∃xa. νυ xa = u ∧ evalΠ3 F (νυ x) (νυ y) (νυ xa) s w)" by auto obtain b where b_def: "b = (λu s w. ∃xa. νυ xa = u ∧ evalΠ3 G (νυ x) (νυ y) (νυ xa) s w)" by auto have"a = b"unfolding a_def b_def using1apply - apply meta_solver by (auto simp: meta_defs meta_aux makeΠ1_inject) hence"a u s w = b u s w"by auto hence"(evalΠ3 F (νυ x) (νυ y) u s w) = (evalΠ3 G (νυ x) (νυ y) u s w)" unfolding a_def b_def by (metis (no_types, opaque_lifting) νυ_surj surj_def) hence"(evalΠ3 F v r u s w) = (evalΠ3 G v r u s w)" unfolding x_def y_def by auto
} hence"(evalΠ3 F) = (evalΠ3 G)"by blast thus"F = G"by (simp add: evalΠ3_inject) qed lemma Eq3S[meta_subst]: "[F =3 G in v] = (F = G)" using Eq3I Eq3E by auto lemma Eq3_prop: "[F =3 G in v] ==> [φ F in v] = [φ G in v]" using Eq3E by blast
lemma Eq0I[meta_intro]: "x = y ==> [x =0 y in v]" unfolding basic_identity0_defby (simp add: Eq1S) lemma Eq0E[meta_elim]: "[F =0 G in v] ==> F = G" proof - assume"[F =0 G in v]" hence"[(\<lambda>y. F) =1 (\<lambda>y. G) in v]" unfolding basic_identity0_defby simp hence"(\<lambda>y. F) = (\<lambda>y. G)" using Eq1S by simp hence"(λu s w. (∃x. νυ x = u) ∧ evalo F s w) = (λu s w. (∃x. νυ x = u) ∧ evalo G s w)" apply (simp add: meta_defs meta_aux) by (metis (no_types, lifting) UNIV_I makeΠ1_inverse) hence"∧s w.(evalo F s w) = (evalo G s w)" by metis hence"(evalo F) = (evalo G)"by blast thus"F = G" by (metis evalo_inverse) qed lemma Eq0S[meta_subst]: "[F =0 G in v] = (F = G)" using Eq0I Eq0E by auto lemma Eq0_prop: "[F =0 G in v] ==> [φ F in v] = [φ G in v]" using Eq0E by blast
end
(*<*) end (*>*)
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.20 Sekunden
(vorverarbeitet am 2026-06-10)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.