diff -r dd0f298b024c -r 477c05586286 src/HOL/MiniML/Generalize.thy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/HOL/MiniML/Generalize.thy Fri Jan 17 18:50:04 1997 +0100 @@ -0,0 +1,38 @@ +(* Title: HOL/MiniML/Generalize.thy + ID: $Id$ + Author: Wolfgang Naraschewski and Tobias Nipkow + Copyright 1996 TU Muenchen + +Generalizing type schemes with respect to a context +*) + +Generalize = Instance + + + +(* gen: binding (generalising) the variables which are not free in the type scheme *) + +types ctxt = type_scheme list + +consts + gen :: [ctxt, typ] => type_scheme + +primrec gen typ + "gen A (TVar n) = (if (n:(free_tv A)) then (FVar n) else (BVar n))" + "gen A (t1 -> t2) = ((gen A t1) =-> (gen A t2))" + +(* executable version of gen: Implementation with free_tv_ML *) + +consts + gen_ML_aux :: [nat list, typ] => type_scheme + +primrec gen_ML_aux typ + "gen_ML_aux A (TVar n) = (if (n mem A) then (FVar n) else (BVar n))" + "gen_ML_aux A (t1 -> t2) = ((gen_ML_aux A t1) =-> (gen_ML_aux A t2))" + +consts + gen_ML :: [ctxt, typ] => type_scheme + +defs + gen_ML_def "gen_ML A t == gen_ML_aux (free_tv_ML A) t" + +end