bool(3)

==>の定義.

# IMP_DEF;;
val it : thm = |- (==>) = (\p q. p /\ q <=> p)

MP `ASM1 |- a ==> b` `ASM2 |- a` gives `ASM1+ASM2 |- b`
モーダス・ポーネンス.

# MP (ASSUME `p==>q`) (ASSUME `p:bool`);;
val it : thm = p, p ==> q |- q

DISCH `a` `ASM,a |- b` gives `ASM |- a ==> b`
DISCH_ALL repeats DISCH until there are no more hypotheses.
仮定から結論の含意の前件への移行

# DISCH_ALL it;;
val it : thm = |- (p ==> q) ==> p ==> q
# DISCH `p:bool` (ASSUME `p:bool`);;
val it : thm = |- p ==> p

UNDISCH `ASM |- a ==> b` gives `ASM,a |- b`
UNDISCH_ALL repeats UNDISCH until the conclusion is not an implication
結論の含意の前件から仮定への移行

# UNDISCH (ASSUME `p==>q==>r`);;
val it : thm = p, p ==> q ==> r |- q ==> r
# UNDISCH it;;
val it : thm = p, q, p ==> q ==> r |- r
# DISCH_ALL it;;
val it : thm = |- (p ==> q ==> r) ==> q ==> p ==> r
# UNDISCH_ALL it;;
val it : thm = p, q, p ==> q ==> r |- r

含意の推移律.
IMP_TRANS `ASM1 |- a ==> b` `ASM2 |- b ==> c` gives `ASM1+ASM2 |- a ==> c`

含意の反対称律.
IMP_ANTISYM_RULE `ASM1 |- a ==> b` `ASM2 |- b ==> a` gives `ASM1+ASM2 |- a = b`

同値の含意への分解.
EQ_IMP_RULE `ASM |- (a:bool) = b` gives (`ASM |- a ==> b`, `ASM |- b ==> a`)

仮定の導入.
ADD_ASSUM `a` `ASM |- b` gives `ASM,a |- b`

# ASSUME `p:bool`;;
val it : thm = p |- p
# ADD_ASSUM `q:bool` it;;
val it : thm = p, q |- p
let thm1 = UNDISCH (REAL_RING `x = &1 ==> x * x = &1`)
and thm2 = UNDISCH (REAL_RING `y = &0 ==> y * y = &0`);;
MP (ASSUME `x * x = &1 ==> y = &0`) thm1;;
PROVE_HYP it thm2;;

let LIMP_INTRO thm1 thm2 = PROVE_HYP (MP (ASSUME (mk_binop `==>` (concl(thm1)) (hd(hyp thm2)))) thm1) thm2;;

let RIMP_INTRO thm = DISCH (hd(hyp(thm))) thm ;;