2958 val disjt = @{term "op |"}; |
2958 val disjt = @{term "op |"}; |
2959 val impt = @{term "op -->"}; |
2959 val impt = @{term "op -->"}; |
2960 val ifft = @{term "op = :: bool => _"} |
2960 val ifft = @{term "op = :: bool => _"} |
2961 fun llt rT = Const(@{const_name Orderings.less},rrT rT); |
2961 fun llt rT = Const(@{const_name Orderings.less},rrT rT); |
2962 fun lle rT = Const(@{const_name Orderings.less},rrT rT); |
2962 fun lle rT = Const(@{const_name Orderings.less},rrT rT); |
2963 fun eqt rT = Const("op =",rrT rT); |
2963 fun eqt rT = Const(@{const_name "op ="},rrT rT); |
2964 fun rz rT = Const(@{const_name Groups.zero},rT); |
2964 fun rz rT = Const(@{const_name Groups.zero},rT); |
2965 |
2965 |
2966 fun dest_nat t = case t of |
2966 fun dest_nat t = case t of |
2967 Const (@{const_name Suc}, _) $ t' => 1 + dest_nat t' |
2967 Const (@{const_name Suc}, _) $ t' => 1 + dest_nat t' |
2968 | _ => (snd o HOLogic.dest_number) t; |
2968 | _ => (snd o HOLogic.dest_number) t; |
3013 (@{code Mul} (c, @{code Bound} n), p)) |
3013 (@{code Mul} (c, @{code Bound} n), p)) |
3014 | _ => error "term_of_tm: Unknown term"; |
3014 | _ => error "term_of_tm: Unknown term"; |
3015 |
3015 |
3016 fun fm_of_term m m' fm = |
3016 fun fm_of_term m m' fm = |
3017 case fm of |
3017 case fm of |
3018 Const("True",_) => @{code T} |
3018 Const(@{const_name "True"},_) => @{code T} |
3019 | Const("False",_) => @{code F} |
3019 | Const(@{const_name "False"},_) => @{code F} |
3020 | Const("Not",_)$p => @{code NOT} (fm_of_term m m' p) |
3020 | Const(@{const_name "Not"},_)$p => @{code NOT} (fm_of_term m m' p) |
3021 | Const("op &",_)$p$q => @{code And} (fm_of_term m m' p, fm_of_term m m' q) |
3021 | Const(@{const_name "op &"},_)$p$q => @{code And} (fm_of_term m m' p, fm_of_term m m' q) |
3022 | Const("op |",_)$p$q => @{code Or} (fm_of_term m m' p, fm_of_term m m' q) |
3022 | Const(@{const_name "op |"},_)$p$q => @{code Or} (fm_of_term m m' p, fm_of_term m m' q) |
3023 | Const("op -->",_)$p$q => @{code Imp} (fm_of_term m m' p, fm_of_term m m' q) |
3023 | Const(@{const_name "op -->"},_)$p$q => @{code Imp} (fm_of_term m m' p, fm_of_term m m' q) |
3024 | Const("op =",ty)$p$q => |
3024 | Const(@{const_name "op ="},ty)$p$q => |
3025 if domain_type ty = bT then @{code Iff} (fm_of_term m m' p, fm_of_term m m' q) |
3025 if domain_type ty = bT then @{code Iff} (fm_of_term m m' p, fm_of_term m m' q) |
3026 else @{code Eq} (@{code Sub} (tm_of_term m m' p, tm_of_term m m' q)) |
3026 else @{code Eq} (@{code Sub} (tm_of_term m m' p, tm_of_term m m' q)) |
3027 | Const(@{const_name Orderings.less},_)$p$q => |
3027 | Const(@{const_name Orderings.less},_)$p$q => |
3028 @{code Lt} (@{code Sub} (tm_of_term m m' p, tm_of_term m m' q)) |
3028 @{code Lt} (@{code Sub} (tm_of_term m m' p, tm_of_term m m' q)) |
3029 | Const(@{const_name Orderings.less_eq},_)$p$q => |
3029 | Const(@{const_name Orderings.less_eq},_)$p$q => |
3030 @{code Le} (@{code Sub} (tm_of_term m m' p, tm_of_term m m' q)) |
3030 @{code Le} (@{code Sub} (tm_of_term m m' p, tm_of_term m m' q)) |
3031 | Const("Ex",_)$Abs(xn,xT,p) => |
3031 | Const(@{const_name "Ex"},_)$Abs(xn,xT,p) => |
3032 let val (xn', p') = variant_abs (xn,xT,p) |
3032 let val (xn', p') = variant_abs (xn,xT,p) |
3033 val x = Free(xn',xT) |
3033 val x = Free(xn',xT) |
3034 fun incr i = i + 1 |
3034 fun incr i = i + 1 |
3035 val m0 = (x,0):: (map (apsnd incr) m) |
3035 val m0 = (x,0):: (map (apsnd incr) m) |
3036 in @{code E} (fm_of_term m0 m' p') end |
3036 in @{code E} (fm_of_term m0 m' p') end |
3037 | Const("All",_)$Abs(xn,xT,p) => |
3037 | Const(@{const_name "All"},_)$Abs(xn,xT,p) => |
3038 let val (xn', p') = variant_abs (xn,xT,p) |
3038 let val (xn', p') = variant_abs (xn,xT,p) |
3039 val x = Free(xn',xT) |
3039 val x = Free(xn',xT) |
3040 fun incr i = i + 1 |
3040 fun incr i = i + 1 |
3041 val m0 = (x,0):: (map (apsnd incr) m) |
3041 val m0 = (x,0):: (map (apsnd incr) m) |
3042 in @{code A} (fm_of_term m0 m' p') end |
3042 in @{code A} (fm_of_term m0 m' p') end |
3043 | _ => error "fm_of_term"; |
3043 | _ => error "fm_of_term"; |
3044 |
3044 |
3045 |
3045 |
3046 fun term_of_fm T m m' t = |
3046 fun term_of_fm T m m' t = |
3047 case t of |
3047 case t of |
3048 @{code T} => Const("True",bT) |
3048 @{code T} => Const(@{const_name "True"},bT) |
3049 | @{code F} => Const("False",bT) |
3049 | @{code F} => Const(@{const_name "False"},bT) |
3050 | @{code NOT} p => nott $ (term_of_fm T m m' p) |
3050 | @{code NOT} p => nott $ (term_of_fm T m m' p) |
3051 | @{code And} (p,q) => conjt $ (term_of_fm T m m' p) $ (term_of_fm T m m' q) |
3051 | @{code And} (p,q) => conjt $ (term_of_fm T m m' p) $ (term_of_fm T m m' q) |
3052 | @{code Or} (p,q) => disjt $ (term_of_fm T m m' p) $ (term_of_fm T m m' q) |
3052 | @{code Or} (p,q) => disjt $ (term_of_fm T m m' p) $ (term_of_fm T m m' q) |
3053 | @{code Imp} (p,q) => impt $ (term_of_fm T m m' p) $ (term_of_fm T m m' q) |
3053 | @{code Imp} (p,q) => impt $ (term_of_fm T m m' p) $ (term_of_fm T m m' q) |
3054 | @{code Iff} (p,q) => ifft $ (term_of_fm T m m' p) $ (term_of_fm T m m' q) |
3054 | @{code Iff} (p,q) => ifft $ (term_of_fm T m m' p) $ (term_of_fm T m m' q) |