equal
deleted
inserted
replaced
117 val mk_string: string -> term |
117 val mk_string: string -> term |
118 val dest_string: term -> string |
118 val dest_string: term -> string |
119 val message_stringT: typ |
119 val message_stringT: typ |
120 val mk_message_string: string -> term |
120 val mk_message_string: string -> term |
121 val dest_message_string: term -> string |
121 val dest_message_string: term -> string |
|
122 val mk_typerep: typ -> term |
|
123 val mk_term_of: typ -> term -> term |
|
124 val reflect_term: term -> term |
122 end; |
125 end; |
123 |
126 |
124 structure HOLogic: HOLOGIC = |
127 structure HOLogic: HOLOGIC = |
125 struct |
128 struct |
126 |
129 |
589 $ mk_string s; |
592 $ mk_string s; |
590 fun dest_message_string (Const ("String.message_string.STR", _) $ t) = |
593 fun dest_message_string (Const ("String.message_string.STR", _) $ t) = |
591 dest_string t |
594 dest_string t |
592 | dest_message_string t = raise TERM ("dest_message_string", [t]); |
595 | dest_message_string t = raise TERM ("dest_message_string", [t]); |
593 |
596 |
|
597 |
|
598 (* typerep and term *) |
|
599 |
|
600 val typerepT = Type ("Typerep.typerep", []); |
|
601 |
|
602 fun mk_typerep T = Const ("Typerep.typerep_class.typerep", |
|
603 Term.itselfT T --> typerepT) $ Logic.mk_type T; |
|
604 |
|
605 val termT = Type ("Code_Eval.term", []); |
|
606 |
|
607 fun mk_term_of T t = Const ("Code_Eval.term_of_class.term_of", T --> termT) $ t; |
|
608 |
|
609 fun reflect_term (Const (c, T)) = |
|
610 Const ("Code_Eval.Const", message_stringT --> typerepT --> termT) |
|
611 $ mk_message_string c $ mk_typerep T |
|
612 | reflect_term (t1 $ t2) = |
|
613 Const ("Code_Eval.App", termT --> termT --> termT) |
|
614 $ reflect_term t1 $ reflect_term t2 |
|
615 | reflect_term (t as Free _) = t |
|
616 | reflect_term (t as Bound _) = t |
|
617 | reflect_term (Abs (v, _, t)) = Abs (v, termT, reflect_term t); |
|
618 |
594 end; |
619 end; |