(* Not difficult to prove, but useful for directing particular sequences of equality -SM *) lemma class_cons: "[ C ≠ fst x ]==> class (x # P) C = class P C" by (simp add: class_def)
definition is_class :: "'m prog ==> cname ==> bool" where "is_class P C ≡ class P C ≠ None"
lemma finite_is_class: "finite {C. is_class P C}" (*<*) proof - have"{C. is_class P C} = dom (map_of P)" by (simp add: is_class_def class_def dom_def) thus ?thesis by (simp add: finite_dom_map_of) qed (*>*)
definition is_type :: "'m prog ==> ty ==> bool" where "is_type P T ≡ (case T of Void ==> True | Boolean ==> True | Integer ==> True | NT ==> True | Class C ==> is_class P C)"
lemma is_type_simps [simp]: "is_type P Void ∧ is_type P Boolean ∧ is_type P Integer ∧ is_type P NT ∧ is_type P (Class C) = is_class P C" (*<*)by(simp add:is_type_def)(*>*)
abbreviation "types P == Collect (is_type P)"
lemma class_exists_equiv: "(∃x. fst x = cn ∧ x ∈ set P) = (class P cn ≠ None)" proof(rule iffI) assume"∃x. fst x = cn ∧ x ∈ set P"thenshow"class P cn ≠ None" by (metis class_def image_eqI map_of_eq_None_iff) next assume"class P cn ≠ None"thenshow"∃x. fst x = cn ∧ x ∈ set P" by (metis class_def fst_conv map_of_SomeD option.exhaust) qed
lemma class_exists_equiv2: "(∃x. fst x = cn ∧ x ∈ set (P1 @ P2)) = (class P1 cn ≠ None ∨ class P2 cn ≠ None)" by (simp only: class_exists_equiv [where P = "P1@P2"], simp add: class_def)
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.10 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.