(* Base variables may be assigned arbitrary (type-correct) values. Notethatvsmaybeatupleofvariables.Thecorrectidentification ofbasevariablesisuptotheuserwhomusttakecarenotto introduceaninconsistency.Forexample,"basevars(x,x)"would definitelybeinconsistent.
*) overloading stvars ≡ stvars begin definition stvars :: "(state ==> 'a) ==> bool" where basevars_def: "stvars vs == range vs = UNIV" end
lemma basevars: "∧vs. basevars vs ==>∃u. vs u = c" apply (unfold basevars_def) apply (rule_tac b = c and f = vs in rangeE) apply auto done
lemma base_pair1: "∧x y. basevars (x,y) ==> basevars x" apply (simp (no_asm) add: basevars_def) apply (rule equalityI) apply (rule subset_UNIV) apply (rule subsetI) apply (drule_tac c = "(xa, _) "in basevars) apply auto done
lemma base_pair2: "∧x y. basevars (x,y) ==> basevars y" apply (simp (no_asm) add: basevars_def) apply (rule equalityI) apply (rule subset_UNIV) apply (rule subsetI) apply (drule_tac c = "(_, xa) "in basevars) apply auto done
(* Since the unit type has just one value, any state function can be regardedas"base".Thefollowingaxiomcansometimesbeuseful becauseitgivesatrivialsolutionfor"basevars"premises.
*) lemma unit_base: "basevars (v::unit stfun)" apply (unfold basevars_def) apply auto done
lemma baseE: "[ basevars v; ∧x. v x = c ==> Q ]==> Q" apply (erule basevars [THEN exE]) apply blast done
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.