import DuperXp
-- import Mathlib.LinearAlgebra.Finrank
-- import Mathlib.LinearAlgebra.FreeModule.Finite.Rank
import Mathlib.LinearAlgebra.CliffordAlgebra.Contraction
import Mathlib.Tactic
import Mathlib.Data.Real.Basic
import Mathlib.Algebra.BigOperators.Ring
open QuadraticForm BilinForm ExteriorAlgebra FiniteDimensional
open Function
open BigOperators
open FiniteDimensional
universe uΞΊ uR uM uΞΉ
variable { ΞΊ : Type uΞΊ}
variable { R : Type uR} [ CommRing : Type uR β Type uR
CommRing R ] [ Invertible : {Ξ± : Type uR} β [inst : Mul Ξ±] β [inst : One Ξ±] β Ξ± β Type uR
Invertible ( 2 : R )] [ Nontrivial : Type uR β Prop
Nontrivial R ]
variable { M : Type uM} [ AddCommGroup : Type uM β Type uM
AddCommGroup M ] [ Module : (R : Type uR) β (M : Type uM) β [inst : Semiring R] β [inst : AddCommMonoid M] β Type (max uR uM)
Module R M ]
-- variable {B : BilinForm R M}
variable ( Q : QuadraticForm : (R : Type uR) β
(M : Type uM) β [inst : CommSemiring R] β [inst_1 : AddCommMonoid M] β [inst : Module R M] β Type (max uR uM)
QuadraticForm R M ) { Cl : CliffordAlgebra : {R : Type uR} β
[inst : CommRing R] β
{M : Type uM} β [inst_1 : AddCommGroup M] β [inst_2 : Module R M] β QuadraticForm R M β Type (max uM uR)
CliffordAlgebra Q } { Ex : ExteriorAlgebra : (R : Type uR) β [inst : CommRing R] β (M : Type uM) β [inst_1 : AddCommGroup M] β [inst : Module R M] β Type (max uM uR)
ExteriorAlgebra R M }
variable [ Module.Finite : (R : Type uR) β (M : Type uM) β [inst : Semiring R] β [inst_1 : AddCommMonoid M] β [inst : Module R M] β Prop
Module.Finite R M ] [ Module.Free : (R : Type uR) β (M : Type uM) β [inst : Semiring R] β [inst_1 : AddCommMonoid M] β [inst : Module R M] β Prop
Module.Free R M ]
set_option trace.duper.printProof true
set_option trace.duper.proofReconstruction true
theorem barber_paradox : β {person : Type} {shaves : person β person β Prop}, (β b, β (p : person), shaves b p β Β¬shaves p p) β False
barber_paradox { person : Type } { shaves : person β person β Prop
shaves : person β person β Prop }
( h : β b, β (p : person), shaves b p β Β¬shaves p p
h : β b : person , β p : person , ( shaves : person β person β Prop
shaves b p β (Β¬ shaves : person β person β Prop
shaves p p ))) : False :=
by duper [* ] { preprocessing := no_preprocessing , inhabitationReasoning := true } [duper.printProof] Clause # 1 (by assumption []): (β b, β (p : person), shaves b p β Β¬ shaves p p) = True
[duper.printProof] Clause # 3 (by clausification [1 ]): β (a : person),
(β (p : person), shaves (@ skS. 0 Type 0 (person β person) a) p β Β¬ shaves p p) = True
[duper.printProof] Clause # 4 (by clausification [1 ]): Nonempty person = True
[duper.printProof] Clause # 5 (by clausification [3 ]): β (a a_1 : person),
(shaves (@ skS. 0 Type 0 (person β person) a) a_1 β Β¬ shaves a_1 a_1) = True
[duper.printProof] Clause # 6 (by clausification [5 ]): β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = True β¨ (Β¬ shaves a_1 a_1) = False
[duper.printProof] Clause # 7 (by clausification [5 ]): β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = False β¨ (Β¬ shaves a_1 a_1) = True
[duper.printProof] Clause # 8 (by clausification [6 ]): β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = True β¨ shaves a_1 a_1 = True
[duper.printProof] Clause # 9 (by equality factoring [8 ]): β (a : person),
True β True β¨ shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True
[duper.printProof] Clause # 10 (by clausification [7 ]): β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = False β¨ shaves a_1 a_1 = False
[duper.printProof] Clause # 13 (by clausification [9 ]): β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True β¨
True = False β¨ True = False
[duper.printProof] Clause # 15 (by clausification [13 ]): β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True β¨ True = False
[duper.printProof] Clause # 16 (by clausification [15 ]): β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True
[duper.printProof] Clause # 17 (by superposition [16 , 10 ]): person β True = False β¨ True = False
[duper.printProof] Clause # 20 (by removeVanishedVars [17 , 4 ]): True = False β¨ True = False
[duper.printProof] Clause # 21 (by clausification [20 ]): True = False
[duper.printProof] Clause # 22 (by clausification [21 ]): False
[duper.proofReconstruction] Collected clauses: [(β b, β (p : person), shaves b p β Β¬ shaves p p) = True,
β (a : person), (β (p : person), shaves (@ skS. 0 Type 0 (person β person) a) p β Β¬ shaves p p) = True,
Nonempty person = True,
β (a a_1 : person), (shaves (@ skS. 0 Type 0 (person β person) a) a_1 β Β¬ shaves a_1 a_1) = True,
β (a a_1 : person), shaves (@ skS. 0 Type 0 (person β person) a) a_1 = True β¨ (Β¬ shaves a_1 a_1) = False,
β (a a_1 : person), shaves (@ skS. 0 Type 0 (person β person) a) a_1 = False β¨ (Β¬ shaves a_1 a_1) = True,
β (a a_1 : person), shaves (@ skS. 0 Type 0 (person β person) a) a_1 = True β¨ shaves a_1 a_1 = True,
β (a : person),
True β True β¨ shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True,
β (a a_1 : person), shaves (@ skS. 0 Type 0 (person β person) a) a_1 = False β¨ shaves a_1 a_1 = False,
β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True β¨
True = False β¨ True = False,
β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True β¨ True = False,
β (a : person), shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True,
person β True = False β¨ True = False,
True = False β¨ True = False,
True = False,
False]
[duper.proofReconstruction] Request [] β¦ [] for False
[duper.proofReconstruction] Request [] β¦ [] for True = False
[duper.proofReconstruction] Request [] β¦ [] for True = False β¨ True = False
[duper.proofReconstruction] Request [] β¦ [] for person β True = False β¨ True = False
[duper.proofReconstruction] Request [] β¦ [] for β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True β¨ True = False
[duper.proofReconstruction] Request [] β¦ [] for β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True β¨
True = False β¨ True = False
[duper.proofReconstruction] Request [] β¦ [] for β (a : person),
True β True β¨ shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = True β¨ shaves a_1 a_1 = True
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = True β¨ (Β¬ shaves a_1 a_1) = False
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 : person),
(shaves (@ skS. 0 Type 0 (person β person) a) a_1 β Β¬ shaves a_1 a_1) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a : person),
(β (p : person), shaves (@ skS. 0 Type 0 (person β person) a) p β Β¬ shaves p p) = True
[duper.proofReconstruction] Request [] β¦ [] for (β b, β (p : person), shaves b p β Β¬ shaves p p) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = False β¨ shaves a_1 a_1 = False
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = False β¨ (Β¬ shaves a_1 a_1) = True
[duper.proofReconstruction] Request [] β¦ [] for Nonempty person = True
[duper.proofReconstruction] Reconstructing proof for # 1 : [] β¦ [] @ (β b, β (p : person), shaves b p β Β¬ shaves p p) =
True, Rule Name: assumption
[duper.proofReconstruction] # 1 ' s newProof: eq_true h
[duper.proofReconstruction] Instantiating parent (β b, β (p : person), shaves b p β Β¬ shaves p p) =
True β‘β‘ person β (β b, β (p : person), shaves b p β Β¬ shaves p p) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing skolem, _uniq. 13518 β‘β‘ skol. 0 : person β
person := Duper.Skolem.some fun x => β (p : person), shaves x p β Β¬ shaves p p
[duper.proofReconstruction] Reconstructing proof for # 3 : [] β¦ [] @ β (a : person),
(β (p : person), shaves (skol. 0 a) p β Β¬ shaves p p) = True, Rule Name: clausification
[duper.proofReconstruction] # 3 ' s newProof: fun a =>
(fun h => eq_true (Duper.Skolem.spec ((fun x_0 => x_0) a) (of_eq_true h))) clause. 1 . 0
[duper.proofReconstruction] Instantiating parent (β b, β (p : person), shaves b p β Β¬ shaves p p) =
True β‘β‘ (β b, β (p : person), shaves b p β Β¬ shaves p p) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 4 : [] β¦ [] @ Nonempty person = True, Rule Name: clausification
[duper.proofReconstruction] # 4 ' s newProof: (fun h => eq_true (Duper.nonempty_of_exists h)) clause. 1 . 0
[duper.proofReconstruction] Instantiating parent β (a : person),
(β (p : person), shaves (@ skS. 0 Type 0 (person β person) a) p β Β¬ shaves p p) =
True β‘β‘ β (x_0 : person),
person β
(fun a => (β (p : person), shaves (@ skS. 0 Type 0 (person β person) a) p β Β¬ shaves p p) = True)
x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 5 : [] β¦ [] @ β (a a_1 : person),
(shaves (skol. 0 a) a_1 β Β¬ shaves a_1 a_1) = True, Rule Name: clausification
[duper.proofReconstruction] # 5 ' s newProof: fun a a_1 =>
(fun h => Duper.clausify_forall ((fun x_0 x_1 => x_1) a a_1) h) (clause. 3 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a a_1 : person),
(shaves (@ skS. 0 Type 0 (person β person) a) a_1 β Β¬ shaves a_1 a_1) =
True β‘β‘ β (x_0 x_1 : person),
(fun a a_1 => (shaves (@ skS. 0 Type 0 (person β person) a) a_1 β Β¬ shaves a_1 a_1) = True) x_0
x_1 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 6 : [] β¦ [] @ β (a a_1 : person),
shaves (skol. 0 a) a_1 = True β¨ (Β¬ shaves a_1 a_1) = False, Rule Name: clausification
[duper.proofReconstruction] # 6 ' s newProof: fun a a_1 => (fun h => Duper.clausify_iff1 h) (clause. 5 . 0 a a_1)
[duper.proofReconstruction] Instantiating parent β (a a_1 : person),
(shaves (@ skS. 0 Type 0 (person β person) a) a_1 β Β¬ shaves a_1 a_1) =
True β‘β‘ β (x_0 x_1 : person),
(fun a a_1 => (shaves (@ skS. 0 Type 0 (person β person) a) a_1 β Β¬ shaves a_1 a_1) = True) x_0
x_1 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 7 : [] β¦ [] @ β (a a_1 : person),
shaves (skol. 0 a) a_1 = False β¨ (Β¬ shaves a_1 a_1) = True, Rule Name: clausification
[duper.proofReconstruction] # 7 ' s newProof: fun a a_1 => (fun h => Duper.clausify_iff2 h) (clause. 5 . 0 a a_1)
[duper.proofReconstruction] Instantiating parent β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = True β¨
(Β¬ shaves a_1 a_1) =
False β‘β‘ β (x_0 x_1 : person),
(fun a a_1 => shaves (@ skS. 0 Type 0 (person β person) a) a_1 = True β¨ (Β¬ shaves a_1 a_1) = False) x_0
x_1 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 8 : [] β¦ [] @ β (a a_1 : person),
shaves (skol. 0 a) a_1 = True β¨ shaves a_1 a_1 = True, Rule Name: clausification
[duper.proofReconstruction] # 8 ' s newProof: fun a a_1 =>
(fun h => Or.elim h (fun h => Or.inl h) fun h => Or.inr (Duper.clausify_not_false h)) (clause. 6 . 0 a a_1)
[duper.proofReconstruction] Instantiating parent β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = True β¨
shaves a_1 a_1 =
True β‘β‘ β (x_0 : person),
(fun a a_1 => shaves (@ skS. 0 Type 0 (person β person) a) a_1 = True β¨ shaves a_1 a_1 = True) x_0
(@ skS. 0 Type 0 (person β person) x_0) with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 9 : [] β¦ [] @ β (a : person),
True β True β¨ shaves (skol. 0 a) (skol. 0 a) = True, Rule Name: equality factoring
[duper.proofReconstruction] # 9 ' s newProof: fun a =>
(fun h => Or.elim h (fun h => Duper.equality_factoring_soundness1 True h) fun h => Or.inr h)
(clause. 8 . 0 a (skol. 0 a))
[duper.proofReconstruction] Instantiating parent β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = False β¨
(Β¬ shaves a_1 a_1) =
True β‘β‘ β (x_0 x_1 : person),
(fun a a_1 => shaves (@ skS. 0 Type 0 (person β person) a) a_1 = False β¨ (Β¬ shaves a_1 a_1) = True) x_0
x_1 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 10 : [] β¦ [] @ β (a a_1 : person),
shaves (skol. 0 a) a_1 = False β¨ shaves a_1 a_1 = False, Rule Name: clausification
[duper.proofReconstruction] # 10 ' s newProof: fun a a_1 =>
(fun h => Or.elim h (fun h => Or.inl h) fun h => Or.inr (Duper.clausify_not h)) (clause. 7 . 0 a a_1)
[duper.proofReconstruction] Instantiating parent β (a : person),
True β True β¨
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) =
True β‘β‘ β (x_0 : person),
(fun a => True β True β¨ shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True)
x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 13 : [] β¦ [] @ β (a : person),
shaves (skol. 0 a) (skol. 0 a) = True β¨ True = False β¨ True = False, Rule Name: clausification
[duper.proofReconstruction] # 13 ' s newProof: fun a =>
(fun h => Or.elim h (fun h => Or.inr (Duper.clausify_prop_inequality1 h)) fun h => Or.inl h) (clause. 9 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True β¨
True = False β¨
True =
False β‘β‘ β (x_0 : person),
(fun a =>
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True β¨
True = False β¨ True = False)
x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 15 : [] β¦ [] @ β (a : person),
shaves (skol. 0 a) (skol. 0 a) = True β¨ True = False, Rule Name: clausification
[duper.proofReconstruction] # 15 ' s newProof: fun a =>
(fun h =>
Or.elim h (fun h => Or.inl h) fun h =>
Or.elim h (fun h => False.elim (Duper.true_neq_false h)) fun h => Or.inr h)
(clause. 13 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True β¨
True =
False β‘β‘ β (x_0 : person),
(fun a => shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True β¨ True = False)
x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 16 : [] β¦ [] @ β (a : person),
shaves (skol. 0 a) (skol. 0 a) = True, Rule Name: clausification
[duper.proofReconstruction] # 16 ' s newProof: fun a =>
(fun h => Or.elim h (fun h => h) fun h => False.elim (Duper.true_neq_false h)) (clause. 15 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) =
True β‘β‘ β (x_0 : person),
(fun a => shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True)
x_0 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = False β¨
shaves a_1 a_1 =
False β‘β‘ β (x_0 : person),
(fun a a_1 => shaves (@ skS. 0 Type 0 (person β person) a) a_1 = False β¨ shaves a_1 a_1 = False) x_0
(@ skS. 0 Type 0 (person β person) x_0) with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 17 : [] β¦ [] @ person β
True = False β¨ True = False, Rule Name: superposition
[duper.proofReconstruction] # 17 ' s newProof: fun a =>
(fun heq =>
(fun h =>
Or.elim h (fun h => Or.inl (Eq.mp (congrArg (fun x => x = False) heq) h)) fun h =>
Or.inr (Eq.mp (congrArg (fun x => x = False) heq) h))
(clause. 10 . 0 a (skol. 0 a)))
(clause. 16 . 0 a)
[duper.proofReconstruction] Instantiating parent person β
True = False β¨
True = False β‘β‘ β (x_0 : person), (fun a => True = False β¨ True = False) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent Nonempty person =
True β‘β‘ person β Nonempty person = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 20 : [] β¦ [] @ True = False β¨
True = False, Rule Name: removeVanishedVars
[duper.proofReconstruction] # 20 ' s newProof: clause. 17 . 0 Classical.ofNonempty
[duper.proofReconstruction] Instantiating parent True = False β¨
True = False β‘β‘ True = False β¨ True = False with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 21 : [] β¦ [] @ True = False, Rule Name: clausification
[duper.proofReconstruction] # 21 ' s newProof: (fun h =>
Or.elim h (fun h => False.elim (Duper.true_neq_false h)) fun h => h)
clause. 20 . 0
[duper.proofReconstruction] Instantiating parent True = False β‘β‘ True = False with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 22 : [] β¦ [] @ False, Rule Name: clausification
[duper.proofReconstruction] # 22 ' s newProof: (fun h => False.elim (Duper.true_neq_false h)) clause. 21 . 0
[duper.proofReconstruction] Proof: let clause. 1 . 0 := eq_true h;
let skol. 0 := Duper.Skolem.some fun x => β (p : person), shaves x p β Β¬ shaves p p;
let clause. 3 . 0 := fun a => (fun h => eq_true (Duper.Skolem.spec ((fun x_0 => x_0) a) (of_eq_true h))) clause. 1 . 0 ;
let clause. 4 . 0 := (fun h => eq_true (Duper.nonempty_of_exists h)) clause. 1 . 0 ;
let clause. 5 . 0 := fun a a_1 => (fun h => Duper.clausify_forall ((fun x_0 x_1 => x_1) a a_1) h) (clause. 3 . 0 a);
let clause. 6 . 0 := fun a a_1 => (fun h => Duper.clausify_iff1 h) (clause. 5 . 0 a a_1);
let clause. 7 . 0 := fun a a_1 => (fun h => Duper.clausify_iff2 h) (clause. 5 . 0 a a_1);
let clause. 8 . 0 := fun a a_1 =>
(fun h => Or.elim h (fun h => Or.inl h) fun h => Or.inr (Duper.clausify_not_false h)) (clause. 6 . 0 a a_1);
let clause. 9 . 0 := fun a =>
(fun h => Or.elim h (fun h => Duper.equality_factoring_soundness1 True h) fun h => Or.inr h)
(clause. 8 . 0 a (skol. 0 a));
let clause. 10 . 0 := fun a a_1 =>
(fun h => Or.elim h (fun h => Or.inl h) fun h => Or.inr (Duper.clausify_not h)) (clause. 7 . 0 a a_1);
let clause. 13 . 0 := fun a =>
(fun h => Or.elim h (fun h => Or.inr (Duper.clausify_prop_inequality1 h)) fun h => Or.inl h) (clause. 9 . 0 a);
let clause. 15 . 0 := fun a =>
(fun h =>
Or.elim h (fun h => Or.inl h) fun h =>
Or.elim h (fun h => False.elim (Duper.true_neq_false h)) fun h => Or.inr h)
(clause. 13 . 0 a);
let clause. 16 . 0 := fun a =>
(fun h => Or.elim h (fun h => h) fun h => False.elim (Duper.true_neq_false h)) (clause. 15 . 0 a);
let clause. 17 . 0 := fun a =>
(fun heq =>
(fun h =>
Or.elim h (fun h => Or.inl (Eq.mp (congrArg (fun x => x = False) heq) h)) fun h =>
Or.inr (Eq.mp (congrArg (fun x => x = False) heq) h))
(clause. 10 . 0 a (skol. 0 a)))
(clause. 16 . 0 a);
let clause. 20 . 0 := clause. 17 . 0 Classical.ofNonempty;
let clause. 21 . 0 := (fun h => Or.elim h (fun h => False.elim (Duper.true_neq_false h)) fun h => h) clause. 20 . 0 ;
(fun h => False.elim (Duper.true_neq_false h)) clause. 21 . 0
example : β {G : Type} [hG : Group G] (x y : G), x * y * yβ»ΒΉ = x
example { G : Type } [ hG : Group G ] ( x y : G ) : x * y * y β»ΒΉ = x :=
by duper? [ inv_mul_cancel : β {G : Type ?u.19485} [inst : Group G] (a : G), aβ»ΒΉ * a = 1
inv_mul_cancel, one_mul : β {M : Type ?u.19819} [inst : MulOneClass M] (a : M), 1 * a = a
one_mul, mul_assoc : β {G : Type ?u.20008} [inst : Semigroup G] (a b c : G), a * b * c = a * (b * c)
mul_assoc] Try this: duper [inv_mul_cancel, one_mul, mul_assoc] {portfolioInstance := 1 } [duper.printProof] Clause # 0 (by assumption []): (β (x x_1 x_2 : _exTy_0),
e! _0 (e! _0 x x_1) x_2 = e! _0 x (e! _0 x_1 x_2)) =
True
[duper.printProof] Clause # 1 (by assumption []): (β (x : _exTy_0), e! _0 e! _1 x = x) = True
[duper.printProof] Clause # 2 (by assumption []): (β (x : _exTy_0), e! _0 (e! _2 x) x = e! _1) = True
[duper.printProof] Clause # 3 (by assumption []): (Β¬ e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) = True
[duper.printProof] Clause # 4 (by clausification [3 ]): (e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) = False
[duper.printProof] Clause # 5 (by clausification [4 ]): e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) β e! _3
[duper.printProof] Clause # 6 (by clausification [1 ]): β (a : _exTy_0), (e! _0 e! _1 a = a) = True
[duper.printProof] Clause # 7 (by clausification [6 ]): β (a : _exTy_0), e! _0 e! _1 a = a
[duper.printProof] Clause # 8 (by clausification [2 ]): β (a : _exTy_0), (e! _0 (e! _2 a) a = e! _1) = True
[duper.printProof] Clause # 9 (by clausification [8 ]): β (a : _exTy_0), e! _0 (e! _2 a) a = e! _1
[duper.printProof] Clause # 10 (by clausification [0 ]): β (a : _exTy_0),
(β (x x_1 : _exTy_0), e! _0 (e! _0 a x) x_1 = e! _0 a (e! _0 x x_1)) = True
[duper.printProof] Clause # 11 (by clausification [10 ]): β (a a_1 : _exTy_0),
(β (x : _exTy_0), e! _0 (e! _0 a a_1) x = e! _0 a (e! _0 a_1 x)) = True
[duper.printProof] Clause # 12 (by clausification [11 ]): β (a a_1 a_2 : _exTy_0),
(e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2)) = True
[duper.printProof] Clause # 13 (by clausification [12 ]): β (a a_1 a_2 : _exTy_0),
e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2)
[duper.printProof] Clause # 14 (by backward demodulation [13 , 5 ]): e! _0 e! _3 (e! _0 e! _4 (e! _2 e! _4)) β e! _3
[duper.printProof] Clause # 17 (by superposition [13 ,
9 ]): β (a a_1 : _exTy_0), e! _0 e! _1 a = e! _0 (e! _2 a_1) (e! _0 a_1 a)
[duper.printProof] Clause # 29 (by forward demodulation [17 , 7 ]): β (a a_1 : _exTy_0), a = e! _0 (e! _2 a_1) (e! _0 a_1 a)
[duper.printProof] Clause # 35 (by superposition [29 , 9 ]): β (a : _exTy_0), a = e! _0 (e! _2 (e! _2 a)) e! _1
[duper.printProof] Clause # 93 (by superposition [35 , 29 ]): β (a : _exTy_0), e! _1 = e! _0 (e! _2 (e! _2 (e! _2 a))) a
[duper.printProof] Clause # 137 (by superposition [93 , 29 ]): β (a : _exTy_0), a = e! _0 (e! _2 (e! _2 (e! _2 (e! _2 a)))) e! _1
[duper.printProof] Clause # 179 (by superposition [137 , 35 ]): β (a : _exTy_0), e! _2 (e! _2 a) = a
[duper.printProof] Clause # 188 (by backward demodulation [179 , 35 ]): β (a : _exTy_0), a = e! _0 a e! _1
[duper.printProof] Clause # 190 (by superposition [179 , 9 ]): β (a : _exTy_0), e! _0 a (e! _2 a) = e! _1
[duper.printProof] Clause # 204 (by backward demodulation [190 , 14 ]): e! _0 e! _3 e! _1 β e! _3
[duper.printProof] Clause # 217 (by forward demodulation [204 , 188 ]): e! _3 β e! _3
[duper.printProof] Clause # 218 (by eliminate resolved literals [217 ]): False
[duper.proofReconstruction] Collected clauses: [(β (x x_1 x_2 : _exTy_0),
e! _0 (e! _0 x x_1) x_2 = e! _0 x (e! _0 x_1 x_2)) =
True,
(β (x : _exTy_0), e! _0 e! _1 x = x) = True,
(β (x : _exTy_0), e! _0 (e! _2 x) x = e! _1) = True,
(Β¬ e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) = True,
(e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) = False,
e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) β e! _3,
β (a : _exTy_0), (e! _0 e! _1 a = a) = True,
β (a : _exTy_0), e! _0 e! _1 a = a,
β (a : _exTy_0), (e! _0 (e! _2 a) a = e! _1) = True,
β (a : _exTy_0), e! _0 (e! _2 a) a = e! _1,
β (a : _exTy_0), (β (x x_1 : _exTy_0), e! _0 (e! _0 a x) x_1 = e! _0 a (e! _0 x x_1)) = True,
β (a a_1 : _exTy_0), (β (x : _exTy_0), e! _0 (e! _0 a a_1) x = e! _0 a (e! _0 a_1 x)) = True,
β (a a_1 a_2 : _exTy_0), (e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2)) = True,
β (a a_1 a_2 : _exTy_0), e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2),
e! _0 e! _3 (e! _0 e! _4 (e! _2 e! _4)) β e! _3,
β (a a_1 : _exTy_0), e! _0 e! _1 a = e! _0 (e! _2 a_1) (e! _0 a_1 a),
β (a a_1 : _exTy_0), a = e! _0 (e! _2 a_1) (e! _0 a_1 a),
β (a : _exTy_0), a = e! _0 (e! _2 (e! _2 a)) e! _1,
β (a : _exTy_0), e! _1 = e! _0 (e! _2 (e! _2 (e! _2 a))) a,
β (a : _exTy_0), a = e! _0 (e! _2 (e! _2 (e! _2 (e! _2 a)))) e! _1,
β (a : _exTy_0), e! _2 (e! _2 a) = a,
β (a : _exTy_0), a = e! _0 a e! _1,
β (a : _exTy_0), e! _0 a (e! _2 a) = e! _1,
e! _0 e! _3 e! _1 β e! _3,
e! _3 β e! _3,
False]
[duper.proofReconstruction] Request [] β¦ [] for False
[duper.proofReconstruction] Request [] β¦ [] for e! _3 β e! _3
[duper.proofReconstruction] Request [] β¦ [] for e! _0 e! _3 e! _1 β e! _3
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), e! _0 a (e! _2 a) = e! _1
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), e! _2 (e! _2 a) = a
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), a = e! _0 (e! _2 (e! _2 (e! _2 (e! _2 a)))) e! _1
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), e! _1 = e! _0 (e! _2 (e! _2 (e! _2 a))) a
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), a = e! _0 (e! _2 (e! _2 a)) e! _1
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 : _exTy_0), a = e! _0 (e! _2 a_1) (e! _0 a_1 a)
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 : _exTy_0), e! _0 e! _1 a = e! _0 (e! _2 a_1) (e! _0 a_1 a)
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 a_2 : _exTy_0), e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2)
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 a_2 : _exTy_0),
(e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2)) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 : _exTy_0),
(β (x : _exTy_0), e! _0 (e! _0 a a_1) x = e! _0 a (e! _0 a_1 x)) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0),
(β (x x_1 : _exTy_0), e! _0 (e! _0 a x) x_1 = e! _0 a (e! _0 x x_1)) = True
[duper.proofReconstruction] Request [] β¦ [] for (β (x x_1 x_2 : _exTy_0),
e! _0 (e! _0 x x_1) x_2 = e! _0 x (e! _0 x_1 x_2)) =
True
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), e! _0 (e! _2 a) a = e! _1
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), (e! _0 (e! _2 a) a = e! _1) = True
[duper.proofReconstruction] Request [] β¦ [] for (β (x : _exTy_0), e! _0 (e! _2 x) x = e! _1) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), e! _0 e! _1 a = a
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), (e! _0 e! _1 a = a) = True
[duper.proofReconstruction] Request [] β¦ [] for (β (x : _exTy_0), e! _0 e! _1 x = x) = True
[duper.proofReconstruction] Request [] β¦ [] for e! _0 e! _3 (e! _0 e! _4 (e! _2 e! _4)) β e! _3
[duper.proofReconstruction] Request [] β¦ [] for e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) β e! _3
[duper.proofReconstruction] Request [] β¦ [] for (e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) = False
[duper.proofReconstruction] Request [] β¦ [] for (Β¬ e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), a = e! _0 a e! _1
[duper.proofReconstruction] Reconstructing proof for # 0 : [] β¦ [] @ (β (x x_1 x_2 : _exTy_0),
e! _0 (e! _0 x x_1) x_2 = e! _0 x (e! _0 x_1 x_2)) =
True, Rule Name: assumption
[duper.proofReconstruction] # 0 ' s newProof: eq_true Β« _exHyp_uniq. 21408 Β»
[duper.proofReconstruction] Reconstructing proof for # 1 : [] β¦ [] @ (β (x : _exTy_0), e! _0 e! _1 x = x) =
True, Rule Name: assumption
[duper.proofReconstruction] # 1 ' s newProof: eq_true Β« _exHyp_uniq. 21410 Β»
[duper.proofReconstruction] Reconstructing proof for # 2 : [] β¦ [] @ (β (x : _exTy_0), e! _0 (e! _2 x) x = e! _1) =
True, Rule Name: assumption
[duper.proofReconstruction] # 2 ' s newProof: eq_true Β« _exHyp_uniq. 21412 Β»
[duper.proofReconstruction] Reconstructing proof for # 3 : [] β¦ [] @ (Β¬ e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) =
True, Rule Name: assumption
[duper.proofReconstruction] # 3 ' s newProof: eq_true Β« _exHyp_uniq. 21414 Β»
[duper.proofReconstruction] Instantiating parent (Β¬ e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) =
True β‘β‘ (Β¬ e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 4 : [] β¦ [] @ (e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) =
False, Rule Name: clausification
[duper.proofReconstruction] # 4 ' s newProof: (fun h => Duper.clausify_not h) clause. 3 . 0
[duper.proofReconstruction] Instantiating parent (e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) =
False β‘β‘ (e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) = False with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 5 : [] β¦ [] @ e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) β
e! _3, Rule Name: clausification
[duper.proofReconstruction] # 5 ' s newProof: (fun h => Duper.not_of_eq_false h) clause. 4 . 0
[duper.proofReconstruction] Instantiating parent (β (x : _exTy_0), e! _0 e! _1 x = x) =
True β‘β‘ _exTy_0 β (β (x : _exTy_0), e! _0 e! _1 x = x) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 6 : [] β¦ [] @ β (a : _exTy_0),
(e! _0 e! _1 a = a) = True, Rule Name: clausification
[duper.proofReconstruction] # 6 ' s newProof: fun a => (fun h => Duper.clausify_forall ((fun x_0 => x_0) a) h) clause. 1 . 0
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
(e! _0 e! _1 a = a) = True β‘β‘ β (x_0 : _exTy_0), (fun a => (e! _0 e! _1 a = a) = True) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 7 : [] β¦ [] @ β (a : _exTy_0),
e! _0 e! _1 a = a, Rule Name: clausification
[duper.proofReconstruction] # 7 ' s newProof: fun a => (fun h => of_eq_true h) (clause. 6 . 0 a)
[duper.proofReconstruction] Instantiating parent (β (x : _exTy_0), e! _0 (e! _2 x) x = e! _1) =
True β‘β‘ _exTy_0 β (β (x : _exTy_0), e! _0 (e! _2 x) x = e! _1) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 8 : [] β¦ [] @ β (a : _exTy_0),
(e! _0 (e! _2 a) a = e! _1) = True, Rule Name: clausification
[duper.proofReconstruction] # 8 ' s newProof: fun a => (fun h => Duper.clausify_forall ((fun x_0 => x_0) a) h) clause. 2 . 0
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
(e! _0 (e! _2 a) a = e! _1) =
True β‘β‘ β (x_0 : _exTy_0), (fun a => (e! _0 (e! _2 a) a = e! _1) = True) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 9 : [] β¦ [] @ β (a : _exTy_0),
e! _0 (e! _2 a) a = e! _1, Rule Name: clausification
[duper.proofReconstruction] # 9 ' s newProof: fun a => (fun h => of_eq_true h) (clause. 8 . 0 a)
[duper.proofReconstruction] Instantiating parent (β (x x_1 x_2 : _exTy_0),
e! _0 (e! _0 x x_1) x_2 = e! _0 x (e! _0 x_1 x_2)) =
True β‘β‘ _exTy_0 β
(β (x x_1 x_2 : _exTy_0), e! _0 (e! _0 x x_1) x_2 = e! _0 x (e! _0 x_1 x_2)) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 10 : [] β¦ [] @ β (a : _exTy_0),
(β (x x_1 : _exTy_0), e! _0 (e! _0 a x) x_1 = e! _0 a (e! _0 x x_1)) = True, Rule Name: clausification
[duper.proofReconstruction] # 10 ' s newProof: fun a => (fun h => Duper.clausify_forall ((fun x_0 => x_0) a) h) clause. 0 . 0
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
(β (x x_1 : _exTy_0), e! _0 (e! _0 a x) x_1 = e! _0 a (e! _0 x x_1)) =
True β‘β‘ β (x_0 : _exTy_0),
_exTy_0 β
(fun a => (β (x x_2 : _exTy_0), e! _0 (e! _0 a x) x_2 = e! _0 a (e! _0 x x_2)) = True) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 11 : [] β¦ [] @ β (a a_1 : _exTy_0),
(β (x : _exTy_0), e! _0 (e! _0 a a_1) x = e! _0 a (e! _0 a_1 x)) = True, Rule Name: clausification
[duper.proofReconstruction] # 11 ' s newProof: fun a a_1 =>
(fun h => Duper.clausify_forall ((fun x_0 x_1 => x_1) a a_1) h) (clause. 10 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a a_1 : _exTy_0),
(β (x : _exTy_0), e! _0 (e! _0 a a_1) x = e! _0 a (e! _0 a_1 x)) =
True β‘β‘ β (x_0 x_1 : _exTy_0),
_exTy_0 β
(fun a a_1 => (β (x : _exTy_0), e! _0 (e! _0 a a_1) x = e! _0 a (e! _0 a_1 x)) = True) x_0
x_1 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 12 : [] β¦ [] @ β (a a_1 a_2 : _exTy_0),
(e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2)) = True, Rule Name: clausification
[duper.proofReconstruction] # 12 ' s newProof: fun a a_1 a_2 =>
(fun h => Duper.clausify_forall ((fun x_0 x_1 x_2 => x_2) a a_1 a_2) h) (clause. 11 . 0 a a_1)
[duper.proofReconstruction] Instantiating parent β (a a_1 a_2 : _exTy_0),
(e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2)) =
True β‘β‘ β (x_0 x_1 x_2 : _exTy_0),
(fun a a_1 a_2 => (e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2)) = True) x_0 x_1 x_2 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 13 : [] β¦ [] @ β (a a_1 a_2 : _exTy_0),
e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2), Rule Name: clausification
[duper.proofReconstruction] # 13 ' s newProof: fun a a_1 a_2 => (fun h => of_eq_true h) (clause. 12 . 0 a a_1 a_2)
[duper.proofReconstruction] Instantiating parent β (a a_1 a_2 : _exTy_0),
e! _0 (e! _0 a a_1) a_2 =
e! _0 a
(e! _0 a_1
a_2) β‘β‘ (fun a a_1 a_2 => e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2)) e! _3 e! _4
(e! _2 e! _4) with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) β
e! _3 β‘β‘ e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) β e! _3 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 14 : [] β¦ [] @ e! _0 e! _3 (e! _0 e! _4 (e! _2 e! _4)) β
e! _3, Rule Name: backward demodulation
[duper.proofReconstruction] # 14 ' s newProof: (fun heq =>
(fun h => Eq.mp (congrArg (fun x => x β e! _3) heq) h) clause. 5 . 0 )
(clause. 13 . 0 e! _3 e! _4 (e! _2 e! _4))
[duper.proofReconstruction] Instantiating parent β (a a_1 a_2 : _exTy_0),
e! _0 (e! _0 a a_1) a_2 =
e! _0 a
(e! _0 a_1
a_2) β‘β‘ β (x_0 x_1 : _exTy_0),
(fun a a_1 a_2 => e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2)) (e! _2 x_1) x_1 x_0 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _0 (e! _2 a) a =
e! _1 β‘β‘ _exTy_0 β β (x_1 : _exTy_0), (fun a => e! _0 (e! _2 a) a = e! _1) x_1 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 17 : [] β¦ [] @ β (a a_1 : _exTy_0),
e! _0 e! _1 a = e! _0 (e! _2 a_1) (e! _0 a_1 a), Rule Name: superposition
[duper.proofReconstruction] # 17 ' s newProof: fun a a_1 =>
(fun heq =>
(fun h => Eq.mp (congrArg (fun x => e! _0 x a = e! _0 (e! _2 a_1) (e! _0 a_1 a)) heq) h)
(clause. 13 . 0 (e! _2 a_1) a_1 a))
(clause. 9 . 0 a_1)
[duper.proofReconstruction] Instantiating parent β (a a_1 : _exTy_0),
e! _0 e! _1 a =
e! _0 (e! _2 a_1)
(e! _0 a_1
a) β‘β‘ β (x_0 x_1 : _exTy_0),
(fun a a_1 => e! _0 e! _1 a = e! _0 (e! _2 a_1) (e! _0 a_1 a)) x_0 x_1 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _0 e! _1 a = a β‘β‘ β (x_0 : _exTy_0), _exTy_0 β (fun a => e! _0 e! _1 a = a) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 29 : [] β¦ [] @ β (a a_1 : _exTy_0),
a = e! _0 (e! _2 a_1) (e! _0 a_1 a), Rule Name: forward demodulation
[duper.proofReconstruction] # 29 ' s newProof: fun a a_1 =>
(fun heq => (fun h => Eq.mp (congrArg (fun x => x = e! _0 (e! _2 a_1) (e! _0 a_1 a)) heq) h) (clause. 17 . 0 a a_1))
(clause. 7 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a a_1 : _exTy_0),
a =
e! _0 (e! _2 a_1)
(e! _0 a_1
a) β‘β‘ β (x_0 : _exTy_0),
(fun a a_1 => a = e! _0 (e! _2 a_1) (e! _0 a_1 a)) x_0 (e! _2 x_0) with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _0 (e! _2 a) a = e! _1 β‘β‘ β (x_0 : _exTy_0), (fun a => e! _0 (e! _2 a) a = e! _1) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 35 : [] β¦ [] @ β (a : _exTy_0),
a = e! _0 (e! _2 (e! _2 a)) e! _1, Rule Name: superposition
[duper.proofReconstruction] # 35 ' s newProof: fun a =>
(fun heq => (fun h => Eq.mp (congrArg (fun x => a = e! _0 (e! _2 (e! _2 a)) x) heq) h) (clause. 29 . 0 a (e! _2 a)))
(clause. 9 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
a =
e! _0 (e! _2 (e! _2 a))
e! _1 β‘β‘ β (x_0 : _exTy_0), (fun a => a = e! _0 (e! _2 (e! _2 a)) e! _1) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a a_1 : _exTy_0),
a =
e! _0 (e! _2 a_1)
(e! _0 a_1
a) β‘β‘ β (x_0 : _exTy_0),
(fun a a_1 => a = e! _0 (e! _2 a_1) (e! _0 a_1 a)) e! _1 (e! _2 (e! _2 x_0)) with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 93 : [] β¦ [] @ β (a : _exTy_0),
e! _1 = e! _0 (e! _2 (e! _2 (e! _2 a))) a, Rule Name: superposition
[duper.proofReconstruction] # 93 ' s newProof: fun a =>
(fun heq =>
(fun h => Eq.mp (congrArg (fun x => e! _1 = e! _0 (e! _2 (e! _2 (e! _2 a))) x) (Eq.symm heq)) h)
(clause. 29 . 0 e! _1 (e! _2 (e! _2 a))))
(clause. 35 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _1 =
e! _0 (e! _2 (e! _2 (e! _2 a)))
a β‘β‘ β (x_0 : _exTy_0), (fun a => e! _1 = e! _0 (e! _2 (e! _2 (e! _2 a))) a) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a a_1 : _exTy_0),
a =
e! _0 (e! _2 a_1)
(e! _0 a_1
a) β‘β‘ β (x_0 : _exTy_0),
(fun a a_1 => a = e! _0 (e! _2 a_1) (e! _0 a_1 a)) x_0 (e! _2 (e! _2 (e! _2 x_0))) with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 137 : [] β¦ [] @ β (a : _exTy_0),
a = e! _0 (e! _2 (e! _2 (e! _2 (e! _2 a)))) e! _1, Rule Name: superposition
[duper.proofReconstruction] # 137 ' s newProof: fun a =>
(fun heq =>
(fun h => Eq.mp (congrArg (fun x => a = e! _0 (e! _2 (e! _2 (e! _2 (e! _2 a)))) x) (Eq.symm heq)) h)
(clause. 29 . 0 a (e! _2 (e! _2 (e! _2 a)))))
(clause. 93 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
a =
e! _0 (e! _2 (e! _2 (e! _2 (e! _2 a))))
e! _1 β‘β‘ β (x_0 : _exTy_0), (fun a => a = e! _0 (e! _2 (e! _2 (e! _2 (e! _2 a)))) e! _1) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
a =
e! _0 (e! _2 (e! _2 a))
e! _1 β‘β‘ β (x_0 : _exTy_0), (fun a => a = e! _0 (e! _2 (e! _2 a)) e! _1) (e! _2 (e! _2 x_0)) with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 179 : [] β¦ [] @ β (a : _exTy_0),
e! _2 (e! _2 a) = a, Rule Name: superposition
[duper.proofReconstruction] # 179 ' s newProof: fun a =>
(fun heq =>
(fun h => Eq.mp (congrArg (fun x => e! _2 (e! _2 a) = x) (Eq.symm heq)) h) (clause. 35 . 0 (e! _2 (e! _2 a))))
(clause. 137 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _2 (e! _2 a) = a β‘β‘ β (x_0 : _exTy_0), (fun a => e! _2 (e! _2 a) = a) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
a =
e! _0 (e! _2 (e! _2 a))
e! _1 β‘β‘ β (x_0 : _exTy_0), (fun a => a = e! _0 (e! _2 (e! _2 a)) e! _1) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 188 : [] β¦ [] @ β (a : _exTy_0),
a = e! _0 a e! _1, Rule Name: backward demodulation
[duper.proofReconstruction] # 188 ' s newProof: fun a =>
(fun heq => (fun h => Eq.mp (congrArg (fun x => a = e! _0 x e! _1) heq) h) (clause. 35 . 0 a)) (clause. 179 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _2 (e! _2 a) = a β‘β‘ β (x_0 : _exTy_0), (fun a => e! _2 (e! _2 a) = a) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _0 (e! _2 a) a = e! _1 β‘β‘ β (x_0 : _exTy_0), (fun a => e! _0 (e! _2 a) a = e! _1) (e! _2 x_0) with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 190 : [] β¦ [] @ β (a : _exTy_0),
e! _0 a (e! _2 a) = e! _1, Rule Name: superposition
[duper.proofReconstruction] # 190 ' s newProof: fun a =>
(fun heq => (fun h => Eq.mp (congrArg (fun x => e! _0 x (e! _2 a) = e! _1) heq) h) (clause. 9 . 0 (e! _2 a)))
(clause. 179 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _0 a (e! _2 a) = e! _1 β‘β‘ (fun a => e! _0 a (e! _2 a) = e! _1) e! _4 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent e! _0 e! _3 (e! _0 e! _4 (e! _2 e! _4)) β
e! _3 β‘β‘ e! _0 e! _3 (e! _0 e! _4 (e! _2 e! _4)) β e! _3 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 204 : [] β¦ [] @ e! _0 e! _3 e! _1 β
e! _3, Rule Name: backward demodulation
[duper.proofReconstruction] # 204 ' s newProof: (fun heq =>
(fun h => Eq.mp (congrArg (fun x => e! _0 e! _3 x β e! _3) heq) h) clause. 14 . 0 )
(clause. 190 . 0 e! _4)
[duper.proofReconstruction] Instantiating parent e! _0 e! _3 e! _1 β e! _3 β‘β‘ e! _0 e! _3 e! _1 β e! _3 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
a = e! _0 a e! _1 β‘β‘ (fun a => a = e! _0 a e! _1) e! _3 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 217 : [] β¦ [] @ e! _3 β e! _3, Rule Name: forward demodulation
[duper.proofReconstruction] # 217 ' s newProof: (fun heq =>
(fun h => Eq.mp (congrArg (fun x => x β e! _3) (Eq.symm heq)) h) clause. 204 . 0 )
(clause. 188 . 0 e! _3)
[duper.proofReconstruction] Instantiating parent e! _3 β e! _3 β‘β‘ e! _3 β e! _3 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 218 : [] β¦ [] @ False, Rule Name: eliminate resolved literals
[duper.proofReconstruction] # 218 ' s newProof: (fun h => False.elim (h rfl)) clause. 217 . 0
[duper.proofReconstruction] Proof: let clause. 0 . 0 := eq_true Β« _exHyp_uniq. 21408 Β»;
let clause. 1 . 0 := eq_true Β« _exHyp_uniq. 21410 Β»;
let clause. 2 . 0 := eq_true Β« _exHyp_uniq. 21412 Β»;
let clause. 3 . 0 := eq_true Β« _exHyp_uniq. 21414 Β»;
let clause. 4 . 0 := (fun h => Duper.clausify_not h) clause. 3 . 0 ;
let clause. 5 . 0 := (fun h => Duper.not_of_eq_false h) clause. 4 . 0 ;
let clause. 6 . 0 := fun a => (fun h => Duper.clausify_forall ((fun x_0 => x_0) a) h) clause. 1 . 0 ;
let clause. 7 . 0 := fun a => (fun h => of_eq_true h) (clause. 6 . 0 a);
let clause. 8 . 0 := fun a => (fun h => Duper.clausify_forall ((fun x_0 => x_0) a) h) clause. 2 . 0 ;
let clause. 9 . 0 := fun a => (fun h => of_eq_true h) (clause. 8 . 0 a);
let clause. 10 . 0 := fun a => (fun h => Duper.clausify_forall ((fun x_0 => x_0) a) h) clause. 0 . 0 ;
let clause. 11 . 0 := fun a a_1 => (fun h => Duper.clausify_forall ((fun x_0 x_1 => x_1) a a_1) h) (clause. 10 . 0 a);
let clause. 12 . 0 := fun a a_1 a_2 =>
(fun h => Duper.clausify_forall ((fun x_0 x_1 x_2 => x_2) a a_1 a_2) h) (clause. 11 . 0 a a_1);
let clause. 13 . 0 := fun a a_1 a_2 => (fun h => of_eq_true h) (clause. 12 . 0 a a_1 a_2);
let clause. 14 . 0 :=
(fun heq => (fun h => Eq.mp (congrArg (fun x => x β e! _3) heq) h) clause. 5 . 0 ) (clause. 13 . 0 e! _3 e! _4 (e! _2 e! _4));
let clause. 17 . 0 := fun a a_1 =>
(fun heq =>
(fun h => Eq.mp (congrArg (fun x => e! _0 x a = e! _0 (e! _2 a_1) (e! _0 a_1 a)) heq) h)
(clause. 13 . 0 (e! _2 a_1) a_1 a))
(clause. 9 . 0 a_1);
let clause. 29 . 0 := fun a a_1 =>
(fun heq => (fun h => Eq.mp (congrArg (fun x => x = e! _0 (e! _2 a_1) (e! _0 a_1 a)) heq) h) (clause. 17 . 0 a a_1))
(clause. 7 . 0 a);
let clause. 35 . 0 := fun a =>
(fun heq => (fun h => Eq.mp (congrArg (fun x => a = e! _0 (e! _2 (e! _2 a)) x) heq) h) (clause. 29 . 0 a (e! _2 a)))
(clause. 9 . 0 a);
let clause. 93 . 0 := fun a =>
(fun heq =>
(fun h => Eq.mp (congrArg (fun x => e! _1 = e! _0 (e! _2 (e! _2 (e! _2 a))) x) (Eq.symm heq)) h)
(clause. 29 . 0 e! _1 (e! _2 (e! _2 a))))
(clause. 35 . 0 a);
let clause. 137 . 0 := fun a =>
(fun heq =>
(fun h => Eq.mp (congrArg (fun x => a = e! _0 (e! _2 (e! _2 (e! _2 (e! _2 a)))) x) (Eq.symm heq)) h)
(clause. 29 . 0 a (e! _2 (e! _2 (e! _2 a)))))
(clause. 93 . 0 a);
let clause. 179 . 0 := fun a =>
(fun heq =>
(fun h => Eq.mp (congrArg (fun x => e! _2 (e! _2 a) = x) (Eq.symm heq)) h) (clause. 35 . 0 (e! _2 (e! _2 a))))
(clause. 137 . 0 a);
let clause. 188 . 0 := fun a =>
(fun heq => (fun h => Eq.mp (congrArg (fun x => a = e! _0 x e! _1) heq) h) (clause. 35 . 0 a)) (clause. 179 . 0 a);
let clause. 190 . 0 := fun a =>
(fun heq => (fun h => Eq.mp (congrArg (fun x => e! _0 x (e! _2 a) = e! _1) heq) h) (clause. 9 . 0 (e! _2 a)))
(clause. 179 . 0 a);
let clause. 204 . 0 :=
(fun heq => (fun h => Eq.mp (congrArg (fun x => e! _0 e! _3 x β e! _3) heq) h) clause. 14 . 0 ) (clause. 190 . 0 e! _4);
let clause. 217 . 0 :=
(fun heq => (fun h => Eq.mp (congrArg (fun x => x β e! _3) (Eq.symm heq)) h) clause. 204 . 0 ) (clause. 188 . 0 e! _3);
(fun h => False.elim (h rfl)) clause. 217 . 0
example : β (a b : β), |a| - |b| β€ |a - b|
example ( a b : β ) : | a | - | b | β€ | a - b | := by
duper? [ abs_le : β {Ξ± : Type ?u.34863} [inst : LinearOrderedAddCommGroup Ξ±] {a b : Ξ±}, |a| β€ b β -b β€ a β§ a β€ b
abs_le, abs_sub_abs_le_abs_sub : β {Ξ± : Type ?u.34941} [inst : LinearOrderedAddCommGroup Ξ±] (a b : Ξ±), |a| - |b| β€ |a - b|
abs_sub_abs_le_abs_sub] [duper.printProof] Clause # 0 (by assumption []): (β (x x_1 : _exTy_0),
e! _0 (e! _1 (e! _2 x) (e! _2 x_1)) (e! _2 (e! _1 x x_1))) =
True
[duper.printProof] Clause # 2 (by assumption []): (Β¬ e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5)) (e! _2 (e! _1 e! _4 e! _5))) = True
[duper.printProof] Clause # 3 (by clausification [2 ]): e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5)) (e! _2 (e! _1 e! _4 e! _5)) =
False
[duper.printProof] Clause # 4 (by clausification [0 ]): β (a : _exTy_0),
(β (x : _exTy_0), e! _0 (e! _1 (e! _2 a) (e! _2 x)) (e! _2 (e! _1 a x))) = True
[duper.printProof] Clause # 5 (by clausification [4 ]): β (a a_1 : _exTy_0),
e! _0 (e! _1 (e! _2 a) (e! _2 a_1)) (e! _2 (e! _1 a a_1)) = True
[duper.printProof] Clause # 6 (by superposition [5 , 3 ]): True = False
[duper.printProof] Clause # 7 (by clausification [6 ]): False
[duper.proofReconstruction] Collected clauses: [(β (x x_1 : _exTy_0),
e! _0 (e! _1 (e! _2 x) (e! _2 x_1)) (e! _2 (e! _1 x x_1))) =
True,
(Β¬ e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5)) (e! _2 (e! _1 e! _4 e! _5))) = True,
e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5)) (e! _2 (e! _1 e! _4 e! _5)) = False,
β (a : _exTy_0), (β (x : _exTy_0), e! _0 (e! _1 (e! _2 a) (e! _2 x)) (e! _2 (e! _1 a x))) = True,
β (a a_1 : _exTy_0), e! _0 (e! _1 (e! _2 a) (e! _2 a_1)) (e! _2 (e! _1 a a_1)) = True,
True = False,
False]
[duper.proofReconstruction] Request [] β¦ [] for False
[duper.proofReconstruction] Request [] β¦ [] for True = False
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 : _exTy_0),
e! _0 (e! _1 (e! _2 a) (e! _2 a_1)) (e! _2 (e! _1 a a_1)) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0),
(β (x : _exTy_0), e! _0 (e! _1 (e! _2 a) (e! _2 x)) (e! _2 (e! _1 a x))) = True
[duper.proofReconstruction] Request [] β¦ [] for (β (x x_1 : _exTy_0),
e! _0 (e! _1 (e! _2 x) (e! _2 x_1)) (e! _2 (e! _1 x x_1))) =
True
[duper.proofReconstruction] Request [] β¦ [] for e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5)) (e! _2 (e! _1 e! _4 e! _5)) = False
[duper.proofReconstruction] Request [] β¦ [] for (Β¬ e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5)) (e! _2 (e! _1 e! _4 e! _5))) = True
[duper.proofReconstruction] Reconstructing proof for # 0 : [] β¦ [] @ (β (x x_1 : _exTy_0),
e! _0 (e! _1 (e! _2 x) (e! _2 x_1)) (e! _2 (e! _1 x x_1))) =
True, Rule Name: assumption
[duper.proofReconstruction] # 0 ' s newProof: eq_true Β« _exHyp_uniq. 35868 Β»
[duper.proofReconstruction] Reconstructing proof for # 2 : [] β¦ [] @ (Β¬ e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5))
(e! _2 (e! _1 e! _4 e! _5))) =
True, Rule Name: assumption
[duper.proofReconstruction] # 2 ' s newProof: eq_true Β« _exHyp_uniq. 35872 Β»
[duper.proofReconstruction] Instantiating parent (Β¬ e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5)) (e! _2 (e! _1 e! _4 e! _5))) =
True β‘β‘ (Β¬ e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5)) (e! _2 (e! _1 e! _4 e! _5))) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 3 : [] β¦ [] @ e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5))
(e! _2 (e! _1 e! _4 e! _5)) =
False, Rule Name: clausification
[duper.proofReconstruction] # 3 ' s newProof: (fun h => Duper.clausify_not h) clause. 2 . 0
[duper.proofReconstruction] Instantiating parent (β (x x_1 : _exTy_0),
e! _0 (e! _1 (e! _2 x) (e! _2 x_1)) (e! _2 (e! _1 x x_1))) =
True β‘β‘ _exTy_0 β
(β (x x_1 : _exTy_0), e! _0 (e! _1 (e! _2 x) (e! _2 x_1)) (e! _2 (e! _1 x x_1))) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 4 : [] β¦ [] @ β (a : _exTy_0),
(β (x : _exTy_0), e! _0 (e! _1 (e! _2 a) (e! _2 x)) (e! _2 (e! _1 a x))) = True, Rule Name: clausification
[duper.proofReconstruction] # 4 ' s newProof: fun a => (fun h => Duper.clausify_forall ((fun x_0 => x_0) a) h) clause. 0 . 0
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
(β (x : _exTy_0), e! _0 (e! _1 (e! _2 a) (e! _2 x)) (e! _2 (e! _1 a x))) =
True β‘β‘ β (x_0 : _exTy_0),
_exTy_0 β
(fun a => (β (x : _exTy_0), e! _0 (e! _1 (e! _2 a) (e! _2 x)) (e! _2 (e! _1 a x))) = True)
x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 5 : [] β¦ [] @ β (a a_1 : _exTy_0),
e! _0 (e! _1 (e! _2 a) (e! _2 a_1)) (e! _2 (e! _1 a a_1)) = True, Rule Name: clausification
[duper.proofReconstruction] # 5 ' s newProof: fun a a_1 =>
(fun h => Duper.clausify_forall ((fun x_0 x_1 => x_1) a a_1) h) (clause. 4 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a a_1 : _exTy_0),
e! _0 (e! _1 (e! _2 a) (e! _2 a_1)) (e! _2 (e! _1 a a_1)) =
True β‘β‘ (fun a a_1 => e! _0 (e! _1 (e! _2 a) (e! _2 a_1)) (e! _2 (e! _1 a a_1)) = True) e! _4
e! _5 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5)) (e! _2 (e! _1 e! _4 e! _5)) =
False β‘β‘ e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5)) (e! _2 (e! _1 e! _4 e! _5)) = False with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 6 : [] β¦ [] @ True = False, Rule Name: superposition
[duper.proofReconstruction] # 6 ' s newProof: (fun heq =>
(fun h => Eq.mp (congrArg (fun x => x = False) heq) h) clause. 3 . 0 )
(clause. 5 . 0 e! _4 e! _5)
[duper.proofReconstruction] Instantiating parent True = False β‘β‘ True = False with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 7 : [] β¦ [] @ False, Rule Name: clausification
[duper.proofReconstruction] # 7 ' s newProof: (fun h => False.elim (Duper.true_neq_false h)) clause. 6 . 0
[duper.proofReconstruction] Proof: let clause. 0 . 0 := eq_true Β« _exHyp_uniq. 35868 Β»;
let clause. 2 . 0 := eq_true Β« _exHyp_uniq. 35872 Β»;
let clause. 3 . 0 := (fun h => Duper.clausify_not h) clause. 2 . 0 ;
let clause. 4 . 0 := fun a => (fun h => Duper.clausify_forall ((fun x_0 => x_0) a) h) clause. 0 . 0 ;
let clause. 5 . 0 := fun a a_1 => (fun h => Duper.clausify_forall ((fun x_0 x_1 => x_1) a a_1) h) (clause. 4 . 0 a);
let clause. 6 . 0 :=
(fun heq => (fun h => Eq.mp (congrArg (fun x => x = False) heq) h) clause. 3 . 0 ) (clause. 5 . 0 e! _4 e! _5);
(fun h => False.elim (Duper.true_neq_false h)) clause. 6 . 0 Try this: duper [abs_le, abs_sub_abs_le_abs_sub] {portfolioInstance := 1 }
/- Attempting to call `duper` directly on the original goal will fail because it isn't able to generate a
counterexample to Surjf on its own. But if we provide the counterexample, `duper` can solve from there. -/
example : β f : Ξ± β Set Ξ±, Β¬ Surjective f := by
intro f Surjf ΞΊ : Type uΞΊR : Type uRinstββΆ : CommRing R instββ΅ : Invertible 2 instββ΄ : Nontrivial R M : Type uMinstβΒ³ : AddCommGroup M instβΒ² : Module R M Q : QuadraticForm R M Cl : CliffordAlgebra Q Ex : ExteriorAlgebra R M instβΒΉ : Module.Finite R M instβ : Module.Free R M Ξ± : Type u_1f : Ξ± β Set Ξ± Surjf : Surjective f
False
have counterexample : β a, f a = {i | i β f i}
counterexample := Surjf { i | i β f i } ΞΊ : Type uΞΊR : Type uRinstββΆ : CommRing R instββ΅ : Invertible 2 instββ΄ : Nontrivial R M : Type uMinstβΒ³ : AddCommGroup M instβΒ² : Module R M Q : QuadraticForm R M Cl : CliffordAlgebra Q Ex : ExteriorAlgebra R M instβΒΉ : Module.Finite R M instβ : Module.Free R M Ξ± : Type u_1f : Ξ± β Set Ξ± Surjf : Surjective f counterexample : β a, f a = {i | i β f i}
False
duper [ Set.mem_setOf_eq : β {Ξ± : Type ?u.39890} {x : Ξ±} {p : Ξ± β Prop}, (x β {y | p y}) = p x
Set.mem_setOf_eq, counterexample : β a, f a = {i | i β f i}
counterexample ] [duper.printProof] Clause # 0 (by assumption []): (e! _0 e? _0 = e! _1 fun eb! _0 => Β¬ e! _2 eb! _0 (e! _0 eb! _0)) = True
[duper.printProof] Clause # 1 (by assumption []): (β (x : _exTy_0) (x_1 : _exTy_0 β Prop ),
e! _2 x (e! _1 fun eb! _2 => x_1 eb! _2) = x_1 x) =
True
[duper.printProof] Clause # 4 (by clausification [0 ]): e! _0 e? _0 = e! _1 fun eb! _0 => Β¬ e! _2 eb! _0 (e! _0 eb! _0)
[duper.printProof] Clause # 5 (by betaEtaReduce [1 ]): (β (x : _exTy_0) (x_1 : _exTy_0 β Prop ),
e! _2 x (e! _1 x_1) = x_1 x) =
True
[duper.printProof] Clause # 6 (by clausification [5 ]): β (a : _exTy_0),
(β (x : _exTy_0 β Prop ), e! _2 a (e! _1 x) = x a) = True
[duper.printProof] Clause # 7 (by clausification [6 ]): β (a : _exTy_0) (a_1 : _exTy_0 β Prop ),
(e! _2 a (e! _1 a_1) = a_1 a) = True
[duper.printProof] Clause # 8 (by clausification [7 ]): β (a : _exTy_0) (a_1 : _exTy_0 β Prop ), e! _2 a (e! _1 a_1) = a_1 a
[duper.printProof] Clause # 12 (by superposition [8 , 4 ]): β (a : _exTy_0), e! _2 a (e! _0 e? _0) = Β¬ e! _2 a (e! _0 a)
[duper.printProof] Clause # 23 (by identity loobHoist [12 ]): β (a : _exTy_0),
e! _2 a (e! _0 e? _0) = Β¬ True β¨ e! _2 a (e! _0 a) = False
[duper.printProof] Clause # 24 (by identity boolHoist [12 ]): β (a : _exTy_0),
e! _2 a (e! _0 e? _0) = Β¬ False β¨ e! _2 a (e! _0 a) = True
[duper.printProof] Clause # 25 (by bool simp [23 ]): β (a : _exTy_0), e! _2 a (e! _0 e? _0) = False β¨ e! _2 a (e! _0 a) = False
[duper.printProof] Clause # 35 (by bool simp [24 ]): β (a : _exTy_0), e! _2 a (e! _0 e? _0) = True β¨ e! _2 a (e! _0 a) = True
[duper.printProof] Clause # 37 (by equality factoring [35 ]): True β True β¨ e! _2 e? _0 (e! _0 e? _0) = True
[duper.printProof] Clause # 38 (by clausification [37 ]): e! _2 e? _0 (e! _0 e? _0) = True β¨ True = False β¨ True = False
[duper.printProof] Clause # 40 (by clausification [38 ]): e! _2 e? _0 (e! _0 e? _0) = True β¨ True = False
[duper.printProof] Clause # 41 (by clausification [40 ]): e! _2 e? _0 (e! _0 e? _0) = True
[duper.printProof] Clause # 42 (by superposition [41 , 25 ]): True = False β¨ True = False
[duper.printProof] Clause # 43 (by clausification [42 ]): True = False
[duper.printProof] Clause # 44 (by clausification [43 ]): False
[duper.proofReconstruction] Collected clauses: [(e! _0 e? _0 = e! _1 fun eb! _0 => Β¬ e! _2 eb! _0 (e! _0 eb! _0)) = True,
(β (x : _exTy_0) (x_1 : _exTy_0 β Prop ), e! _2 x (e! _1 fun eb! _2 => x_1 eb! _2) = x_1 x) = True,
e! _0 e? _0 = e! _1 fun eb! _0 => Β¬ e! _2 eb! _0 (e! _0 eb! _0),
(β (x : _exTy_0) (x_1 : _exTy_0 β Prop ), e! _2 x (e! _1 x_1) = x_1 x) = True,
β (a : _exTy_0), (β (x : _exTy_0 β Prop ), e! _2 a (e! _1 x) = x a) = True,
β (a : _exTy_0) (a_1 : _exTy_0 β Prop ), (e! _2 a (e! _1 a_1) = a_1 a) = True,
β (a : _exTy_0) (a_1 : _exTy_0 β Prop ), e! _2 a (e! _1 a_1) = a_1 a,
β (a : _exTy_0), e! _2 a (e! _0 e? _0) = Β¬ e! _2 a (e! _0 a),
β (a : _exTy_0), e! _2 a (e! _0 e? _0) = Β¬ True β¨ e! _2 a (e! _0 a) = False,
β (a : _exTy_0), e! _2 a (e! _0 e? _0) = Β¬ False β¨ e! _2 a (e! _0 a) = True,
β (a : _exTy_0), e! _2 a (e! _0 e? _0) = False β¨ e! _2 a (e! _0 a) = False,
β (a : _exTy_0), e! _2 a (e! _0 e? _0) = True β¨ e! _2 a (e! _0 a) = True,
True β True β¨ e! _2 e? _0 (e! _0 e? _0) = True,
e! _2 e? _0 (e! _0 e? _0) = True β¨ True = False β¨ True = False,
e! _2 e? _0 (e! _0 e? _0) = True β¨ True = False,
e! _2 e? _0 (e! _0 e? _0) = True,
True = False β¨ True = False,
True = False,
False]
[duper.proofReconstruction] Request [] β¦ [] for False
[duper.proofReconstruction] Request [] β¦ [] for True = False
[duper.proofReconstruction] Request [] β¦ [] for True = False β¨ True = False
[duper.proofReconstruction] Request [] β¦ [] for e! _2 e? _0 (e! _0 e? _0) = True
[duper.proofReconstruction] Request [] β¦ [] for e! _2 e? _0 (e! _0 e? _0) = True β¨ True = False
[duper.proofReconstruction] Request [] β¦ [] for e! _2 e? _0 (e! _0 e? _0) = True β¨ True = False β¨ True = False
[duper.proofReconstruction] Request [] β¦ [] for True β True β¨ e! _2 e? _0 (e! _0 e? _0) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), e! _2 a (e! _0 e? _0) = True β¨ e! _2 a (e! _0 a) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), e! _2 a (e! _0 e? _0) = Β¬ False β¨ e! _2 a (e! _0 a) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), e! _2 a (e! _0 e? _0) = Β¬ e! _2 a (e! _0 a)
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0) (a_1 : _exTy_0 β Prop ), e! _2 a (e! _1 a_1) = a_1 a
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0) (a_1 : _exTy_0 β Prop ),
(e! _2 a (e! _1 a_1) = a_1 a) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), (β (x : _exTy_0 β Prop ), e! _2 a (e! _1 x) = x a) = True
[duper.proofReconstruction] Request [] β¦ [] for (β (x : _exTy_0) (x_1 : _exTy_0 β Prop ), e! _2 x (e! _1 x_1) = x_1 x) =
True
[duper.proofReconstruction] Request [] β¦ [] for (β (x : _exTy_0) (x_1 : _exTy_0 β Prop ),
e! _2 x (e! _1 fun eb! _2 => x_1 eb! _2) = x_1 x) =
True
[duper.proofReconstruction] Request [] β¦ [] for e! _0 e? _0 = e! _1 fun eb! _0 => Β¬ e! _2 eb! _0 (e! _0 eb! _0)
[duper.proofReconstruction] Request [] β¦ [] for (e! _0 e? _0 = e! _1 fun eb! _0 => Β¬ e! _2 eb! _0 (e! _0 eb! _0)) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), e! _2 a (e! _0 e? _0) = False β¨ e! _2 a (e! _0 a) = False
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), e! _2 a (e! _0 e? _0) = Β¬ True β¨ e! _2 a (e! _0 a) = False
[duper.proofReconstruction] Reconstructing proof for # 0 : [] β¦ [] @ (e! _0 e? _0 =
e! _1 fun eb! _0 => Β¬ e! _2 eb! _0 (e! _0 eb! _0)) =
True, Rule Name: assumption
[duper.proofReconstruction] # 0 ' s newProof: eq_true Β« _exHyp_uniq. 40213 Β»
[duper.proofReconstruction] Reconstructing proof for # 1 : [] β¦ [] @ (β (x : _exTy_0) (x_1 : _exTy_0 β Prop ),
e! _2 x (e! _1 fun eb! _2 => x_1 eb! _2) = x_1 x) =
True, Rule Name: assumption
[duper.proofReconstruction] # 1 ' s newProof: eq_true Β« _exHyp_uniq. 40215 Β»
[duper.proofReconstruction] Instantiating parent (e! _0 e? _0 = e! _1 fun eb! _0 => Β¬ e! _2 eb! _0 (e! _0 eb! _0)) =
True β‘β‘ (e! _0 e? _0 = e! _1 fun eb! _0 => Β¬ e! _2 eb! _0 (e! _0 eb! _0)) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 4 : [] β¦ [] @ e! _0 e? _0 =
e! _1 fun eb! _0 => Β¬ e! _2 eb! _0 (e! _0 eb! _0), Rule Name: clausification
[duper.proofReconstruction] # 4 ' s newProof: (fun h => of_eq_true h) clause. 0 . 0
[duper.proofReconstruction] Instantiating parent (β (x : _exTy_0) (x_1 : _exTy_0 β Prop ),
e! _2 x (e! _1 fun eb! _2 => x_1 eb! _2) = x_1 x) =
True β‘β‘ (β (x : _exTy_0) (x_1 : _exTy_0 β Prop ), e! _2 x (e! _1 fun eb! _2 => x_1 eb! _2) = x_1 x) =
True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 5 : [] β¦ [] @ (β (x : _exTy_0) (x_1 : _exTy_0 β Prop ),
e! _2 x (e! _1 x_1) = x_1 x) =
True, Rule Name: betaEtaReduce
[duper.proofReconstruction] # 5 ' s newProof: clause. 1 . 0
[duper.proofReconstruction] Instantiating parent (β (x : _exTy_0) (x_1 : _exTy_0 β Prop ), e! _2 x (e! _1 x_1) = x_1 x) =
True β‘β‘ _exTy_0 β
(β (x : _exTy_0) (x_1 : _exTy_0 β Prop ), e! _2 x (e! _1 x_1) = x_1 x) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 6 : [] β¦ [] @ β (a : _exTy_0),
(β (x : _exTy_0 β Prop ), e! _2 a (e! _1 x) = x a) = True, Rule Name: clausification
[duper.proofReconstruction] # 6 ' s newProof: fun a => (fun h => Duper.clausify_forall ((fun x_0 => x_0) a) h) clause. 5 . 0
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
(β (x : _exTy_0 β Prop ), e! _2 a (e! _1 x) = x a) =
True β‘β‘ β (x_0 : _exTy_0),
(_exTy_0 β Prop ) β (fun a => (β (x : _exTy_0 β Prop ), e! _2 a (e! _1 x) = x a) = True) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 7 : [] β¦ [] @ β (a : _exTy_0) (a_1 : _exTy_0 β Prop ),
(e! _2 a (e! _1 a_1) = a_1 a) = True, Rule Name: clausification
[duper.proofReconstruction] # 7 ' s newProof: fun a a_1 =>
(fun h => Duper.clausify_forall ((fun x_0 x_1 => x_1) a a_1) h) (clause. 6 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0) (a_1 : _exTy_0 β Prop ),
(e! _2 a (e! _1 a_1) = a_1 a) =
True β‘β‘ β (x_0 : _exTy_0) (x_1 : _exTy_0 β Prop ),
(fun a a_1 => (e! _2 a (e! _1 a_1) = a_1 a) = True) x_0 x_1 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 8 : [] β¦ [] @ β (a : _exTy_0) (a_1 : _exTy_0 β Prop ),
e! _2 a (e! _1 a_1) = a_1 a, Rule Name: clausification
[duper.proofReconstruction] # 8 ' s newProof: fun a a_1 => (fun h => of_eq_true h) (clause. 7 . 0 a a_1)
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0) (a_1 : _exTy_0 β Prop ),
e! _2 a (e! _1 a_1) =
a_1
a β‘β‘ β (x_0 : _exTy_0),
(fun a a_1 => e! _2 a (e! _1 a_1) = a_1 a) x_0 fun eb! _0 => Β¬ e! _2 eb! _0 (e! _0 eb! _0) with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent e! _0 e? _0 =
e! _1 fun eb! _0 =>
Β¬ e! _2 eb! _0
(e! _0 eb! _0) β‘β‘ _exTy_0 β e! _0 e? _0 = e! _1 fun eb! _0 => Β¬ e! _2 eb! _0 (e! _0 eb! _0) with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 12 : [] β¦ [] @ β (a : _exTy_0),
e! _2 a (e! _0 e? _0) = Β¬ e! _2 a (e! _0 a), Rule Name: superposition
[duper.proofReconstruction] # 12 ' s newProof: fun a =>
(fun heq =>
(fun h => Eq.mp (congrArg (fun x => e! _2 a x = (fun eb! _0 => Β¬ e! _2 eb! _0 (e! _0 eb! _0)) a) (Eq.symm heq)) h)
(clause. 8 . 0 a fun eb! _0 => Β¬ e! _2 eb! _0 (e! _0 eb! _0)))
clause. 4 . 0
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _2 a (e! _0 e? _0) =
Β¬ e! _2 a
(e! _0 a) β‘β‘ β (x_0 : _exTy_0), (fun a => e! _2 a (e! _0 e? _0) = Β¬ e! _2 a (e! _0 a)) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 23 : [] β¦ [] @ β (a : _exTy_0),
e! _2 a (e! _0 e? _0) = Β¬ True β¨ e! _2 a (e! _0 a) = False, Rule Name: identity loobHoist
[duper.proofReconstruction] # 23 ' s newProof: fun a =>
(fun h => Duper.loob_hoist_proof (fun h => e! _2 a (e! _0 e? _0) = Β¬ h) (e! _2 a (e! _0 a)) h) (clause. 12 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _2 a (e! _0 e? _0) =
Β¬ e! _2 a
(e! _0 a) β‘β‘ β (x_0 : _exTy_0), (fun a => e! _2 a (e! _0 e? _0) = Β¬ e! _2 a (e! _0 a)) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 24 : [] β¦ [] @ β (a : _exTy_0),
e! _2 a (e! _0 e? _0) = Β¬ False β¨ e! _2 a (e! _0 a) = True, Rule Name: identity boolHoist
[duper.proofReconstruction] # 24 ' s newProof: fun a =>
(fun h => Duper.bool_hoist_proof (fun h => e! _2 a (e! _0 e? _0) = Β¬ h) (e! _2 a (e! _0 a)) h) (clause. 12 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _2 a (e! _0 e? _0) = Β¬ True β¨
e! _2 a (e! _0 a) =
False β‘β‘ β (x_0 : _exTy_0),
(fun a => e! _2 a (e! _0 e? _0) = Β¬ True β¨ e! _2 a (e! _0 a) = False) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 25 : [] β¦ [] @ β (a : _exTy_0),
e! _2 a (e! _0 e? _0) = False β¨ e! _2 a (e! _0 a) = False, Rule Name: bool simp
[duper.proofReconstruction] # 25 ' s newProof: fun a =>
(fun h =>
Or.elim h (fun h => Or.inl (Eq.mp (congrArg (fun x => e! _2 a (e! _0 e? _0) = x) Duper.rule14Theorem) h))
fun h => Or.inr h)
(clause. 23 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _2 a (e! _0 e? _0) = Β¬ False β¨
e! _2 a (e! _0 a) =
True β‘β‘ β (x_0 : _exTy_0),
(fun a => e! _2 a (e! _0 e? _0) = Β¬ False β¨ e! _2 a (e! _0 a) = True) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 35 : [] β¦ [] @ β (a : _exTy_0),
e! _2 a (e! _0 e? _0) = True β¨ e! _2 a (e! _0 a) = True, Rule Name: bool simp
[duper.proofReconstruction] # 35 ' s newProof: fun a =>
(fun h =>
Or.elim h (fun h => Or.inl (Eq.mp (congrArg (fun x => e! _2 a (e! _0 e? _0) = x) Duper.rule7Theorem) h)) fun h =>
Or.inr h)
(clause. 24 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _2 a (e! _0 e? _0) = True β¨
e! _2 a (e! _0 a) =
True β‘β‘ (fun a => e! _2 a (e! _0 e? _0) = True β¨ e! _2 a (e! _0 a) = True) e? _0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 37 : [] β¦ [] @ True β True β¨
e! _2 e? _0 (e! _0 e? _0) = True, Rule Name: equality factoring
[duper.proofReconstruction] # 37 ' s newProof: (fun h =>
Or.elim h (fun h => Duper.equality_factoring_soundness1 True h) fun h => Or.inr h)
(clause. 35 . 0 e? _0)
[duper.proofReconstruction] Instantiating parent True β True β¨
e! _2 e? _0 (e! _0 e? _0) = True β‘β‘ True β True β¨ e! _2 e? _0 (e! _0 e? _0) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 38 : [] β¦ [] @ e! _2 e? _0 (e! _0 e? _0) = True β¨
True = False β¨ True = False, Rule Name: clausification
[duper.proofReconstruction] # 38 ' s newProof: (fun h =>
Or.elim h (fun h => Or.inr (Duper.clausify_prop_inequality1 h)) fun h => Or.inl h)
clause. 37 . 0
[duper.proofReconstruction] Instantiating parent e! _2 e? _0 (e! _0 e? _0) = True β¨
True = False β¨ True = False β‘β‘ e! _2 e? _0 (e! _0 e? _0) = True β¨ True = False β¨ True = False with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 40 : [] β¦ [] @ e! _2 e? _0 (e! _0 e? _0) = True β¨
True = False, Rule Name: clausification
[duper.proofReconstruction] # 40 ' s newProof: (fun h =>
Or.elim h (fun h => Or.inl h) fun h =>
Or.elim h (fun h => False.elim (Duper.true_neq_false h)) fun h => Or.inr h)
clause. 38 . 0
[duper.proofReconstruction] Instantiating parent e! _2 e? _0 (e! _0 e? _0) = True β¨
True = False β‘β‘ e! _2 e? _0 (e! _0 e? _0) = True β¨ True = False with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 41 : [] β¦ [] @ e! _2 e? _0 (e! _0 e? _0) =
True, Rule Name: clausification
[duper.proofReconstruction] # 41 ' s newProof: (fun h =>
Or.elim h (fun h => h) fun h => False.elim (Duper.true_neq_false h))
clause. 40 . 0
[duper.proofReconstruction] Instantiating parent e! _2 e? _0 (e! _0 e? _0) =
True β‘β‘ e! _2 e? _0 (e! _0 e? _0) = True with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _2 a (e! _0 e? _0) = False β¨
e! _2 a (e! _0 a) =
False β‘β‘ (fun a => e! _2 a (e! _0 e? _0) = False β¨ e! _2 a (e! _0 a) = False) e? _0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 42 : [] β¦ [] @ True = False β¨
True = False, Rule Name: superposition
[duper.proofReconstruction] # 42 ' s newProof: (fun heq =>
(fun h =>
Or.elim h (fun h => Or.inl (Eq.mp (congrArg (fun x => x = False) heq) h)) fun h =>
Or.inr (Eq.mp (congrArg (fun x => x = False) heq) h))
(clause. 25 . 0 e? _0))
clause. 41 . 0
[duper.proofReconstruction] Instantiating parent True = False β¨
True = False β‘β‘ True = False β¨ True = False with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 43 : [] β¦ [] @ True = False, Rule Name: clausification
[duper.proofReconstruction] # 43 ' s newProof: (fun h =>
Or.elim h (fun h => False.elim (Duper.true_neq_false h)) fun h => h)
clause. 42 . 0
[duper.proofReconstruction] Instantiating parent True = False β‘β‘ True = False with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 44 : [] β¦ [] @ False, Rule Name: clausification
[duper.proofReconstruction] # 44 ' s newProof: (fun h => False.elim (Duper.true_neq_false h)) clause. 43 . 0
[duper.proofReconstruction] Proof: let clause. 0 . 0 := eq_true Β« _exHyp_uniq. 40213 Β»;
let clause. 1 . 0 := eq_true Β« _exHyp_uniq. 40215 Β»;
let clause. 4 . 0 := (fun h => of_eq_true h) clause. 0 . 0 ;
let clause. 5 . 0 := clause. 1 . 0 ;
let clause. 6 . 0 := fun a => (fun h => Duper.clausify_forall ((fun x_0 => x_0) a) h) clause. 5 . 0 ;
let clause. 7 . 0 := fun a a_1 => (fun h => Duper.clausify_forall ((fun x_0 x_1 => x_1) a a_1) h) (clause. 6 . 0 a);
let clause. 8 . 0 := fun a a_1 => (fun h => of_eq_true h) (clause. 7 . 0 a a_1);
let clause. 12 . 0 := fun a =>
(fun heq =>
(fun h => Eq.mp (congrArg (fun x => e! _2 a x = (fun eb! _0 => Β¬ e! _2 eb! _0 (e! _0 eb! _0)) a) (Eq.symm heq)) h)
(clause. 8 . 0 a fun eb! _0 => Β¬ e! _2 eb! _0 (e! _0 eb! _0)))
clause. 4 . 0 ;
let clause. 23 . 0 := fun a =>
(fun h => Duper.loob_hoist_proof (fun h => e! _2 a (e! _0 e? _0) = Β¬ h) (e! _2 a (e! _0 a)) h) (clause. 12 . 0 a);
let clause. 24 . 0 := fun a =>
(fun h => Duper.bool_hoist_proof (fun h => e! _2 a (e! _0 e? _0) = Β¬ h) (e! _2 a (e! _0 a)) h) (clause. 12 . 0 a);
let clause. 25 . 0 := fun a =>
(fun h =>
Or.elim h (fun h => Or.inl (Eq.mp (congrArg (fun x => e! _2 a (e! _0 e? _0) = x) Duper.rule14Theorem) h))
fun h => Or.inr h)
(clause. 23 . 0 a);
let clause. 35 . 0 := fun a =>
(fun h =>
Or.elim h (fun h => Or.inl (Eq.mp (congrArg (fun x => e! _2 a (e! _0 e? _0) = x) Duper.rule7Theorem) h)) fun h =>
Or.inr h)
(clause. 24 . 0 a);
let clause. 37 . 0 :=
(fun h => Or.elim h (fun h => Duper.equality_factoring_soundness1 True h) fun h => Or.inr h) (clause. 35 . 0 e? _0);
let clause. 38 . 0 :=
(fun h => Or.elim h (fun h => Or.inr (Duper.clausify_prop_inequality1 h)) fun h => Or.inl h) clause. 37 . 0 ;
let clause. 40 . 0 :=
(fun h =>
Or.elim h (fun h => Or.inl h) fun h =>
Or.elim h (fun h => False.elim (Duper.true_neq_false h)) fun h => Or.inr h)
clause. 38 . 0 ;
let clause. 41 . 0 := (fun h => Or.elim h (fun h => h) fun h => False.elim (Duper.true_neq_false h)) clause. 40 . 0 ;
let clause. 42 . 0 :=
(fun heq =>
(fun h =>
Or.elim h (fun h => Or.inl (Eq.mp (congrArg (fun x => x = False) heq) h)) fun h =>
Or.inr (Eq.mp (congrArg (fun x => x = False) heq) h))
(clause. 25 . 0 e? _0))
clause. 41 . 0 ;
let clause. 43 . 0 := (fun h => Or.elim h (fun h => False.elim (Duper.true_neq_false h)) fun h => h) clause. 42 . 0 ;
(fun h => False.elim (Duper.true_neq_false h)) clause. 43 . 0
example : β {R : Type uR} [inst : CommRing R] [inst_1 : Nontrivial R] {M : Type uM} [inst_2 : AddCommGroup M]
[inst_3 : Module R M] [inst_4 : Module.Finite R M], Module.rank R M = β(finrank R M)
example : Module.rank : (R : Type uR) β (M : Type uM) β [inst : Semiring R] β [inst_1 : AddCommMonoid M] β [inst : Module R M] β Cardinal.{uM}
Module.rank R M = finrank : (R : Type uR) β (M : Type uM) β [inst : Semiring R] β [inst_1 : AddCommGroup M] β [inst : Module R M] β β
finrank R M := by
duper [ finrank_eq_rank : β (R : Type ?u.90201) (M : Type ?u.90200) [inst : Ring R] [inst_1 : AddCommGroup M] [inst_2 : Module R M]
[inst_3 : StrongRankCondition R] [inst_4 : Module.Finite R M], β(finrank R M) = Module.rank R M
finrank_eq_rank] [duper.printProof] Clause # 0 (by assumption []): (Β¬ e! _0 e! _1 = e! _0 e! _1) = True
[duper.printProof] Clause # 1 (by clausification [0 ]): (e! _0 e! _1 = e! _0 e! _1) = False
[duper.printProof] Clause # 2 (by clausification [1 ]): e! _0 e! _1 β e! _0 e! _1
[duper.printProof] Clause # 3 (by eliminate resolved literals [2 ]): False
[duper.proofReconstruction] Collected clauses: [(Β¬ e! _0 e! _1 = e! _0 e! _1) = True,
(e! _0 e! _1 = e! _0 e! _1) = False,
e! _0 e! _1 β e! _0 e! _1,
False]
[duper.proofReconstruction] Request [] β¦ [] for False
[duper.proofReconstruction] Request [] β¦ [] for e! _0 e! _1 β e! _0 e! _1
[duper.proofReconstruction] Request [] β¦ [] for (e! _0 e! _1 = e! _0 e! _1) = False
[duper.proofReconstruction] Request [] β¦ [] for (Β¬ e! _0 e! _1 = e! _0 e! _1) = True
[duper.proofReconstruction] Reconstructing proof for # 0 : [] β¦ [] @ (Β¬ e! _0 e! _1 = e! _0 e! _1) =
True, Rule Name: assumption
[duper.proofReconstruction] # 0 ' s newProof: eq_true Β« _exHyp_uniq. 90683 Β»
[duper.proofReconstruction] Instantiating parent (Β¬ e! _0 e! _1 = e! _0 e! _1) =
True β‘β‘ (Β¬ e! _0 e! _1 = e! _0 e! _1) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 1 : [] β¦ [] @ (e! _0 e! _1 = e! _0 e! _1) =
False, Rule Name: clausification
[duper.proofReconstruction] # 1 ' s newProof: (fun h => Duper.clausify_not h) clause. 0 . 0
[duper.proofReconstruction] Instantiating parent (e! _0 e! _1 = e! _0 e! _1) =
False β‘β‘ (e! _0 e! _1 = e! _0 e! _1) = False with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 2 : [] β¦ [] @ e! _0 e! _1 β e! _0 e! _1, Rule Name: clausification
[duper.proofReconstruction] # 2 ' s newProof: (fun h => Duper.not_of_eq_false h) clause. 1 . 0
[duper.proofReconstruction] Instantiating parent e! _0 e! _1 β e! _0 e! _1 β‘β‘ e! _0 e! _1 β e! _0 e! _1 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 3 : [] β¦ [] @ False, Rule Name: eliminate resolved literals
[duper.proofReconstruction] # 3 ' s newProof: (fun h => False.elim (h rfl)) clause. 2 . 0
[duper.proofReconstruction] Proof: let clause. 0 . 0 := eq_true Β« _exHyp_uniq. 90683 Β»;
let clause. 1 . 0 := (fun h => Duper.clausify_not h) clause. 0 . 0 ;
let clause. 2 . 0 := (fun h => Duper.not_of_eq_false h) clause. 1 . 0 ;
(fun h => False.elim (h rfl)) clause. 2 . 0
done Warning: ' done' tactic does nothing
note: this linter can be disabled with `set_option linter.unusedTactic false`