equal
deleted
inserted
replaced
61 notepad |
61 notepad |
62 begin |
62 begin |
63 { |
63 { |
64 fix x -- {* all potential occurrences of some @{text "x::\<tau>"} are fixed *} |
64 fix x -- {* all potential occurrences of some @{text "x::\<tau>"} are fixed *} |
65 { |
65 { |
66 have "x::'a \<equiv> x" -- {* implicit type assigment by concrete occurrence *} |
66 have "x::'a \<equiv> x" -- {* implicit type assignment by concrete occurrence *} |
67 by (rule reflexive) |
67 by (rule reflexive) |
68 } |
68 } |
69 thm this -- {* result still with fixed type @{text "'a"} *} |
69 thm this -- {* result still with fixed type @{text "'a"} *} |
70 } |
70 } |
71 thm this -- {* fully general result for arbitrary @{text "?x::?'a"} *} |
71 thm this -- {* fully general result for arbitrary @{text "?x::?'a"} *} |
73 |
73 |
74 text {* The Isabelle/Isar proof context manages the details of term |
74 text {* The Isabelle/Isar proof context manages the details of term |
75 vs.\ type variables, with high-level principles for moving the |
75 vs.\ type variables, with high-level principles for moving the |
76 frontier between fixed and schematic variables. |
76 frontier between fixed and schematic variables. |
77 |
77 |
78 The @{text "add_fixes"} operation explictly declares fixed |
78 The @{text "add_fixes"} operation explicitly declares fixed |
79 variables; the @{text "declare_term"} operation absorbs a term into |
79 variables; the @{text "declare_term"} operation absorbs a term into |
80 a context by fixing new type variables and adding syntactic |
80 a context by fixing new type variables and adding syntactic |
81 constraints. |
81 constraints. |
82 |
82 |
83 The @{text "export"} operation is able to perform the main work of |
83 The @{text "export"} operation is able to perform the main work of |
196 |
196 |
197 text {* The following ML code can now work with the invented names of |
197 text {* The following ML code can now work with the invented names of |
198 @{text x1}, @{text x2}, @{text x3}, without depending on |
198 @{text x1}, @{text x2}, @{text x3}, without depending on |
199 the details on the system policy for introducing these variants. |
199 the details on the system policy for introducing these variants. |
200 Recall that within a proof body the system always invents fresh |
200 Recall that within a proof body the system always invents fresh |
201 ``skolem constants'', e.g.\ as follows: *} |
201 ``Skolem constants'', e.g.\ as follows: *} |
202 |
202 |
203 notepad |
203 notepad |
204 begin |
204 begin |
205 ML_prf %"ML" {* |
205 ML_prf %"ML" {* |
206 val ctxt0 = @{context}; |
206 val ctxt0 = @{context}; |
435 "C"} in the context augmented by fixed variables @{text "xs"} and |
435 "C"} in the context augmented by fixed variables @{text "xs"} and |
436 assumptions @{text "As"}, and applies tactic @{text "tac"} to solve |
436 assumptions @{text "As"}, and applies tactic @{text "tac"} to solve |
437 it. The latter may depend on the local assumptions being presented |
437 it. The latter may depend on the local assumptions being presented |
438 as facts. The result is in HHF normal form. |
438 as facts. The result is in HHF normal form. |
439 |
439 |
440 \item @{ML Goal.prove_multi} is simular to @{ML Goal.prove}, but |
440 \item @{ML Goal.prove_multi} is similar to @{ML Goal.prove}, but |
441 states several conclusions simultaneously. The goal is encoded by |
441 states several conclusions simultaneously. The goal is encoded by |
442 means of Pure conjunction; @{ML Goal.conjunction_tac} will turn this |
442 means of Pure conjunction; @{ML Goal.conjunction_tac} will turn this |
443 into a collection of individual subgoals. |
443 into a collection of individual subgoals. |
444 |
444 |
445 \item @{ML Obtain.result}~@{text "tac thms ctxt"} eliminates the |
445 \item @{ML Obtain.result}~@{text "tac thms ctxt"} eliminates the |