12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061(** Configuration for tactics based on first-order logic. *)openCommonopenErroropenCoreopenTerm(** Builtin configuration for propositional logic. *)typeconfig={symb_Prop:sym(** Type of propositions. *);symb_P:sym(** Encoding of propositions. *);symb_Set:sym(** Type of sets. *);symb_T:sym(** Encoding of types. *);symb_or:sym(** Disjunction(∨) symbol. *);symb_and:sym(** Conjunction(∧) symbol. *);symb_imp:sym(** Implication(⇒) symbol. *);symb_eqv:sym(** Equivalence(⇔) symbol. *);symb_bot:sym(** Bot(⊥) symbol. *);symb_top:sym(** Top(⊤) symbol. *);symb_not:sym(** Not(¬) symbol. *);symb_ex:sym(** Exists(∃) symbol. *);symb_all:sym(** Forall(∀) symbol. *)}(** [get_config ss pos] build the configuration using [ss]. *)letget_config:Sig_state.t->Pos.popt->config=funsspos->letbuiltin=Builtin.getssposinletsymb_P=builtin"P"andsymb_T=builtin"T"inletsymb_Prop=matchunfoldTimed.(!(symb_P.sym_type))with|Prod(a,_)->beginmatchunfoldawith|Symbs->s|_->fatalpos"The type of %a is not of the form Prop → _ \
with Prop a symbol."Print.symsymb_Pend|_->fatalpos"The type of %a is not a product"Print.symsymb_Pandsymb_Set=matchunfoldTimed.(!(symb_T.sym_type))with|Prod(a,_)->beginmatchunfoldawith|Symbs->s|_->fatalpos"The type of %a is not of the form Prop → _ \
with Prop a symbol."Print.symsymb_Tend|_->fatalpos"The type of %a is not a product"Print.symsymb_Tin{symb_Prop;symb_P;symb_Set;symb_T;symb_or=builtin"or";symb_and=builtin"and";symb_imp=builtin"imp";symb_eqv=builtin"eqv";symb_bot=builtin"bot";symb_top=builtin"top";symb_not=builtin"not";symb_ex=builtin"ex";symb_all=builtin"all"}