src/CCL/ex/list.ML
changeset 8 c3d2c6dcf3f0
parent 0 a5a9c433f639
child 290 37d580c16af5
equal deleted inserted replaced
7:268f93ab3bc4 8:c3d2c6dcf3f0
    11 val list_defs = [map_def,comp_def,append_def,filter_def,flat_def,
    11 val list_defs = [map_def,comp_def,append_def,filter_def,flat_def,
    12                  insert_def,isort_def,partition_def,qsort_def];
    12                  insert_def,isort_def,partition_def,qsort_def];
    13 
    13 
    14 (****)
    14 (****)
    15 
    15 
    16 val listBs = map (fn s=>prove_goalw List.thy list_defs s (fn _ => [SIMP_TAC term_ss 1]))
    16 val listBs = map (fn s=>prove_goalw List.thy list_defs s (fn _ => [simp_tac term_ss 1]))
    17      ["(f o g) = (%a.f(g(a)))",
    17      ["(f o g) = (%a.f(g(a)))",
    18       "(f o g)(a) = f(g(a))",
    18       "(f o g)(a) = f(g(a))",
    19       "map(f,[]) = []",
    19       "map(f,[]) = []",
    20       "map(f,x.xs) = f(x).map(f,xs)",
    20       "map(f,x.xs) = f(x).map(f,xs)",
    21       "[] @ m = m",
    21       "[] @ m = m",
    25       "flat([]) = []",
    25       "flat([]) = []",
    26       "flat(x.xs) = x @ flat(xs)",
    26       "flat(x.xs) = x @ flat(xs)",
    27       "insert(f,a,[]) = a.[]",
    27       "insert(f,a,[]) = a.[]",
    28       "insert(f,a,x.xs) = if f`a`x then a.x.xs else x.insert(f,a,xs)"];
    28       "insert(f,a,x.xs) = if f`a`x then a.x.xs else x.insert(f,a,xs)"];
    29 
    29 
    30 val list_congs = ccl_mk_congs List.thy ["map","op @","filter","flat","insert","napply"];
    30 val list_ss = nat_ss addsimps listBs;
    31 
       
    32 val list_ss = nat_ss addrews listBs addcongs list_congs;
       
    33 
    31 
    34 (****)
    32 (****)
    35 
    33 
    36 val [prem] = goal List.thy "n:Nat ==> map(f) ^ n ` [] = []";
    34 val [prem] = goal List.thy "n:Nat ==> map(f) ^ n ` [] = []";
    37 br (prem RS Nat_ind) 1;
    35 br (prem RS Nat_ind) 1;
    38 by (ALLGOALS (ASM_SIMP_TAC list_ss));
    36 by (ALLGOALS (asm_simp_tac list_ss));
    39 val nmapBnil = result();
    37 val nmapBnil = result();
    40 
    38 
    41 val [prem] = goal List.thy "n:Nat ==> map(f)^n`(x.xs) = f^n`x.map(f)^n`xs";
    39 val [prem] = goal List.thy "n:Nat ==> map(f)^n`(x.xs) = f^n`x.map(f)^n`xs";
    42 br (prem RS Nat_ind) 1;
    40 br (prem RS Nat_ind) 1;
    43 by (ALLGOALS (ASM_SIMP_TAC list_ss));
    41 by (ALLGOALS (asm_simp_tac list_ss));
    44 val nmapBcons = result();
    42 val nmapBcons = result();
    45 
    43 
    46 (***)
    44 (***)
    47 
    45 
    48 val prems = goalw List.thy [map_def]
    46 val prems = goalw List.thy [map_def]