BoolClass Module

This module derives further predicate logic theorems and inference rules. Unlike all preceding derivations, these all use the Axiom of Choice (i.e. 'select_ax'), and thus could be considered as classical logic. However, note that some of these (such as 'exists_rule') are actually derivable in intuitionistic logic if an alternative definition of existential quantification is used (as in HOL Light).

Functions and values

Function or value Description

bool_cases_thm

Full Usage: bool_cases_thm

Returns: thm

|- !p. (p <=> true) \/ (p <=> false)

Returns: thm

ccontr_lemma

Full Usage: ccontr_lemma

Returns: thm
Returns: thm

ccontr_rule tm th

Full Usage: ccontr_rule tm th

Parameters:
Returns: thm

This is the classical contradiction rule. It takes a boolean term and a theorem with falsity as its conclusion. It returns a theorem with the supplied term as its conclusion, and with the same assumptions as the supplied theorem but with the logical negation of the supplied term removed. Note that the logical negation of the supplied term does not have to be in the supplied theorem's assumptions for the rule to succeed. `p` A |- false ---------------- A\{~p} |- p See also: contr_rule, deduct_contrapos_rule.

tm : term
th : thm
Returns: thm

cond_false_thm

Full Usage: cond_false_thm

Returns: thm

|- !t1 t2. (if false then t1 else t2) = t2

Returns: thm

cond_idem_thm

Full Usage: cond_idem_thm

Returns: thm

|- !p t. (if p then t else t) = t

Returns: thm

cond_not_thm

Full Usage: cond_not_thm

Returns: thm

|- !p t1 t2. (if ~ p then t1 else t2) = (if p then t2 else t1)

Returns: thm

cond_true_thm

Full Usage: cond_true_thm

Returns: thm

|- !t1 t2. (if true then t1 else t2) = t1

Returns: thm

excluded_middle_thm

Full Usage: excluded_middle_thm

Returns: thm

|- !p. p \/ ~p

Returns: thm

exists_dist_disj_thm

Full Usage: exists_dist_disj_thm

Returns: thm

|- !P Q. (?x. P x \/ Q x) <=> (?x. P x) \/ (?x. Q x)

Returns: thm

exists_null_thm

Full Usage: exists_null_thm

Returns: thm

|- !t. (?x. t) <=> t

Returns: thm

exists_one_point_thm

Full Usage: exists_one_point_thm

Returns: thm

|- !P a. (?x. x = a /\ P x) <=> P a

Returns: thm

exists_rule (tm1, tm2) th

Full Usage: exists_rule (tm1, tm2) th

Parameters:
Returns: thm

This is the existential introduction rule. It takes an existential term, a witness term and a theorem, where the theorem's conclusion is the body of the existential term but with the witness term replacing occurrences of its binding variable. It returns a theorem stating that the supplied existential term holds, under the same assumptions as the supplied theorem. `?x. p` `t` A |- p[t/x] --------------------------- A |- ?x. p See also: choose_rule, select_rule, mk_exists_rule.

tm1 : term
tm2 : term
th : thm
Returns: thm

imp_disj_thm

Full Usage: imp_disj_thm

Returns: thm

|- !p q. (p ==> q) <=> (~ p \/ q)

Returns: thm

load

Full Usage: load

Returns: (string * thm) list

Force module evaluation

Returns: (string * thm) list

not_dist_conj_thm

Full Usage: not_dist_conj_thm

Returns: thm

|- !p q. ~ (p /\ q) <=> ~ p \/ ~ q

Returns: thm

not_dist_exists_thm

Full Usage: not_dist_exists_thm

Returns: thm

|- !P. ~ (?x. P x) <=> (!x. ~ P x)

Returns: thm

not_dist_forall_thm

Full Usage: not_dist_forall_thm

Returns: thm

|- !P. ~ (!x. P x) <=> (?x. ~ P x)

Returns: thm

not_dneg_thm

Full Usage: not_dneg_thm

Returns: thm

|- !p. ~ ~ p <=> p

Returns: thm

select_eq_thm

Full Usage: select_eq_thm

Returns: thm

|- !(a:'a). (@x. x = a) = a

Returns: thm

select_rule th

Full Usage: select_rule th

Parameters:
Returns: thm

This is the existential selection rule. It strips off the existential quantifier from the supplied theorem, and replaces each occurrence of the binding variable in the body with the selection operator applied to the original body (with the same binding variable). A |- ?x. p ---------------- A |- p[(@x.p)/x] See also: exists_rule.

th : thm
Returns: thm

skolem_thm

Full Usage: skolem_thm

Returns: thm

|- !P. (!x. ?y. P x y) <=> (?f. !x. P x (f x))

Returns: thm

uexists_one_point_thm

Full Usage: uexists_one_point_thm

Returns: thm

|- !P a. (?!x. x = a /\ P x) <=> P a

Returns: thm

uexists_thm1

Full Usage: uexists_thm1

Returns: thm

|- !P. (?!x. P x) <=> (?x. P x /\ (!y. P y ==> y = x))

Returns: thm

uexists_thm2

Full Usage: uexists_thm2

Returns: thm

|- !P. (?!x. P x) <=> (?x. !y. P y <=> x = y)

Returns: thm

uexists_thm3

Full Usage: uexists_thm3

Returns: thm

|- !P. (?!x. P x) <=> (?x. P x) /\ (!x x'. P x /\ P x' ==> x = x')

Returns: thm

unique_skolem_thm

Full Usage: unique_skolem_thm

Returns: thm

|- !P. (!x. ?!y. P x y) <=> (?f. !x y. P x y <=> f x = y)

Returns: thm