Assumed: N Assumed: h Proved: CongrH Set option: lean::pp::implicit Theorem CongrH {a1 a2 b1 b2 : N} (H1 : a1 = b1) (H2 : a2 = b2) : (h a1 a2) = (h b1 b2) := Congr::explicit N (λ x : N, N) (h a1) (h b1) a2 b2 (Congr::explicit N (λ x : N, N → N) h h a1 b1 (Refl::explicit (N → N → N) h) H1) H2 Theorem CongrH::explicit (a1 a2 b1 b2 : N) (H1 : a1 = b1) (H2 : a2 = b2) : (h a1 a2) = (h b1 b2) := CongrH::explicit a1 a2 b1 b2 H1 H2 Set option: lean::pp::implicit Theorem CongrH {a1 a2 b1 b2 : N} (H1 : a1 = b1) (H2 : a2 = b2) : (h a1 a2) = (h b1 b2) := Congr (Congr (Refl h) H1) H2 Theorem CongrH::explicit (a1 a2 b1 b2 : N) (H1 : a1 = b1) (H2 : a2 = b2) : (h a1 a2) = (h b1 b2) := CongrH H1 H2 Proved: Example1 Set option: lean::pp::implicit Theorem Example1 (a b c d : N) (H : a = b ∧ b = c ∨ a = d ∧ d = c) : (h a b) = (h c b) := DisjCases::explicit (a = b ∧ b = c) (a = d ∧ d = c) ((h a b) = (h c b)) H (λ H1 : a = b ∧ b = c, CongrH::explicit a b c b (Trans::explicit N a b c (Conjunct1::explicit (a = b) (b = c) H1) (Conjunct2::explicit (a = b) (b = c) H1)) (Refl::explicit N b)) (λ H1 : a = d ∧ d = c, CongrH::explicit a b c b (Trans::explicit N a d c (Conjunct1::explicit (a = d) (d = c) H1) (Conjunct2::explicit (a = d) (d = c) H1)) (Refl::explicit N b)) Proved: Example2 Set option: lean::pp::implicit Theorem Example2 (a b c d : N) (H : a = b ∧ b = c ∨ a = d ∧ d = c) : (h a b) = (h c b) := DisjCases::explicit (a = b ∧ b = c) (a = d ∧ d = c) ((h a b) = (h c b)) H (λ H1 : a = b ∧ b = c, CongrH::explicit a b c b (Trans::explicit N a b c (Conjunct1::explicit (a = b) (b = c) H1) (Conjunct2::explicit (a = b) (b = c) H1)) (Refl::explicit N b)) (λ H1 : a = d ∧ d = c, CongrH::explicit a b c b (Trans::explicit N a d c (Conjunct1::explicit (a = d) (d = c) H1) (Conjunct2::explicit (a = d) (d = c) H1)) (Refl::explicit N b)) Proved: Example3 Set option: lean::pp::implicit Theorem Example3 (a b c d e : N) (H : a = b ∧ b = e ∧ b = c ∨ a = d ∧ d = c) : (h a b) = (h c b) := DisjCases H (λ H1 : a = b ∧ b = e ∧ b = c, CongrH (Trans (Conjunct1 H1) (Conjunct2 (Conjunct2 H1))) (Refl b)) (λ H1 : a = d ∧ d = c, CongrH (Trans (Conjunct1 H1) (Conjunct2 H1)) (Refl b)) Proved: Example4 Set option: lean::pp::implicit Theorem Example4 (a b c d e : N) (H : a = b ∧ b = e ∧ b = c ∨ a = d ∧ d = c) : (h a c) = (h c a) := DisjCases H (λ H1 : a = b ∧ b = e ∧ b = c, let AeqC := Trans (Conjunct1 H1) (Conjunct2 (Conjunct2 H1)) in CongrH AeqC (Symm AeqC)) (λ H1 : a = d ∧ d = c, let AeqC := Trans (Conjunct1 H1) (Conjunct2 H1) in CongrH AeqC (Symm AeqC))