Goal forall d e : frame, d = e -> true = eqf d e.
intros.
elim H.
apply eqf7.
Save eqf_elim.
Goal forall d e : frame, true = eqf d e -> d = e.
intros.
elim (eqf8 d e).
elim H.
elim eqf5.
apply refl_equal.
Save eqf_intro.
Goal forall d e : frame, false = eqf d e -> d <> e.
intros.
red in |- *; intro.
cut (forall P : bool -> Prop, P true -> P false); intro L.
apply
(L
(fun P : bool =>
match P return Prop with
| true => True
| false => False
end)).
exact I.
intros.
elimtype (eqf d e = false).
elim H0.
elim eqf7.
assumption.
apply sym_equal.
assumption.
Save eqf_intro'.
Section FRAME2.
Parameter Frame : Set.
Variable b b1 b2 : bit.
Variable d d1 d2 : D.
Variable e e' : Frame.
Parameter Tuple : bit -> D -> Frame.
Parameter lce : Frame.
Parameter eqF : Frame -> Frame -> bool.
Parameter ifF : bool -> Frame -> Frame -> Frame.

(* Specifications: *)
Axiom eqF1 : true = eqF lce lce.
Axiom eqF2 : false = eqF lce (Tuple b d).
Axiom eqF3 : false = eqF (Tuple b d) lce.
Axiom eqF4 : andb (eqb b1 b2) (eqD d1 d2) = eqF (Tuple b1 d1) (Tuple b2 d2).
Axiom eqF5 : e' = ifF true e' e.
Axiom eqF6 : e = ifF false e' e.
Axiom eqF7 : true = eqF e e.
Axiom eqF8 : ifF (eqF e e') e e' = e'.
Axiom EQFi : ~ EQ Frame one.
Axiom EQFD : ~ EQ Frame D.
Axiom EQFf : ~ EQ Frame frame.
End FRAME2.