chore(library/blast/congruence_closure): improve comment
This commit is contained in:
parent
3643e79cb3
commit
8fded5224b
1 changed files with 23 additions and 2 deletions
|
@ -1397,8 +1397,21 @@ expr congruence_closure::mk_congr_proof(name const & R, expr const & e1, expr co
|
|||
if (is_equivalence_relation_app(e2, R2, lhs2, rhs2) && R1 == R2) {
|
||||
if (!is_eqv(R1, lhs1, lhs2)) {
|
||||
lean_assert(is_eqv(R1, lhs1, rhs2));
|
||||
// We must apply symmetry.
|
||||
// The congruence table is implicitly using symmetry.
|
||||
/*
|
||||
We must apply symmetry.
|
||||
The congruence table is implicitly using symmetry.
|
||||
That is, we have
|
||||
e1 := lhs1 ~R1~ rhs1
|
||||
and
|
||||
e2 := lhs2 ~R1~ rhs2
|
||||
But,
|
||||
(lhs1 ~R1 ~rhs2) and (rhs1 ~R1~ lhs2)
|
||||
*/
|
||||
|
||||
/* Given e1 := lhs1 ~R1~ rhs1,
|
||||
create proof for
|
||||
(lhs1 ~R1~ rhs1) <-> (rhs1 ~R1~ lhs1)
|
||||
*/
|
||||
app_builder & b = get_app_builder();
|
||||
expr new_e1 = b.mk_rel(R1, rhs1, lhs1);
|
||||
expr h1 = mk_fresh_local(e1);
|
||||
|
@ -1407,11 +1420,19 @@ expr congruence_closure::mk_congr_proof(name const & R, expr const & e1, expr co
|
|||
Fun(h1, b.mk_symm(R1, h1)),
|
||||
Fun(h2, b.mk_symm(R1, h2)));
|
||||
if (R != get_iff_name()) {
|
||||
/* Convert
|
||||
(lhs1 ~R1~ rhs1) <-> (rhs1 ~R1~ lhs1)
|
||||
into
|
||||
(lhs1 ~R1~ rhs1) ~R~ (rhs1 ~R1~ lhs1)
|
||||
*/
|
||||
e1_eqv_new_e1 = b.mk_app(get_propext_name(), e1_eqv_new_e1);
|
||||
if (R != get_eq_name())
|
||||
e1_eqv_new_e1 = b.lift_from_eq(R, e1_eqv_new_e1);
|
||||
}
|
||||
bool cgr_heq_proofs = g_heq_based && R == get_heq_name();
|
||||
/* Create transitivity proof
|
||||
(lhs1 ~R1~ rhs1) ~R~ (rhs1 ~R1~ lhs1) ~R~ (lhs2 ~R1~ rhs2)
|
||||
*/
|
||||
expr r = b.mk_trans(R, e1_eqv_new_e1, mk_congr_proof_core(R, new_e1, e2, cgr_heq_proofs));
|
||||
if (g_heq_based) {
|
||||
if (cgr_heq_proofs && !heq_proofs)
|
||||
|
|
Loading…
Reference in a new issue