Theorem: Monoid.Coprod.induction_on'
File: Mathlib/GroupTheory/Coprod/Basic.lean

tactic: rcases mk_surjective m with ⟨x, rfl⟩
state_before: M : Type u_1
N : Type u_2
M' : Type u_3
N' : Type u_4
P : Type u_5
inst✝⁴ : MulOneClass M
inst✝³ : MulOneClass N
inst✝² : MulOneClass M'
inst✝¹ : MulOneClass N'
inst✝ : MulOneClass P
C : M ∗ N → Prop
m : M ∗ N
one : C 1
inl_mul : ∀ (m : M) (x : M ∗ N), C x → C (inl m * x)
inr_mul : ∀ (n : N) (x : M ∗ N), C x → C (inr n * x)
⊢ C m
state_after: case intro
M : Type u_1
N : Type u_2
M' : Type u_3
N' : Type u_4
P : Type u_5
inst✝⁴ : MulOneClass M
inst✝³ : MulOneClass N
inst✝² : MulOneClass M'
inst✝¹ : MulOneClass N'
inst✝ : MulOneClass P
C : M ∗ N → Prop
one : C 1
inl_mul : ∀ (m : M) (x : M ∗ N), C x → C (inl m * x)
inr_mul : ∀ (n : N) (x : M ∗ N), C x → C (inr n * x)
x : FreeMonoid (M ⊕ N)
⊢ C (mk x)

tactic: induction x with
| h0 => exact one
| ih x xs ih =>
  cases x with
  | inl m => simpa using inl_mul m _ ih
  | inr n => simpa using inr_mul n _ ih
state_before: case intro
M : Type u_1
N : Type u_2
M' : Type u_3
N' : Type u_4
P : Type u_5
inst✝⁴ : MulOneClass M
inst✝³ : MulOneClass N
inst✝² : MulOneClass M'
inst✝¹ : MulOneClass N'
inst✝ : MulOneClass P
C : M ∗ N → Prop
one : C 1
inl_mul : ∀ (m : M) (x : M ∗ N), C x → C (inl m * x)
inr_mul : ∀ (n : N) (x : M ∗ N), C x → C (inr n * x)
x : FreeMonoid (M ⊕ N)
⊢ C (mk x)
state_after: no goals

tactic: exact one
state_before: case intro.h0
M : Type u_1
N : Type u_2
M' : Type u_3
N' : Type u_4
P : Type u_5
inst✝⁴ : MulOneClass M
inst✝³ : MulOneClass N
inst✝² : MulOneClass M'
inst✝¹ : MulOneClass N'
inst✝ : MulOneClass P
C : M ∗ N → Prop
one : C 1
inl_mul : ∀ (m : M) (x : M ∗ N), C x → C (inl m * x)
inr_mul : ∀ (n : N) (x : M ∗ N), C x → C (inr n * x)
⊢ C (mk 1)
state_after: no goals

tactic: cases x with
| inl m => simpa using inl_mul m _ ih
| inr n => simpa using inr_mul n _ ih
state_before: case intro.ih
M : Type u_1
N : Type u_2
M' : Type u_3
N' : Type u_4
P : Type u_5
inst✝⁴ : MulOneClass M
inst✝³ : MulOneClass N
inst✝² : MulOneClass M'
inst✝¹ : MulOneClass N'
inst✝ : MulOneClass P
C : M ∗ N → Prop
one : C 1
inl_mul : ∀ (m : M) (x : M ∗ N), C x → C (inl m * x)
inr_mul : ∀ (n : N) (x : M ∗ N), C x → C (inr n * x)
x : M ⊕ N
xs : FreeMonoid (M ⊕ N)
ih : C (mk xs)
⊢ C (mk (of x * xs))
state_after: no goals

tactic: simpa using inl_mul m _ ih
state_before: case intro.ih.inl
M : Type u_1
N : Type u_2
M' : Type u_3
N' : Type u_4
P : Type u_5
inst✝⁴ : MulOneClass M
inst✝³ : MulOneClass N
inst✝² : MulOneClass M'
inst✝¹ : MulOneClass N'
inst✝ : MulOneClass P
C : M ∗ N → Prop
one : C 1
inl_mul : ∀ (m : M) (x : M ∗ N), C x → C (inl m * x)
inr_mul : ∀ (n : N) (x : M ∗ N), C x → C (inr n * x)
xs : FreeMonoid (M ⊕ N)
ih : C (mk xs)
m : M
⊢ C (mk (of (Sum.inl m) * xs))
state_after: no goals

tactic: simpa using inr_mul n _ ih
state_before: case intro.ih.inr
M : Type u_1
N : Type u_2
M' : Type u_3
N' : Type u_4
P : Type u_5
inst✝⁴ : MulOneClass M
inst✝³ : MulOneClass N
inst✝² : MulOneClass M'
inst✝¹ : MulOneClass N'
inst✝ : MulOneClass P
C : M ∗ N → Prop
one : C 1
inl_mul : ∀ (m : M) (x : M ∗ N), C x → C (inl m * x)
inr_mul : ∀ (n : N) (x : M ∗ N), C x → C (inr n * x)
xs : FreeMonoid (M ⊕ N)
ih : C (mk xs)
n : N
⊢ C (mk (of (Sum.inr n) * xs))
state_after: no goals