Library BoundedNat.looping_absurd
An inhabitant of any type in Type can be derived from False
This results in alternatives to False_rec without Prop-to-Type leakage,
including Fexc which is extracted as
Nothing new here (wrt. "The Braga method"), but used in other files of this directory.
- without False_rect
- without loop at extraction
assert false
.
Require Import Extraction.
Definition T := True.
Definition F := False.
Section sec_absurd.
Variable X : Type.
Variable f: F.
An arbitrary inductive proposition
Definition P: Prop := T.
Let Fixpoint loop (x:P) : X := loop (match f with end).
Hypothesis p: P.
Definition Floop_P : X := loop p.
End sec_absurd.
Definition Floop_T (X: Type) (f: F) : X :=
(fix loop (_:T) := loop (match f with end)) I.
Definition Floop_F (X: Type) : F → X :=
(fix loop f := loop (match f with end)).
Definition Floop (X: Type) : F → X :=
(fix loop t (f:F) := loop tt (match f with end)) tt.
Definition Fexc {X: Type} (f: F) : X :=
match Floop Empty_set f with end.
Extraction Fexc.
Let Fixpoint loop (x:P) : X := loop (match f with end).
Hypothesis p: P.
Definition Floop_P : X := loop p.
End sec_absurd.
Definition Floop_T (X: Type) (f: F) : X :=
(fix loop (_:T) := loop (match f with end)) I.
Definition Floop_F (X: Type) : F → X :=
(fix loop f := loop (match f with end)).
Definition Floop (X: Type) : F → X :=
(fix loop t (f:F) := loop tt (match f with end)) tt.
Definition Fexc {X: Type} (f: F) : X :=
match Floop Empty_set f with end.
Extraction Fexc.