197 Buildin("=>", [fm (not pos) p, fm pos q]) |
197 Buildin("=>", [fm (not pos) p, fm pos q]) |
198 | fm pos (Const(@{const_name Not}, _) $ p) = |
198 | fm pos (Const(@{const_name Not}, _) $ p) = |
199 Buildin("NOT", [fm (not pos) p]) |
199 Buildin("NOT", [fm (not pos) p]) |
200 | fm pos (Const(@{const_name True}, _)) = TrueExpr |
200 | fm pos (Const(@{const_name True}, _)) = TrueExpr |
201 | fm pos (Const(@{const_name False}, _)) = FalseExpr |
201 | fm pos (Const(@{const_name False}, _)) = FalseExpr |
202 | fm pos (Const("SVC_Oracle.iff_keep", _) $ p $ q) = |
202 | fm pos (Const(@{const_name iff_keep}, _) $ p $ q) = |
203 (*polarity doesn't matter*) |
203 (*polarity doesn't matter*) |
204 Buildin("=", [fm pos p, fm pos q]) |
204 Buildin("=", [fm pos p, fm pos q]) |
205 | fm pos (Const("SVC_Oracle.iff_unfold", _) $ p $ q) = |
205 | fm pos (Const(@{const_name iff_unfold}, _) $ p $ q) = |
206 Buildin("AND", (*unfolding uses both polarities*) |
206 Buildin("AND", (*unfolding uses both polarities*) |
207 [Buildin("=>", [fm (not pos) p, fm pos q]), |
207 [Buildin("=>", [fm (not pos) p, fm pos q]), |
208 Buildin("=>", [fm (not pos) q, fm pos p])]) |
208 Buildin("=>", [fm (not pos) q, fm pos p])]) |
209 | fm pos (t as Const(@{const_name HOL.eq}, Type ("fun", [T,_])) $ x $ y) = |
209 | fm pos (t as Const(@{const_name HOL.eq}, Type ("fun", [T,_])) $ x $ y) = |
210 let val tx = tm x and ty = tm y |
210 let val tx = tm x and ty = tm y |