Inductive FaM : Type :=
  | Var : V -> FaM
  | Law : FaM -> FaM -> FaM
  | Unit : FaM.Inductive FaM : Type :=
  | Var : V -> FaM
  | Law : FaM -> FaM -> FaM
  | Unit : FaM.Inductive FaM : Type :=
  | Var : V -> FaM
  | Law : FaM -> FaM -> FaM
  | Unit : FaM.Inductive FaM : Type :=
  | Var : V -> FaM
  | Law : FaM -> FaM -> FaM
  | Unit : FaM.Inductive eqFaM : FaM -> FaM -> Prop :=
  | eqFaM_Var : forall x y : V, Equal x y -> (eqFaM (Var x) (Var y):Prop)
  | eqFaM_law :
      forall x x' y y' : FaM,
      eqFaM x x' -> eqFaM y y' -> (eqFaM (Law x y) (Law x' y'):Prop)
  | eqFaM_law_assoc :
      forall x y z : FaM, eqFaM (Law (Law x y) z) (Law x (Law y z)):Prop
  | eqFaM_law0r : forall x : FaM, eqFaM (Law x Unit) x:Prop
  | eqFaM_law0l : forall x : FaM, eqFaM (Law Unit x) x:Prop
  | eqFaM_refl : forall x : FaM, eqFaM x x:Prop
  | eqFaM_sym : forall x y : FaM, eqFaM x y -> (eqFaM y x:Prop)
  | eqFaM_trans :
      forall x y z : FaM, eqFaM x y -> eqFaM y z -> (eqFaM x z:Prop)
  | eqFaM_com : forall x y : FaM, eqFaM (Law x y) (Law y x).Inductive eqFaM : FaM -> FaM -> Prop :=
  | eqFaM_Var : forall x y : V, Equal x y -> (eqFaM (Var x) (Var y):Prop)
  | eqFaM_law :
      forall x x' y y' : FaM,
      eqFaM x x' -> eqFaM y y' -> (eqFaM (Law x y) (Law x' y'):Prop)
  | eqFaM_law_assoc :
      forall x y z : FaM, eqFaM (Law (Law x y) z) (Law x (Law y z)):Prop
  | eqFaM_law0r : forall x : FaM, eqFaM (Law x Unit) x:Prop
  | eqFaM_law0l : forall x : FaM, eqFaM (Law Unit x) x:Prop
  | eqFaM_refl : forall x : FaM, eqFaM x x:Prop
  | eqFaM_sym : forall x y : FaM, eqFaM x y -> (eqFaM y x:Prop)
  | eqFaM_trans :
      forall x y z : FaM, eqFaM x y -> eqFaM y z -> (eqFaM x z:Prop)
  | eqFaM_com : forall x y : FaM, eqFaM (Law x y) (Law y x).Inductive eqFaM : FaM -> FaM -> Prop :=
  | eqFaM_Var : forall x y : V, Equal x y -> (eqFaM (Var x) (Var y):Prop)
  | eqFaM_law :
      forall x x' y y' : FaM,
      eqFaM x x' -> eqFaM y y' -> (eqFaM (Law x y) (Law x' y'):Prop)
  | eqFaM_law_assoc :
      forall x y z : FaM, eqFaM (Law (Law x y) z) (Law x (Law y z)):Prop
  | eqFaM_law0r : forall x : FaM, eqFaM (Law x Unit) x:Prop
  | eqFaM_law0l : forall x : FaM, eqFaM (Law Unit x) x:Prop
  | eqFaM_refl : forall x : FaM, eqFaM x x:Prop
  | eqFaM_sym : forall x y : FaM, eqFaM x y -> (eqFaM y x:Prop)
  | eqFaM_trans :
      forall x y z : FaM, eqFaM x y -> eqFaM y z -> (eqFaM x z:Prop)
  | eqFaM_com : forall x y : FaM, eqFaM (Law x y) (Law y x).Inductive eqFaM : FaM -> FaM -> Prop :=
  | eqFaM_Var : forall x y : V, Equal x y -> (eqFaM (Var x) (Var y):Prop)
  | eqFaM_law :
      forall x x' y y' : FaM,
      eqFaM x x' -> eqFaM y y' -> (eqFaM (Law x y) (Law x' y'):Prop)
  | eqFaM_law_assoc :
      forall x y z : FaM, eqFaM (Law (Law x y) z) (Law x (Law y z)):Prop
  | eqFaM_law0r : forall x : FaM, eqFaM (Law x Unit) x:Prop
  | eqFaM_law0l : forall x : FaM, eqFaM (Law Unit x) x:Prop
  | eqFaM_refl : forall x : FaM, eqFaM x x:Prop
  | eqFaM_sym : forall x y : FaM, eqFaM x y -> (eqFaM y x:Prop)
  | eqFaM_trans :
      forall x y z : FaM, eqFaM x y -> eqFaM y z -> (eqFaM x z:Prop)
  | eqFaM_com : forall x y : FaM, eqFaM (Law x y) (Law y x).Inductive eqFaM : FaM -> FaM -> Prop :=
  | eqFaM_Var : forall x y : V, Equal x y -> (eqFaM (Var x) (Var y):Prop)
  | eqFaM_law :
      forall x x' y y' : FaM,
      eqFaM x x' -> eqFaM y y' -> (eqFaM (Law x y) (Law x' y'):Prop)
  | eqFaM_law_assoc :
      forall x y z : FaM, eqFaM (Law (Law x y) z) (Law x (Law y z)):Prop
  | eqFaM_law0r : forall x : FaM, eqFaM (Law x Unit) x:Prop
  | eqFaM_law0l : forall x : FaM, eqFaM (Law Unit x) x:Prop
  | eqFaM_refl : forall x : FaM, eqFaM x x:Prop
  | eqFaM_sym : forall x y : FaM, eqFaM x y -> (eqFaM y x:Prop)
  | eqFaM_trans :
      forall x y z : FaM, eqFaM x y -> eqFaM y z -> (eqFaM x z:Prop)
  | eqFaM_com : forall x y : FaM, eqFaM (Law x y) (Law y x).Inductive eqFaM : FaM -> FaM -> Prop :=
  | eqFaM_Var : forall x y : V, Equal x y -> (eqFaM (Var x) (Var y):Prop)
  | eqFaM_law :
      forall x x' y y' : FaM,
      eqFaM x x' -> eqFaM y y' -> (eqFaM (Law x y) (Law x' y'):Prop)
  | eqFaM_law_assoc :
      forall x y z : FaM, eqFaM (Law (Law x y) z) (Law x (Law y z)):Prop
  | eqFaM_law0r : forall x : FaM, eqFaM (Law x Unit) x:Prop
  | eqFaM_law0l : forall x : FaM, eqFaM (Law Unit x) x:Prop
  | eqFaM_refl : forall x : FaM, eqFaM x x:Prop
  | eqFaM_sym : forall x y : FaM, eqFaM x y -> (eqFaM y x:Prop)
  | eqFaM_trans :
      forall x y z : FaM, eqFaM x y -> eqFaM y z -> (eqFaM x z:Prop)
  | eqFaM_com : forall x y : FaM, eqFaM (Law x y) (Law y x).Inductive eqFaM : FaM -> FaM -> Prop :=
  | eqFaM_Var : forall x y : V, Equal x y -> (eqFaM (Var x) (Var y):Prop)
  | eqFaM_law :
      forall x x' y y' : FaM,
      eqFaM x x' -> eqFaM y y' -> (eqFaM (Law x y) (Law x' y'):Prop)
  | eqFaM_law_assoc :
      forall x y z : FaM, eqFaM (Law (Law x y) z) (Law x (Law y z)):Prop
  | eqFaM_law0r : forall x : FaM, eqFaM (Law x Unit) x:Prop
  | eqFaM_law0l : forall x : FaM, eqFaM (Law Unit x) x:Prop
  | eqFaM_refl : forall x : FaM, eqFaM x x:Prop
  | eqFaM_sym : forall x y : FaM, eqFaM x y -> (eqFaM y x:Prop)
  | eqFaM_trans :
      forall x y z : FaM, eqFaM x y -> eqFaM y z -> (eqFaM x z:Prop)
  | eqFaM_com : forall x y : FaM, eqFaM (Law x y) (Law y x).Inductive eqFaM : FaM -> FaM -> Prop :=
  | eqFaM_Var : forall x y : V, Equal x y -> (eqFaM (Var x) (Var y):Prop)
  | eqFaM_law :
      forall x x' y y' : FaM,
      eqFaM x x' -> eqFaM y y' -> (eqFaM (Law x y) (Law x' y'):Prop)
  | eqFaM_law_assoc :
      forall x y z : FaM, eqFaM (Law (Law x y) z) (Law x (Law y z)):Prop
  | eqFaM_law0r : forall x : FaM, eqFaM (Law x Unit) x:Prop
  | eqFaM_law0l : forall x : FaM, eqFaM (Law Unit x) x:Prop
  | eqFaM_refl : forall x : FaM, eqFaM x x:Prop
  | eqFaM_sym : forall x y : FaM, eqFaM x y -> (eqFaM y x:Prop)
  | eqFaM_trans :
      forall x y z : FaM, eqFaM x y -> eqFaM y z -> (eqFaM x z:Prop)
  | eqFaM_com : forall x y : FaM, eqFaM (Law x y) (Law y x).Inductive eqFaM : FaM -> FaM -> Prop :=
  | eqFaM_Var : forall x y : V, Equal x y -> (eqFaM (Var x) (Var y):Prop)
  | eqFaM_law :
      forall x x' y y' : FaM,
      eqFaM x x' -> eqFaM y y' -> (eqFaM (Law x y) (Law x' y'):Prop)
  | eqFaM_law_assoc :
      forall x y z : FaM, eqFaM (Law (Law x y) z) (Law x (Law y z)):Prop
  | eqFaM_law0r : forall x : FaM, eqFaM (Law x Unit) x:Prop
  | eqFaM_law0l : forall x : FaM, eqFaM (Law Unit x) x:Prop
  | eqFaM_refl : forall x : FaM, eqFaM x x:Prop
  | eqFaM_sym : forall x y : FaM, eqFaM x y -> (eqFaM y x:Prop)
  | eqFaM_trans :
      forall x y z : FaM, eqFaM x y -> eqFaM y z -> (eqFaM x z:Prop)
  | eqFaM_com : forall x y : FaM, eqFaM (Law x y) (Law y x).Inductive eqFaM : FaM -> FaM -> Prop :=
  | eqFaM_Var : forall x y : V, Equal x y -> (eqFaM (Var x) (Var y):Prop)
  | eqFaM_law :
      forall x x' y y' : FaM,
      eqFaM x x' -> eqFaM y y' -> (eqFaM (Law x y) (Law x' y'):Prop)
  | eqFaM_law_assoc :
      forall x y z : FaM, eqFaM (Law (Law x y) z) (Law x (Law y z)):Prop
  | eqFaM_law0r : forall x : FaM, eqFaM (Law x Unit) x:Prop
  | eqFaM_law0l : forall x : FaM, eqFaM (Law Unit x) x:Prop
  | eqFaM_refl : forall x : FaM, eqFaM x x:Prop
  | eqFaM_sym : forall x y : FaM, eqFaM x y -> (eqFaM y x:Prop)
  | eqFaM_trans :
      forall x y z : FaM, eqFaM x y -> eqFaM y z -> (eqFaM x z:Prop)
  | eqFaM_com : forall x y : FaM, eqFaM (Law x y) (Law y x).

Lemma eqFaM_Equiv : equivalence eqFaM.