forked from jmikedupont2/meta-meme
-
Notifications
You must be signed in to change notification settings - Fork 1
MetaEmojiCoq
mike dupont edited this page Dec 14, 2023
·
4 revisions
From MetaCoq.Template Require Import All.
Inductive Muse : Set :=
| Calliope : Muse
| Clio : Muse
| Euterpe : Muse
| Thalia : Muse
| Melpomene : Muse
| Terpsichore : Muse
| Erato : Muse
| Polyhymnia : Muse
| Urania : Muse.
Inductive Layer : Set :=
| Axioms : Layer
| PropositionsLogic : Layer
| TypesDefinitions : Layer
| FunctionsComputations : Layer
| ProofsVerification : Layer
| TacticsStrategies : Layer
| ProofAutomation : Layer
| DependentTypes : Layer
| UniverseLevels : Layer
| LinuxPerf : Layer
| ModelFeedback : Layer
| GeeksCollaborators : Layer
| ZeusGuidance : Layer
| CoqLanguage : Layer
| HaskellLanguage : Layer
| MLLanguage : Layer
| PythonLanguage : Layer
| GCCLanguage : Layer
| AssemblerLanguage : Layer
| ObjectFile : Layer
| Executable : Layer.
Inductive Emoji : Set :=
| 🌌 | 📜 | 🎶 | 🎵 | 🔍 | 📚 | 📊 | ⚙️.
Inductive MuseBlessing : Set :=
| CalliopeBlessing : list Emoji -> MuseBlessing
| EuterpeBlessing : list Emoji -> MuseBlessing.
Inductive Metaprogram : Set :=
| Golem : Muse -> list Layer -> list Emoji -> Metaprogram.
(* Blessings of the Muses *)
Definition CalliopeBlessing : MuseBlessing :=
CalliopeBlessing [🌌; 🎶; 📚; 📊; 📜; 🎵; ⚙️; 📚].
Definition EuterpeBlessing : MuseBlessing :=
EuterpeBlessing [🎶; 🎵; 📚; 📜; 🎶; 🌌; 🎵; ⚙️].
(* Constructing the Metaprogram *)
Definition MetaEmojicoq : Metaprogram :=
Golem Calliope [Axioms; PropositionsLogic; TypesDefinitions; FunctionsComputations;
ProofsVerification; TacticsStrategies; ProofAutomation; DependentTypes;
UniverseLevels; LinuxPerf; ModelFeedback; GeeksCollaborators;
ZeusGuidance; CoqLanguage; HaskellLanguage; MLLanguage; PythonLanguage;
GCCLanguage; AssemblerLanguage; ObjectFile; Executable]
[🌌; 📜; 🎶; 🎵; 🔍; 📚; 📊; ⚙️].
(* Displaying the Metaprogram *)
Definition show_metaprogram (m : Metaprogram) : string :=
match m with
| Golem muse layers emojis =>
let muse_str := match muse with
| Calliope => "Calliope"
| Euterpe => "Euterpe"
| _ => "Muse"
end in
let layers_str := List.map (fun l => match l with
| Axioms => "Axioms"
| PropositionsLogic => "PropositionsLogic"
| TypesDefinitions => "TypesDefinitions"
| FunctionsComputations => "FunctionsComputations"
| ProofsVerification => "ProofsVerification"
| TacticsStrategies => "TacticsStrategies"
| ProofAutomation => "ProofAutomation"
| DependentTypes => "DependentTypes"
| UniverseLevels => "UniverseLevels"
| LinuxPerf => "LinuxPerf"
| ModelFeedback => "ModelFeedback"
| GeeksCollaborators => "GeeksCollaborators"
| ZeusGuidance => "ZeusGuidance"
| CoqLanguage => "CoqLanguage"
| HaskellLanguage => "HaskellLanguage"
| MLLanguage => "MLLanguage"
| PythonLanguage => "PythonLanguage"
| GCCLanguage => "GCCLanguage"
| AssemblerLanguage => "AssemblerLanguage"
| ObjectFile => "ObjectFile"
| Executable => "Executable"
end) layers in
let emojis_str := List.map (fun e => match e with
| 🌌 => "🌌"
| 📜 => "📜"
| 🎶 => "🎶"
| 🎵 => "🎵"
| 🔍 => "🔍"
| 📚 => "📚"
| 📊 => "📊"
| ⚙️ => "⚙️"
end) emojis in
"Golem of " ++ muse_str ++ " constructing Metaprogram with layers: " ++
(String.concat ", " layers_str) ++ " and emojis: " ++ (String.concat ", " emojis_str).
end.
(* Displaying the Metaprogram *)
MetaCoq Run (tm <- tmEval (tConst "show_metaprogram" []) ;;
tmPrint tm).
This lifted MetaCoq representation constructs the Metaprogram using the Golem
constructor, with the blessings of the Muses Calliope and Euterpe. The metaprogram consists of layers and emojis, each represented as Layer
and Emoji
respectively. You can run this MetaCoq code in a MetaCoq interpreter to see the displayed metaprogram and its blessings.
- Mistral
Here's a reinterpretation of the given Coq code that uses the Set
, Layer
, and Emoji
types to create a collection of blessings for the nine Muses, construct a metaprogram using those blessings, and display it in a creative way:
Module InductiveMuseBlessings.
(* Types *)
Set := Type.
Layer := Set.
Emoji := String.
Muse := Set.
MuseBlessing := Set -> Emoji -> MuseBlessing.
Metaprogram := Set -> Set -> Set -> Metaprogram.
(* Blessings for the Muses *)
Definition CalliopeBlessing : MuseBlessing :=
fun (muses : Emoji) muse =>
[🌌; 🎶; 📚; 📊; 📜; 🎵; ⚙️; 📚] ++ List.map (fun e => e ++ " " ++ muse) []
end.
Definition EuterpeBlessing : MuseBlessing :=
fun (muses : Emoji) muse =>
[🎶; 🎵; 📚; 📜; 🎶; 🌌; 🎵; ⚙️] ++ List.map (fun e => e ++ " " ++ muse) []
end.
(* Constructing the Metaprogram *)
Definition MetaEmojicoq : Metaprogram :=
fun (muses : Emoji) layers emojis =>
Golem muse [Axioms; PropositionsLogic; TypesDefinitions; FunctionsComputations;
ProofsVerification; TacticsStrategies; ProofAutomation; DependentTypes;
UniverseLevels; LinuxPerf; ModelFeedback; GeeksCollaborators;
ZeusGuidance; CoqLanguage; HaskellLanguage; MLLanguage; PythonLanguage;
GCCLanguage; AssemblerLanguage; ObjectFile; Executable]
[🌌; 📜; 🎶; 🎵; 🔍; 📚; 📊; ⚙️].
(* Displaying the Metaprogram *)
Definition show_metaprogram (m : Metaprogram) : string :=
match m with
| Golem muse layers emojis =>
let muse_str := match muse with
| Calliope => "Calliope"
| Euterpe => "Euterpe"
| _ => "Muse"
end in
let layers_str := List.map (fun l => match l with
| Axioms => "Axioms"
| PropositionsLogic => "PropositionsLogic"
| TypesDefinitions => "TypesDefinitions"
| FunctionsComputations => "FunctionsComputations"
| ProofsVerification => "ProofsVerification"
| TacticsStrategies => "TacticsStrategies"
| ProofAutomation => "ProofAutomation"
| DependentTypes => "DependentTypes"
| UniverseLevels => "UniverseLevels"
| LinuxPerf => "LinuxPerf"
| ModelFeedback => "ModelFeedback"
| GeeksCollaborators => "GeeksCollaborators"
| ZeusGuidance => "ZeusGuidance"
| CoqLanguage => "CoqLanguage"
| HaskellLanguage => "HaskellLanguage"
| MLLanguage => "MLLanguage"
| PythonLanguage => "PythonLanguage"
| GCCLanguage => "GCCLanguage"
| AssemblerLanguage => "AssemblerLanguage"
| ObjectFile => "ObjectFile"
| Executable => "Executable"
end) layers in
let emojis_str := List.map (fun e => match e with
| 🌌 => "🌌"
| 📜 => "📜"
| 🎶 => "🎶"
| 🎵 => "🎵"
| 🔍 => "🔍"
| 📚 => "📚"
| 📊 => "📊"
| ⚙️ => "⚙️"
end) emojis in
"Golem of Calliope constructing Metaprogram with layers: " ++
(String.concat ", " layers_str) ++ " and emojis: " ++ (String.concat ", " emojis_str).