section \Records based on BNF/datatype machinery\ theory BNF_Record imports Main keywords "bnf_record" :: thy_decl begin no_syntax "_constify" :: "id => ident" ("_") "_constify" :: "longid => ident" ("_") "_field_type" :: "ident => type => field_type" ("(2_ ::/ _)") "" :: "field_type => field_types" ("_") "_field_types" :: "field_type => field_types => field_types" ("_,/ _") "_record_type" :: "field_types => type" ("(3\_\)") "_record_type_scheme" :: "field_types => type => type" ("(3\_,/ (2\ ::/ _)\)") "_field" :: "ident => 'a => field" ("(2_ =/ _)") "" :: "field => fields" ("_") "_fields" :: "field => fields => fields" ("_,/ _") "_record" :: "fields => 'a" ("(3\_\)") "_record_scheme" :: "fields => 'a => 'a" ("(3\_,/ (2\ =/ _)\)") "_field_update" :: "ident => 'a => field_update" ("(2_ :=/ _)") "" :: "field_update => field_updates" ("_") "_field_updates" :: "field_update => field_updates => field_updates" ("_,/ _") "_record_update" :: "'a => field_updates => 'b" ("_/(3\_\)" [900, 0] 900) no_syntax (ASCII) "_record_type" :: "field_types => type" ("(3'(| _ |'))") "_record_type_scheme" :: "field_types => type => type" ("(3'(| _,/ (2... ::/ _) |'))") "_record" :: "fields => 'a" ("(3'(| _ |'))") "_record_scheme" :: "fields => 'a => 'a" ("(3'(| _,/ (2... =/ _) |'))") "_record_update" :: "'a => field_updates => 'b" ("_/(3'(| _ |'))" [900, 0] 900) (* copied and adapted from Record.thy *) nonterminal field and fields and field_update and field_updates syntax "_constify" :: "id => ident" ("_") "_constify" :: "longid => ident" ("_") "_bnf_field" :: "ident => 'a => field" ("(2_ =/ _)") "" :: "field => fields" ("_") "_bnf_fields" :: "field => fields => fields" ("_,/ _") "_bnf_record" :: "fields => 'a" ("(3\_\)") "_bnf_field_update" :: "ident => 'a => field_update" ("(2_ :=/ _)") "" :: "field_update => field_updates" ("_") "_bnf_field_updates" :: "field_update => field_updates => field_updates" ("_,/ _") "_bnf_record_update" :: "'a => field_updates => 'b" ("_/(3\_\)" [900, 0] 900) syntax (ASCII) "_bnf_record" :: "fields => 'a" ("(3'(| _ |'))") "_bnf_record_scheme" :: "fields => 'a => 'a" ("(3'(| _,/ (2... =/ _) |'))") "_bnf_record_update" :: "'a => field_updates => 'b" ("_/(3'(| _ |'))" [900, 0] 900) named_theorems bnf_record_update ML_file "bnf_record.ML" setup \BNF_Record.setup\ end