Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/Isabelle/Archive-of-Formal-Proofs/thys/PLM/   (Sammlung formaler Beweise Version 2026-5©)  Datei vom 31.4.2026 mit Größe 31 kB image not shown  

Quelle  TAO_5_MetaSolver.thy

  Sprache: Isabelle
 

(*<*)
theory TAO_5_MetaSolver
imports 
  TAO_4_BasicDefinitions 
  "HOL-Eisbach.Eisbach"
begin
(*>*)

sectionMetaSolver
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 .

  named_theorems meta_intro
  named_theorems meta_elim
  named_theorems meta_subst
  named_theorems meta_cong

  method meta_solver = (assumption | rule meta_intro
      | erule meta_elim | drule meta_elim |  subst meta_subst
      | subst (asm) meta_subst | (erule notE; (meta_solver; fail))
      )+

subsectionRules 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)

subsectionRules for Negation
text\label{TAO_MetaSolver_Negation}

  lemma NotI[meta_intro]: "¬[φ in v] ==> [\<not>φ in v]"
    by (simp add: Semantics.T4)
  lemma NotE[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)

subsectionRules 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)

subsectionRules 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)

subsectionRules 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)

subsectionRules 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)

subsectionRules 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)

subsectionRules 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)

subsubsectionRules 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

subsectionRules 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)

subsectionRules for Exemplification
text\label{TAO_MetaSolver_Exemplification}

subsubsectionZero-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)

subsubsectionOne-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)

subsubsectionTwo-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)


subsubsectionThree-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)

subsectionRules 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
      moreover have "[\<diamond>(E!,x) in v]"
        apply meta_solver
        using ConcretenessSemantics1 propex1 assms by fast
      ultimately show "[(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
      moreover have "IsProperInX (λx. \<diamond>(E!,x))"
        by show_proper
      ultimately have "[\<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

subsectionRules 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
      moreover have "[\<not>\<diamond>(E!,x) in v]"
        apply meta_solver
        using ConcretenessSemantics2 propex1 assms
        by (metis ν.distinct(1) option.sel)
      ultimately show "[(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 -
      have 1"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
      moreover hence "[\<not>\<diamond>(E!,x) in v]"
        using D5_1[OF 1]
        unfolding Abstract_def by fast
      ultimately show ?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

subsectionRules 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 -
      have 1"d\<kappa> (\<iota>x. φ x) = d\<kappa> (\<iota>x. ψ x)"
        using assms D3 unfolding w0_def by simp
      {
        assume " o1 . Some o1 = d\<kappa> (\<iota>x. φ x)"
        hence ?thesis using 1 d\<kappa>_inject by force
      }
      moreover {
        assume "¬( o1 . Some o1 = d\<kappa> (\<iota>x. φ x))"
        hence ?thesis using 1 D3
        by (metis d\<kappa>.rep_eq evalκ_inverse)
      }
      ultimately show ?thesis by blast
    qed

subsectionRules for Identity
text\label{TAO_MetaSolver_Identity}

subsubsectionOrdinary Objects
text\label{TAO_MetaSolver_Identity_Ordinary}

  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 o2 where 1:
        "Some (ψν o1) = d\<kappa> x Some (ψν o2) = d\<kappa> y o1 = o2"
        using assms by auto
      obtain r where 2:
        "Some r = d2 basic_identityE"
        using propex2 by 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 1 by blast
          moreover have "[\<box>(\<forall>F. (F,x) \<equiv> (F,y)) in v]"
            apply meta_solver using 1 by force
          ultimately show ?thesis using ConjI by simp
        qed
      moreover have "IsProperInXY (λ x y . (O!,x) & (O!,y) & \<box>(\<forall>F. (F,x) \<equiv> (F,y)))"
        by show_proper
      ultimately have "(ψν o1, ψν o2) ex2 r v"
        using D5_2 1 2
        unfolding basic_identityE_def by fast
      thus "[x =E y in v]"
        using Exe2I 1 2
        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
    hence 1"[(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
    hence 2" o1 o2 . Some (ψν o1) = d\<kappa> x
                      Some (ψν o2) = d\<kappa> y"
      apply (subst (asm) ConjS)
      apply (subst (asm) ConjS)
      using OrdE by auto
    then obtain o1 o2 where 3:
      "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 propex1 by auto
    then obtain r where 4:
      "Some r = d1 (\<lambda> z . makeo (λ w s . d\<kappa> (zP) = Some (ψν o1)))"
      by auto
    hence 5"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]"
      using 1 using ConjE by blast
    hence 6" 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)"
      using 2 4 unfolding 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)
    moreover have "(ψν o1) ex1 r v"
      unfolding 5 ex1_def by simp
    ultimately have "(ψν o2) ex1 r v"
      by auto
    hence "o1 = o2" unfolding 5 ex1_def by (auto simp: meta_aux)
    thus ?thesis
      using 3 by 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 EqEE by blast

