# HG changeset patch # User wenzelm # Date 1511775403 -3600 # Node ID 4a2563645635d65fede6480d7b19e8b2c4c92cea # Parent 835a2ab92c3dc7bc4f9a07b31957a1596bd9d54a more symbols; diff -r 835a2ab92c3d -r 4a2563645635 src/HOL/Tools/rewrite_hol_proof.ML --- a/src/HOL/Tools/rewrite_hol_proof.ML Mon Nov 27 10:21:52 2017 +0100 +++ b/src/HOL/Tools/rewrite_hol_proof.ML Mon Nov 27 10:36:43 2017 +0100 @@ -19,288 +19,288 @@ (** eliminate meta-equality rules **) - [\(equal_elim % x1 % x2 %% - (combination % TYPE('T1) % TYPE('T2) % Trueprop % x3 % A % B %% - (axm.reflexive % TYPE('T3) % x4) %% prf1)) == - (iffD1 % A % B %% - (meta_eq_to_obj_eq % TYPE(bool) % A % B %% arity_type_bool %% prf1))\, + [\(equal_elim \ x1 \ x2 \ + (combination \ TYPE('T1) \ TYPE('T2) \ Trueprop \ x3 \ A \ B \ + (axm.reflexive \ TYPE('T3) \ x4) \ prf1)) \ + (iffD1 \ A \ B \ + (meta_eq_to_obj_eq \ TYPE(bool) \ A \ B \ arity_type_bool \ prf1))\, - \(equal_elim % x1 % x2 %% (axm.symmetric % TYPE('T1) % x3 % x4 %% - (combination % TYPE('T2) % TYPE('T3) % Trueprop % x5 % A % B %% - (axm.reflexive % TYPE('T4) % x6) %% prf1))) == - (iffD2 % A % B %% - (meta_eq_to_obj_eq % TYPE(bool) % A % B %% arity_type_bool %% prf1))\, + \(equal_elim \ x1 \ x2 \ (axm.symmetric \ TYPE('T1) \ x3 \ x4 \ + (combination \ TYPE('T2) \ TYPE('T3) \ Trueprop \ x5 \ A \ B \ + (axm.reflexive \ TYPE('T4) \ x6) \ prf1))) \ + (iffD2 \ A \ B \ + (meta_eq_to_obj_eq \ TYPE(bool) \ A \ B \ arity_type_bool \ prf1))\, - \(meta_eq_to_obj_eq % TYPE('U) % x1 % x2 %% prfU %% - (combination % TYPE('T) % TYPE('U) % f % g % x % y %% prf1 %% prf2)) == - (cong % TYPE('T) % TYPE('U) % f % g % x % y %% - (OfClass type_class % TYPE('T)) %% prfU %% - (meta_eq_to_obj_eq % TYPE('T => 'U) % f % g %% (OfClass type_class % TYPE('T => 'U)) %% prf1) %% - (meta_eq_to_obj_eq % TYPE('T) % x % y %% (OfClass type_class % TYPE('T)) %% prf2))\, + \(meta_eq_to_obj_eq \ TYPE('U) \ x1 \ x2 \ prfU \ + (combination \ TYPE('T) \ TYPE('U) \ f \ g \ x \ y \ prf1 \ prf2)) \ + (cong \ TYPE('T) \ TYPE('U) \ f \ g \ x \ y \ + (OfClass type_class \ TYPE('T)) \ prfU \ + (meta_eq_to_obj_eq \ TYPE('T \ 'U) \ f \ g \ (OfClass type_class \ TYPE('T \ 'U)) \ prf1) \ + (meta_eq_to_obj_eq \ TYPE('T) \ x \ y \ (OfClass type_class \ TYPE('T)) \ prf2))\, - \(meta_eq_to_obj_eq % TYPE('T) % x1 % x2 %% prfT %% - (axm.transitive % TYPE('T) % x % y % z %% prf1 %% prf2)) == - (HOL.trans % TYPE('T) % x % y % z %% prfT %% - (meta_eq_to_obj_eq % TYPE('T) % x % y %% prfT %% prf1) %% - (meta_eq_to_obj_eq % TYPE('T) % y % z %% prfT %% prf2))\, + \(meta_eq_to_obj_eq \ TYPE('T) \ x1 \ x2 \ prfT \ + (axm.transitive \ TYPE('T) \ x \ y \ z \ prf1 \ prf2)) \ + (HOL.trans \ TYPE('T) \ x \ y \ z \ prfT \ + (meta_eq_to_obj_eq \ TYPE('T) \ x \ y \ prfT \ prf1) \ + (meta_eq_to_obj_eq \ TYPE('T) \ y \ z \ prfT \ prf2))\, - \(meta_eq_to_obj_eq % TYPE('T) % x % x %% prfT %% (axm.reflexive % TYPE('T) % x)) == - (HOL.refl % TYPE('T) % x %% prfT)\, + \(meta_eq_to_obj_eq \ TYPE('T) \ x \ x \ prfT \ (axm.reflexive \ TYPE('T) \ x)) \ + (HOL.refl \ TYPE('T) \ x \ prfT)\, - \(meta_eq_to_obj_eq % TYPE('T) % x % y %% prfT %% - (axm.symmetric % TYPE('T) % x % y %% prf)) == - (sym % TYPE('T) % x % y %% prfT %% (meta_eq_to_obj_eq % TYPE('T) % x % y %% prfT %% prf))\, + \(meta_eq_to_obj_eq \ TYPE('T) \ x \ y \ prfT \ + (axm.symmetric \ TYPE('T) \ x \ y \ prf)) \ + (sym \ TYPE('T) \ x \ y \ prfT \ (meta_eq_to_obj_eq \ TYPE('T) \ x \ y \ prfT \ prf))\, - \(meta_eq_to_obj_eq % TYPE('T => 'U) % x1 % x2 %% prfTU %% - (abstract_rule % TYPE('T) % TYPE('U) % f % g %% prf)) == - (ext % TYPE('T) % TYPE('U) % f % g %% - (OfClass type_class % TYPE('T)) %% (OfClass type_class % TYPE('U)) %% - (Lam (x::'T). meta_eq_to_obj_eq % TYPE('U) % f x % g x %% - (OfClass type_class % TYPE('U)) %% (prf % x)))\, + \(meta_eq_to_obj_eq \ TYPE('T \ 'U) \ x1 \ x2 \ prfTU \ + (abstract_rule \ TYPE('T) \ TYPE('U) \ f \ g \ prf)) \ + (ext \ TYPE('T) \ TYPE('U) \ f \ g \ + (OfClass type_class \ TYPE('T)) \ (OfClass type_class \ TYPE('U)) \ + (\<^bold>\(x::'T). meta_eq_to_obj_eq \ TYPE('U) \ f x \ g x \ + (OfClass type_class \ TYPE('U)) \ (prf \ x)))\, - \(meta_eq_to_obj_eq % TYPE('T) % x % y %% prfT %% - (eq_reflection % TYPE('T) % x % y %% prfT %% prf)) == prf\, + \(meta_eq_to_obj_eq \ TYPE('T) \ x \ y \ prfT \ + (eq_reflection \ TYPE('T) \ x \ y \ prfT \ prf)) \ prf\, - \(meta_eq_to_obj_eq % TYPE('T) % x1 % x2 %% prfT %% (equal_elim % x3 % x4 %% - (combination % TYPE('T) % TYPE(prop) % x7 % x8 % C % D %% - (combination % TYPE('T) % TYPE('T3) % op == % op == % A % B %% - (axm.reflexive % TYPE('T4) % op ==) %% prf1) %% prf2) %% prf3)) == - (iffD1 % A = C % B = D %% - (cong % TYPE('T) % TYPE(bool) % op = A % op = B % C % D %% - prfT %% arity_type_bool %% - (cong % TYPE('T) % TYPE('T=>bool) % - (op = :: 'T=>'T=>bool) % (op = :: 'T=>'T=>bool) % A % B %% - prfT %% (OfClass type_class % TYPE('T=>bool)) %% - (HOL.refl % TYPE('T=>'T=>bool) % (op = :: 'T=>'T=>bool) %% - (OfClass type_class % TYPE('T=>'T=>bool))) %% - (meta_eq_to_obj_eq % TYPE('T) % A % B %% prfT %% prf1)) %% - (meta_eq_to_obj_eq % TYPE('T) % C % D %% prfT %% prf2)) %% - (meta_eq_to_obj_eq % TYPE('T) % A % C %% prfT %% prf3))\, + \(meta_eq_to_obj_eq \ TYPE('T) \ x1 \ x2 \ prfT \ (equal_elim \ x3 \ x4 \ + (combination \ TYPE('T) \ TYPE(prop) \ x7 \ x8 \ C \ D \ + (combination \ TYPE('T) \ TYPE('T3) \ op \ \ op \ \ A \ B \ + (axm.reflexive \ TYPE('T4) \ op \) \ prf1) \ prf2) \ prf3)) \ + (iffD1 \ A = C \ B = D \ + (cong \ TYPE('T) \ TYPE(bool) \ op = A \ op = B \ C \ D \ + prfT \ arity_type_bool \ + (cong \ TYPE('T) \ TYPE('T\bool) \ + (op = :: 'T\'T\bool) \ (op = :: 'T\'T\bool) \ A \ B \ + prfT \ (OfClass type_class \ TYPE('T\bool)) \ + (HOL.refl \ TYPE('T\'T\bool) \ (op = :: 'T\'T\bool) \ + (OfClass type_class \ TYPE('T\'T\bool))) \ + (meta_eq_to_obj_eq \ TYPE('T) \ A \ B \ prfT \ prf1)) \ + (meta_eq_to_obj_eq \ TYPE('T) \ C \ D \ prfT \ prf2)) \ + (meta_eq_to_obj_eq \ TYPE('T) \ A \ C \ prfT \ prf3))\, - \(meta_eq_to_obj_eq % TYPE('T) % x1 % x2 %% prfT %% (equal_elim % x3 % x4 %% - (axm.symmetric % TYPE('T2) % x5 % x6 %% - (combination % TYPE('T) % TYPE(prop) % x7 % x8 % C % D %% - (combination % TYPE('T) % TYPE('T3) % op == % op == % A % B %% - (axm.reflexive % TYPE('T4) % op ==) %% prf1) %% prf2)) %% prf3)) == - (iffD2 % A = C % B = D %% - (cong % TYPE('T) % TYPE(bool) % op = A % op = B % C % D %% - prfT %% arity_type_bool %% - (cong % TYPE('T) % TYPE('T=>bool) % - (op = :: 'T=>'T=>bool) % (op = :: 'T=>'T=>bool) % A % B %% - prfT %% (OfClass type_class % TYPE('T=>bool)) %% - (HOL.refl % TYPE('T=>'T=>bool) % (op = :: 'T=>'T=>bool) %% - (OfClass type_class % TYPE('T=>'T=>bool))) %% - (meta_eq_to_obj_eq % TYPE('T) % A % B %% prfT %% prf1)) %% - (meta_eq_to_obj_eq % TYPE('T) % C % D %% prfT %% prf2)) %% - (meta_eq_to_obj_eq % TYPE('T) % B % D %% prfT %% prf3))\, + \(meta_eq_to_obj_eq \ TYPE('T) \ x1 \ x2 \ prfT \ (equal_elim \ x3 \ x4 \ + (axm.symmetric \ TYPE('T2) \ x5 \ x6 \ + (combination \ TYPE('T) \ TYPE(prop) \ x7 \ x8 \ C \ D \ + (combination \ TYPE('T) \ TYPE('T3) \ op \ \ op \ \ A \ B \ + (axm.reflexive \ TYPE('T4) \ op \) \ prf1) \ prf2)) \ prf3)) \ + (iffD2 \ A = C \ B = D \ + (cong \ TYPE('T) \ TYPE(bool) \ op = A \ op = B \ C \ D \ + prfT \ arity_type_bool \ + (cong \ TYPE('T) \ TYPE('T\bool) \ + (op = :: 'T\'T\bool) \ (op = :: 'T\'T\bool) \ A \ B \ + prfT \ (OfClass type_class \ TYPE('T\bool)) \ + (HOL.refl \ TYPE('T\'T\bool) \ (op = :: 'T\'T\bool) \ + (OfClass type_class \ TYPE('T\'T\bool))) \ + (meta_eq_to_obj_eq \ TYPE('T) \ A \ B \ prfT \ prf1)) \ + (meta_eq_to_obj_eq \ TYPE('T) \ C \ D \ prfT \ prf2)) \ + (meta_eq_to_obj_eq \ TYPE('T) \ B \ D \ prfT \ prf3))\, (** rewriting on bool: insert proper congruence rules for logical connectives **) (* All *) - \(iffD1 % All P % All Q %% (cong % TYPE('T1) % TYPE('T2) % All % All % P % Q %% prfT1 %% prfT2 %% - (HOL.refl % TYPE('T3) % x1 %% prfT3) %% - (ext % TYPE('a) % TYPE(bool) % x2 % x3 %% prfa %% prfb %% prf)) %% prf') == - (allI % TYPE('a) % Q %% prfa %% - (Lam x. - iffD1 % P x % Q x %% (prf % x) %% - (spec % TYPE('a) % P % x %% prfa %% prf')))\, + \(iffD1 \ All P \ All Q \ (cong \ TYPE('T1) \ TYPE('T2) \ All \ All \ P \ Q \ prfT1 \ prfT2 \ + (HOL.refl \ TYPE('T3) \ x1 \ prfT3) \ + (ext \ TYPE('a) \ TYPE(bool) \ x2 \ x3 \ prfa \ prfb \ prf)) \ prf') \ + (allI \ TYPE('a) \ Q \ prfa \ + (\<^bold>\x. + iffD1 \ P x \ Q x \ (prf \ x) \ + (spec \ TYPE('a) \ P \ x \ prfa \ prf')))\, - \(iffD2 % All P % All Q %% (cong % TYPE('T1) % TYPE('T2) % All % All % P % Q %% prfT1 %% prfT2 %% - (HOL.refl % TYPE('T3) % x1 %% prfT3) %% - (ext % TYPE('a) % TYPE(bool) % x2 % x3 %% prfa %% prfb %% prf)) %% prf') == - (allI % TYPE('a) % P %% prfa %% - (Lam x. - iffD2 % P x % Q x %% (prf % x) %% - (spec % TYPE('a) % Q % x %% prfa %% prf')))\, + \(iffD2 \ All P \ All Q \ (cong \ TYPE('T1) \ TYPE('T2) \ All \ All \ P \ Q \ prfT1 \ prfT2 \ + (HOL.refl \ TYPE('T3) \ x1 \ prfT3) \ + (ext \ TYPE('a) \ TYPE(bool) \ x2 \ x3 \ prfa \ prfb \ prf)) \ prf') \ + (allI \ TYPE('a) \ P \ prfa \ + (\<^bold>\x. + iffD2 \ P x \ Q x \ (prf \ x) \ + (spec \ TYPE('a) \ Q \ x \ prfa \ prf')))\, (* Ex *) - \(iffD1 % Ex P % Ex Q %% (cong % TYPE('T1) % TYPE('T2) % Ex % Ex % P % Q %% prfT1 %% prfT2 %% - (HOL.refl % TYPE('T3) % x1 %% prfT3) %% - (ext % TYPE('a) % TYPE(bool) % x2 % x3 %% prfa %% prfb %% prf)) %% prf') == - (exE % TYPE('a) % P % \x. Q x %% prfa %% prf' %% - (Lam x H : P x. - exI % TYPE('a) % Q % x %% prfa %% - (iffD1 % P x % Q x %% (prf % x) %% H)))\, + \(iffD1 \ Ex P \ Ex Q \ (cong \ TYPE('T1) \ TYPE('T2) \ Ex \ Ex \ P \ Q \ prfT1 \ prfT2 \ + (HOL.refl \ TYPE('T3) \ x1 \ prfT3) \ + (ext \ TYPE('a) \ TYPE(bool) \ x2 \ x3 \ prfa \ prfb \ prf)) \ prf') \ + (exE \ TYPE('a) \ P \ \x. Q x \ prfa \ prf' \ + (\<^bold>\x H : P x. + exI \ TYPE('a) \ Q \ x \ prfa \ + (iffD1 \ P x \ Q x \ (prf \ x) \ H)))\, - \(iffD2 % Ex P % Ex Q %% (cong % TYPE('T1) % TYPE('T2) % Ex % Ex % P % Q %% prfT1 %% prfT2 %% - (HOL.refl % TYPE('T3) % x1 %% prfT3) %% - (ext % TYPE('a) % TYPE(bool) % x2 % x3 %% prfa %% prfb %% prf)) %% prf') == - (exE % TYPE('a) % Q % \x. P x %% prfa %% prf' %% - (Lam x H : Q x. - exI % TYPE('a) % P % x %% prfa %% - (iffD2 % P x % Q x %% (prf % x) %% H)))\, + \(iffD2 \ Ex P \ Ex Q \ (cong \ TYPE('T1) \ TYPE('T2) \ Ex \ Ex \ P \ Q \ prfT1 \ prfT2 \ + (HOL.refl \ TYPE('T3) \ x1 \ prfT3) \ + (ext \ TYPE('a) \ TYPE(bool) \ x2 \ x3 \ prfa \ prfb \ prf)) \ prf') \ + (exE \ TYPE('a) \ Q \ \x. P x \ prfa \ prf' \ + (\<^bold>\x H : Q x. + exI \ TYPE('a) \ P \ x \ prfa \ + (iffD2 \ P x \ Q x \ (prf \ x) \ H)))\, (* \ *) - \(iffD1 % A \ C % B \ D %% (cong % TYPE('T1) % TYPE('T2) % x1 % x2 % C % D %% prfT1 %% prfT2 %% - (cong % TYPE('T3) % TYPE('T4) % op \ % op \ % A % B %% prfT3 %% prfT4 %% - (HOL.refl % TYPE('T5) % op \ %% prfT5) %% prf1) %% prf2) %% prf3) == - (conjI % B % D %% - (iffD1 % A % B %% prf1 %% (conjunct1 % A % C %% prf3)) %% - (iffD1 % C % D %% prf2 %% (conjunct2 % A % C %% prf3)))\, + \(iffD1 \ A \ C \ B \ D \ (cong \ TYPE('T1) \ TYPE('T2) \ x1 \ x2 \ C \ D \ prfT1 \ prfT2 \ + (cong \ TYPE('T3) \ TYPE('T4) \ op \ \ op \ \ A \ B \ prfT3 \ prfT4 \ + (HOL.refl \ TYPE('T5) \ op \ \ prfT5) \ prf1) \ prf2) \ prf3) \ + (conjI \ B \ D \ + (iffD1 \ A \ B \ prf1 \ (conjunct1 \ A \ C \ prf3)) \ + (iffD1 \ C \ D \ prf2 \ (conjunct2 \ A \ C \ prf3)))\, - \(iffD2 % A \ C % B \ D %% (cong % TYPE('T1) % TYPE('T2) % x1 % x2 % C % D %% prfT1 %% prfT2 %% - (cong % TYPE('T3) % TYPE('T4) % op \ % op \ % A % B %% prfT3 %% prfT4 %% - (HOL.refl % TYPE('T5) % op \ %% prfT5) %% prf1) %% prf2) %% prf3) == - (conjI % A % C %% - (iffD2 % A % B %% prf1 %% (conjunct1 % B % D %% prf3)) %% - (iffD2 % C % D %% prf2 %% (conjunct2 % B % D %% prf3)))\, + \(iffD2 \ A \ C \ B \ D \ (cong \ TYPE('T1) \ TYPE('T2) \ x1 \ x2 \ C \ D \ prfT1 \ prfT2 \ + (cong \ TYPE('T3) \ TYPE('T4) \ op \ \ op \ \ A \ B \ prfT3 \ prfT4 \ + (HOL.refl \ TYPE('T5) \ op \ \ prfT5) \ prf1) \ prf2) \ prf3) \ + (conjI \ A \ C \ + (iffD2 \ A \ B \ prf1 \ (conjunct1 \ B \ D \ prf3)) \ + (iffD2 \ C \ D \ prf2 \ (conjunct2 \ B \ D \ prf3)))\, - \(cong % TYPE(bool) % TYPE(bool) % op \ A % op \ A % B % C %% prfb %% prfb %% - (HOL.refl % TYPE(bool=>bool) % op \ A %% prfbb)) == - (cong % TYPE(bool) % TYPE(bool) % op \ A % op \ A % B % C %% prfb %% prfb %% - (cong % TYPE(bool) % TYPE(bool=>bool) % - (op \ :: bool=>bool=>bool) % (op \ :: bool=>bool=>bool) % A % A %% - prfb %% prfbb %% - (HOL.refl % TYPE(bool=>bool=>bool) % (op \ :: bool=>bool=>bool) %% - (OfClass type_class % TYPE(bool=>bool=>bool))) %% - (HOL.refl % TYPE(bool) % A %% prfb)))\, + \(cong \ TYPE(bool) \ TYPE(bool) \ op \ A \ op \ A \ B \ C \ prfb \ prfb \ + (HOL.refl \ TYPE(bool\bool) \ op \ A \ prfbb)) \ + (cong \ TYPE(bool) \ TYPE(bool) \ op \ A \ op \ A \ B \ C \ prfb \ prfb \ + (cong \ TYPE(bool) \ TYPE(bool\bool) \ + (op \ :: bool\bool\bool) \ (op \ :: bool\bool\bool) \ A \ A \ + prfb \ prfbb \ + (HOL.refl \ TYPE(bool\bool\bool) \ (op \ :: bool\bool\bool) \ + (OfClass type_class \ TYPE(bool\bool\bool))) \ + (HOL.refl \ TYPE(bool) \ A \ prfb)))\, (* \ *) - \(iffD1 % A \ C % B \ D %% (cong % TYPE('T1) % TYPE('T2) % x1 % x2 % C % D %% prfT1 %% prfT2 %% - (cong % TYPE('T3) % TYPE('T4) % op \ % op \ % A % B %% prfT3 %% prfT4 %% - (HOL.refl % TYPE('T5) % op \ %% prfT5) %% prf1) %% prf2) %% prf3) == - (disjE % A % C % B \ D %% prf3 %% - (Lam H : A. disjI1 % B % D %% (iffD1 % A % B %% prf1 %% H)) %% - (Lam H : C. disjI2 % D % B %% (iffD1 % C % D %% prf2 %% H)))\, + \(iffD1 \ A \ C \ B \ D \ (cong \ TYPE('T1) \ TYPE('T2) \ x1 \ x2 \ C \ D \ prfT1 \ prfT2 \ + (cong \ TYPE('T3) \ TYPE('T4) \ op \ \ op \ \ A \ B \ prfT3 \ prfT4 \ + (HOL.refl \ TYPE('T5) \ op \ \ prfT5) \ prf1) \ prf2) \ prf3) \ + (disjE \ A \ C \ B \ D \ prf3 \ + (\<^bold>\H : A. disjI1 \ B \ D \ (iffD1 \ A \ B \ prf1 \ H)) \ + (\<^bold>\H : C. disjI2 \ D \ B \ (iffD1 \ C \ D \ prf2 \ H)))\, - \(iffD2 % A \ C % B \ D %% (cong % TYPE('T1) % TYPE('T2) % x1 % x2 % C % D %% prfT1 %% prfT2 %% - (cong % TYPE('T3) % TYPE('T4) % op \ % op \ % A % B %% prfT3 %% prfT4 %% - (HOL.refl % TYPE('T5) % op \ %% prfT5) %% prf1) %% prf2) %% prf3) == - (disjE % B % D % A \ C %% prf3 %% - (Lam H : B. disjI1 % A % C %% (iffD2 % A % B %% prf1 %% H)) %% - (Lam H : D. disjI2 % C % A %% (iffD2 % C % D %% prf2 %% H)))\, + \(iffD2 \ A \ C \ B \ D \ (cong \ TYPE('T1) \ TYPE('T2) \ x1 \ x2 \ C \ D \ prfT1 \ prfT2 \ + (cong \ TYPE('T3) \ TYPE('T4) \ op \ \ op \ \ A \ B \ prfT3 \ prfT4 \ + (HOL.refl \ TYPE('T5) \ op \ \ prfT5) \ prf1) \ prf2) \ prf3) \ + (disjE \ B \ D \ A \ C \ prf3 \ + (\<^bold>\H : B. disjI1 \ A \ C \ (iffD2 \ A \ B \ prf1 \ H)) \ + (\<^bold>\H : D. disjI2 \ C \ A \ (iffD2 \ C \ D \ prf2 \ H)))\, - \(cong % TYPE(bool) % TYPE(bool) % op \ A % op \ A % B % C %% prfb %% prfb %% - (HOL.refl % TYPE(bool=>bool) % op \ A %% prfbb)) == - (cong % TYPE(bool) % TYPE(bool) % op \ A % op \ A % B % C %% prfb %% prfb %% - (cong % TYPE(bool) % TYPE(bool=>bool) % - (op \ :: bool=>bool=>bool) % (op \ :: bool=>bool=>bool) % A % A %% - prfb %% prfbb %% - (HOL.refl % TYPE(bool=>bool=>bool) % (op \ :: bool=>bool=>bool) %% - (OfClass type_class % TYPE(bool=>bool=>bool))) %% - (HOL.refl % TYPE(bool) % A %% prfb)))\, + \(cong \ TYPE(bool) \ TYPE(bool) \ op \ A \ op \ A \ B \ C \ prfb \ prfb \ + (HOL.refl \ TYPE(bool\bool) \ op \ A \ prfbb)) \ + (cong \ TYPE(bool) \ TYPE(bool) \ op \ A \ op \ A \ B \ C \ prfb \ prfb \ + (cong \ TYPE(bool) \ TYPE(bool\bool) \ + (op \ :: bool\bool\bool) \ (op \ :: bool\bool\bool) \ A \ A \ + prfb \ prfbb \ + (HOL.refl \ TYPE(bool\bool\bool) \ (op \ :: bool\bool\bool) \ + (OfClass type_class \ TYPE(bool\bool\bool))) \ + (HOL.refl \ TYPE(bool) \ A \ prfb)))\, (* \ *) - \(iffD1 % A \ C % B \ D %% (cong % TYPE('T1) % TYPE('T2) % x1 % x2 % C % D %% prfT1 %% prfT2 %% - (cong % TYPE('T3) % TYPE('T4) % op \ % op \ % A % B %% prfT3 %% prfT4 %% - (HOL.refl % TYPE('T5) % op \ %% prfT5) %% prf1) %% prf2) %% prf3) == - (impI % B % D %% (Lam H: B. iffD1 % C % D %% prf2 %% - (mp % A % C %% prf3 %% (iffD2 % A % B %% prf1 %% H))))\, + \(iffD1 \ A \ C \ B \ D \ (cong \ TYPE('T1) \ TYPE('T2) \ x1 \ x2 \ C \ D \ prfT1 \ prfT2 \ + (cong \ TYPE('T3) \ TYPE('T4) \ op \ \ op \ \ A \ B \ prfT3 \ prfT4 \ + (HOL.refl \ TYPE('T5) \ op \ \ prfT5) \ prf1) \ prf2) \ prf3) \ + (impI \ B \ D \ (\<^bold>\H: B. iffD1 \ C \ D \ prf2 \ + (mp \ A \ C \ prf3 \ (iffD2 \ A \ B \ prf1 \ H))))\, - \(iffD2 % A \ C % B \ D %% (cong % TYPE('T1) % TYPE('T2) % x1 % x2 % C % D %% prfT1 %% prfT2 %% - (cong % TYPE('T3) % TYPE('T4) % op \ % op \ % A % B %% prfT3 %% prfT4 %% - (HOL.refl % TYPE('T5) % op \ %% prfT5) %% prf1) %% prf2) %% prf3) == - (impI % A % C %% (Lam H: A. iffD2 % C % D %% prf2 %% - (mp % B % D %% prf3 %% (iffD1 % A % B %% prf1 %% H))))\, + \(iffD2 \ A \ C \ B \ D \ (cong \ TYPE('T1) \ TYPE('T2) \ x1 \ x2 \ C \ D \ prfT1 \ prfT2 \ + (cong \ TYPE('T3) \ TYPE('T4) \ op \ \ op \ \ A \ B \ prfT3 \ prfT4 \ + (HOL.refl \ TYPE('T5) \ op \ \ prfT5) \ prf1) \ prf2) \ prf3) \ + (impI \ A \ C \ (\<^bold>\H: A. iffD2 \ C \ D \ prf2 \ + (mp \ B \ D \ prf3 \ (iffD1 \ A \ B \ prf1 \ H))))\, - \(cong % TYPE(bool) % TYPE(bool) % op \ A % op \ A % B % C %% prfb %% prfb %% - (HOL.refl % TYPE(bool=>bool) % op \ A %% prfbb)) == - (cong % TYPE(bool) % TYPE(bool) % op \ A % op \ A % B % C %% prfb %% prfb %% - (cong % TYPE(bool) % TYPE(bool=>bool) % - (op \ :: bool=>bool=>bool) % (op \ :: bool=>bool=>bool) % A % A %% - prfb %% prfbb %% - (HOL.refl % TYPE(bool=>bool=>bool) % (op \ :: bool=>bool=>bool) %% - (OfClass type_class % TYPE(bool=>bool=>bool))) %% - (HOL.refl % TYPE(bool) % A %% prfb)))\, + \(cong \ TYPE(bool) \ TYPE(bool) \ op \ A \ op \ A \ B \ C \ prfb \ prfb \ + (HOL.refl \ TYPE(bool\bool) \ op \ A \ prfbb)) \ + (cong \ TYPE(bool) \ TYPE(bool) \ op \ A \ op \ A \ B \ C \ prfb \ prfb \ + (cong \ TYPE(bool) \ TYPE(bool\bool) \ + (op \ :: bool\bool\bool) \ (op \ :: bool\bool\bool) \ A \ A \ + prfb \ prfbb \ + (HOL.refl \ TYPE(bool\bool\bool) \ (op \ :: bool\bool\bool) \ + (OfClass type_class \ TYPE(bool\bool\bool))) \ + (HOL.refl \ TYPE(bool) \ A \ prfb)))\, (* \ *) - \(iffD1 % \ P % \ Q %% (cong % TYPE('T1) % TYPE('T2) % Not % Not % P % Q %% prfT1 %% prfT2 %% - (HOL.refl % TYPE('T3) % Not %% prfT3) %% prf1) %% prf2) == - (notI % Q %% (Lam H: Q. - notE % P % False %% prf2 %% (iffD2 % P % Q %% prf1 %% H)))\, + \(iffD1 \ \ P \ \ Q \ (cong \ TYPE('T1) \ TYPE('T2) \ Not \ Not \ P \ Q \ prfT1 \ prfT2 \ + (HOL.refl \ TYPE('T3) \ Not \ prfT3) \ prf1) \ prf2) \ + (notI \ Q \ (\<^bold>\H: Q. + notE \ P \ False \ prf2 \ (iffD2 \ P \ Q \ prf1 \ H)))\, - \(iffD2 % \ P % \ Q %% (cong % TYPE('T1) % TYPE('T2) % Not % Not % P % Q %% prfT1 %% prfT2 %% - (HOL.refl % TYPE('T3) % Not %% prfT3) %% prf1) %% prf2) == - (notI % P %% (Lam H: P. - notE % Q % False %% prf2 %% (iffD1 % P % Q %% prf1 %% H)))\, + \(iffD2 \ \ P \ \ Q \ (cong \ TYPE('T1) \ TYPE('T2) \ Not \ Not \ P \ Q \ prfT1 \ prfT2 \ + (HOL.refl \ TYPE('T3) \ Not \ prfT3) \ prf1) \ prf2) \ + (notI \ P \ (\<^bold>\H: P. + notE \ Q \ False \ prf2 \ (iffD1 \ P \ Q \ prf1 \ H)))\, (* = *) - \(iffD1 % B % D %% - (iffD1 % A = C % B = D %% (cong % TYPE(bool) % TYPE('T1) % x1 % x2 % C % D %% prfb %% prfT1 %% - (cong % TYPE(bool) % TYPE('T2) % op = % op = % A % B %% prfb %% prfT2 %% - (HOL.refl % TYPE('T3) % op = %% prfT3) %% prf1) %% prf2) %% prf3) %% prf4) == - (iffD1 % C % D %% prf2 %% - (iffD1 % A % C %% prf3 %% (iffD2 % A % B %% prf1 %% prf4)))\, + \(iffD1 \ B \ D \ + (iffD1 \ A = C \ B = D \ (cong \ TYPE(bool) \ TYPE('T1) \ x1 \ x2 \ C \ D \ prfb \ prfT1 \ + (cong \ TYPE(bool) \ TYPE('T2) \ op = \ op = \ A \ B \ prfb \ prfT2 \ + (HOL.refl \ TYPE('T3) \ op = \ prfT3) \ prf1) \ prf2) \ prf3) \ prf4) \ + (iffD1 \ C \ D \ prf2 \ + (iffD1 \ A \ C \ prf3 \ (iffD2 \ A \ B \ prf1 \ prf4)))\, - \(iffD2 % B % D %% - (iffD1 % A = C % B = D %% (cong % TYPE(bool) % TYPE('T1) % x1 % x2 % C % D %% prfb %% prfT1 %% - (cong % TYPE(bool) % TYPE('T2) % op = % op = % A % B %% prfb %% prfT2 %% - (HOL.refl % TYPE('T3) % op = %% prfT3) %% prf1) %% prf2) %% prf3) %% prf4) == - (iffD1 % A % B %% prf1 %% - (iffD2 % A % C %% prf3 %% (iffD2 % C % D %% prf2 %% prf4)))\, + \(iffD2 \ B \ D \ + (iffD1 \ A = C \ B = D \ (cong \ TYPE(bool) \ TYPE('T1) \ x1 \ x2 \ C \ D \ prfb \ prfT1 \ + (cong \ TYPE(bool) \ TYPE('T2) \ op = \ op = \ A \ B \ prfb \ prfT2 \ + (HOL.refl \ TYPE('T3) \ op = \ prfT3) \ prf1) \ prf2) \ prf3) \ prf4) \ + (iffD1 \ A \ B \ prf1 \ + (iffD2 \ A \ C \ prf3 \ (iffD2 \ C \ D \ prf2 \ prf4)))\, - \(iffD1 % A % C %% - (iffD2 % A = C % B = D %% (cong % TYPE(bool) % TYPE('T1) % x1 % x2 % C % D %% prfb %% prfT1 %% - (cong % TYPE(bool) % TYPE('T2) % op = % op = % A % B %% prfb %% prfT2 %% - (HOL.refl % TYPE('T3) % op = %% prfT3) %% prf1) %% prf2) %% prf3) %% prf4)== - (iffD2 % C % D %% prf2 %% - (iffD1 % B % D %% prf3 %% (iffD1 % A % B %% prf1 %% prf4)))\, + \(iffD1 \ A \ C \ + (iffD2 \ A = C \ B = D \ (cong \ TYPE(bool) \ TYPE('T1) \ x1 \ x2 \ C \ D \ prfb \ prfT1 \ + (cong \ TYPE(bool) \ TYPE('T2) \ op = \ op = \ A \ B \ prfb \ prfT2 \ + (HOL.refl \ TYPE('T3) \ op = \ prfT3) \ prf1) \ prf2) \ prf3) \ prf4)\ + (iffD2 \ C \ D \ prf2 \ + (iffD1 \ B \ D \ prf3 \ (iffD1 \ A \ B \ prf1 \ prf4)))\, - \(iffD2 % A % C %% - (iffD2 % A = C % B = D %% (cong % TYPE(bool) % TYPE('T1) % x1 % x2 % C % D %% prfb %% prfT1 %% - (cong % TYPE(bool) % TYPE('T2) % op = % op = % A % B %% prfb %% prfT2 %% - (HOL.refl % TYPE('T3) % op = %% prfT3) %% prf1) %% prf2) %% prf3) %% prf4) == - (iffD2 % A % B %% prf1 %% - (iffD2 % B % D %% prf3 %% (iffD1 % C % D %% prf2 %% prf4)))\, + \(iffD2 \ A \ C \ + (iffD2 \ A = C \ B = D \ (cong \ TYPE(bool) \ TYPE('T1) \ x1 \ x2 \ C \ D \ prfb \ prfT1 \ + (cong \ TYPE(bool) \ TYPE('T2) \ op = \ op = \ A \ B \ prfb \ prfT2 \ + (HOL.refl \ TYPE('T3) \ op = \ prfT3) \ prf1) \ prf2) \ prf3) \ prf4) \ + (iffD2 \ A \ B \ prf1 \ + (iffD2 \ B \ D \ prf3 \ (iffD1 \ C \ D \ prf2 \ prf4)))\, - \(cong % TYPE(bool) % TYPE(bool) % op = A % op = A % B % C %% prfb %% prfb %% - (HOL.refl % TYPE(bool=>bool) % op = A %% prfbb)) == - (cong % TYPE(bool) % TYPE(bool) % op = A % op = A % B % C %% prfb %% prfb %% - (cong % TYPE(bool) % TYPE(bool=>bool) % - (op = :: bool=>bool=>bool) % (op = :: bool=>bool=>bool) % A % A %% - prfb %% prfbb %% - (HOL.refl % TYPE(bool=>bool=>bool) % (op = :: bool=>bool=>bool) %% - (OfClass type_class % TYPE(bool=>bool=>bool))) %% - (HOL.refl % TYPE(bool) % A %% prfb)))\, + \(cong \ TYPE(bool) \ TYPE(bool) \ op = A \ op = A \ B \ C \ prfb \ prfb \ + (HOL.refl \ TYPE(bool\bool) \ op = A \ prfbb)) \ + (cong \ TYPE(bool) \ TYPE(bool) \ op = A \ op = A \ B \ C \ prfb \ prfb \ + (cong \ TYPE(bool) \ TYPE(bool\bool) \ + (op = :: bool\bool\bool) \ (op = :: bool\bool\bool) \ A \ A \ + prfb \ prfbb \ + (HOL.refl \ TYPE(bool\bool\bool) \ (op = :: bool\bool\bool) \ + (OfClass type_class \ TYPE(bool\bool\bool))) \ + (HOL.refl \ TYPE(bool) \ A \ prfb)))\, (** transitivity, reflexivity, and symmetry **) - \(iffD1 % A % C %% (HOL.trans % TYPE(bool) % A % B % C %% prfb %% prf1 %% prf2) %% prf3) == - (iffD1 % B % C %% prf2 %% (iffD1 % A % B %% prf1 %% prf3))\, + \(iffD1 \ A \ C \ (HOL.trans \ TYPE(bool) \ A \ B \ C \ prfb \ prf1 \ prf2) \ prf3) \ + (iffD1 \ B \ C \ prf2 \ (iffD1 \ A \ B \ prf1 \ prf3))\, - \(iffD2 % A % C %% (HOL.trans % TYPE(bool) % A % B % C %% prfb %% prf1 %% prf2) %% prf3) == - (iffD2 % A % B %% prf1 %% (iffD2 % B % C %% prf2 %% prf3))\, + \(iffD2 \ A \ C \ (HOL.trans \ TYPE(bool) \ A \ B \ C \ prfb \ prf1 \ prf2) \ prf3) \ + (iffD2 \ A \ B \ prf1 \ (iffD2 \ B \ C \ prf2 \ prf3))\, - \(iffD1 % A % A %% (HOL.refl % TYPE(bool) % A %% prfb) %% prf) == prf\, + \(iffD1 \ A \ A \ (HOL.refl \ TYPE(bool) \ A \ prfb) \ prf) \ prf\, - \(iffD2 % A % A %% (HOL.refl % TYPE(bool) % A %% prfb) %% prf) == prf\, + \(iffD2 \ A \ A \ (HOL.refl \ TYPE(bool) \ A \ prfb) \ prf) \ prf\, - \(iffD1 % A % B %% (sym % TYPE(bool) % B % A %% prfb %% prf)) == (iffD2 % B % A %% prf)\, + \(iffD1 \ A \ B \ (sym \ TYPE(bool) \ B \ A \ prfb \ prf)) \ (iffD2 \ B \ A \ prf)\, - \(iffD2 % A % B %% (sym % TYPE(bool) % B % A %% prfb %% prf)) == (iffD1 % B % A %% prf)\, + \(iffD2 \ A \ B \ (sym \ TYPE(bool) \ B \ A \ prfb \ prf)) \ (iffD1 \ B \ A \ prf)\, (** normalization of HOL proofs **) - \(mp % A % B %% (impI % A % B %% prf)) == prf\, + \(mp \ A \ B \ (impI \ A \ B \ prf)) \ prf\, - \(impI % A % B %% (mp % A % B %% prf)) == prf\, + \(impI \ A \ B \ (mp \ A \ B \ prf)) \ prf\, - \(spec % TYPE('a) % P % x %% prfa %% (allI % TYPE('a) % P %% prfa %% prf)) == prf % x\, + \(spec \ TYPE('a) \ P \ x \ prfa \ (allI \ TYPE('a) \ P \ prfa \ prf)) \ prf \ x\, - \(allI % TYPE('a) % P %% prfa %% (Lam x::'a. spec % TYPE('a) % P % x %% prfa %% prf)) == prf\, + \(allI \ TYPE('a) \ P \ prfa \ (\<^bold>\x::'a. spec \ TYPE('a) \ P \ x \ prfa \ prf)) \ prf\, - \(exE % TYPE('a) % P % Q %% prfa %% (exI % TYPE('a) % P % x %% prfa %% prf1) %% prf2) == (prf2 % x %% prf1)\, + \(exE \ TYPE('a) \ P \ Q \ prfa \ (exI \ TYPE('a) \ P \ x \ prfa \ prf1) \ prf2) \ (prf2 \ x \ prf1)\, - \(exE % TYPE('a) % P % Q %% prfa %% prf %% (exI % TYPE('a) % P %% prfa)) == prf\, + \(exE \ TYPE('a) \ P \ Q \ prfa \ prf \ (exI \ TYPE('a) \ P \ prfa)) \ prf\, - \(disjE % P % Q % R %% (disjI1 % P % Q %% prf1) %% prf2 %% prf3) == (prf2 %% prf1)\, + \(disjE \ P \ Q \ R \ (disjI1 \ P \ Q \ prf1) \ prf2 \ prf3) \ (prf2 \ prf1)\, - \(disjE % P % Q % R %% (disjI2 % Q % P %% prf1) %% prf2 %% prf3) == (prf3 %% prf1)\, + \(disjE \ P \ Q \ R \ (disjI2 \ Q \ P \ prf1) \ prf2 \ prf3) \ (prf3 \ prf1)\, - \(conjunct1 % P % Q %% (conjI % P % Q %% prf1 %% prf2)) == prf1\, + \(conjunct1 \ P \ Q \ (conjI \ P \ Q \ prf1 \ prf2)) \ prf1\, - \(conjunct2 % P % Q %% (conjI % P % Q %% prf1 %% prf2)) == prf2\, + \(conjunct2 \ P \ Q \ (conjI \ P \ Q \ prf1 \ prf2)) \ prf2\, - \(iffD1 % A % B %% (iffI % A % B %% prf1 %% prf2)) == prf1\, + \(iffD1 \ A \ B \ (iffI \ A \ B \ prf1 \ prf2)) \ prf1\, - \(iffD2 % A % B %% (iffI % A % B %% prf1 %% prf2)) == prf2\]; + \(iffD2 \ A \ B \ (iffI \ A \ B \ prf1 \ prf2)) \ prf2\]; (** Replace congruence rules by substitution rules **)