Make congruence reuse discriminate instead of rolling its own.
Make congruence reuse discriminate instead of rolling its own.

This changes the produced terms a bit, eg

Axiom T : Type.
Lemma foo : true = false -> T.
Proof. congruence. Qed.

used to produce

fun H : true = false =>
let Heq := H : true = false in
@eq_rect Type True (fun X : Type => X) I T
  (@f_equal bool Type (fun t : bool => if t then True else T) true false Heq)

now produces

fun H : true = false =>
let Heq : true = false := H in
let H0 : False := @eq_ind bool true (fun e : bool => if e then True else False) I false Heq in
False_rect T H0

i.e. instead of proving [True = T] by [f_equal] then transporting [I]
across this identity, it now proves [False] by [eq_ind] then uses exfalso.

silene/coq,ejgallego/coq,william-lawvere/coq,silene/coq,maximedenes/coq,letouzey/coq-wip,maximedenes/coq,Lionel-Rieg/coq,Matafou/coq,JasonGross/coq,ejgallego/coq,SkySkimmer/coq,ppedrot/coq,SkySkimmer/coq,SkySkimmer/coq,amintimany/coq,maximedenes/coq,Lionel-Rieg/coq,gares/coq,letouzey/coq-wip,ejgallego/coq,letouzey/coq-wip,gares/coq,Zimmi48/coq,william-lawvere/coq,JasonGross/coq,coq/coq,coq/coq,Lionel-Rieg/coq,ejgallego/coq,Zimmi48/coq,JasonGross/coq,ppedrot/coq,Matafou/coq,coq/coq,ppedrot/coq,ppedrot/coq,JasonGross/coq,Zimmi48/coq,amintimany/coq,amintimany/coq,maximedenes/coq,letouzey/coq-wip,william-lawvere/coq,ppedrot/coq,silene/coq,letouzey/coq-wip,gares/coq,gares/coq,maximedenes/coq,coq/coq,SkySkimmer/coq,gares/coq,Matafou/coq,Zimmi48/coq