section‹Data Space Assignments› theory Data imports DataSpace begin
subsection‹Total data space assignments›
definition
Data :: "['d list, 'd dataspace] => bool"where "Data L D = (((length L) = (PartNum D)) ∧ (∀ i ∈ {n. n < (PartNum D)}. (L!i) ∈ (PartDom D i)))"
lemma Data_EmptySet: "([@ t. True], Abs_dataspace [UNIV])∈ { (L,D) | L D. Data L D }" apply (unfold Data_def PartDom_def) apply auto apply (subst Abs_dataspace_inverse) apply auto done
definition "data = { (L,D) | (L::('d list)) (D::('d dataspace)). Data L D }"
typedef 'd data = "data :: ('d list * 'd dataspace) set" unfolding data_def apply (rule exI) apply (rule Data_EmptySet) done
definition
PData :: "['d option list, 'd dataspace] => bool"where "PData L D == ((length L) = (PartNum D)) ∧ (∀ i ∈ {n. n < (PartNum D)}. (L!i) ≠ None ⟶ the (L!i) ∈ (PartDom D i))"
lemma PData_EmptySet: "([Some (@ t. True)], Abs_dataspace [UNIV]) ∈ { (L,D) | L D. PData L D }" apply (unfold PData_def PartDom_def) apply auto apply (subst Abs_dataspace_inverse) apply auto done
definition "pdata = { (L,D) | (L::('d option list)) (D::('d dataspace)). PData L D }"
typedef 'd pdata = "pdata :: ('d option list * 'd dataspace) set" unfolding pdata_def apply (rule exI) apply (rule PData_EmptySet) done
lemma PData_Data2PData [simp]: "PData (map Some (DataValue D)) (Data.DataSpace D)" apply (unfold PData_def) apply auto done
lemma pdata_Data2PData [simp]: "(map Some (DataValue D), Data.DataSpace D) ∈ pdata" apply (unfold pdata_def) apply auto done
lemma DataSpace_Data2PData [simp]: "(PDataSpace (Data2PData D)) = (Data.DataSpace D)" apply (unfold DataSpace_def PDataSpace_def Data2PData_def Let_def) apply auto apply (cut_tac D=D in Rep_data_tuple) apply auto apply (subst Abs_pdata_inverse) apply auto done
lemma PDataValue_Data2PData_DataValue [simp]: "(map the (PDataValue (Data2PData D))) = DataValue D" apply (unfold DataValue_def PDataValue_def Data2PData_def Let_def) apply auto apply (cut_tac D=D in Rep_data_tuple) apply auto apply (subst Abs_pdata_inverse) apply simp apply (simp del: map_map) done
lemma DataSpace_PData2Data: "Data (map the (PDataValue D)) (PDataSpace D) ==> (Data.DataSpace (PData2Data D) = (PDataSpace D))" apply (unfold DataSpace_def PDataSpace_def PData2Data_def Let_def) apply auto apply (cut_tac D=D in Rep_pdata_tuple) apply auto apply (subst Abs_data_inverse) apply (unfold data_def) apply auto done
lemma PartNum_PDataValue_PartDom [simp]: "[ i < PartNum (PDataSpace Q); PDataValue Q ! i = Some y ]==> y ∈ PartDom (PDataSpace Q) i" apply (cut_tac D=Q in Rep_pdata_select) apply (unfold pdata_def PData_def) apply auto done
subsubsection‹‹DataOverride››
lemma Data_DataOverride: "((PDataSpace P) = (Data.DataSpace Q)) ==> Data (map OptionOverride (zip (PDataValue P) (Data.DataValue Q))) (Data.DataSpace Q)" apply (unfold Data_def) apply auto apply (unfold OptionOverride_def) apply auto apply (rename_tac i D) apply (case_tac "PDataValue P ! i = None") apply auto apply (drule sym) apply auto 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.