subsubsectionIndividuals
text\label{TAO_MetaSolver_Identity_Individual}

  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
    moreover have "[x =\<kappa> x in v]"
      unfolding basic_identity\<kappa>_def
      apply meta_solver
      by (metis (no_types, lifting) assms AbsI Exe1E ν.exhaust)
    ultimately show ?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>_def by simp
    moreover {
      assume "[x =E y in v]"
      hence "( o1 o2. Some o1 = d\<kappa> x Some o2 = d\<kappa> y o1 = o2)"
        using EqEE by fast
    }
    moreover {
      assume 1"[(A!,x) & (A!,y) & \<box>(\<forall> F. {x,F} \<equiv> {y,F}) in v]"
      hence 2"( o1 o2 X Y. Some o1 = d\<kappa> x Some o2 = d\<kappa> y
                               o1 = αν X o2 = αν Y)"
        using AbsE ConjE by meson
      moreover then obtain o1 o2 X Y where 3:
        "Some o1 = d\<kappa> x Some o2 = d\<kappa> y o1 = αν X o2 = αν Y"
        by auto
      moreover have 4"[\<box>(\<forall> F. {x,F} \<equiv> {y,F}) in v]"
        using 1 ConjE by blast
      hence 6" v F . [{x,F} in v] [{y,F} in v]"
        using BoxE AllE EquivE by fast
      hence 7"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
      hence 8" r. (o1 en r) = (o2 en r)"
        using 3 d\<kappa>_inject d\<kappa>_proper apply simp
        by (metis option.inject)
      hence "r. (o1 r) = (o2 r)"
        unfolding en_def using 3
        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)"
        using 3 by auto
    }
    ultimately have "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κ_prop by blast
    moreover obtain φ where φ_prop:
      "φ = (λ α . makeo (λ w s . ( o1 o2. Some o1 = d\<kappa> x
                             Some o2 = d\<kappa> α o1 = o2)))"
      by auto
    ultimately have "(v φ x) = (v φ y)" by metis
    moreover have "(v φ x)"
      using assms unfolding φ_prop basic_identity\<kappa>_def
      by (metis (mono_tags, lifting) AbsS ConjE DisjS
                EqES valid_in.abs_eq)
    ultimately have "(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

subsubsectionOne-Place Relations
text\label{TAO_MetaSolver_Identity_OnePlaceRelation}

  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 Eq1by auto
  lemma Eq1_prop"[F =1 G in v] ==> [φ F in v] = [φ G in v]"
    using Eq1by blast

subsubsectionTwo-Place Relations
text\label{TAO_MetaSolver_Identity_TwoPlaceRelation}

  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]"
    hence 1"[\<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
          using 1 apply - 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 Eq2by auto
  lemma Eq2_prop"[F =2 G in v] ==> [φ F in v] = [φ G in v]"
    using Eq2by blast

subsubsectionThree-Place Relations
text\label{TAO_MetaSolver_Identity_ThreePlaceRelation}

  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]"
    hence 1"[\<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
          using 1 apply - 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 Eq3by auto
  lemma Eq3_prop"[F =3 G in v] ==> [φ F in v] = [φ G in v]"
    using Eq3by blast

subsubsectionPropositions
text\label{TAO_MetaSolver_Identity_Proposition}

  lemma Eq0I[meta_intro]: "x = y ==> [x =0 y in v]"
    unfolding basic_identity0_def by (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_def by simp
      hence "(\<lambda>y. F) = (\<lambda>y. G)"
        using Eq1by 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 Eq0by auto
  lemma Eq0_prop"[F =0 G in v] ==> [φ F in v] = [φ G in v]"
    using Eq0by blast

end

(*<*)
end
(*>*)

Messung V0.5 in Prozent
C=87 H=98 G=92

¤ Dauer der Verarbeitung: 0.20 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

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.