Inductive FM : Type :=
  | Var : V -> FM
  | Law : FM -> FM -> FM
  | Unit : FM.Inductive FM : Type :=
  | Var : V -> FM
  | Law : FM -> FM -> FM
  | Unit : FM.Inductive FM : Type :=
  | Var : V -> FM
  | Law : FM -> FM -> FM
  | Unit : FM.Inductive FM : Type :=
  | Var : V -> FM
  | Law : FM -> FM -> FM
  | Unit : FM.Inductive eqFM : FM -> FM -> Prop :=
  | eqFM_Var : forall x y : V, Equal x y -> (eqFM (Var x) (Var y):Prop)
  | eqFM_law :
      forall x x' y y' : FM,
      eqFM x x' -> eqFM y y' -> (eqFM (Law x y) (Law x' y'):Prop)
  | eqFM_law_assoc :
      forall x y z : FM, eqFM (Law (Law x y) z) (Law x (Law y z)):Prop
  | eqFM_law0r : forall x : FM, eqFM (Law x Unit) x:Prop
  | eqFM_law0l : forall x : FM, eqFM (Law Unit x) x:Prop
  | eqFM_refl : forall x : FM, eqFM x x:Prop
  | eqFM_sym : forall x y : FM, eqFM x y -> (eqFM y x:Prop)
  | eqFM_trans : forall x y z : FM, eqFM x y -> eqFM y z -> (eqFM x z:Prop).Inductive eqFM : FM -> FM -> Prop :=
  | eqFM_Var : forall x y : V, Equal x y -> (eqFM (Var x) (Var y):Prop)
  | eqFM_law :
      forall x x' y y' : FM,
      eqFM x x' -> eqFM y y' -> (eqFM (Law x y) (Law x' y'):Prop)
  | eqFM_law_assoc :
      forall x y z : FM, eqFM (Law (Law x y) z) (Law x (Law y z)):Prop
  | eqFM_law0r : forall x : FM, eqFM (Law x Unit) x:Prop
  | eqFM_law0l : forall x : FM, eqFM (Law Unit x) x:Prop
  | eqFM_refl : forall x : FM, eqFM x x:Prop
  | eqFM_sym : forall x y : FM, eqFM x y -> (eqFM y x:Prop)
  | eqFM_trans : forall x y z : FM, eqFM x y -> eqFM y z -> (eqFM x z:Prop).Inductive eqFM : FM -> FM -> Prop :=
  | eqFM_Var : forall x y : V, Equal x y -> (eqFM (Var x) (Var y):Prop)
  | eqFM_law :
      forall x x' y y' : FM,
      eqFM x x' -> eqFM y y' -> (eqFM (Law x y) (Law x' y'):Prop)
  | eqFM_law_assoc :
      forall x y z : FM, eqFM (Law (Law x y) z) (Law x (Law y z)):Prop
  | eqFM_law0r : forall x : FM, eqFM (Law x Unit) x:Prop
  | eqFM_law0l : forall x : FM, eqFM (Law Unit x) x:Prop
  | eqFM_refl : forall x : FM, eqFM x x:Prop
  | eqFM_sym : forall x y : FM, eqFM x y -> (eqFM y x:Prop)
  | eqFM_trans : forall x y z : FM, eqFM x y -> eqFM y z -> (eqFM x z:Prop).Inductive eqFM : FM -> FM -> Prop :=
  | eqFM_Var : forall x y : V, Equal x y -> (eqFM (Var x) (Var y):Prop)
  | eqFM_law :
      forall x x' y y' : FM,
      eqFM x x' -> eqFM y y' -> (eqFM (Law x y) (Law x' y'):Prop)
  | eqFM_law_assoc :
      forall x y z : FM, eqFM (Law (Law x y) z) (Law x (Law y z)):Prop
  | eqFM_law0r : forall x : FM, eqFM (Law x Unit) x:Prop
  | eqFM_law0l : forall x : FM, eqFM (Law Unit x) x:Prop
  | eqFM_refl : forall x : FM, eqFM x x:Prop
  | eqFM_sym : forall x y : FM, eqFM x y -> (eqFM y x:Prop)
  | eqFM_trans : forall x y z : FM, eqFM x y -> eqFM y z -> (eqFM x z:Prop).Inductive eqFM : FM -> FM -> Prop :=
  | eqFM_Var : forall x y : V, Equal x y -> (eqFM (Var x) (Var y):Prop)
  | eqFM_law :
      forall x x' y y' : FM,
      eqFM x x' -> eqFM y y' -> (eqFM (Law x y) (Law x' y'):Prop)
  | eqFM_law_assoc :
      forall x y z : FM, eqFM (Law (Law x y) z) (Law x (Law y z)):Prop
  | eqFM_law0r : forall x : FM, eqFM (Law x Unit) x:Prop
  | eqFM_law0l : forall x : FM, eqFM (Law Unit x) x:Prop
  | eqFM_refl : forall x : FM, eqFM x x:Prop
  | eqFM_sym : forall x y : FM, eqFM x y -> (eqFM y x:Prop)
  | eqFM_trans : forall x y z : FM, eqFM x y -> eqFM y z -> (eqFM x z:Prop).Inductive eqFM : FM -> FM -> Prop :=
  | eqFM_Var : forall x y : V, Equal x y -> (eqFM (Var x) (Var y):Prop)
  | eqFM_law :
      forall x x' y y' : FM,
      eqFM x x' -> eqFM y y' -> (eqFM (Law x y) (Law x' y'):Prop)
  | eqFM_law_assoc :
      forall x y z : FM, eqFM (Law (Law x y) z) (Law x (Law y z)):Prop
  | eqFM_law0r : forall x : FM, eqFM (Law x Unit) x:Prop
  | eqFM_law0l : forall x : FM, eqFM (Law Unit x) x:Prop
  | eqFM_refl : forall x : FM, eqFM x x:Prop
  | eqFM_sym : forall x y : FM, eqFM x y -> (eqFM y x:Prop)
  | eqFM_trans : forall x y z : FM, eqFM x y -> eqFM y z -> (eqFM x z:Prop).Inductive eqFM : FM -> FM -> Prop :=
  | eqFM_Var : forall x y : V, Equal x y -> (eqFM (Var x) (Var y):Prop)
  | eqFM_law :
      forall x x' y y' : FM,
      eqFM x x' -> eqFM y y' -> (eqFM (Law x y) (Law x' y'):Prop)
  | eqFM_law_assoc :
      forall x y z : FM, eqFM (Law (Law x y) z) (Law x (Law y z)):Prop
  | eqFM_law0r : forall x : FM, eqFM (Law x Unit) x:Prop
  | eqFM_law0l : forall x : FM, eqFM (Law Unit x) x:Prop
  | eqFM_refl : forall x : FM, eqFM x x:Prop
  | eqFM_sym : forall x y : FM, eqFM x y -> (eqFM y x:Prop)
  | eqFM_trans : forall x y z : FM, eqFM x y -> eqFM y z -> (eqFM x z:Prop).Inductive eqFM : FM -> FM -> Prop :=
  | eqFM_Var : forall x y : V, Equal x y -> (eqFM (Var x) (Var y):Prop)
  | eqFM_law :
      forall x x' y y' : FM,
      eqFM x x' -> eqFM y y' -> (eqFM (Law x y) (Law x' y'):Prop)
  | eqFM_law_assoc :
      forall x y z : FM, eqFM (Law (Law x y) z) (Law x (Law y z)):Prop
  | eqFM_law0r : forall x : FM, eqFM (Law x Unit) x:Prop
  | eqFM_law0l : forall x : FM, eqFM (Law Unit x) x:Prop
  | eqFM_refl : forall x : FM, eqFM x x:Prop
  | eqFM_sym : forall x y : FM, eqFM x y -> (eqFM y x:Prop)
  | eqFM_trans : forall x y z : FM, eqFM x y -> eqFM y z -> (eqFM x z:Prop).Inductive eqFM : FM -> FM -> Prop :=
  | eqFM_Var : forall x y : V, Equal x y -> (eqFM (Var x) (Var y):Prop)
  | eqFM_law :
      forall x x' y y' : FM,
      eqFM x x' -> eqFM y y' -> (eqFM (Law x y) (Law x' y'):Prop)
  | eqFM_law_assoc :
      forall x y z : FM, eqFM (Law (Law x y) z) (Law x (Law y z)):Prop
  | eqFM_law0r : forall x : FM, eqFM (Law x Unit) x:Prop
  | eqFM_law0l : forall x : FM, eqFM (Law Unit x) x:Prop
  | eqFM_refl : forall x : FM, eqFM x x:Prop
  | eqFM_sym : forall x y : FM, eqFM x y -> (eqFM y x:Prop)
  | eqFM_trans : forall x y z : FM, eqFM x y -> eqFM y z -> (eqFM x z:Prop).

(* Specifications: *)
Lemma eqFM_Equiv : equivalence eqFM.