lemma length_fv_fo_fmla_list: "length (fv_fo_fmla_list φ) = card (fv_fo_fmla φ)" using fv_fo_fmla_list_set[of φ] sorted_distinct_fv_list[of φ]
distinct_card[of "fv_fo_fmla_list φ"] by auto
lemma fv_fo_fmla_list_eq: "fv_fo_fmla φ = fv_fo_fmla ψ ==> fv_fo_fmla_list φ = fv_fo_fmla_list ψ" using fv_fo_fmla_list_set sorted_distinct_fv_list by (metis sorted_distinct_set_unique)
lemma fv_fo_fmla_list_Conj: "fv_fo_fmla_list (Conj φ ψ) = fv_fo_fmla_list (Conj ψ φ)" using fv_fo_fmla_list_eq[of "Conj φ ψ""Conj ψ φ"] by auto
type_synonym 'a table = "('a list) set"
type_synonym ('t, 'b) fo_intp = "'b × nat ==> 't"
fun wf_fo_intp :: "('a, 'b) fo_fmla ==> ('a table, 'b) fo_intp ==> bool"where "wf_fo_intp (Pred r ts) I ⟷ finite (I (r, length ts))"
| "wf_fo_intp (Bool b) I ⟷ True"
| "wf_fo_intp (Eqa t t') I ⟷ True"
| "wf_fo_intp (Neg φ) I ⟷ wf_fo_intp φ I"
| "wf_fo_intp (Conj φ ψ) I ⟷ wf_fo_intp φ I ∧ wf_fo_intp ψ I"
| "wf_fo_intp (Disj φ ψ) I ⟷ wf_fo_intp φ I ∧ wf_fo_intp ψ I"
| "wf_fo_intp (Exists n φ) I ⟷ wf_fo_intp φ I"
| "wf_fo_intp (Forall n φ) I ⟷ wf_fo_intp φ I"
fun sat :: "('a, 'b) fo_fmla ==> ('a table, 'b) fo_intp ==> 'a val ==> bool"where "sat (Pred r ts) I σ ⟷ σ ⊙ ts ∈ I (r, length ts)"
| "sat (Bool b) I σ ⟷ b"
| "sat (Eqa t t') I σ ⟷ σ ⋅ t = σ ⋅ t'"
| "sat (Neg φ) I σ ⟷¬sat φ I σ"
| "sat (Conj φ ψ) I σ ⟷ sat φ I σ ∧ sat ψ I σ"
| "sat (Disj φ ψ) I σ ⟷ sat φ I σ ∨ sat ψ I σ"
| "sat (Exists n φ) I σ ⟷ (∃x. sat φ I (σ(n := x)))"
| "sat (Forall n φ) I σ ⟷ (∀x. sat φ I (σ(n := x)))"
lemma sat_fv_cong: "(∧n. n ∈ fv_fo_fmla φ ==> σ n = σ' n) ==> sat φ I σ ⟷ sat φ I σ'" proof (induction φ arbitrary: σ σ') case (Neg φ) show ?case using Neg(1)[of σ σ'] Neg(2) by auto next case (Conj φ ψ) show ?case using Conj(1,2)[of σ σ'] Conj(3) by auto next case (Disj φ ψ) show ?case using Disj(1,2)[of σ σ'] Disj(3) by auto next case (Exists n φ) have"∧x. sat φ I (σ(n := x)) = sat φ I (σ'(n := x))" using Exists(2) by (auto intro!: Exists(1)) thenshow ?case by simp next case (Forall n φ) have"∧x. sat φ I (σ(n := x)) = sat φ I (σ'(n := x))" using Forall(2) by (auto intro!: Forall(1)) thenshow ?case by simp qed (auto cong: eval_terms_cong eval_term_cong)
definition proj_sat :: "('a, 'b) fo_fmla ==> ('a table, 'b) fo_intp ==> 'a table"where "proj_sat φ I = (λσ. map σ (fv_fo_fmla_list φ)) ` {σ. sat φ I σ}"
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.4 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.