(only non hidden objects are presented)
| DISP | discrete_df | Discrete{<T:type:L>}== Discrete{<T>} |
| ABS | discrete | Discrete{T} == |
| THM | discrete_wf | |
| THM | discrete_implies_bool_equality | |
| DISP | discrete_equality_df | {<T:type:L>= |
| ABS | discrete_equality | {T= |
| THM | discrete_equality_wf | |
| THM | discrete_equality_inc | |
| THM | discrete_equality_properties | |
| ML | discrete_eq_tac | let is_discrete_equality_term t = (opid_of_term t) = `discrete_equality` ;; let is_discrete_term t = (opid_of_term t) = `discrete` ;; let DiscreteEq i p = (let T = type_of_hyp i p in let i = get_pos_hyp_num i p in if is_discrete_equality_term T then let name = mk_var_term (var_of_hyp i p) in let type = hd (subterms_of_term T) in InstLemma `discrete_equality_properties` [type;name] THENA Auto THEN D (-1) THEN CopyToHyp (i + 1) (-2) THEN Thin (-2) THEN CopyToHyp (i + 1) (-1) THEN Thin (-1) else failwith `DiscreteEq: hyp is not an discrete_equality term.` )p ;; let MkDiscreteEqInst i p = (let T = type_of_hyp i p in let i = get_pos_hyp_num i p in let dvars = (declared_vars p) in let eq = maybe_new_var (mkv `eq`) dvars in if is_discrete_term T then FwdThruLemma `discrete_implies_discrete_equality` [i] THENA Auto THEN D (-1) THEN Thin (-1) THEN CopyToHyp (i + 1) (-1) THEN Thin (-1) THEN RenameVar eq (i + 1) THEN DiscreteEq (i + 1) else failwith `MkDiscreteEq: hyp is not a discrete term.` )p ;; let MkDiscreteEq t = InstLemma (concat `discrete__` t) [] THENA Auto THEN MkDiscreteEqInst (-1) THEN OnHyps [-4;-2;-1] Thin ;; let MkDiscreteEqWith t name i = MkDiscreteEq t THEN MoveToHyp i (-1) THEN RenameVar name i ;; |
| THM | discrete_implies_discrete_equality | |
| THM | discrete_equality_unique | |
| THM | discrete_equality_reflexive | |
| THM | discrete_equality_symmetric | |
| THM | discrete_equality_transitive | |
| THM | discrete__union | |
| THM | discrete__product | |
| THM | discrete__atom | Discrete{Atom} |